
    i                     B    d dl Z d dlZd dlZd dlZd dl  G d d      Zy)    N)*c                        e Zd ZU dZeed<   d Z ej                  ej                  e
dd      d        Zdefd	Zd
 Zd Zd Zd Zd Zd Zd Z fdZe fd       Zd Z xZS )CmfPluginCsvTasksMixinr   
has_errorsc                 6    |j                  |dz   |f       g dfS uT  
        Базовый метод для обработки группировки строк.
        
        Вызывается, когда миксин тест-кейсов не распознал объект.
        Просто добавляет строку в очередь для обычной обработки.
           r   putselfrowimport_settingsirows	row_queuei_heads          8./modules/settings/models/cmf_plugin_csv_mixins/tasks.py_process_grouped_rowsz,CmfPluginCsvTasksMixin._process_grouped_rows
   !     	q1ucl#1u    
      )	max_triesmax_timec                    | j                   j                  d   }| j                  ||t        j                        }| j                  |      }|r|r|j                  d      st        d      ||d<   |j                  d      rW| j                  |d      |d<   |d   j                  j                  d      r$t        j                  j                  |d	      |d
<   |j                  d      r| j                  |       |j                  d      r|d   |d<   |j                  d      r|j                  d      s|d= dD ]u  }|j                  |      }|s|j                  d      r't        j                  j                  dd|d   g      }nt        j                  j                  d:i |}|sq|||<   w dD ]7  }|j                  |      }|st        |      j                         dv s3d||<   9 | j                   j!                  d|        |j#                  dd       }dd| j                   j$                  gg ddd|d   gg}	| j                   j                  j&                  j                  dd       }
| j                   j                  j&                  j                  dd      }|rp|j                  d      r_|j                  d      j                  | j                   j(                  j&                        s!| j                   j(                   d|d    |d<   |j                  d      rd}
dd|d   g}	n$|j                  d      rd}
ddd|d   gdd|d   gg}	|
st+        j,                  |j                  d      |j                  dd      z   |j                  dd      z   d z   j/                               j1                         }| j2                  j4                  j7                  |d!"      }|5  | j9                  | j                   t        j                  ||	|
#      \  }}d d d        n1| j9                  | j                   t        j                  ||	|
#      \  }}rt        j;                  d$| j<                  j>                   d%| j<                  j@                   d&| j                   j                   d'd(| j                   d)*      }|jC                  d)+       tE                | j                   j!                  d,| d-|j                  d       d.|j                  d       d/|j                  d       d0	       nU| j                   j!                  d1 d-|j                  d       d.|j                  d       d/|j                  d       d0	       | jG                  ||       | j                   j                  j&                  j                  d2      rNt        jH                  j                  | j                   j                  j&                  j                  d2      3      }n| jK                  ||      }|r5|jL                  jO                          |jL                  jQ                  |       |r| jS                  |d   |      |_*        n| j                  || j                   j                  d   t        jV                        }|rN|j                  d      xs$ |j                  d      xs |j                  d      }| jS                  ||      |_*        |jX                  r|jC                  d)+       |jZ                  j&                  jX                  r|jZ                  jC                  d)+       tE                | j                  ||t        j:                        }|r|j                  d4      rz|j                  d5      ri||d<   | j9                  | j                   t        j:                  |      \  }}n5|r3| j                   j]                  d6d7d8       | xj^                  d9z  c_/        | ja                  |       tE                y # 1 sw Y   xY w);Nr   nameu:   Не указано наименование задачи!parent
logic_typeCmfTask	task.epicepictree_parentsys_typer$   statusparent_task)
cmf_author	cmf_ownercmf_modified_byresponsiblewaiting_forext_idloginILIKEfilter)is_milestone)u   нетFu_   Пытаемся создать или обновить задачу по параметрам 
componentszcmf_import.plugin==)import_originalr4   Tmerge_identic_namesext_id_per_import:codeOR z.lockx   )timeout)
filter_objdont_updateuB   Задача импортирована из файла: <a href="z" target="_blank">z</a> ()   T)text	log_levelr   
cmf_importr5   save_importu'   Создали новую задачу z ext_id=z code=z name=''u   Нашли задачу target_list_id)idcmf_created_atrB   u   Невозможно импортировать задачу без проекта, создайте проект и укажите ID в файлеzERR-0079obj_typer	    )1rD   json_settings_map_objectmodelsr    _get_projectget	Exception_process_logic_typer9   
startswith	CmfFolder_calc_workflow	CmfPersonstrlowerlogpoppluginvaluerI   hashlibsha256encode	hexdigestredis_dbredislockprocess_any_table_fields
CmfCommentimport_fileurlr   save
cmf_commit_process_ganttCmfList_get_sprintlistsloadappend_get_componentsr3   CmfComponent
is_changedop_gantt_task	log_error_has_errors_process_timetracker)r   r   r   taskproject_objkeyvalpersontask_components_filterr?   r7   lock_keyre   task_objtask_is_newcomment
sprint_objcomponent_datacomponent_identifiercomment_objcomment_is_news                         r   _process_rowz#CmfPluginCsvTasksMixin._process_row   s   
 //778IJ_fnnE'',488F# \]](DNxx%%)%=%=dI%N\"%**55kB*0*:*:*>*>;ag*>*hD'xx!##D)xx&*6l]#xx&txx/?'c +hhsmwwx(!'!1!1!5!5gwPST\P]=^!5!_!'!1!1!5!5!<!<$*S	+ ) &hhsm3s8>>+|; %DI&
 OO  #B  CG  BH  !I  J #hh|T:O %dDOO,B,BC/tF|,G #oo;;AAEEF[]bccK $ = = C C G GH[]b c TXXh%7@R@]@]^b^m^m^p^p^v^v@w$(OO$6$6#7qh8H!IXxx#!4f6(##T4>2tT(^4  #>>XXf%(<<txxRT?UUX__ggi)+  }}**//#/F ,0,I,I#*$/ -J -)Hk  )-(E(EOONN& + )F )%+  ++%%)%5%5%9%9$::LTM]M]MbMbLc d!__112!5  ##$( , 
 .##=hZxPTPXPXYaPbOc d HHV,-WTXXf5E4FaI
 ##.xj(AS@T U HHV,-WTXXf5E4FaI
 X.,,22667GH#^^//4??3P3P3V3V3Z3Z[k3l/m
