
    yi\:                        d dl Z d dlZd dlmZ d dlZd dlZd dlmZ d dlm	Z	m
Z
 d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlmZ d dlZd dlmZ d dlT d dlmZ d d	lmZ  G d
 dej                  ZdS )    N)deepcopy)Path)DictIterator)cached_property)ParserError)*)cmf_plugin_csvcmf_contextc                   x   e Zd ZU dZe                                ed<   dZed             Z	de
fdZedee         fd            Zd Zedeeef         fd	            Zed
ede
fd            Zd ZdededefdZd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z d Z!d Z"d Z#dFdefdZ$dFdefd Z%d! Z&d" Z'd#efd$Z(d% Z)d& Z*d' Z+d( Z,d) Z-d* Z.d+ Z/d, Z0 e1j2        e1j3        e4d-d./          d0             Z5d1 Z6d2 Z7d3 Z8d4 Z9d5 Z:d6 Z;d7 Z<d8 Z=dGd9Z>d: Z?d; Z@d< ZAi dfd=ZBd> ZCd? ZDd@ ZEdA ZFdB ZGdC ZHdD ZIdE ZJdS )HCmfPluginCsvN_loggerr   c                     dt           j                                        t           j        j        g dddt           j                                        t           j        j        dgddt           j                                        t           j        j        dgddt           j                                        t           j        j        dgddt           j                                        t           j        j        dgdd	t           j	                                        t           j	        j        g ddd
t           j
                                        t           j
        j        g dddt           j                                        t           j        j        dgddt           j                                        t           j        j        dgddt           j                                        t           j        j        g dddt           j                                        t           j        j        ddgddt           j                                        t           j        j        ddgddt           j                                        t           j        j        ddt           j                                        t           j        j        dddt           j                                        t           j        j        ddg} | S )uR   Собственный магазин при выборе импорта из Jirau#   Поля пользователей)CmfTaskCmfTestplanCmfTestcase)captionfieldsiconavailable_foru!   Поля контрагентовr   u   Поля задачu,   Оперативная гант-задачаu   Журнал работu!   Поля комментариевu   Поля проектовu"   Поля списков задачu   Поля компонентовu   Поля группu   Поля активовr   r   u   Поля локацийu   Поля тесткейсов)r   r   r   u2   Поля тесткейсов тестплановT)r   r   r   hiddenu*   Поля выполнения тестов)models	CmfPersonimport_shop_fieldsr   
CmfCompanyr   CmfGanttTaskCmfTimeTrackerHistoryCmfTimeTracker
CmfComment
CmfProjectCmfListCmfComponentCmfPersonGroupCmfAssetCmfLocationr   CmfTestplanTestcaseCmfTestcaseRun)ress    +./modules/settings/models/cmf_plugin_csv.pycalc_models_settingsz!CmfPluginCsv.calc_models_settings   s    >IYIlIlInIn%*=f=f=fh h;vGXGkGkGmGm&+ykK K-9Z9Z9\9\^(I;H HFRXReRxRxRzRz(-M M1V=Y=l=l=n=n*/9+O O;vGXGkGkGmGm&+>g>g>gi i3v?P?c?c?e?e&+>g>g>gi i<HiHiHkHk^(I;H H9VEXEkEkEmEm(-M M-9N9a9a9c9c*/BkBkBkm m1V_=_=_=a=a_)]M<Z\ \1V=O=b=b=d=d',}?]_ _76CUChChCjCj',. .LX^Xr  YF  YF  YH  YH/4F FDPVPePxPxPzPz*/4A A;
@ 
    returnc                    |j         }d}d}	 |                     |          }t          |          D ]\  }}n# t          $ r8 d| d| }| j                            |           t          |d           d}Y net          $ r% | j                            d| d|            d}Y n8t          t          f$ r% | j                            d| d|            d}Y nw xY w|S )	NFr   uK   Не корректный формат загружаемого файла :T)abort*   Приложен пустой файл CSVu5   Не удаётся прочитать строчку)
full_path_file	_get_file	enumerateUnicodeDecodeErrorr   	exception	cmf_alertStopIterationIOError
ValueError)self
attachment	file_path
have_errornum	file_read_msgs           r*   _check_filezCmfPluginCsv._check_fileD   sF   -	
	z22I#I..  Q! 	 	 	q`iqqloqqCL""3'''c&&&&JJJ 	 	 	L""#OT]QeQe`cQeQefffJJJ$ 	 	 	L""#Z_h\p\pkn\p\pqqqJJJ	 s   *8 ?C9+C&2CCc              #   n  K   t          | j                  }|j        dk    r\t          j        t          |                    }|                    d          }|                                D ]}d |D             V  n|j        dk    rFt          j	        t          |                    }|j
        }|                    d          D ]}|V  nf|j        dk    r[t          j        d           t          |d	          5 }t          j        |d
d          D ]}|V  	 d d d            n# 1 swxY w Y   d S )N.xlsr   c                     g | ]	}|j         
S  )value).0items     r*   
<listcomp>z*CmfPluginCsv._get_file.<locals>.<listcomp>`   s    111dtz111r,   .xlsxT)values_only.csvi r;")	delimiter	quotechar)r   r2   suffixxlrdopen_workbookstrsheet_by_indexget_rowsopenpyxlload_workbookactive	iter_rowscsvfield_size_limitopenreader)r<   attachment_file_pathworkbook	worksheetelfiles         r*   r3   zCmfPluginCsv._get_fileY   s     #J$=>>&&00)#.B*C*CDDH //22I((** 2 211b11111112!(G33-c2F.G.GHHH I))d);;  !(F22 ---*C00 D*TSCHHH  BHHHH               	s   >D**D.1D.c           	         |j         | _        |j        sd S t          j                            dgdd|j        gdg          }dg d}t          j                            |dd	g d
gdgdg          }|                     |          }|rg S | 	                    |          }| 
                                }t          |          D ]t\  }}	|dk    r|j        d         s nZ|dk    r nQt          |	          D ]>\  }
}d}t          |t          j                  r|                    d          }|dk    r|r|j        d         rt!          |j        d                   D ]t}d|vrd|vr ni|d         dk    r|d         D ]R}|d         |k    rD|d         }|r8|                     |d                   s|d                             |           d} nSu|s |d                             |d d d d           |d         |
         }|                    |d                   }||d<   |r||d<   |d         |d<   @v|d         s| j                            d           g S d|d<   |gS )N-cmf_modified_atidz!=json_settings)order_byfilterr   CSVnamer   	file_typeINrN   rE   rL   urlparentrl   rk   r   r   	first_row   Fz%Y-%m-%d %H:%M:%Simport_settingsro   r   titlemodel_fieldfield_qualnameT)ry   file_valrz   r   r|   r   r1   r   entity)loggerr   attachmentsr   	CmfImportgetri   CmfAttachmentrC   r3   _default_mapping_csvr4   rj   
isinstancedatetimestrftimer   _is_backref_fieldappendr6   )r;   
cmf_importprev_settingssettingsr<   r>   r@   default_mappingirowjvalfoundprev_set
prev_fieldrz   row_settingss                    r*   calc_import_settingsz!CmfPluginCsv.calc_import_settingsm   s9   !(% 	F(,,7I6JTXZ^`j`mSn5D4E - G G!R00)--'@'@'@A()7	 . 
 

 %%j11
 	INN:..	3355	** *	C *	CFAs1uuZ5kBuQ#C.. %C %C3 c8#455 <,,':;;C66$ *)DEV)W *(01LM^1_(`(` * *H%X55((:R:R %'/588 (.6x.@ * *
#-g#6##=#=2<]2KK'2 %54;Q;QR]^nRo;p;p %5(0(:(A(A*(M(M(M04$)E $> ! Y *11CTBFPT3X 3X Y Y Y $,H#5a#8L"1"5"5l76K"L"LK/2L," C6A]3/:6/BV,K%CN ! 	L""#OPPPI 'zr,   c                  p   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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d0d1|dd2d|dd3d4|dd5d	|dd6d7| dd8d7| dd9d|dd:d;d<dd=d>d<dd?d@d<ddAdBd<ddCdDd<ddEd<ddFd<ddGd<ddHd<dddIddJ}|                     i dKdHd<ddLddddMd	dddNdOd<ddPdQdRddSd>d<ddTd@d<ddUdFd<ddVdWd<ddXdGd<ddYdZd<dd[d\d<dd]dddd^dBd<dd_d;d<dd`dadddbddcdd	|dd	dcddddcddedcddfdcdddcdd	|dd	dgddhdgddi	           i }t          j                                        D ]}|||dj         <   |                                D ]a\  }}|                    dkdl          }	|                    dmdl          }
t          t          |	          }||
|	 dn|
 |j        do|j        dp||<   b|S )qug    Структура сопоставления полей из файла CSV по умолчанию. r   r!   r"   r#   u/   Ид внешней системы задачиext_id)
field_name
model_nameu   Тема задачиro   u   Тип задачи
logic_typeu(   Дата изменения задачиcmf_modified_atu&   Дата создания задачиcmf_created_atu*   ФИО изменившего задачуcmf_modified_byu   Код задачиcodeu   Описание задачиtextu   Статус задачиstatusu   Будильник задачи
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%   Родительская задачаparent_tasku$   Код основной задачиzparent_task.codeu   Название проектаu   Код проектаu   Префикс задачtask_code_prefixu   Тип проектаu   Вид деятельностиactivityu   Список задачu   Компонент
componentsu   Компонентыu   Код компонентаu/   Фактические трудозатратыactual_workr   u&   Плановая дата началаsched_start_dateu,   Плановая дата окончанияsched_finish_dateu/   Планируемые трудозатраты
sched_worku2   Сумма дочерних трудозатратagregat_workactual_myself_workactual_completeactual_finish_dateoutline_numberr    )ui   Фактические трудозатраты по собственным ресурсам задачиu-   Фактический % завершенияu   Дата финишаu]   Структурный номер (для поиска родительской задачи)u   Комментарийu   СДРu   ИДu   Название_задачиu   Длительностьsched_durationu   Предшественникиin_linkCmfRelationOptionu   Дата_началаu   Дата_окончанияu#   Процент_завершенияu#   Фактическое_началоactual_start_dateu)   Фактическое_окончаниеu   Тип_ограниченияconstrain_start_typeu   Дата_ограниченияconstrain_start_dateu   Дата_созданияu7   Запланированные_трудозатратыu/   Фактические_трудозатратыu   Вехаis_milestoneIDr   folder	cmf_ownersignificancer'   testplan_testcase_folder)	   Расположениеu   Наименование   Набор тестовu
   Авторu   Приоритетu   Статусr   u   Названиеr   r   r    r   .T)r   r   r{   r   requiredverbose_name)	updater   r   r   itemsr   getattrr   r   )name_cmf_taskname_cmf_projectname_cmf_epicname_cmf_componentr   default_local_attrs_mappingshop_fry   value_modelr   	name_attrmodels               r*   r   z!CmfPluginCsv._default_mapping_csv   sU   
 "'!+)
=hfs?t?t)
#F-%X%X)
 ",m#\#\)
 7GXhu8v8v	)

 5EUer6s6s)
 9IZjw:x:x)
 "&#V#V)
 ,FR_-`-`)
 (P])^)^)
 .lZg/h/h)
 3:]j4k4k)
 z W W)
 ,<N^k-l-l)
 +;N^k,l,l)
 "2CS`#a#a)
  !1CS`"a"a!)
" 0@P`m1n1n#)
 )
$ /?P`m0n0n%)
& 4Man5o5o')
( 3CUer4s4s))
* .fTd/e/e+)
, $FJZ%[%[-)
. (8JZj)k)k/)
0 $LP`%a%a1)
2 .jXh/i/i3)
4 &fM'Z'Z5)
6 !]"["[7)
8 #<}$]$]9)
: *&Pb+c+c;)
< >mky?z?z=)
> 5EWgu6v6v?)
@ ;K^n|<}<}A)
B >ljx?y?yC)
D AQ_o}B~B~E)
 )
F I]Vdzf zfL]m{=|=|4HXf%g%g }M  ]k  nl  nl5;<&X&XQ)
 )
 )
T 	 : 
%5^TT: 
()DD: 

 ,FR[-\-\: 
 '7GWe(f(f: 
 -YVi.j.j: 
 $4FVd%e%e: 
 *:M]k+l+l: 