!--c;?
##%%%j1 &*&:&:?8;TVa&b#!%!1!1OO112CD''"
 "&**84 6)--f56)--f5 )
 +/*>*>?SU`*aH'""$/%%++66&&+++=L&&sOV=N=NOG7;;'78W[[=P$,!.2.K.KDOOLRL]L]LS/U+^ OO%% g" & 
 !!!#&} s   ,2`66a projectsc                 v   |j                         D ]%  }|d   }|j                  d      }|s|j                  d      sd|d<   |j                  d      s$t        j                  j                  d      |d<   n| j	                  |d      |d<   |j                  d	      sJt        j
                  j                  d
      |d	<   n&|j                  d      r| j	                  |d      |d<   |j                  d      r| j                  |      |d<   |r|}n8| j                  | j                  t        j                  |      \  }}t                |s=||d<   | j                  |d   |      }|r||_        |j                          | j                  |d   |       | j                  |d   |       | j!                  |d   |       | j#                  |d   |       | j$                  j'                  |j(                  j+                         j,                  j.                         | j0                  j3                  |       ( y )Ndataexisting_objproject_typeprojectr   zproject.agile:defaultr9   
CmfProject	scheme_wfsoftdev:defaultactivityrz   	workflowssprintsr3   	companiespersons)valuesrR   rP   CmfLogicTyperT   CmfSchemeWf_process_activityrf   rD   r   rk   _process_workflowsr   rj   _process_sprints_process_components_process_companies_process_personsgantt_project_idsaddmain_gantt_projectrp   rI   r^   project_objsrq   )r   r   r   project_dataexisting_projectrz   is_newworkflow_schemes           r   _process_projectsz(CmfPluginCsvTasksMixin._process_projects   s   ( (	6G"6?L&{{>:##''73<L0#''5171D1D1H1HNe1H1fL.151I1I,Xd1eL.#''4060B0B0F0FL]0F0^L-  ##L1151I1I,Xd1eL.
++/+A+A,+OZ(.&*&C&CDOOU[UfUfht&u#V)4&"&"9"9'+:NP["\",;K)$$&%%gi&8+F(()>L''(<kJ%%gi&8+F&&**;+I+I+N+N+P+S+S+Y+YZ!!((5Q(	6r   c                 t   | j                  || j                  j                  d   t        j                        }d|v r|d= |r	 i ddddddd	d
dddddd
dddddddddddddddddd
ddddd}dddddddddd	}|j                  d      r|j                  d      }|d   j                         j                         }|j                  |      }|dv r||d<   n|d v rd|d<   d |d<   ||d!<   ||d"<   n|dk(  r|d#v r||d<   nd|d<   d |d<   ||d!<   ||d"<   nd|d<   t        j                  j                  j                  j                         D 	cg c]  }	d$|	 d$
 }
}	| j                  j                  d%| d&d'j                  |
       d(d)*       | xj                  d+z  c_        |j                  d!      r|d!   d,vr|d!   j                         j                         }|j                  |      |d!<   |d!   d,vrt        j                  j                  j                  j                         D 	cg c]  }	d$|	 d$
 }
}	| j                  j                  d-| d&d'j                  |
       d.d)*       | xj                  d+z  c_        d/D ]m  }|j                  |      s|j                  |      j                  d0      r%|j                  |      d d1 j                         ||<   t!        ||         d2z  ||<   o d3D ]  }|j                  |      s||   j                         j                  d4      r||= ;d5}t"        j%                  |||   t"        j&                        }|sh|j)                  d+      j+                  d6d7      }t!        |      d8z  d2z  ||<    |j-                  |D cg c]  }d9| 	 c}       d:D ]  }||vs||   s||   }t/        |t0        j0                        r-d;d<d=d>d?d@dAdBdCdDdEdFdG}|j3                         D ]<  \  }}||j                         v s|j                         j+                  ||      ||<    n |dHk(  sd ||<    dID ]*  }||vs||   s||   }t5        t!        |            }|||<   , |D ]&  }t7        |j8                  j:                  |||          ( |j                  dJ      s|j-                  g dK       |j8                  j<                  r|j8                  j>                  rt        j@                  jC                  |j8                  jE                         |j8                  j<                  j:                  |j8                  j>                  j:                  |j8                  jF                  j:                  L      }||j8                  _$        |j8                  jK                  dMN       y y c c}	w c c}	w c c}w # tL        $ rM}tO                | j                  j                  dO| dP| dQd)*       | xj                  d+z  c_        Y d }~y d }~ww xY w)RNr   outline_number   фиксированная0-constu   как можно раньше1-earlyu   как можно позже2-latter   не раньше3-after   не позже4-beforeu    начало не позднееu   начало не ранее&   окончание не позднее2-before"   окончание не ранее1-after'   фиксированное начало-   фиксированное окончание   фн   фоu   кмрu   кмпu   ннрu   ннп)   онр   онп)	u   фиксированныйr   r   r   r   r   r   r   r   constrain_start_typeconstrain_start_date)r   r   r   r   )r   r   constrain_finish_typeconstrain_finish_date)r   r   r   "uG   Не найден тип ограничения даты начала "u,   ". Укажите один из типов: z, zERR-0082CmfGanttTaskrK   r	   )r   r   r   uM   Не найден тип ограничения даты окончания "zERR-0083)
sched_work
const_workagregat_workactual_workactual_myself_worku   ч<   )sched_durationactual_duration?u*   (\d+[\.,]?\d*)\s*(?:д|дней|день)?,.   zop_gantt_task.)sched_start_datesched_finish_dateactual_start_dateactual_finish_dater   r   janfebmaraprmayjunjulaugsepoctnovdec)u   январьu   февральu   мартu   апрельu   майu   июньu   июльu   августu   сентябрьu   октябрьu   ноябрьu   декабрьu   НД)actual_completer   )zop_gantt_task.sched_start_datezop_gantt_task.sched_finish_datezop_gantt_task.sched_durationzop_gantt_task.is_manual)calendarfrom_dtto_dtforce_include_endsTfrom_importu:   Не удалось импортировать Гантт u    для задачи zERR-0072)(rO   rD   rN   rP   r   rR   striprZ   r   choicesr   rv   joinrw   r   endswithfloatresearch
IGNORECASEgroupreplaceload_fields
isinstancedatetimeitemsintsetattrru   r^   r   r   CmfCalendarget_duration_minutes_get_calendar	is_manualr   check_gantt_projectrS   commit_with_event)r   r   r   ganttconstrain_start_type_mappingconstrain_finish_type_mappingr   constrain_start_type_rawr   ttypesconstrain_finish_type_rawr{   patternmatchr|   _vmappingmonth_rumonth_encalendar_durationes                         r   rl   z%CmfPluginCsvTasksMixin._process_gantt   sd     doo&C&CDU&VX^XkXklu$&'m&00)0 5i0 3J	0
 (0 &z0 7
0 3I0 =j0 9)0 >y0 DY0 I0  I!0" i#0$ j%0& i'0( j)0* ((-0,6 3<)2'1EN:C>H%'(1- 9934+0995K+L(/45K/L/R/R/T/Z/Z/\,+G+K+KLd+e(+/]]8L45-1HH8A458<459M569M56-:3  8I  I<PE"89<EE"89<@E"89=QE"9:=QE"9:8A45393F3F3[3[3c3c3j3j3l ma1QCq m m11ef~e @HHL		RWHXGY[&%3	 2  ((A-( II5656>``056M0N0T0T0V0\0\0^-5R5V5VWp5qE1245=__393F3F3\3\3d3d3k3k3m na1QCq n n11k  mF  lG GHHL		RWHXGY[&%3	 2  ((A-(l <Cyy~ 99S>2248).3)<)B)B)DE#J%*5:%6%;c
< C =Cyy~ :++-66s; !&c
$"O "		'5:r}} M "'++a."8"8c"BC).sa")<E#J= $$%Nse&<%NO a *C%'uSz sB!"h&7&78 (-*/$)(-"'$)$)(-,1*/(-*/G /6mmo "*(#rxxz1)+););Hh)OE#J!" V|%)c
5*8 1 $C%'uSz sBU2YB!#E#J$ ! KCH2288#uSzJKyy!12((  -->>8CYCYCkCk,2,>,>,S,S%-%;%;%I%I%K$,$:$:$K$K$Q$Q"*"8"8"J"J"P"P/7/E/E/O/O/U/U	 -T -) AR..=&&::t:LM B !n  !o6 &Ov  &!#))PQVPWWlmulvw+ * 
   A%  &si   DW! W,CW! >WA W! ,A1W! AW! 1AW! 7WA-W! 1+W! E3W! W! !	X7*AX22X7c                    | j                   j                  j                  d       t        | j                        }d}t        j                         }| j                  D ]~  }| j                   j                         r y | j                   j                  j                  | d|        |dz  }ddd|gdd|gg}t        j                  j                  |dd	g
      }|s7| j                   j                  d| dd       | xj                  dz  c_        | j                  |   D ]1  }	 ddd|gdd|gg}t        j                  j                  |g d
      }	||	_        |	j                  j                  j!                  d      s%|	j                  j                  j!                  d      r|	j                  |	_        |	j%                  d       |	j&                  j)                  |	j&                  j+                                |	j&                  j-                  d       |	j&                  j.                  j0                  r|	j&                  j%                  d       4 |j                  j                  j!                  d      s!t        j                  j5                  dg dg dgdd|ggdg
      }t7        |      |_        |j0                  sm|j%                  d        t        j                         |z
  }| j                   j                  j                  d|dd       y # t2        $ rA}