* 2BScq3r3r+: 
, 2BUes3t3t-: 
. 8H\lz9{9{/: 
4 ,<Rbp-q-q5: 
6 .>Tdr/s/s7: 
< (8HXa)b)b=: 
> FVb  sA  HB  HB?: 
B >mky?z?zC: 
P ~YOOQ: 
Z GG[: 
\ 8>M](^(^7=]([([6>m'\'\)4MRR1?}"]"]+3=QQ 8>M](^(^/5EZ [ [6P`u'v'vq: 
 : 
 : 
 :	 :	 :	v ')#n7799 	D 	DF=C'y(9::"1"7"7"9"9 		V 		VE;$r::J#b99IFJ//E=B@IGQD_D_T]D_D_:?*>BBGBT2V 2V'.. +*r,   r{   c                 F   |                      d          ^}}t                              |          }|D ]l}t          ||          }t	          |t
          j        j                  r dS t          |d          r|j	        s n t                              |j	                  }mdS )Nr   Tr   F)
splitcmfutilget_model_by_namer   
issubclasscmfr   
CmfBackrefhasattrr   )r{   r   attrsr   attrfields         r*   r   zCmfPluginCsv._is_backref_field5  s    +11#66
U))*55 		; 		;DE4((E%!677 ttE7++  --ek::EEur,   c                    g }ddg g d}d}t           j                            |ddg dgdg	          }|s| j        j                            d
           |                     |          }|j        d         rt          |           t          |          D ]\  }}|dk    r ng }	|d         
                    |	           t          |j                  D ]\  }
}|d         s|d         d                             d          d         }|s|dk    rd}|dv rH|dk    r'|d         
                    |d         d                    |	
                    ||
                    |d         r|
                    |           |s
d|d<   d|d<   |S )Nu   Сделки	handshake)ry   r   titlesrowsFrp   rq   rr   rh   )ru   rl   rk   u)   Не найден файл импортаrv   rw   r   rz   r{   r   r   CmfDealT)r   r   r   r   u   Задачиry   zcalendar-todayr   )r   r   r   r   r~   errorr3   rj   nextr4   r   csv_import_settings_fieldsr   )r;   r   resultdealsis_dealattachr@   r   r   data_rowr   r   r   s                r*   previewzCmfPluginCsv.previewG  s   (+UWXX%))'@'@'@A() * 
 

  	VO"(()TUUUNN6**	#K0 	OOO	** 	, 	,FAsAvvH&M  ***()NOO 	, 	,8. %m45EFLLSQQRST
 #:#:#:"G!777Avvh..x/Fy/QRRROOCF+++	, ? 	!MM%    	-+E'N,E&Mr,   	row_arrayr   c                    t                      }t          |d         d                   D ]\  }}||         s|d         s|d         d         |j        k    r0|d         d                             d          }t	          ||d                   }|j                            d          r|j        dv rd	||         i||d         <   t          |t          j
        j                  rAt          |          d
k    r|d
         ||         i||d         <   d||         i||d         <   |j        dk    r t          ||                   ||d         <   )|j        dk    r&|                     ||                   ||d         <   Zt          |d          r,|                     ||         |j                  ||d         <   t          |t          j
        j                  rQ||                                         }	h d}
h d}|	|
v rd||d         <   |	|v rd||d         <   d ||d         <   ||         ||d         <   |S )Nr   r   rz   r   r   r   cf_)CmfM2MCmfCascadeChoicero   rw   r   r   choices>      да1yestrue+>   0nofalse   нет-TF)dictr4   r   r   r   
class_name
startswithwidgetr   r   r   
CmfRelBaselenrW   calc_priorityr   calc_choicesr   CmfBoollower)r;   r   r   r   r)   idxfield_settingsfield_partsr   rH   true_valuesfalse_valuess               r*   _map_objectzCmfPluginCsv._map_objectl  sw   ff#,Xa[-B#C#C %	5 %	5CS> !-0 .~>%BTTT(7EKKCPPKE;q>22E ++E225L$BBB'-y~&>KN##E3:#899 5{##a''+6q>9S>*JCA''+3Ys^*DCA''!X--&))C.&9&9KN##!Z//&*&8&83&H&HKN##	** 5&*&7&7	#&V&VKN##E3:#566 5!#,,..???BBBK''*.CA''l***/CA''*.CA''&/nKN##
r,   c                 x   d }|                      || j        j        d         t          j                  }|rg }g d}|D ]Y}|                    |d          }|r?|dk    r|                    d|d|gdd|gg           n|                    |d|g            nZ|r t          j                            |          }|S )	Nrx   r   r   ro   r   r   OR==r   rl   )r  r   rj   r   r!   r   r   )r;   r   project_objproject_filteruniq_fields
uniq_fielduniq_field_values           r*   _get_projectzCmfPluginCsv._get_project  s    ""3(EFW(XZ`Zkll 	DG444K)  
#*;;z2#>#> # !X--z4AQ.RU[]acsTt'uvvvv
D:J'KLLLE  D$/3373CCr,   c                    d }|                      || j        j        d         t          j                  }|rg }g d}|D ]Y}|                    |d          }|r?|dk    r|                    d|d|gdd|gg           n|                    |d|g            nZ|r^t          j                            |d	          }	|                    d
d|gdd|	gg           t          j                            |          }|S )Nrx   r	  r   r   r
  r  r   sprinttree_parentsys_typeru   r  r  )	r  r   rj   r   r"   r   r   	CmfFolderextend)
r;   r   r  
sprint_objr  r  r  r  r  sprint_folders
             r*   _get_sprintzCmfPluginCsv._get_sprint  s9   
!!#t'DEV'WY_Yghh 	@G444K)  
#)::j"#=#= # !X--z4AQ.RU[]acsTt'uvvvv
D:J'KLLLE  @ & 0 4 4W_ 4 ` `4 =tUb?cdeee#^//w/??
r,   c                    dt           j        j         d}g }d t          j        d|          D             }|D ]}t          j        ||          rdd|g}ndd|g}d	|d
d|ggdd|gg}t           j                            |          }	|	r|                    |	           g| j        	                    d| ddd           |S )u  
        Получает список компонентов, найденных по идентификатору(код, название)

        Args:
            component_identifiers (str): любой идентификатор(код, название)
            project (CmfProject): проект

        Returns:
            list: список компонентов
        ^z-(\d+)$c                 ^    g | ]*}|                                 |                                 +S rG   )strip)rI   
identifiers     r*   rK   z0CmfPluginCsv._get_components.<locals>.<listcomp>  sF     
 
 
!!

 
 
r,   z[^,;]+r   =ro   ILIKEr
  r   ru   r  u   Компонент 'u   ' не найденzERR-0089r#   obj_type)
r   r#   code_prefixrefindallmatchr   r   r   	log_error)
r;   component_identifiersr  code_patternr   identifiersr"  identifier_filtercomponent_filter	components
             r*   _get_componentszCmfPluginCsv._get_components  s4    EF/;DDD

 
 j4IJJ
 
 

 & 	 	Jxj11 B%+S*$=!!%+Wj$A! %sJ/
 3(  +//7G/HHI !!),,,,))J:JJJ+ *     r,   c                 t   t           j                            dd|g          }|st           j                            dd|                                g          }t          |          dk    r@| j                            d| dt          |           d	d
d           t          d          |r|d         }|S )Nr   r  r  ro   r$  rw   u<   Компаний с одинаковым названием z > uF   , укажите код компании вместо названияzERR-0071r   r%  u]   Найдено несколько компаний с одинаковым названиемr   )	r   r   r   listr!  r   r   r+  	Exception)r;   r   company	companiess       r*   _get_companyzCmfPluginCsv._get_company  s    #''f/E'FF 	')..vw6W.XXI9~~!!))\SY \ \^abk^l^l \ \ \)	 *        A  A  A '#A,r,   c                    d }|rg }g d}|D ]}}|                     |d                                          }|rQ|dk    r|                    d|d|gdd|gg           n*|                    |d|                                g            n~|r t          j                             |          }|st          d| d	          nAt          j                             g d
          }| j        j        	                    d           |S )N)r   r   asset_code_prefixr   r   r
  r#  r   r  u/   Не найдена схема активов "uf   ", создайте схему и укажите префикс кода активов в файле.)systemr#  Tu   Не указана схема активов. Установлена схема активов по-умолчанию (системная))
r   r!  r   upperr   CmfAssetSchemer5  r   r~   warning)r;   asset_schemeasset_scheme_objr  r  r  r  s          r*   _get_asset_schemezCmfPluginCsv._get_asset_scheme  sn    	GAAAK)  
#/#3#3J#C#C#I#I#K#K # !X--z3@P.QTZ\_aqSr'stttt
C9I9O9O9Q9Q'RSSSE  M#)#8#<#<G#<#L#L # {l { { {    &488@U@U@U8VVO"** _    r,   c           	      X   d }|r|                     d          p)|                     d          p|                     d          }|rL|                                }t          j                             dd|gdddd| dgdd|gdd	|gggdg
          }|st	          d| d| d          |S )Nr   r   ro   ru   r#  r
  LIKE%r$  rl   r   u1   Не найдена группа активов "u   " в схеме uY   , создайте группу и укажите ID, код или имя в файле.)r   r!  r   CmfAssetCatr5  )r;   	asset_catr@  asset_cat_objr  s        r*   _get_asset_catzCmfPluginCsv._get_asset_cat"  s    	(}}X66h)--:O:OhS\S`S`agShSh #3#9#9#;#;  & 2 6 6!3(89 %v/F3C/F/F/FG#S*:;#W.>?	 %: !7 ! ! ! o	 o ocs o o o  
 r,   c                 j   d }|rg }g d}|D ]k}|                     |d                                          }|r?|dk    r|                    d|d|gdd|gg           n|                    |d|g            nl|r8|                    dd|g           t          j                             |          }|S 	Nr	  r   r   r
  r#  r   ru   r  )r   r!  r   r   CmfAssetType)r;   
asset_typer@  asset_type_objr  r  r  r  s           r*   _get_asset_typezCmfPluginCsv._get_asset_type>  s    	IG444K)  
#->>*b#A#A#G#G#I#I # !X-- $!+S2B C!'.> ?     
C9I'JKKKE  I#/?@AAA!'!4!8!8!8!H!Hr,   c                 j   d }|rg }g d}|D ]k}|                     |d                                          }|r?|dk    r|                    d|d|gdd|gg           n|                    |d|g            nl|r8|                    dd|g           t          j                             |          }|S rK  )r   r!  r   r   CmfAssetTypeCat)r;   asset_type_catr@  asset_type_cat_objr  r  r  r  s           r*   _get_asset_type_catz CmfPluginCsv._get_asset_type_catY  s	   ! 	PG444K)  
#1#5#5j"#E#E#K#K#M#M # !X-- $!+S2B C!'.> ?     
C9I'JKKKE  P#/?@AAA%+%;%?%?w%?%O%O"!!r,   c           
         t           j        j                            |          }|j        }|s|S |j        }d |                                D             }|                                                                }|                    |          }|sR||vrNd |	                                D             }t          d| d|j         dd                    |                     |p|p|S )Nc                 >    i | ]\  }}|                                 |S rG   r  rI   kvs      r*   
<dictcomp>z9CmfPluginCsv._get_asset_field_choises.<locals>.<dictcomp>|  6     
 
 
1 GGIIq
 
 
r,   c                     g | ]}d | d 	S rQ   rG   rI   rZ  s     r*   rK   z9CmfPluginCsv._get_asset_field_choises.<locals>.<listcomp>       ???1h!hhh???r,   &   Не найдено значение "
   " для "2   ". Укажите одно из значений: , )r   r%   r   r   defaultr   r   r!  r  valuesr5  r   join)	r;   r   rH   r   field_defaultfield_choisesr   field_valuerf  s	            r*   _get_asset_field_choisesz%CmfPluginCsv._get_asset_field_choisest  s    &**:66 	!  
 
%++--
 
 

 ##%%kk%(( 	uM99??(<(<(>(>???FV V V%- V VBF))FBSBSV V  
 4e4}4r,   c           	         d }|r|                     d          r|d                                         }t          j                             dddd| dgdd|gdd|gdd|gg	          }|s1t          j                             dddd| dgd
d|gdd|gg	          }|s!| j                            d| ddd           |S )Nr   r
  rC  rD  loginr$  emailro   r  r   r#  u7   Не найдена группа владельцев "rQ   zERR-0085r%   r%  )r   r!  r   r   r$   r   r+  )r;   responsibleresponsible_objresponsible_ext_ids       r*   _get_asset_responsiblez#CmfPluginCsv._get_asset_responsible  s8    	;??844 	!,X!6!<!<!>!>$.22v'@+='@'@'@Ag'9:g'9:W&89 3  O # "("7";";!6+D/A+D+D+DE&89*<=	 #< # # # ))cN`ccc' *    r,   c           
         g }|r|                     d          r|d         }|                    d          D ]}|                                }t          j                             dddd| dgdd|gdd|gd	d|gg
          }|s1t          j                             dddd| dgdd|gd	d|gg
          }|s"| j                            d| ddd           |                    |           |S )Nr   rP   r
  rC  rD  rm  r$  rn  ro   r  r   r#  u5   Не найдена группа поддержки "rQ   zERR-0086r%   r%  )	r   r   r!  r   r   r$   r   r+  r   )r;   support_group_datasupport_group_objssupport_groupssupport_groupsupport_group_ext_idsupport_group_objs          r*   _get_asset_support_groupz%CmfPluginCsv._get_asset_support_group  s    	A"4"8"8"B"B 	A/9N!/!5!5c!:!: A A'4':':'<'<$$*$4$8$8!6+F/C+F+F+FG '+?@ '+?@*>? %9 % %! ) (.(=(A(A %v/J3G/J/J/JK#S*>?#W.BC	  )B ) )% ) AO--gPdggg"!+ .     '--.?@@@@!!r,   c                    d }|r|                     d          rn|d                                         }t          j                             dddd| dgdd|gdd|gg	          }|s!| j                            d