| j                   j                  d| dd       | xj                  dz  c_        Y d }
~
Dd }
~
ww xY w) Nu5   Привяжем подзадачи к задачамr	       из r:   r-   r4   r9   r   tree_node_is_branchr1   fieldsuE   Не удалось найти родительскую задачу zERR-0073r    rK   )r'   r$   r   task.subprojectr!   TrE   r   u4   Не удалось привязать задачу zERR-0074)r  r!   )logic_type.codeLIKEztask.subproject%)r  r  z
task.epic%r$   =--u<   Обработка подзадач выполнена за .3f    сек.)rD   loggerinfolensubtaskstime	monotonic	is_cancelrP   r    rR   rv   rw   r'   r   r9   rU   r$   rj   ru   r   save_preload_fieldsr   r^   rt   rS   sgetboolr  )r   totalr   t1parent_ext_idr   r'   child_ext_id_filter_childry   r  r  t2s                r   _process_subtasksz(CmfPluginCsvTasksMixin._process_subtasks  s2   ##$[\DMM"^^!]] 9	7M((*OO""''1#VE7(;<FAhm<vt]>[\G ..,, ) - K ))[\i[jk& * 
   A%  $m < **%)HdL+IFTXZfKg$hM!>>--]Kw-xD'2D$++667HI#33>>{K+/+;+;(II$I/&&2243E3E3Y3Y3[\&&::t:L))//::**//D/A*, %%**556VW!>>.. !KE
 '[9 !6 / 
 37x./))$$$6s9	7v ^^"##&bcefibjjr$st3 ! *OO--N|n]"!* . 
 $$)$$*s   'D-L!!	M+*6M&&M+c                    | j                   j                  j                  d       t        | j                        }d}t        j                         }| j                  D ]  }	 | j                   j                         r y | j                   j                  j                  | d|        |dz  }t        j                  j                  |d         }|s&t        j                  j                  dd|d   g      }|s;| j                   j                  d	|d    d