| ddd           |S )Nr   r
  rC  rD  r   r#  ro   r$  r  u/   Не найдена локация/адрес "rQ   ERR-0087r%   r%  )r   r!  r   r&   r   r+  )r;   locationlocation_objlocation_ext_ids       r*   _get_asset_locationz CmfPluginCsv._get_asset_location  s     	X.. 	&x06688O!-11v'=?'='='=>S/2Wo6	 2  L   ))XoXXX' *    r,   c                 .   t           j                            |dddg          }|D ]}	 ||d<   ||d<   |                     | j        t           j        |           t                       B# t          $ r;}t                       | j        	                    d| d| d	d
           Y d}~d}~ww xY wt           j        
                    dd|gdg          }t          |          |_        |j        r|                    d           t                       dS )u   
        Создает/обновляет компоненты проекта

        Args:
            components (list): список сырых данных компонентов
            project (CmfProject): проект
        r   Ttree_node_is_branch)r  r  include_systemr   ru   r  uG   Не удалось создать/обновить компонент . zERR-0088r#   r%  Nr#  --rE  save_import)r   r  r   process_any_table_fieldsr   r#   
cmf_commitr5  cmf_rollbackr+  sgetboolr  
is_changedsave)r;   r   r  component_foldercomponent_dataexchas_components          r*   _process_componentsz CmfPluginCsv._process_components  sz    "+//!)*	 0 
 
 ) 	 	N+2x(0@}---O'"  
    ))u^luupsuu+ *         +00!3(896 1 
 
 04M/B/B,& 	4!!d!333s   >A))
B.31B))B.r7  c                    |D ]}d|d<   | j         j                            d|            |                     | j         t          j        |          \  }}|j                                         |rwt          |j	        j
                  dk    rZt          j                            dd|j
        gg dg          }|j                            |           |                                 d S )	NTservicedesk_allowu1   Пытаемся создать компанию project.servicedesk:defaultzparent.coder  )zproject_role.coder#  zsdesk-client:defaultr  )r   r~   infor  r   r   dpcommitrW   r   r   CmfProjectRoleAssignr   membersr   r  )r;   r7  r  r6  company_objis_newrole_assigns          r*   _process_companieszCmfPluginCsv._process_companies  s     	# 	#G+/G'(O"''(e\c(e(efff"&"?"?QWQbdk"l"lKN!!### #3w1677;XXX$9==&gl;JJJ >   #**;777  """	# 	#r,   personsc                    |D ]h}d }|                     d          r3|d                              d          }|                     |          |d<   | j        j                            d|            |                     | j        t          j        |          \  }}|j        	                                 |r=t          |j        j                  dk    r |j        j        st          |j                  }| j                            |t%                                }|rO|j        rH|j        j                            t*          j                  s|                    |j        j                   jd S )Nr6  r   u9   Пытаемся создать пользователя r  )r   r8  r   r~   r  r  r   r   r  r  rW   r   r   
user_localrH   ri   person_emails
setdefaultsetrn  endswithconfig
ORG_DOMAINadd)	r;   r  r  person
project_idcompany_ext_id
person_objperson_is_newproject_person_emailss	            r*   _process_personszCmfPluginCsv._process_persons&  sr    	B 	BFJzz)$$ F!'	!2!6!6x!@!@$($5$5n$E$Ey!O"''(ldj(l(lmmm(,(E(EdoW]Wgio(p(p%JM  """ -G.3448UUU&17 V !__
$($6$A$A*cee$T$T! B"(B&,2;;F<MNNB &))**:*@AAA)	B 	Br,   c                 H	   d|d         j          d|d         j          }d|d         j         d|d         j         }t          j                            dd|g	          }|s| j        j                            d
           t          j                            dd|d         j        	                    d          d          dg	          }|s t          j                            d          }t                              ||| j        d          }||_        |j
        r|                    d           t          j                            |d         d                   }|s5dd|d         d         gg dg}t          j                            |	          }|s.t                              |d         d         | j        d          }|d         d         |_        |                    d          }|s|d         d         }|                     |          }	|	|_        |d         d         |_        |j
        r|                    d           |j          d|d         d          }
t          j                            |
          }|s(t          j                            dd|gdd|gg	          }|s4t          j                            dd|d         d         gdd|gg	          }|sB| j        j                            d           t                              || j        |d          }|
|_        |d         d         |_        ||_        |	|_        |j
        r|                    d           d|d         j          }d |d         d          }t          j                            |          }|sCt          j                            d!          }t                              ||| j        d          }||_        t'          |d         j                  d"v r||_        |j
        r|                    d           t          j                            |d         ||d#$          }|s;|d         |d#|| j        dd%}t          j        d&i |}|                    d           |||fS )'NzCSV::ru   ::r   u   БП для проекта u    и типа r   r#  r  u/   Не нашли БП, создаем новыйr   rC  r/   r   rD  zdefault.system:defaultr   T)r   templater   import_originalr  r   r   ro   r  r   r  N)ro   r   r  cache_status_typeworkflowstatus_codeu7   Не нашли статус, создаем новый)r  r   r  r  u%   CSV-схема для проекта softdev:default)task.agile:defaulttask.base:defaultr   )r   targer_workflow	scheme_wfcmf_model_name)r   target_workflowr  r  r   r  rG   )ri   ro   r   CmfWorkflowr   r   r~   r  r   r   r  r  CmfStatusCoder   calc_status_typestatus_type	CmfStatusr  CmfSchemeWfrW   default_task_workflowCmfSchemeWfRule)r;   taskr   ro   r  r  cmf_status_coder  r  r  status_ext_idtask_statusscheme_ext_idscheme_nameschemerule	rule_dicts                    r*   _process_workflowzCmfPluginCsv._process_workflow=  s/   Eh*EEd<.@.CEEhT(^-@hhtT`OaOfhh%))(C1H)II 
	O"''(YZZZ)--fflI[I`IfIfgjIkIklmInFqFqFq5r-ssH Q!-117O1PP))!? $	 *  H  	,MMdM+++ .22$x.:R2SS 	Gd8nX&>?AWAWAWXG$266g6FFO 	$22(^H-? $ 3  O
 "&h!9 HH%899  	9 $Xx 8))*;<<&1##H~h7% 	3  T 222#;DD$x.*BDD&**-*@@ 	 *..S(+_57.  K
  	Q *..d8nU]F^7_3=tX2N7P. Q QK 	O"''(abbb **!?+ $	 +  K +>(3"1"-! 	/...3X 133Vd8nV>TVV#''}'== 	)--3D-EEH''$!? $	 (  F "tL!&''+VVV+3F( 	*KKDK)))%))T,5GYa4:9 * V V 
	("<0#+"+#"o#' I )66I66DII$I'''x,,r,   c                    d }d }d }d }|                     d          r;|d                              d          r |d         d                                         }|rt          j                             ddd| dg          }|s| j        j                            d| d           t          j                             d	d
|gdg          }|sH| j        j                            d| d           t          j                             dd|gdg          }|r:|j        rd| |j         |_        nd| d|_        |                    d           |r|d         d                                         }| j        j                            d| d           d	d
|gg dg}t          j	                             |          }|r*dd
|gdd
|gg}t          j
                             |          }|s*dd
|gd	d
|gg}t          j
                             |          }|sM| j        j                            d| d           dd
|gdd|gg}t          j
                             |          }|sN|                     d          r|                     |          \  }}}n| j        j                            d           ||d<   ||d<   |S )Nr  r   rC  %::::%r  u   Ищем БП по коду "rQ   r   r#  rE  u   Ищем БП по имени "ro   r$  r  Tr  r   u-   Ищем статус в БП по коду "r  r  u/   Ищем статус в БП по имени "r   ut   Невозможно создать БП и статус, не указан логический тип задачи)r   r!  r   r  r   r~   r  r   r  r  r  r  r>  )	r;   r  workflow_schemeworkflow_ext_idr  r  r  filter_r  s	            r*   _calc_workflowzCmfPluginCsv._calc_workflow  sj   88J 	AD$4$8$8$B$B 	A":.x8>>@@O (	G)--hHboHbHbHb5c-ddH 4&++,^O,^,^,^___!-11&#9W:B 2 E E   IO*//0dRa0d0d0deee%155fg=_>FZ  6  I  IH  4 C*Q*Q*Q*Q*B*B*B*BMMdM333 G $Xx 8 > > @ @&++,l\i,l,l,lmmm"C79O9O9OP$266g6FF G *C:]CQ\<]^G"("2"6"6g"6"F"FK" G *C:VS-<X[G"("2"6"6g"6"F"FK" GO*//0rbo0r0r0rsss *C:VWm<\_G"("2"6"6g"6"F"FK 	gxx%% g9=9O9OPT9U9U6;;&..  0f  g  g  g#Z$Xr,   projectsc                 n   |                                 D ]}|d         }|                    d          sd|d<   |                    d          s$t          j                            d          |d<   n|                     |d          |d<   |                    d          s#t          j                            d	          |d<   |                    d
          r|                     |          |d
<   |                     | j        t          j	        |          \  }}|j
                                         |r|                     |d         |          }|r||_        |                                 |                     |d         |           |                     |d         |           |                     |d         |           |                     |d         |           | j                            |j                                        j        j                   | j                            |            d S )Ndataproject_typer  r   project.agile:defaultr  r!   r  r  r   	workflowssprintsr   r7  r  )rf  r   r   CmfLogicType_process_logic_typer  _process_activityr  r   r!   r  r  _process_workflowsr  r  _process_sprintsr  r  r  gantt_project_idsr  main_gantt_projectloadri   rH   project_objsr   )r;   r  r  project_datar  r  r  s          r*   _process_projectszCmfPluginCsv._process_projects  s3   (( 	6 	6G"6?L##N33 9/8^,##L11 b-3-@-D-DJa-D-b-b\**-1-E-ElT`-a-a\*##K00 [,2,>,B,BHY,B,Z,Z[)
++ P+/+A+A,+O+OZ("&"?"?QWQbdp"q"qKN!!### 6"&"9"9'+:NP["\"\" ',;K)$$&&&%%gi&8+FFF(()>LLL''(<kJJJ%%gi&8+FFF&**;+I+N+N+P+P+S+YZZZ!((5557	6 	6r,   c                 x   t           j                            d          }t           j                            |d          }|D ]}	 ||d<   ||d<   ||d<   |                     | j        t           j        |          \  }}t                       J# t          $ r;}t                       | j        
                    d| d	| d
d           Y d }~d }~ww xY wt           j                            dd|gdg          }	t          |	          |_        |j        r|                    d           t                       d S )Nzlist.agile_sprint:defaultr  r  r  ru   r  r   uA   Не удалось создать/обновить спринт r  zERR-0090r"   r%  r#  r  rE  Tr  )r   r  r   r  r  r   r"   r  r5  r  r+  r  r  r  r  r  )
r;   r  r  sprint_logic_typer  r  r  r  r  has_sprintss
             r*   r  zCmfPluginCsv._process_sprints  s   "/339T3UU(,,8,TT 	 	F#*x (5}%'8|$%)%B%B4?TZTbdj%k%k"
F   ))gX^ggbegg& *         n))!366 * 
 
 -1,=,=)# 	14000s   AB