dd       | xj                  dz  c_        t        j                  j                  dd|d   g      }|s;| j                   j                  d|d    dd       | xj                  dz  c_        ;t        j                  j                  dd|d   g      }|s;| j                   j                  d|d    dd       | xj                  dz  c_        t        j                  j                  |||      }|sRt        j                  |||| j                   d      }d|v r
|d   |_        d|v r
|d   |_        |j#                  d        t        j                         |z
  }	| j                   j                  j                  d|	d d!       y #  | j                   j                  d| dd       | xj                  dz  c_        Y xY w)"Nu&   Создадим связи задачr	   r  typer   r   r  r0   u2   Не удалось найти тип связи "r   zERR-0075CmfRelationTyperK   r-   in_linku=   Не удалось найти входящую задачу zERR-0076r    out_linku?   Не удалось найти исходящую задачу zERR-0077)relation_typer.  r/  T)r0  r.  r/  rD   r5   constrain_lagconstrain_lag_pctrE   u.   Не удалось создать связь zERR-0078CmfRelationOptionu8   Обработка связей выполнена за r  r  )rD   r  r  r  	relationsr  r  r   rP   r-  rR   rv   rw   r    r3  r1  r2  rj   )
r   r$  r   r%  relation_datar0  r.  r/  relation_optionr)  s
             r   _process_relationsz)CmfPluginCsvTasksMixin._process_relations  s   ##$LMDNN#^^!^^ @	&M?&??,,.&&++qcw,?@Q & 6 6 : :f@U : V$$*$:$:$>$>vsTabhTiFj$>$kM$OO--Mm\bNcMddfg"!2 . 
 $$)$ ..,,XsMR[D\4],^OO--WXefoXpWqr"!* . 
 $$)$!>>--h]S]E^5_-`OO--YZghrZsYtu"!* . 
 $$)$"(":":">">"/#% #? #
 '&,&>&>&3 '!)#'??(, '? 'O '-78Eo8V5*m;<IJ]<^9#((T(:s@	&D ^^"##&^_abe^ffn$op&))D]OT0 * 
   A%  s(   "J6>B6J65A!J6A!J6;A6J668K1c                    d|d   j                    d|d   j                    }d|d   j                   d|d   j                   }t        j                  j	                  dd|g	      }|s| j
                  j                  j                  d
       t        j                  j	                  dd|d   j                  j                  d      d    dg	      }|s t        j                  j	                  d      }t        j                  ||| j
                  d      }||_        |j                  r|j                  d       t        j                  j	                  |d   d         }|s/dd|d   d   gg dg}t        j                  j	                  |	      }|s(t        j                  |d   d   | j
                  d      }|d   d   |_        |j	                  d      }|s|d   d   }| j                  |      }	|	|_        |d   d   |_        |j                  r|j                  d       |j                    d|d   d    }
t        j                   j	                  |
      }|s(t        j                   j	                  dd|gdd|gg	      }|s.t        j                   j	                  dd|d   d   gdd|gg	      }|sH| j
                  j                  j                  d       t        j!                  || j
                  |d      }|
|_        |d   d   |_        ||_        |	|_        |j                  r|j                  d       d|d   j                    }d |d   d    }t        j$                  j	                  |      }|sCt        j$                  j	                  d!      }t        j%                  ||| j
                  d      }||_        t'        |d   j                        d"v r||_        |j                  r|j                  d       t        j*                  j	                  |d   ||d#$      }|s=|d   |d#|| j
                  dd%}t        j*                  d&i |}|j                  d       |||fS )'NzCSV::r   ::r   u   БП для проекта u    и типа r-   r  r0   u/   Не нашли БП, создаем новыйr9   r  r8   r   %zdefault.system:defaultr   T)r-   templaterD   r5   rE   r&   r-   r   r4   r-   r4   N)r   rD   r5   cache_status_typeworkflowstatus_codeu7   Не нашли статус, создаем новый)r?  rD   r@  r5   u%   CSV-схема для проекта r   )ztask.agile:defaultztask.base:defaultr    )r   targer_workflowr   cmf_model_name)r   target_workflowrB  r   rD   r5   rM   )rI   r   rP   CmfWorkflowrR   rD   r  r  r9   splitrt   rj   CmfStatusCoder-   calc_status_typestatus_type	CmfStatusr@  r   rY   default_task_workflowCmfSchemeWfRule)r   ry   r-   r   r?  r;  cmf_status_coder   r>  rH  status_ext_idtask_statusscheme_ext_idscheme_nameschemerule	rule_dicts                    r   _process_workflowz(CmfPluginCsvTasksMixin._process_workflow2  s   h**+2d<.@.C.C-DE,T(^-@-@,AtT`OaOfOfNgh%%))(C1H)IOO""''(YZ))--fflI[I`I`IfIfgjIklmInHoopFq5r-sH!--117O1P))!?? $	 * H MMdM+ ..22$x.:R2Sd8nX&>?AWXG$2266g6FO$22(^H-?? $ 3 O
 "&h!9 HH%89  $Xx 8))*;<&1##H~h7%%  T 2#;;-r$x.*B)CD&&**-*@ **..S(+_57. K
  **..d8nU]F^7_3=tX2N7P. QKOO""''(ab **!??+ $	 + K +>(3"1"-!!.X 1 123=d8nV>T=UV##''}'=))--3D-EH''$!?? $	 ( F "tL!&&'+VV+3F(KKDK)%%))T,5GYa4:9 * V"<0#+"+#"oo#'I ))6I6DII$I'x,,r   c                    d }d }d }d }|j                  d      r*|d   j                  d      r|d   d   j                         }|r!t        j                  j                  ddd| dg      }|s| j                  j
                  j                  d| d       t        j                  j                  d	d
|gdg      }|sN| j                  j
                  j                  d| d       t        j                  j                  dd|gdg      }|r@|j                  rd| |j                   |_        nd| d|_        |j                  d       |r|d   d   j                         }| j                  j
                  j                  d| d       d	d
|gg dg}t        j                  j                  |      }|r*dd
|gdd
|gg}t        j                  j                  |      }|s*dd
|gd	d
|gg}t        j                  j                  |      }|sS| j                  j
                  j                  d| d       dd
|gdd|gg}t        j                  j                  |      }|sL|j                  d      r| j                  |      \  }}}n%| j                  j
                  j                  d       ||d<   ||d<   |S )Nr?  r-   r  z%::z::%r0   u   Ищем БП по коду "r   r9   r  r  u   Ищем БП по имени "r   r/   r9  TrE   r&   u-   Ищем статус в БП по коду "r=  r@  u/   Ищем статус в БП по имени "r   ut   Невозможно создать БП и статус, не указан логический тип задачи)rR   r   rP   rD  rD   r  r  r-   rj   rF  rI  rT  warning)	r   ry   r   workflow_ext_idr?  rN  rM  filter_r@  s	            r   rW   z%CmfPluginCsvTasksMixin._calc_workflow  s   88JD$4$8$8$B":.x8>>@O))--h#oM^^aHb5c-dH&&++.KOK\\],^_!--11&#9W:B 2 E  OO**//2QRaQbbc0de%1155fg=_>FZ  6  IH ,..??P*Q,..?r*BMMdM3 $Xx 8 > > @&&++.[\i[jjk,lm"C79OP$2266g6F *C:]CQ\<]^G"("2"2"6"6g"6"FK" *C:VS-<X[G"("2"2"6"6g"6"FK"OO**//2aboappq0rs *C:VWm<\_G"("2"2"6"6g"6"FKxx%9=9O9OPT9U6;&&..  0f  g#Z$Xr   c                 f   t         j                  j                  d      }t         j                  j                  |d      }|D ]J  }	 ||d<   ||d<   ||d<   | j	                  | j
                  t         j                  |      \  }}t                L t         j                  j                  dd|gdg      }	t        |	      |_        |j                  r|j                  d       t                y # t        $ r8}t                | j
                  j                  d| d	| d