C1CCc                     d }|D ]_}||d<   |                     d          r|                     |d          |d<   |                     d          r|                     |          }`|S )Nru   r   r   r   )r   r  r  )r;   r  r  r  r  s        r*   r  zCmfPluginCsv._process_workflows  s    ! 	@ 	@H!(HX||L)) W)-)A)A(I)V)V&||H%% @"&"5"5h"?"?r,   c                 r   |                      || 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	}|                    d          r|                    d          }|d                                                                         }|                    |          }|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"<   n}d|d<   d$ t          j        j        j	        
                                D             }	| j                            d%| d&d'                    |	           d(d)*           | xj        d+z  c_        |                    d!          r|d!         d,vr|d!                                                                         }
|                    |
          |d!<   |d!         d,vrxd- t          j        j        j	        
                                D             }	| j                            d.|
 d&d'                    |	           d/d)*           | xj        d+z  c_        d0D ]}|                    |          ru|                    |                              d1          r2|                    |          d d2                                         ||<   t!          ||                   d3z  ||<   d4D ]}|                    |          r||                                                             d5          r||= Hd6}t#          j        |||         t"          j                  }|rA|                    d+                              d7d8          }t!          |          d9z  d3z  ||<   |                    d: |D                        d;D ]}||vs||         s||         }t/          |t0          j                  r2d<d=d>d?d@dAdBdCdDdEdFdGdH}|                                D ]H\  }}||                                v r-|                                                    ||          ||<    nI|dIk    rd ||<   dJD ]8}||vs||         s||         }t5          t!          |                    }|||<   9|D ]#}t7          |j        j        |||                    $|                    dK          s|                    g dL           |j        j        r|j        j        rst          j         !                    |j        "                                |j        j        j        |j        j        j        |j        j#        j        M          }||j        _$        |j        %                    dNO           d S # tL          $ rL}tO                       | j                            dP| dQ| dRd)*           | xj        d+z  c_        Y d }~d S d }~ww xY wd S )SNrx   r      фиксированная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  r   r   )r  r  r  r  )r  r  constrain_finish_typeconstrain_finish_date)r  r  r   c                     g | ]}d | d 	S r^  rG   rI   ts     r*   rK   z/CmfPluginCsv._process_gantt.<locals>.<listcomp>j  s      m m maQ m m mr,   uG   Не найден тип ограничения даты начала "u,   ". Укажите один из типов: rd  zERR-0082r   r%  rw   )r  r  r  c                     g | ]}d | d 	S r^  rG   r  s     r*   rK   z/CmfPluginCsv._process_gantt.<locals>.<listcomp>z  s      n n naQ n n nr,   uM   Не найден тип ограничения даты окончания "zERR-0083)r   
const_workr   r   r      ч<   )r   actual_duration?u*   (\d+[\.,]?\d*)\s*(?:д|дней|день)?,r      c                     g | ]}d | S )zop_gantt_task.rG   )rI   keys     r*   rK   z/CmfPluginCsv._process_gantt.<locals>.<listcomp>  s!    %N%N%N&<s&<&<%N%N%Nr,   )r   r   r   r   r   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   НД)r   r   )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)(r  r   rj   r   r   r   r!  r  r   r   rf  r+  rg  _has_errorsr  r  floatr(  search
IGNORECASEgroupreplaceload_fieldsr   r   r   intsetattrop_gantt_taskrH   r   r   CmfCalendarget_duration_minutes_get_calendar	is_manualr   check_gantt_projectr5  commit_with_event)r;   r   task_objganttconstrain_start_type_mappingconstrain_finish_type_mappingr   constrain_start_type_rawr   typesconstrain_finish_type_rawr  patternr*  r   _vmappingmonth_rumonth_encalendar_durationes                        r*   _process_ganttzCmfPluginCsv._process_gantt$  s]     do&CDU&VX^Xkllu$$&' n	&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 0 0,6 3<)2'1EN:C>H%'(1 1- 99344 .+0995K+L+L(/45K/L/R/R/T/T/Z/Z/\/\,+G+K+KLd+e+e(+/]]]8L455-1HHH8A458<459M569M566-::3  8I  I  I<PE"899<EE"89<@E"89=QE"9:=QE"9::8A45 m m63F3[3c3j3j3l3l m m m11[f~ [ [HL		RWHXHX[ [&%3	 2    ((A-(( II566.56>```056M0N0T0T0V0V0\0\0^0^-5R5V5VWp5q5qE1245=___ n n63F3\3d3k3k3m3m n n n11[  mF [ [HL		RWHXHX[ [&%3	 2    ((A-((l < <Cyy~~ < 99S>>22488 E).3)<)B)B)D)DE#J%*5:%6%6%;c
B = =Cyy~~ 
= :++--66s;; % !&c
$"O "	'5:r} M M  ="'++a.."8"8c"B"BC).sa")<E#J$$%N%N%N%N%NOOO a * *C%''uSz' sB!"h&788 ! (-*/$)(-"'$)$)(-,1*/(-*/ G /6mmoo " "*(#rxxzz11)+););Hh)O)OE#J!E 2 V||%)c
0 $ $C%''uSz' sBU2YYB!#E#JJ  K KCH28#uSzJJJJyy!122 R((      -> R8CYCk R,2,>,S,S%-%;%I%I%K%K$,$:$K$Q"*"8"J"P/7/E/O/U	 -T - -) AR.=&::t:LLLLL & & &!###))wQVwwmuww+ *   
   A%        &On	& n	&s   VW 
X4(AX//X4c                    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d#d#d$di}|d%k    rd&nd'}| j         j                            d(||                     ||                             d)||                             d*                                                    }|                    |          }|rwt
          j                            d+d,|d+         gd)g-          }|j        r||j        vrd.| |j         |_        nd.| d.|_        |j        r|	                    d/0           |S t
          j                            d)d1d2| d3g4          }|r|S | j         j                            d5| d6           t
          j                            d+d,|gd)g-          }|s%t
          j                            d*d7|gd)g-          }|rL|j        r||j        vrd.| |j         |_        nd.| d.|_        |j        r|	                    d/0           |S | j         j                            d8           |d9k    rd}n|d:k    rd}n|d;v rd }t
          j                            d+d,|g4          }	t          d.| d.|||	<          }
|                     | j         t
          j        |
          \  }}t                       |S )=NzSub-tasku   Подзадачаztask.sub:defaultro   r   SubtaskStory	UserStoryztask.userstory:defaultu   ИсторияTaskz
Task Agiler  u   Задачаr  Bugztask.bug:defaultu   Багu   ЭпикEpicztask.epic:defaultu   Классическийu&   Проект. Классическийzproject.base:defaultAgileu   Проект. Agiler  zService Desku   Проект. Service Deskr  ServiceDeskDeviceasset.device:defaultSoftwarezasset.software:defaultVMzasset.vm:defaultrF  r   default_logic_typeu   Логический тип r   ro   r   r  rE  r  Tr  rC  r  r  r  uF   Ищем логический тип по коду или имени ''r$  uF   Не нашли, создаем новый логический типr   r!   )r%   rF  )r   ro   r  r  )r   r~   r  r   r!  r   r  r   r  r  r   r  r5  )r;   objr   	name2codelogic_type_fieldr   logic_type_dictr   template_coder  logic_type_paramsr  s               r*   r  z CmfPluginCsv._process_logic_type  s   
!5?QRR
 4>PQQ
 !+?I["\"\
 k3KLL	

 {<TUU
 \3GHH
 ^=PQQ
 E+=>>
 u.@AA
 1DEE
 V-@AA
 '1Ycy(z(z
 3=TUU
 %AKhii
 $@Jghh
  x1GHH!
" 5MNN#
$ 4);<<%
 
	( ,6+F+F<<L`##$Z3GWCX$Z$Z[[[%&**8S9I5J5N5Nv5V5VWW]]__#--// 		,00W]G^8_iqhr0ssJ  4!222(HV(HZ5F(H(HJ%$3OOO
!$ 2D111(,,XvGXVGXGXGX4Y,ZZ
 	 	##$vms$v$v$vwww(,,VT64JT\S],^^
 	f,00&8Q[cZd0eeJ 	  4!222(HV(HZ5F(H(HJ%$3OOO
!$ 2D111##$lmmm""0MM<''3MM6662M&**642O*PP V&,0:*24 4 4 "::4?;A;N;LN N
F 	r,   c                 <   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         j                            d|d                     |d                             d|d                             d                    }|                    |          }|rwt          j                            dd|d         gdg          }|j        r||j        vrd| |j         |_        nd| d|_        |j        r|                    d           |S t          j                            ddd | d!g"          }|r|S | j         j                            d#| d$           t          j                            dd|	                                gdg          }|s7t          j                            dd%|	                                gdg          }|rL|j        r||j        vrd| |j         |_        nd| d|_        |j        r|                    d           |S | j         j                            d&           t          d| d|	                                '          }|                     | j         t          j        |          \  }}t                       |S )(u"    Виды деятельности   БизнесbusinessrF     Продажиsales   Маркетинг	marketing   Производство
production   Поддержкаhelpdesk   Бухгалтерияfinance!   ИТ инфраструктураservicedesk%   Хозяйственная часть	household   Разработка ПОsoftdev)	r\  r^  r`  rb  rd  rf  rh  rj  rl  u    Вид деятельности r   r   ro   r   r  rE  r  Tr  rC  r  r  r  uJ   Ищем вид деятельности по коду или имени 'rT  r$  uJ   Не нашли, создаем новый вид деятельности)r   ro   )r   r~   r  r   r   CmfActivityr   r  r  r!  r   r  r5  )r;   r  rV  r   activity_dictr   activity_paramsr  s           r*   r  zCmfPluginCsv._process_activity"  s    &4ZHH'7II+?"U"U1KUa(b(b+?"T"T/GQZ&[&[:]gt1u1u>eoz5{5{2MW`)a)a

 

	 	##$\wzGZ$\$\]]]$((7:3F3J3J63R3RSS!f-- 		)--fdMRXDY5Zdlcm-nnH 200&D6&D8?&D&DHO"1v///" 0$///O%))(FDU&DUDUDU1V)WW 	O 	##$zqw$z$z$z{{{%))&$1OYaXb)cc 	k)--fgv||~~5V`h_i-jjH 	 200&D6&D8?&D&DHO"1v///" 0$///O##$pqqq o6oooFLLNNKKK889?9K9HJ J& 	r,   c                 :   | j         j                            d           t          | j                  }d}t          j                    }| j        D ]}| j                                         r d S | j         j                            | d|            |dz  }ddd|gdd|gg}t          j	        
                    |dd	g
          }|s1| j                             d| dd           | xj        dz  c_        | j        |         D ]Y}	 ddd|gdd|gg}t          j	        
                    |g d
          }	||	_        |	j        j                            d          s|	j        j                            d          r|	j        |	_        |	                    d           |	j                            |	j                                                   |	j                            d           |	j        j        j        r|	j                            d           # t2          $ r;}
| j                             d| dd           | xj        dz  c_        Y d }
~
Sd }
~
ww xY w|j        j                            d          r_t          j	                            dg dg dgdd|ggdg
          }t7          |          |_        |j        r|                    d           t          j                    |z
  }| j         j                            d|dd           d S ) Nu5   Привяжем подзадачи к задачамrw       из r
  r   r  r   r   r  rE  uE   Не удалось найти родительскую задачу zERR-0073r   r%  )r   r  r   task.subproject	task.epicTr  r$  u4   Не удалось привязать задачу zERR-0074)rs  rt  )logic_type.coderC  ztask.subproject%)ru  rC  z
task.epic%r  r#  r  u<   Обработка подзадач выполнена за .3f    сек.)r   r~   r  r   subtaskstime	monotonic	is_cancelr   r   r   r+  r&  r   r   r   r   r  r  r/  r,  save_preload_fieldsr4  rH   r  r5  r  r  r  )r;   totalr   t1parent_ext_idr  r   child_ext_id_filter_childr  rC  rx  t2s                r*   _process_subtaskszCmfPluginCsv._process_subtasksZ  s   ##$[\\\DM""^!] 9	7 9	7M((** O"''1(;(;E(;(;<<<FAhm<vt]>[\G .,, ) -  K  ))k\ikk& *   
   A%   $m < * **%)HdL+IFTXZfKg$hM!>--]KwKwKw-xxD'2D$+667HII <#3>>{KK<+/+;(II$I///&2243E3Y3Y3[3[\\\&::t:LLL)/: B*//D/AAA  * * *O--]|]]"!* .   
 $$)$$$$$$$* %*556VWW 7!>.. !KKKEEE
 '[9 !6 / 
 
 37x../) 7$$$666^"##$sce$s$s$s$sttttts   
DH
I#0IIc                    | j         j                            d           t          | j                  }d}t          j                    }| j        D ]R}	 | j                                         r d S | j         j                            | d|            |dz  }t          j	        
                    |d                   }|s)t          j	        
                    dd|d         g          }|s8| j                             d	|d          d
dd           | xj        dz  c_        t          j        
                    dd|d         g          }|s8| j                             d|d          dd           | xj        dz  c_        7t          j        
                    dd|d         g          }|s8| j                             d|d          dd           | xj        dz  c_        t          j        
                    |||          }|s\t                              |||| j         d          }d|v r|d         |_        d|v r|d         |_        |                    d           #  | j                             d| dd           | xj        dz  c_        Y QxY wt          j                    |z
  }	| j         j                            d|	d d!           d S )"Nu&   Создадим связи задачrw   rr  typer  ro   r#  r  u2   Не удалось найти тип связи "rQ   zERR-0075CmfRelationTyper%  r   r   u=   Не удалось найти входящую задачу zERR-0076r   out_linku?   Не удалось найти исходящую задачу zERR-0077)relation_typer   r  T)r  r   r  r   r  constrain_lagconstrain_lag_pctr  u.   Не удалось создать связь zERR-0078r   u8   Обработка связей выполнена за rv  rw  )r   r~   r  r   	relationsry  rz  r{  r   r  r   r+  r&  r   r   r  r  r  )
r;   r}  r   r~  relation_datar  r   r  relation_optionr  s
             r*   _process_relationszCmfPluginCsv._process_relations  s   ##$LMMMDN##^!^ @	& @	&M?&?,,.. FF&++q,?,?,?,?@@@Q & 6 : :f@U : V V$ l$*$:$>$>vsTabhTiFj$>$k$kM$ O--gm\bNcggg"!2 .   
 $$)$$ .,,XsMR[D\4],^^ O--rXefoXprr"!* .   
 $$)$$!>--h]S]E^5_-`` O--uZghrZsuu"!* .   
 $$)$$"(":">">"/#% #? # #
 ' ;&,&>&>&3 '!)#'?(, '? ' 'O '-778Eo8V5*m;;<IJ]<^9#((T(:::&))T]TT0 *   
   A%    ^"##$o_a$o$o$o$oppppps(   I,0B3I,$A!I,A!I,*B I,,2J!c                    |                      || j        j        d         t          j                  }|r)| j        j                            d|            d|d<   | j        |d<   d|d<   |                    d          r2t          j                            d	d
|d         d         g          |d<   |                    d          r/t          j	                            |d         d                   |d<   t          j        di |}|j
        r8|j        r1|j
        j        t          j        |j        j                  z   |_        |                    d           d S d S )Nrx   u   Грузим журнал closedr   r   Tr  
cmf_authorrm  r$  r   r  ru   r  )minutesr  rG   )r  r   rj   r   r   r~   r  r   r   r   
start_date
time_spentrH   r   	timedeltaend_dater  )r;   r   timetracker_historyhistorys       r*   _process_timetrackerz!CmfPluginCsv._process_timetracker  s   "..s/3/LM^/_/5/KM M  	+O"''(ZEX(Z(Z[[[,4)04-59 12"&&|44 4:4D4H4H#W.A,.OPX.YZ 5I 5 5#L1 #&&x00 060B0B.x8B 1C 1 1#H- 2II5HIIG! sg&8 s#*#5#;h>PY`YkYq>r>r>r#r LLTL*****'	+ 	+r,   
      )	max_triesmax_timec                    | j         j        d         }|                     ||t          j                  }| j         j        j                            d          rCt          j                            | j         j        j                            d                    }n|                     |          }|r|r|                    d          st          d          ||d<   |                    d          r]| 
                    |d          |d<   |d         j                            d	          r$t          j                            |d
          |d<   |                    d          r|                     |           |                    d
          r|d
         |d<   |                    d          r|                    d
          s|d= dD ]u}|                    |          }|r\|                    d          r*t          j                            dd|d         g          }nt          j        j        d;i |}|r|||<   vdD ]A}|                    |          }|r(t!          |                                          dv rd||<   B| j                             d|            |                    dd           }dd| j         j        gg ddd|d         gg}	| j         j        j                            dd           }
| j         j        j                            dd          }|rf|                    d          rQ|                    d                              | j         j        j                  s| j         j         d|d          |d<   |                    d          rd}
dd|d         g}	n.|                    d          rd}
d dd|d         gdd|d         gg}	|
st-          j        |                    d          |                    dd!          z   |                    dd!          z   d"z                                                                             }| j        j                            |d#$          }|5  |                     | j         t          j        ||	|
%          \  }}d d d            n# 1 swxY w Y   n,|                     | j         t          j        ||	|
%          \  }}|rt                              d&| j        j          d'| j        j!         d(| j         j         d)d*|| j         d+,          }|"                    d+-           |j#        $                                 | j                             d.| d/|                    d           d0|                    d           d1|                    d           d2	           n`| j                             d3| d/|                    d           d0|                    d           d1|                    d           d2	           | %                    ||           | j         j        j                            d4          rCt          j&                            | j         j        j                            d4                    }n| '                    ||          }|r3|j(        )                                 |j(        *                    |           |r"| +                    |d         |          |_,        n|                     || j         j        d         t          j-                  }|rZ|                    d          p)|                    d          p|                    d          }| +                    ||          |_,        |j.        r|"                    d+-           |j/        j        j.        r|j/        "                    d+-           |j#        $                                 |                     ||t          j                  }|rX|                    d5          rC|                    d6          r.||d<   |                     | j         t          j        |          \  }}n/|r-| j         0                    d7d8d9           | xj1        d:z  c_1        | 2                    |           | j         j#        $                                 d S )<Nrx   target_project_idri   ro   u:   Не указано наименование задачи!ru   r   r   rt  epicr  r  r   r   )r  r   r   ro  waiting_forr   rm  r$  r  )r   )r   Fu_   Пытаемся создать или обновить задачу по параметрам r   cmf_import.pluginr  r  r  Tmerge_identic_namesext_id_per_importr/   r   r
  r   .lockx   timeout
filter_objdont_updateuB   Задача импортирована из файла: <a href="" target="_blank"></a> ()   Tr   	log_levelru   r   r  r  u'   Создали новую задачу  ext_id= code= name='rT  u   Нашли задачу target_list_idr   r   u   Невозможно импортировать задачу без проекта, создайте проект и укажите ID в файлеERR-0079r%  rw   rG   )3r   rj   r  r   r   rH   r   r!   r  r5  r  r   r   r  r  r   rW   r  logpoppluginri   hashlibsha256encode	hexdigestredis_dbredislockr  r    import_filers   ro   r  r  r  rD  r"   r  listsr  r   r2  r   r#   r  r/  r+  r&  r  )r;   r   rx   r  r  r  r   r  task_componentsr  r  r  lock_keyr  r6  task_is_newcommentr  r  component_identifiercomment_objcomment_is_news                         r*   _process_taskzCmfPluginCsv._process_task  s	   
 /78IJ_fnEE?(.223FGG 	1 +//4?3P3V3Z3Z[n3o3o/ppKK ++C00K ]	"4 ]	"88F## ^ \]]](DNxx%% i%)%=%=dI%N%N\"%*55kBB i*0*:*>*>;ag*>*h*hD'xx!! *##D)))xx 3&*6l]#xx&& (txx/?/? ('c + +hhsmm +wwx(( =!'!1!5!5gwPST\P]=^!5!_!_!'!1!5!<!<!<!< +$*S	( & &hhsmm &3s88>>++|;; %DIO  !I  CG  !I  !I  J  J  J #hh|T::O %dDO,BC///tF|,G #o;AEEF[]bcccK $ = C G GH[]b c c  JTXXh%7%7 J@R@R@]@]^b^m^p^v@w@w J$(O$6!I!Ih!I!IXxx 	#!4f6(## #T4>2tT(^4   #>XXf%%(<(<<txxRT?U?UUX__ggii )++  }*//#/FF  ,0,I,I#*$/ -J - -)Hk               )-(E(EON& + )F ) )%+   ++5%)%5%95 5MQM]Mb5 5!_15 5 5  ##$( , 
 
 ...
!!#####Ih I IPTPXPXYaPbPb I I HHV,,I I59XXf5E5EI I I   
 ##Ix I I(ASAS I I HHV,,I I59XXf5E5EI I I  
 X...,2667GHH @#^//4?3P3V3Z3Z[k3l3l/mm

!--c;??
 2##%%%%%j111  b&*&:&:?8;TVa&b&b##!%!1!1O12CD'" "
 " b&**844 6)--f556)--f55 )
 +/*>*>?SU`*a*aH'" 0$///%+6 >&+++===K   &&sOV=NOOG U7;;'788 UW[[=P=P U$,!.2.K.KDOLRL]LS/U /U+^  	"O%% g" &   
 !!!#&&&!!#####s   9-R22R69R6c                 |   | j         j        d         }	 |                     ||t          j                  }|sd S |                    d          st          d          |                     ||t          j                  }|s|                    d          }|                     |          }|                     ||t          j	                  }|s|                    d          }| 
                    ||          }||d<   |r|j        n||d<   |                    d          r|                     |d          |d<   dd	i|d
<   |                    d          r|                     |           |                    d          r|                     |          |d<   |                     d|                    d                    |d<   |                     d|                    d                    |d<   |                     d|                    d                    |d<   |                     d|                    d                    |d<   |                     |                    d                    |d<   |                     |                    d                    |d<   |                    d          }|r|d= | j                             d|            dd| j         j        gg ddd|d         gg}	| j         j        j                            dd           }
|                    d          rd}
dd|d         g}	nt|                    d          rd}
dd|d         g}	nQ|                    d          rd}
dd|d         g}	n.|                    d          rd}
ddd|d         gdd|d         gg}	|
st+          j        t/          |                    d                    t/          |                    dd                    z   t/          |                    dd                    z   t/          |                    dd                    z   t/          |                    d d                    z   t/          |                    d!d                    z   t/          |                    dd                    z   t/          |                    dd                    z   d"z                                                                             }| j        j                            |d#$          }|5  |                     | j         t          j        ||	|
%          \  }}d d d            n# 1 swxY w Y   n,|                     | j         t          j        ||	|
%          \  }}|ra| j                             d&| d'|                    d           d(|                    d           d)|                    d           d*	           n`| j                             d+| d'|                    d           d(|                    d           d)|                    d           d*	           |j        }|                     ||t          j                  }|s|                    d,          }|                     ||          }|r3|j         !                                 |j         "                    |           | #                    |          }|r |j$        !                                 ||_$        |j%        r|&                    d-.           |j'        (                                 nG# t          $ r:}| xj)        d/z  c_)        | j         *                    d0| d1d2           Y d }~nd }~ww xY w| j         j'        (                                 d S )3Nrx   ro   u2   Не указано название актива.ru   rG  r   r%   r   zasset.system:defaultr  r   r   ownership_typedevice_typeenabled_statusoperational_statusr}  ro  rw  u[   Попытка создать или обновить актив по параметрам r  r  r  r  Fr   serial_numberimeir
  r   inv_nophone_numbermarkcoder  r  r  r  u#   Создан новый актив r  r  r  rT  u   Найден актив asset_typesTr  rw   u*   Ошибка импорта актива. zERR-0084r%  )+r   rj   r  r   r%   r   r5  r=  rA  rF  rI  ru   r  r  r  rk  r  rr  r  r  rH   r  r  rW   r  r  r  r  r  r  rL  rO  r  r  r   rz  rw  r  r  r  r  r&  r+  )r;   r   rx   assetr?  r@  rG  rH  support_group_tmpr  r  r  r  	asset_objasset_is_newrM  rN  ru  r  s                      r*   _process_assetzCmfPluginCsv._process_asset  s   /78IJn	$$S/6?KKE 99V$$ V TUUU  ++C&BWXXL 3$yy22#55lCC ((ov?QRRI 3!IIk22	 //	;KLLM!.E+6CYm22IYE(O yy&& R&*&>&>uj&Q&Ql# "*+A BE*yy"" +##E*** yy$$ B$($:$:5$A$Aj! '+&C&C 		*++' 'E"# $(#@#@		-(($ $E-  '+&C&C 		*++' 'E"# +/*G*G$		.//+ +E&' !% 8 8:9N9N O OE* $(#>#>uyy?W?W#X#XE-  %		/ : :  +/*O  !F  D  !F  !F  G  G  G
 %dDO,BC///uV}-G #o;AEEF[]bcccKyy   #!4v7?++ #*D%2HI6"" 	#!4v78$$ #T5?3tU8_5  % #>EIIf--..eii<<==>eii33445 eii"55667 eii;;<<	=
 eii
B77889 eii33445 eii"55667 "" VXX  )++  }*//#/FF  .2.K.K#*$/ /L / /+I|               +/*G*GOO& + +H + +'	<  	##K) K KUYYW_M`M` K K!IIf--K K6;ii6G6GK K K   
 ##Ky K K%))HBUBU K K!IIf--K K6;ii6G6GK K K    -3))#@STTJ 6"YY}55
!11*>NOON =%**,,,%,,^<<< "&!>!>?P!Q!Q! =',,...*<	'# 14000L!!!! 	 	 	!O%%BSBB# &        	 	!!#####sB   #] S2] +-U$] $U((] +U(,G*] 
^!0^^c                    d }|r|                     d          rq|d                                         }|                     dddd| dgdd|gdd|gg	          }|s.| j                            d
|j         d| dd|j                   |S )Nr   r
  rC  rD  r   r#  ro   r$  r  u   Не найден z "rQ   r|  r%  )r   r!  r   r+  r   )r;   r   obj_datarU  r   s        r*   _get_objectzCmfPluginCsv._get_objectk  s     	X.. 	h'--//F))v}6}}}5S&)Wf-	   C  ))F)9FFVFFF"- *    