d       Y d }~d }~ww xY w)Nzlist.agile_sprint:defaultr   sprintr#   r   r$   r   uA   Не удалось создать/обновить спринт z. zERR-0090rm   rK   r  r  r  TrE   )rP   r   rR   rV   rf   rD   rm   rk   rS   cmf_rollbackrv   r"  r#  r  rt   rj   )
r   r   r   sprint_logic_typesprint_folderrZ  r   r   exchas_sprintss
             r   r   z'CmfPluginCsvTasksMixin._process_sprints  s:   "//339T3U((,,8,T 	F#*x (5}%'8|$%)%B%B4??TZTbTbdj%k"
F	 nn))!366 * 
 -1,=)##40!  ))WX^W__abeafg& *  s   AC//	D08.D++D0c                     d }|D ]P  }||d<   |j                  d      r| j                  |d      |d<   |j                  d      s@| j                  |      }R |S )Nr   r   r    r&   )rR   rT   rW   )r   r   r   r   r?  s        r   r   z)CmfPluginCsvTasksMixin._process_workflows  si    ! 	@H!(HX||L))-)A)A(I)V&||H%"&"5"5h"?	@ r   c                 @   | j                  || j                  j                  d   t        j                        }|r>| j                  j
                  j                  d|        d|d<   | j                  |d<   d|d<   |j                  d      r,t        j                  j                  d	d