r,   c                 "   | j         j        d         }|d         }| j         j        j                            d          rCt          j                            | j         j        j                            d                    }n|                     |          }|s-| j                             ddd           | xj        d	z  c_        | 	                    ||t          j
                  }|r&||d
<   |                     ||d	d          |           d S d S )Nrx   r   r  r  u   Невозможно импортировать тесткейс без проекта: создайте проект или укажите ID в файлеr  r   r%  rw   ru   )r   rj   rH   r   r   r!   r  r+  r&  r  r   _process_testcase_rows)r;   r   rx   main_rowr  testcases         r*   _process_testcasezCmfPluginCsv._process_testcase  s)   /78IJ7?(.223FGG 	6 +//4?3P3V3Z3Z[n3o3o/ppKK ++H55K 	"O%% o& &   
 !##Hov?QRR 	M!,HX''$qrr(OLLLLL	M 	Mr,   c                 V   fd                     d          st          d                               d          rt          j                             d         d          }d         d                             d	          }|                                 t          j        d
t          |d                   z   dz   	                                          
                                }| j        j                            |d          }|5   ||          d<   d d d            n# 1 swxY w Y   t          j                             d          d<   t          j                             d          d<                        d          rqdgdgdgd}d         d                                         }	d }
|D ]>}|	||         v r2|}t          j                             ddd         gdd|gg          }
 n?|
d<                        d          rAdgdgdgd gd!gd"}d                                         }d }|D ]}|||         v r|} n|d<                        d#          r7|                     t          j        d#                     d#                    d#<   d$D ]}                     |          }|r|                     d          rP|d                                         }t          j                             d%dd&d'| d'gd(d)|gd*d)|gdd)|gg          }nt          j        j         dLi |}|r||<   | j                            d+            d,d| j        j        gg d-ddd         gg}                     d          rddd         g}n,                     d          rd%ddd         gddd         gg}|                     | j        t          j        |d./          \  }}|rt                              d0| j        j         d1| j        j         d2| j        j         d3d4|| j        d56          }|                    d57           |j                                          | j                            d8| d9                     d           d:                     d           d;                     d           d<	           n`| j                            d=| d9                     d           d:                     d           d;                     d           d<	           d>d?d@idAd>d?dBidAd>d?dCidAdDdEidDdFidDdGidH}|D ]}d|i}tC          |dI         dJ                   D ]e\  }}||         r
|dK         |v s||dK                  }||         ||dD         <   |dJ         "                                D ]}|dJ         |         ||<   f| #                    |           |j$        r|                    d57           |j                                          d S )MNc                 8   |                                 }t          j                            d         | |          }|sLt                              d         | d|          }|                                 |                                  |r ||          S |S )Nru   )ru   r  ro   abstractru   r  r  ro   )r  r   CmfTestcaseFolderr   r  )r  
subfoldersfolder_namer   
get_folderr  s       r*   r  z7CmfPluginCsv._process_testcase_rows.<locals>.get_folder  s    $..**K-11)'  2  F
  #11#H- +'$	 2     """ 6!z&*555Mr,   ro   9   Не указано название тест-кейса.r   ru   u   Тест-кейсыru   ro   r   /r  r  r  r  r  ztestcase.base:defaultr  r   r  r   u%   Требуется доработкаu
   Готовu   Не готов)draftapprovedfailr#  r   r  r  r   u   Самый высокийu   Высокийu   Среднийu   Низкийu   Самый низкий)   r  rw   r   r  r  r  r   r   ro  r
  rC  rD  rm  r$  rn  ua   Попытка создать или обновить тесткейс по параметрам r  r  Fr  uD   Тесткейс импортирован из файла: <a href="r  r  r  r  Tr  r  *   Создан новый тест-кейс r  r  r  rT     Найден тест-кейс r   step_sectionpre)r   r   mainpostr   expected_result	test_datar  )u   Предусловияu   Шагиu   Постусловияu%   Ожидаемый результатu   Тестовые данныеu   Комментарииr   r   ry   rG   )%r   r5  r   CmfRegistryr   reverser  r  rW   r  r  r  r  r  r  r  r!  r  _get_field_choisesr   r   r   r  r  r  r    r  rs   ro   r   r  r  r  r4   keys_process_stepr  ) r;   r  r   rx   registryr  r  r  statusesr  r   variantr  significancessignificance_ext_idr   r  r   r   r  r  rU  r  r  testcase_step_fieldsr   testcase_stepr   r   r  other_fieldr  s     `                             @r*   r  z#CmfPluginCsv._process_testcase_rows  sb   	 	 	 	 	 	( ||F## 	YWXXX<<!! 	F)--Xh5GNc-ddH!(+H5;;C@@J    ~$s:b>':'::WD  ikk  =&++Hc+BBD F F%/Z*%E%E"F F F F F F F F F F F F F F F "(!4!8!8>U!8!V!V%155;R5SS<<!! 	(#J"M%1N!2 36 6H %X.x8>>@@MF#   HW$555")K#-11#S(:*>?{3:71 8 8F E 6 "(HX<<'' 	4/0$%$%"#./ M #+>":"@"@"B"BL(  &-*@@@#*LE A (4H^$ << 	R#66v7I4:HLL<P<P R  RHV Q 	+ 	+C,,s##C +778$$ 9 ]0022F#-11 %v}6}}}=$gv6$gv6#Wf5  2  FF $-188C88F +$*HSM  K  AI  K  K  	L  	L  	L
 !$(>?+++T8F+,
 << 	tXf%56GG\\(## 	x124(!34G 33O 4 
 
V  	''1!%!1!51 1IMIYI^1 1-1 1 1 ? $ ( 
 
G LLTL***JOMS M M(,,W_J`J` M M V,,M M5=\\&5I5IM M M   
 OM# M Mx||H?U?U M M V,,M M5=\\&5I5IM M M   6<X]G^&_&_'-.&9QRR5;X^G_&`&`6BDU5V.:K-H'3Y&? 
  
  		. 		.C&-M%oa&8&BCC W W5A 5>5I#I#I!5eGn!E>A!fn\:;#1(#;#@#@#B#B W WK1?1I+1VM+..W}----> 	'HHH&&&s   D..D25D2c           
         dD ]}|                     |          }|s|d                              |          }|r|                     d          rP|d                                         }t          j                             dddd| dgdd|gd	d|gd
d|gg          }nt          j        j         di |}|r|||<   d }|                     d          rdd|d         g}n,|                     d          rddd|d         gdd|d         gg}|                     | j        t          j        ||d          \  }}|r5| j                            d| d|                     d           d           n4| j                            d| d|                     d           d           |                    d           |j	        
                                 d S )N)r  r   r   ru   r   r
  rC  rD  rm  r$  rn  ro   r  r   r  Fr  u   Создан новый шаг r  rT  u   Найден шаг Tr  rG   )r   r!  r   r   r  r   CmfTestcaseStepr  r  r  r  )	r;   r  r  r   r   r  r  rU  r  s	            r*   r  zCmfPluginCsv._process_stepG  sA   A 	0 	0C##C((C 7#H-11#66 0778$$ 9 ]0022F#-11 %v}6}}}=$gv6$gv6#Wf5  2  FF $-188C88F 0)/M#&V$$ 	t]6%:;GGx(( 	}X674x!89G 33O" 4 
 
V  	`O i# i i]M^M^_eMfMf i i ijjjjO ^s ^ ^-BSBSTZB[B[ ^ ^ ^___T"""r,   c                    | j         j        d         }|d         }| j         j        j                            d          rCt          j                            | j         j        j                            d                    }n|                     |          }|s-| j                             ddd           | xj        d	z  c_        | 	                    ||t          j
                  }|r\t          j                            |d
          }t          j                            |d          }|st          j        d|j        z   dz                                                                             }| j        j                            |d          }	|	5  t                              ||dd          }|                                 |                                 d d d            n# 1 swxY w Y   t          j                            ||          }
|
st          j        d|j        z   dz                                                                             }| j        j                            |d          }	|	5  t                              ||d          }
|
                    d           d d d            n# 1 swxY w Y   | 	                    ||t          j                  }|                     t          j        |          |d<   ||d<   |                     |
||d	d                     |                    d           d S d S )Nrx   r   r  r  u   Невозможно импортировать тест-кейс тест-плана без проекта: создайте проект или укажите ID в файлеr  r   r%  rw   u   Тест-планыr  u0   Импортированный тест-планtestplanr  r  r  r  r  )ru   tree_parent_foldertestplan_root_folderu2   Импортированные тест-кейсыru   r  ro   Tr  r  ru   )r   rj   rH   r   r   r!   r  r+  r&  r  r'   r  r   r  r  ri   r  r  r  r  r  r  CmfTestplanTestcaseFolderr   r  _process_testplan_testcase_rows)r;   r   rx   r  r  testplan_testcaser  r  r  r  r  r  s               r*   _process_testplan_testcasez'CmfPluginCsv._process_testplan_testcaseu  s   /78IJ7?(.223FGG 	6 +//4?3P3V3Z3Z[n3o3o/ppKK ++H55K 	"O%% D& &   
 ! ,,XHbcc $	,)--[G\-]]H)--")[ .  H  $">(+-7??AA )++  }*//#/FF $ $%11*$,!+O	  2    H MMOOOMMOOO$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $*#C#G#GH $H $> $> ' 
@">+hk9GCKKMM )++  }*//#/FF @ @+1+K+K'HQ ,L , ,( )--$-???@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ''/6CUVVH,0,<,<V=OQY,Z,Zj)*2h'001EGXZ^_`_a_aZbcccMMdM+++++I$	, $	,s%   AG''G+.G+;4J;;J?J?c                    fd                     d          st          d                               d          rЉd         d                             d          }|                                 t	          j        dt          |d                   z   d	z                                                                             }| j	        j
                            |d
          }|5   ||          d<   d d d            n# 1 swxY w Y   dD ]}d                              |          }|r|                     d          rP|d                                         }	t          j                             dddd|	 dgdd|	gdd|	gdd|	gg          }
nt          j        j         d$i |}
|
r|
|<   | j                            d            dd| j        j        gg dddd         gg}                     d          rddd         g}n,                     d          rdddd         gddd         gg}|                     | j        t          j        |d          \  }}|ra| j                            d| d                     d           d                     d           d                     d           d 	           n`| j                            d!| d                     d           d                     d           d                     d           d 	           |j        r|                    d"#           |j                                         d S )%Nc                 8   |                                 }t          j                            d         | |          }|sLt                              d         | d|          }|                                 |                                  |r ||          S |S )Nru   r  r  )ru   r  r  ro   )r  r   r  r   r  )r  r  r  r   r  r  s       r*   r  z@CmfPluginCsv._process_testplan_testcase_rows.<locals>.get_folder  s    $..**K599(2#.  :  F
  #99,X6'2'$	 :     """ 6!z&*555Mr,   ro   r  r   r   r  r  r  r  r  r  r  r  r
  rC  rD  rm  r$  rn  r  uv   Попытка создать или обновить тест-кейс тест-плана по параметрам r  r  r  r   Fr  r  r  r  r  rT  r  Tr  rG   )r   r5  r   r  r  r  rW   r  r  r  r  r  r!  r   r   r   r  r  r  r'   r  r  r  r  )r;   r  r  r   r  r  r  r  r   r   r  r  rU  r  r  s     `           @r*   r  z,CmfPluginCsv._process_testplan_testcase_rows  s   	 	 	 	 	 	( !$$V,, 	YWXXX  !;<< 	6*+EFxPVVWZ[[J    ~,s:b>/B/BBWL  ikk  =&++Hc+BBD 6 6@J
(*A6 A6!"<=6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 Q 	4 	4C#J/33C88C 4778$$ 9 ]0022F#-11 %v}6}}}=$gv6$gv6#Wf5  2  FF $-188C88F 4-3%c*  i  Vg  i  i  	j  	j  	j
 !$(>?+++T,V45
   (( 	t%6v%>?GG""8,, 	0:;4!28!<=G 33O& 4 
 
V  		O_S _ _J[J_J_`hJiJi _ _)--f55_ _>O>S>STZ>[>[_ _ _   
 O_# _ _?P?T?TU]?^?^ _ _)--f55_ _>O>S>STZ>[>[_ _ _  
 > 	'HHH&&&s   +DDDc           
         |j                             |          }|j        }|s|S |j        }d |                                D             }|                                                                }|                    |          }|sR||vrNd |                                D             }	t          d| d|j	         dd
                    |	                     |p|p|S )Nc                 >    i | ]\  }}|                                 |S rG   rW  rX  s      r*   r[  z3CmfPluginCsv._get_field_choises.<locals>.<dictcomp>	  r\  r,   c                     g | ]}d | d 	S r^  rG   r_  s     r*   rK   z3CmfPluginCsv._get_field_choises.<locals>.<listcomp>!	  r`  r,   ra  rb  rc  rd  )r   r   re  r   r   r!  r  rf  r5  r   rg  )
r;   r   r   rH   r   rh  ri  r   rj  rf  s
             r*   r  zCmfPluginCsv._get_field_choises	  s     ,, 	!  
 
%++--
 
 

 ##%%kk%(( 	uM99??(<(<(>(>???FV V V%- V VBF))FBSBSV V  
 4e4}4r,   c           
      \   d}| j         j        j                            d          }t	          d          5  t
          j        | _        	 | j                                         rn|                                \  }}||	                    ||f           n	 | j         j
                            d| d|            |dk    r|                     |           |d	k    r|                     |           n*|                     |           |                     |           n`# t           $ rS}| j         j                                         |d
z  }| j                             d| d| d| dd           Y d }~nd }~ww xY w6d d d            n# 1 swxY w Y   |	                    |           d S )Nr   r}   F)init_views_and_dsTu   Импорт строки rr  r   r   rw   u<   Не удалось импортировать строку z: r  zERR-0041r   r%  )r   rj   rH   r   r   APPREDIS_DBr  r{  putr~   r  r  r  r  r  r5  r  rollbackr+  )	r;   	row_queuerow_queue_errors
total_rowserrorswhatrow_numrow_datar  s	            r*   _process_row_workerz CmfPluginCsv._process_row_worker)	  s7   ,266x@@5111 	 	LDM?,,.. $-MMOO!#MM7H"5666O*//0hW0h0h\f0h0hiii},,..x888},,77AAAA**8444++H555    O&//111aKFO--sW^ssbjssnqss"!* .        %	 	 	 	 	 	 	 	 	 	 	 	 	 	 	< 	V$$$$$s>   AFBDF
E;(A	E61F6E;;FFFc                 6   ddl m} d}t                                          5  t                                          5  t
          j                            |dg          }|| _        t
          j	                            |ddg dgdgd	g
          | _
        t          d |                     | j
                  D                       }t          j        d          }t          j                    }	g }
t          | j                  D ]s}t#          j        | j        d|dz    ||	|d          }|
                    |           |                                 | j        j                            d|            t| j        j        d         }| j        j        j                            d          }g }d}t5          |                     | j
                            D ]\  }}| j                                        r n|j        d         r|dk    r5||k     r<||k    r n|dv rd }|dk    r"|                     ||t
          j                  }n'|dk    r!|                     ||t
          j                  }|r6|r|                    |dz   |f           g }|                    |           |}|                    |           |                    |dz   |f           |r |dv r|                    |dz   |f           g }|                    d           |
D ]}|                                  |	!                                s+||	                                z  }|	!                                +d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   |S )Nr   r   r	   )ri   r   rp   rq   rr   rh   rs   rt   c                     g | ]}d S rw   rG   rI   rA   s     r*   rK   z2CmfPluginCsv.process_rows_fork.<locals>.<listcomp>\	  s    JJJAaJJJr,   i  )maxsizez_process_row_worker rw   )r   r!  r"  )targetro   kwargsu.   Параллельный обработчик rx   r}   rv   r   r   r   r   )NN)"cmf.appr   r   disable_acldisable_notifyr   r   r   r   r   r  r   r3   queueQueuerangethreading_max_forks	threadingThreadr'  r   startr~   r  rj   rH   r4   r{  r  r   r'   r  rg  empty)r;   cmf_import_idstart_index	end_indexr   r#  r   r"  r   r!  threadsr   threadrx   r$  r   i_headr   rU  s                      r*   process_rows_forkzCmfPluginCsv.process_rows_forkM	  s   ''''''  "" H	1 H	1G$:$:$<$< H	1 H	1)--u-MMJ(DO%377!#T+D+D+DE,-w	  8    D JJ8H)I)IJJJKKJD111I${}}G4344 g g")37A77%.,<&0    v&&&&++,e]c,e,effff"o;<MNO?06::8DDDDF#DNN43C$D$DEE 0 03?,,.. E+K8 Q!VV{??y==E999C},,"..sOVEWXX.."..sOVE_`` ) &%MM6A:t*<===#%DC(((!"C((((MM1q5#,////  >>>vz40111MM,'''!  &,,.. 1*..000 ',,.. 1OH	1 H	1 H	1 H	1 H	1 H	1 H	1 H	1 H	1 H	1 H	1 H	1 H	1 H	1 H	1 H	1 H	1 H	1 H	1 H	1 H	1 H	1 H	1 H	1 H	1 H	1 H	1 H	1 H	1 H	1T s5   NL/M7+N7M;	;N>M;	?NNNc                 P   dd l }|                    dddd| j        j        j         d| j        j         d| d| d		gd
d
t          dd          t          dd                    }| j                            d|j         d| d|            | j                                         |S )Nr   z/usr/bin/python3z	manage.pyshellz%plugin = models.CmfPluginCsv.get(id="z'");retcode = plugin.process_rows_fork("z", rd  z);Tz"/var/log/eva-import-subprocess.logza+z&/var/log/eva-import-subprocess.err.log)	close_fdsstart_new_sessionstdoutstderru,   Запустили подпроцесс PID u)    для обработки строк с u    по )	
subprocessPopenr   r  ri   r`   r  pid
log_detail)r;   r<  r=  rH  procs        r*   _execute_rowszCmfPluginCsv._execute_rows	  s    "Kk8N8Q k k7;7Ik kNYk k]fk k k
 "<dCC@$GG   

 

 	  ]48  ]  ]  J  ]  ]  R[  ]  ]  	^  	^  	^""$$$r,   c                    | j         j        j                            d          }|dv rd}n| j        }t          d |                     | j                  D                       }||z  }||z  }| j         j        	                    d           t          j                    }g }t          |          D ]K}||z  }	|	|z   }
|dz   |k     r|
dz  }
n|
|z  }
|                     |	|
          }|                    |           L|D ]2}|                                 |j        r| xj        |j        z  c_        3t          j                    |z
  }| j         j        	                    d|dd           d S )	Nr}   r/  rw   c                     g | ]}d S r*  rG   r+  s     r*   rK   z.CmfPluginCsv._process_rows.<locals>.<listcomp>	  s    FFF!FFFr,   u5   Запуск обработки строк файлаuA   Обработка строк файла выполнена за rv  rw  )r   rj   rH   r   max_processesr   r3   r  r~   r  ry  rz  r5  rM  r   communicate
returncoder&  )r;   r$  rP  r"  
chunk_size	remainderr~  	processesr   r<  r=  rL  r  s                r*   _process_rowszCmfPluginCsv._process_rows	  s   ,266x@@111 MM .MFFT^^D4D%E%EFFFGG
=0
.	##$\]]]^	}%% 
	# 
	#Aj.K#j0I1u}$$Q		Y&	%%k9==DT"""" 	4 	4D 4  DO3  ^"##$xhj$x$x$x$xyyyyyr,   c                 D   |                                 D ]\  }}i }|                    |           d }|r3|||d         <   | j        j                            d|            t
                              | j        d          }|                                 D ]\  }	}
t          ||	|
           |                                 t
          j        	                    t          |j                  ddg          }|r|n|}|j        rd|j        r]||_        |                    d           |j                                         | j        j                            d	|j                    |	                    d
          r|                     |d
         ||p|           d S )Nr  u"   Обработка локации T)r   r  r	   ru   rn   r  u   Создана локация children)r   r   r   r~   r  r   r&   r.  
_calc_namer   rW   ro   r  r  ru   r  r  r  _process_locations)r;   	locationsparent_location_dataparent_location_objro   r  current_locationr}  new_locationr   rH   existing_locations               r*   rZ  zCmfPluginCsv._process_locations	  s   #//++ 	m 	mJD$!##$8999H b15 f.&++,cQa,c,cddd%11#$(  2     *:)?)?)A)A = =%JL*e<<<<'')))$*$6$:$:\.//? %; % %!
 1BS,,|& b8+C b&9HOMMdM333K&&(((O*//0`QYQ^0`0`aaaxx
## m''Z(8:JHLkXklll=	m 	mr,   c                     t                               |d          }|D ]N}||d<   ||d<   |                     | j        t           j        |          \  }}|j                                         Od S )Nr  ru   r  ru   r  )r   r  r  r   rQ  r  r  )r;   asset_type_catsr@  asset_types_folderrR  rS  rA   s          r*   _process_asset_type_catsz%CmfPluginCsv._process_asset_type_cats	  s    #--5EP]-^^- 	+ 	+N'7N8$,>N=)$($A$A&% %!
 !((****	+ 	+r,   c                     |D ]h}||d<   |                      |d         |          |d<   |                     | j        t          j        |          \  }}|j                                         id S )Nru   rR  )rT  r  r   r   rL  r  r  )r;   r  r@  rM  rN  rA   s         r*   _process_asset_typesz!CmfPluginCsv._process_asset_types
  s    % 	' 	'J#3Jx +/+C+CJO_D`br+s+sJ'( $ = =#! !NA
 $$&&&&	' 	'r,   c                 l   t           j                            |d          }|                                D ]}|d         }||d<   ||d<   |                    d          r|                     |d          |d<   n#t           j                            d	          |d<   |                     | j        t           j        |          \  }}|j	        
                                 |rS|d
         D ]4}|                     ||          }	|	r|j                            |	           5|                    d           d S )Nassetsrb  r  ru   r  rS  rF  rP  r  rc  Tr  )r   r  r   rf  r  r  r  r   rF  r  r  rT  asset_types_catr   r  )
r;   
asset_catsr@  assets_folderrG  asset_cat_datarH  rA   rR  rS  s
             r*   _process_asset_catsz CmfPluginCsv._process_asset_cats
  sh   (,,4Dx,XX#**,, 	5 	5I&v.N'7N8$,9N=)!!"677 l7;7O7OP^`m7n7n3447=7J7N7NTj7N7k7k34#<<"   M1
 ##%%% 5&/0A&B Q QN)-)A)A.Rb)c)c&) Q%5<<=OPPP""t"444+	5 	5r,   c                    |                                 D ]}|d         }|                    d          st          d          |                    d          s|d         |d<   dd|d         g}|                     | j        t
          j        ||          \  }}|j                                         |rT| 	                    |d         |           | 
                    |d         |           |                     |d	         |           d S )
Nr  r:  uI   У схемы не указан префикс кодов активов.r   r#  )r  rc  r  rk  )rf  r   r5  r  r   r   r=  r  r  re  rg  rn  )r;   asset_schemesr?  asset_scheme_datar  r@  rA   s          r*   _process_asset_schemesz#CmfPluginCsv._process_asset_schemes(
  s@   )0022 	W 	WL ,V 4$(()<== m klll$((22 U.?@S.T!(+*C1BCV1WXG"&"?"?%!"	 #@ # #a &&((( W--l;L.MO_```)),}*EGWXXX((l)CEUVVV+	W 	Wr,   c                 8   |                     d          }|                     d          }|                     d          }|                     d          }|                     d          }|                     d          }|                     d          }|                     d          }	| j                            |d|i d	          }
|
d
                             |d|i d	          }|d
                             |d|i d	          }|d
                             |d|i d	          }|d
                             |d|i d	          }|d
                             |d|i d	          }|d
                             |d|i d	          }|	rd|	d|d
         |	<   d S d S )Ncountryareacitystreethouse_numberfloorflatroom)r  ro   rX  rX  )r  ro   )r   r[  r  )r;   location_datacountry_name	area_name	city_namestreet_namerx  floor_numberflat_numberroom_numberrt  ru  rv  rw  s                 r*   _prepare_location_dataz#CmfPluginCsv._prepare_location_data@
  s)   $((33!%%f--	!%%f--	#''11$((88$((11#''//#''//.++!$ 
 
 z"--! 
 
 J**! 
 
 j!,, # 
 
 j)44&$ 
 
 $J/::$ 
 
 #:.99# 
 
  	#4 4K
#K000	 	r,   c                    | j         j        d         }|                     ||t          j                  }|rg d}|D ]<}|                    |d          }|r"| j                            |i           }||d<    n=|                    dg           }|                     ||t          j                  }	|	r|	|vr|	                    |	           ||d<   |                    dg           }
|                     ||t          j
                  }|r|	|d<   ||