|d   d   g      |d<   |j                  d      r)t        j                  j                  |d   d         |d<   t        j                  di |}|j                  rR|j                  rF|j                  j                  t        j                  |j                  j                        z   |_        |j!                  d       y t#        t%               d      rt$        | M  |       y y )Nr   u   Грузим журнал closedr&   rD   Tr5   r(   r.   r/   r-   r0   r   r<  )minutesrE   r   rM   )rO   rD   rN   rP   CmfTimeTrackerHistoryr  r  rR   rX   r    
start_date
time_spentr^   r   	timedeltaend_daterj   hasattrsuperr   )r   r   timetracker_historyhistory	__class__s       r   rx   z+CmfPluginCsvTasksMixin._process_timetracker  s   "..s/3/L/LM^/_/5/K/KM OO""''*DEXDY(Z[,4)04-59 12"&&|44:4D4D4H4H#W.A,.OPX.YZ 5I 5#L1 #&&x0060B0B.x8B 1C 1#H- 22I5HIG!!g&8&8#*#5#5#;#;h>P>PY`YkYkYqYq>r#r LLTL*UWn-G % .r   c           
          t        t               d      rt        | 	         }ni }|j                  i dddddddddd	ddd
dddddddddddddddddddddddddddddddddddddddddddd d!ddd"d#ddd$d%ddi d&d'ddd(d)ddd*d+ddd,dd-dd.dd-dd/d0d-dd1d	d-dd2d3d-dd4dd5dd6d7ddd8d7ddd9dd:dd;d<d=dd>d?d=dd@dAd=ddBdCd=ddDdEd=ddFd=ddGd=ddHd=ddId=dddJddK       |j                  i dLdId=ddMddddNddddOdPd=ddQdRdSddTd?d=ddUdAd=ddVdGd=ddWdXd=ddYdHd=ddZd[d=dd\d]d=dd^dddd_dCd=dd`d<d=ddadbdd       |S )cN_get_default_mappingu/   Ид внешней системы задачиr-   r    )
field_name
model_nameu   Тема задачиr   u   Тип задачиr   u(   Дата изменения задачиcmf_modified_atu&   Дата создания задачиrJ   u*   ФИО изменившего задачуr*   u   Код задачиr9   u   Описание задачиrB   u   Статус задачиr&   u   Будильник задачи
alarm_dateu$   Крайний срок задачиdeadlineu   Важностьpriorityu   ФИО исполнителяzresponsible.nameu   Email исполнителяzresponsible.emailu   ФИО автораzcmf_author.nameu   Email автораzcmf_author.emailu!   ФИО соисполнителяzexecutors.nameu    Email соисполнителяzexecutors.emailu%   Родительская задачаr'   u$   Код основной задачиzparent_task.codeu   Название проектаr   u   Код проектаu   Префикс задачtask_code_prefixu   Тип проектаu   Вид деятельностиr   u   Список задачrm   u   Компонентr3   u   Компонентыu   Код компонентаrs   u/   Фактические трудозатратыr   r   u&   Плановая дата началаr   u,   Плановая дата окончанияr   u/   Планируемые трудозатратыr   u2   Сумма дочерних трудозатратr   r   r   r   r   rg   )ui   Фактические трудозатраты по собственным ресурсам задачиu-   Фактический % завершенияu   Дата финишаu]   Структурный номер (для поиска родительской задачи)u   Комментарийu   СДРu   ИДu   Название_задачиu   Длительностьr   u   Предшественникиr.  r3  u   Дата_началаu   Дата_окончанияu#   Процент_завершенияu#   Фактическое_началоr   u)   Фактическое_окончаниеu   Тип_ограниченияr   u   Дата_ограниченияr   u   Дата_созданияu7   Запланированные_трудозатратыu/   Фактические_трудозатратыu   Вехаr2   )ri  rj  ro  update)clsdefault_mappingrm  s     r   ro  z+CmfPluginCsvTasksMixin._get_default_mapping  s9   5723#g:<O O ) 
=hfo?p) 
#F)%T) 
 ",i#X) 
 7GXhq8r	) 

 5EUen6o) 
 9IZjs:t) 
 "&	#R) 
 ,FR[-\) 
 (PY)Z) 
 .lZc/d) 
 3:]f4g) 
 z S) 
 ,<N^g-h) 
 +;N^g,h) 
 "2CS\#]) 
  !1CS\"]!) 