vr|
	                    |           |
|d<   |                    di           }|                     ||t          j                  }|rtg d	}|D ]7}|                    |d          }|r|                    |i           }||d<    n8|                    dg           }|	r|	|vr|	                    |	           ||d<   ||d<   d S d S )
Nrx   )r   r:  r   r   r  rc  r  rR  rk  r	  )r   rj   r  r   r=  r   rp  r  rQ  r   rL  rF  )r;   r   rx   rq  r  r  r  r?  rc  asset_type_cat_datar  asset_type_datark  rm  rG  s                  r*   _prepare_asset_dataz CmfPluginCsv._prepare_asset_data
  sp   /78IJ !,,S/6CXYY )	4AAAK)  
#4#8#8R#H#H # #'#5#@#@AQSU#V#VL+<L(E +../@"EEO"&"2"23I_"`"`" <':/'Q'Q&&':;;;.=L*+ '**="==K"..sOVEXYYO 84G 01"+55&&777*5L' &)),;;J!--c?FDVWWN ?888"-  J'5'9'9*b'I'I$' $.$9$9:JB$O$O	,:	&)
 #,--0A2"F"F& @+>o+U+U#**+>???/>	+,)3L&&&S)	4 )	4r,   c                 8   | j         j        d         }| j         j        j                            dd          }t	          |                     | j                            D ]\  }}| j                                         r d!S | j         j        d         r|dk    r;|                     ||t          j
                  }|                     ||t          j                  }|                     ||t          j                  }|rg d}|D ]<}	|                    |	d          }
|
r"| j                            |
i           }||d<    n=|                    d	g           }|                     ||t          j                  }|r||vr|                    |           ||d	<   |                    d
g           }|                     ||t          j                  }|r||vr|                    |           ||d
<   |                    dg           }|                     ||t          j                  }|r|                    d          }|rB|r@|                    | j         j        j                  s| j         j         d|d          }||d<   |s|                    d          }|                    d          r|d         |d<   |                    d          }|r|                    d          s|d= |                    d          }|s|d         }| j                            |g           }|r|                    |           n4| xj        dz  c_        | j                             d|dz    ddd           || j        |<   |                     ||t          j                  }|r|rd}|                    d          r|d         d         }|                    d          r|d         d         }|                    d          D ]}|||d}|}d|v sd|v rd}d|v rd}t5          j        d|          \  }}|                    d           r&t9          |d!d                   }||z  d"z  d#z  |d$<   n|                    d%          r#t9          |d!d                   }||z  d"z  |d$<   ni|                    d&          r t9          |d!d                   }||z  |d$<   n4|                    d'          rt9          |d!d                   }||z  |d(<   |                    d)          r|d!d*         }d|d+<   |                    d,          r
|d!d*         }|                    d-          r|d!d*         }d|d+<   |                    d.          r
|d!d*         }||d/<   |r| j         j         d|d/          |d/<   || j        vr| j                            |           |                    d/          rk|d/         d         }|                    d          D ]G}|||d}|r| j         j         d|d/          |d/<   || j        vr| j                            |           Hn4| xj        dz  c_        | j                             d|dz    d0d1d           |                    d2          |                    d3          |                    d4          d5}||vr|                    |           ||d<   |                     || j         j        d         t          j                  }|r|                    d6          r|d6         } |d6= |                    d          st5          j        d7|           }!d8                    |!          } d8                    |!d!d                   }"|                    d          | j         | <   |"| j         v rS| j         |"         }|| j        vr
g | j        |<   | j        |                             |                    d                     |                    d9g           }#|r||#vr|#                    |           |#|d9<   |                    d:g           }$|r||$vr|$                    |           |$|d:<   nJ|r#|| j!        vr| j!                            |           |r#|| j"        vr| j"                            |           |                     ||t          j#                  }%|%r| $                    |%           | %                    |           d!S );u   
        Из строк файла собирает данные проектов, спринтов, БП, компаний и пользователей для последующего импорта
        rx   r  Frv   r   r	  r   r  r  r   r  r   r/   r   r  r   rw   u   Строка u   : Невозможно создать связь с Epic или родительской задачей. Укажите код или ИД задачи в файлеzERR-0080r   r%  zsystem.finish:startr  r   rP   )r  r   r  r   r   r  z[+-]u   дNr  r  r  r  u   мrD  r  u   ОНr  u   ООu   НОu   ННr  uy   : Невозможно создать связи задач. Укажите код или ИД задачи в файлеzERR-0081r  r   r   )r  r   r   r   z[,./+-]r   r7  r  )&r   rj   rH   r   r4   r3   r  r{  r  r   r   r   r!   r  r  r"   r   r#   r   r   ri   rx  r&  r+  r   r   r(  r  r-  r  r   rg  subtasks_outliner7  r  r&   r  r  )&r;   rx   r  r   r   company_dataperson_datar  r  r  r  r  project_sprintssprint_dataproject_componentsr  project_workflowsr  task_ext_idr   r  rx  r  r  related_tasksrelated_taskrelation	task_linkminuslagr  r7  r   outline_listparent_outlineproject_companiesproject_personsr|  s&                                         r*   _prepare_import_dataz!CmfPluginCsv._prepare_import_data
  s
    /78IJ O9?CCDWY^__t/? @ @AA |	* |	*FAs((** ,[9 a1ff++C&BSTTL**3AQRRK++C&BSTTL j5888"-  J'3'7'7
B'G'G$' "&-":":;KR"P"P*6
 #*++i"<"<"..sOV^TT 8;o#E#E#**;777%4	" &-[[r%B%B"!%!1!1#H[!\!\! >n<N&N&N&--n===(:%$+KKR$@$@!''_fnMM p;"&((8"4"4K" 5'8 5AWAWX\XgXjXpAqAq 5)-);&N&Nd8n&N&N)4X& 7&*hhv&6&6xx'' ;.26l]+"&((="9"9K" @488F+;+; @ /(3(A(A, @,7,?M#'=#4#4]B#G#G& 	$OOK8888 ,,1,, O55!`A !` !` !` *)2	 6    8@m4$($4$4S/6Kc$d$dM$ H& G,AM,00AA Y0=o0Nx0X,00;; -H0=i0H0R4A4G4G4L4L +!H +!HL0=3>4@0& 0&H 1=I'*l':':c\>Q>Q01+.,+>+>46E9;&,9W9W	3+.<<+=+= )X25c#2#h--CHMPSVXHX[\H\H_,E,E-0\\$-?-? )X25c#2#h--CHMPSVXHXH_,E,E-0\\$-?-? )X25c#2#h--CHMPSH_,E,E-0\\#->-> )X25c#2#h--CLQTWKH5H,I'0'9'9&'A'A %Q4=crcN	;P(8'0'9'9&'A'A %C4=crcN	'0'9'9&'A'A %Q4=crcN	;P(8'0'9'9&'A'A %C4=crcN	;DHZ$8'8 %nBF/BT?m?mW_`jWk?m?m(<'/t~'E'E(,(=(=h(G(G(G,00<< H0=j0I(0S4A4G4G4L4L 	!H 	!HL0=3?4?0& 0&H
 (9 %nBF/BT?m?mW_`jWk?m?m(<'/t~'E'E(,(=(=h(G(G(G ,,1,, O55!`A !` !` !` *)2	 6    %)HHZ$8$8"&((8"4"4&*hh|&<&<   H
  '888)00:::'8$((do.KL].^`f`stt Xyy!122 X)./?)@!"23#xx66 	X+-8I~+N+NL-0XXl-C-CN-0XXl3B36G-H-HNDHHHXDVDVD1.A-1FFF040En0U#0#E#ECEDM-$@ $m < C CDHHXDVDV W W W$+KKR$@$@! ;L8I$I$I%,,\:::'8$")++i"<"< 8;o#E#E#**;777%4	"" 8L$F$FN)),777 5;dl#B#BL''444 !,,S/6CUVVM ;++M::: $$S))))y|	* |	*r,   c                    || _         | j                                         | _        g | _        g | _        i | _        g | _        i | _        i | _        i | _	        g | _
        t                      | _        i | _        i | _        t          j                            |ddg dgdgdg          | _        |                                  |                     | j                   |                     | j                   |                     | j                   |                     | j                   |                     | j                   t3                       |                                  | j        D ],}|                     |           |                     |           -|                                  |                                  | j        D ]#}t?          t          j         j!        |g           $| j         j"        j#                            dd	          r| j        $                                D ]\  }}|s| j         j%        &                    d
tO          |           d|            |r0t?          t          j(        j)        |tU          |          g           lt?          t          j(        j+        tU          |          g           | j,        r"| j         -                    d| j,                    | j,         S )Nrp   rq   rr   rh   rs   rt   )argssend_invitesTu,   Отправляем приглашения u    пользователям: u#   Ошибок обнаружено: ).r   get_max_processesrP  r7  r  r  r  r  rx  r  r  r  r  r[  rp  r   r   r   r  r  r  r  r  rZ  rr  r  rV  _hack_replace_creation_date_hack_create_fake_taskr  r  schedule_deferred_jobr   _outline_force_recalcrj   rH   r   r~   r  r   r   register_sdesk_clientr4  register_personsr&  r  )r;   r   r  gantt_project_idr  r  s         r*   process_importzCmfPluginCsv.process_import  s=   $!_>>@@ "!$!/33'@'@'@A()7	 4 
 
 	!!###///dl+++t}---///##D$6777 	, 		5 		5K
 ,,[999 ''4444 	   !!! !% 6 	f 	f!&"5"KScRdeeeee ?(.22>4HH 	*.*<*B*B*D*D  &$ &++ -\[^_l[m[m -\ -\LY-\ -\ ] ] ] 	)(>%tM':':;    
 *(9"=112    
  	ZO XdFV X XYYY###r,   )N)NNr   )K__name__
__module____qualname__r   logginggetLoggerClass__annotations__r&  staticmethodr+   r  rC   r   r4  r3   r   r   rW   r   r   r   r   r  r  r  r2  r8  rA  rI  rO  rT  rk  rr  rz  r  r  r  r  r  r  r  r  r  rD  r  r  r  r  r  backoffon_exceptionexpor5  r  r  r  r  r  r  r  r  r  r'  rA  rM  rV  rZ  re  rg  rn  rr  r  r  r  r  rG   r,   r*   r   r      s        (,GW##%%,,,K" " \"H    * $    \&F F FP }+$sDy/ }+ }+ }+ \}+~ # $    \"# # #J(T (T (T ( ( ( (T  *  .+ + +Z  (     >  8  6" " "65 5 50  B#" #" #"J  0) ) )V# #D # # # #"B B B B B B.`- `- `-D< < <|6$ 6 6 6 6<  8  s& s& s&jG G GR6 6 6pCu Cu CuJJq Jq JqX+ + +4 W',#$&#%( ( (j$ j$	( (j$Xs$ s$ s$l  0M M M.j j jZ+ + +\6, 6, 6,r` ` `F5 5 50"% "% "% "%HN N N`  ($z $z $zL BDY] m m m mB
+ 
+ 
+	' 	' 	'5 5 52W W W0M M M^.4 .4 .4`C* C* C*JQ$ Q$ Q$ Q$ Q$r,   r   )r^   mathcopyr   r   r  pathlibr   typingr   r   r  multiprocessingr7  r3  psutilry  rZ   rU   r(  r   dateutildateutil.parserr   cmf.includemodules.settings.fieldsr
   r0  r   r   rG   r,   r*   <module>r     sZ   



                ! ! ! ! ! ! ! !               				 + + + + + +  ' ' ' ' ' '     2 2 2 2 2 2      z.$ z.$ z.$ z.$ z.$>. z.$ z.$ z.$ z.$ z.$r,   