" 0@P`i1j#) 
$ /?P`i0j%) 
& 4Maj5k') 
( 3CUen4o)) 
* .fT`/a+) 
, $F,%W-) 
. (8JZf)g/) 
0 $LP\%]1) 
2 .jXd/e3) 
4 &fI'V5) 
6 !Y"W7) 
8 #<y$Y9) 
: *&P^+_;) 
< >mky?z=) 
> 5EWgu6v?) 
@ ;K^n|<}A) 
B >ljx?yC) 
D AQ_o}B~E) 
F I]VdzfL]m{=|4HXf%g }M  ]k  nl5;<&XQ) 
 )	T 	 + 
%5^T+ 
()D+ 

 ,FR[-\+ 
 '7GWe(f+ 
 -YVi.j+ 
 $4FVd%e+ 
 *:M]k+l+ 
* 2BScq3r++ 
, 2BUes3t-+ 
. 8H\lz9{/+ 
4 ,<Rbp-q5+ 
6 .>Tdr/s7+ 
< (8HXa)b=+ 
> FVb  sA  HB?+ 
B >mky?zC+ 
P ~YOQ+ 
 +	X r   c                 6    |j                  |dz   |f       g dfS r   r
   r   s          r   r   z,CmfPluginCsvTasksMixin._process_grouped_rowsu  r   r   )__name__
__module____qualname__r   r   __annotations__r   backoffon_exceptionexporS   r   dictr   rl   r*  r7  rT  rW   r   r   rx   classmethodro  __classcell__)rm  s   @r   r   r      s    Js	 W',,#$&#%(f	(fP)6$ )6Vs&jCuJJqX`-D<|8&6 \ \|	r   r   )r  r   r_   r  cmf.includer   rM   r   r   <module>r     s         v vr   