
    *.+h̼                        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                   B   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=defdZ"d=d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* Z. e/j0        e/j1        e2d+d,-          d.             Z3d/ Z4d>d0Z5d1 Z6d2 Z7d3 Z8i dfd4Z9d5 Z:d6 Z;d7 Z<d8 Z=d9 Z>d: Z?d; Z@d< ZAdS )?CmfPluginCsvN_loggerr   c                  *   dt           j                                        t           j        j        ddt           j                                        t           j        j        ddt           j                                        t           j        j        ddt           j                                        t           j        j        ddt           j                                        t           j        j        ddt           j	                                        t           j	        j        ddt           j
                                        t           j
        j        dd	t           j                                        t           j        j        dd
t           j                                        t           j        j        ddt           j                                        t           j        j        ddt           j                                        t           j        j        dg} | S )uR   Собственный магазин при выборе импорта из Jirau#   Поля пользователей)captionfieldsiconu!   Поля контрагентовu   Поля задачu,   Оперативная гант-задачаu   Журнал работu!   Поля комментариевu   Поля проектовu"   Поля списков задачu   Поля группu   Поля активовu   Поля локаций)models	CmfPersonimport_shop_fieldsr   
CmfCompanyCmfTaskCmfGanttTaskCmfTimeTrackerHistoryCmfTimeTracker
CmfComment
CmfProjectCmfListCmfPersonGroupCmfAssetCmfLocation)ress    +./modules/settings/models/cmf_plugin_csv.pycalc_models_settingsz!CmfPluginCsv.calc_models_settings   s    >IYIlIlInIn%*, ,;vGXGkGkGmGm&+- --9Z9Z9\9\flftfyzzFRXReRxRxRzRz(-/ /1V=Y=l=l=n=n*/1 1;vGXGkGkGmGm&+- -3v?P?c?c?e?e&+- -<HiHiHkHk^(* *-9N9a9a9c9c*/1 11V_=_=_=a=a_)+ +1V=O=b=b=d=d',. .)
. 
    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_file;   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>W   s    111dtz111r%   .xlsxT)values_only.csvi r;")	delimiter	quotechar)r   r+   suffixxlrdopen_workbookstrsheet_by_indexget_rowsopenpyxlload_workbookactive	iter_rowscsvfield_size_limitopenreader)r5   attachment_file_pathworkbook	worksheetelfiles         r#   r,   zCmfPluginCsv._get_fileP   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 |gS )N-cmf_modified_atidz!=json_settings)order_byfilterr   CSVnamer   	file_typeINrG   r>   rE   urlparentre   rd   r   r   	first_row   Fz%Y-%m-%d %H:%M:%Simport_settingsrh   r   titlemodel_fieldfield_qualnameT)rr   file_valrs   r   ru   r   r*   )loggerr   attachmentsr   	CmfImportgetrb   CmfAttachmentr<   r,   _default_mapping_csvr-   rc   
isinstancedatetimestrftimer   _is_backref_fieldappendr/   )r4   
cmf_importprev_settingssettingsr5   r7   r9   default_mappingirowjvalfoundprev_set
prev_fieldrs   row_settingss                    r#   calc_import_settingsz!CmfPluginCsv.calc_import_settingsd   s-   !(% 	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                     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d/d0|dd1d
|dd2d3|dd4d|dd5d6d7dd8d9d7dd:d;d7dd<d=d7dd>d?d7dd@dAd7ddBdCd7ddDdEd7ddFd7dddGddH}|                     i dIdFd7ddJddddKddddLdMd7ddNdOdPddQd9d7ddRd;d7ddSdCd7ddTdUd7ddVdEd7ddWdXd7ddYdZd7dd[dddd\d=d7dd]d6d7dd^d_dd           i }t          j                                        D ]}|||d`         <   |                                D ]a\  }}|                    dadb          }|                    dcdb          }	t          t          |          }
||	| dd|	 |
j        de|
j        df||<   b|S )gug    Структура сопоставления полей из файла CSV по умолчанию. r   r   r   u/   Ид внешней системы задачиext_id)
field_name
model_nameu   Тема задачиrh   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/   Фактические трудозатратыactual_workr   u&   Плановая дата началаsched_start_dateu,   Плановая дата окончанияsched_finish_dateu/   Планируемые трудозатраты
sched_worku2   Сумма дочерних трудозатратagregat_workui   Фактические трудозатраты по собственным ресурсам задачиactual_myself_worku-   Фактический % завершенияactual_completeu   Дата финишаactual_finish_dateoutline_numberr   )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_milestoner   r    r   .T)r   r   rt   r   requiredverbose_name)	updater   r   r   itemsry   getattrr   r   )name_cmf_taskname_cmf_projectname_cmf_epicr   default_local_attrs_mappingshop_frr   value_modelr   	name_attrmodels              r#   r{   z!CmfPluginCsv._default_mapping_csv   s   
 "'!&
=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 >mky?z?z7&
8 5EWgu6v6v9&
: ;K^n|<}<};&
< >ljx?y?y=&
> AQ_o}B~B~?&
@ x  I]Vdzf zfA&
D <L]m{=|=|E&
F $4HXf%g%gG&
 &
H }M  ]k  nl  nl5;<&X&XK&
 &
 &
N 	 + 
%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+ 
 +	 +	 +	X ')#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%   rt   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   )rt   r   attrsr   attrfields         r#   r   zCmfPluginCsv._is_backref_field  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)rr   r   titlesrowsFri   rj   rk   ra   )rn   re   rd   u)   Не найден файл импортаro   rp   r   rs   rt   r   r   CmfDealT)r   r   r   r   u   Задачиrr   zcalendar-todayr   )r   rz   ry   r   rv   errorr,   rc   nextr-   r   csv_import_settings_fieldsr   )r4   r   resultdealsis_dealattachr9   r   r   data_rowr   r   r   s                r#   previewzCmfPluginCsv.preview'  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                   }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         <   "t          |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   rs   r   r   r   rp   r   r   choices>      да1yestrue+>   0nofalse   нет-TF)dictr-   r   r   r   r   r   r   
CmfRelBaselen
class_namerP   calc_priorityr   calc_choicesr   CmfBoollower)r4   r   r   r   r"   idxfield_settingsfield_partsr   rA   true_valuesfalse_valuess               r#   _map_objectzCmfPluginCsv._map_objectL  s6   ff#,Xa[-B#C#C  	5  	5CS> !-0 .~>%BTTT(7EKKCPPKE;q>22E%!677 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 )	Nrq   r   r   rh   r   r   OR==r   re   )r   r   rc   r   r   ry   r   )r4   r   project_objproject_filteruniq_fields
uniq_fielduniq_field_values           r#   _get_projectzCmfPluginCsv._get_projectq  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 )Nrq   r   r   r   r   r   r   sprinttree_parentsys_typern   r  r   )	r   r   rc   r   r   ry   r   	CmfFolderextend)
r4   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                 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   rh   ILIKErp   u<   Компаний с одинаковым названием z > uF   , укажите код компании вместо названияzERR-0071r   obj_typeu]   Найдено несколько компаний с одинаковым названиемr   )	r   r   ry   liststripr   r   	log_error	Exception)r4   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   u/   Не найдена схема активов "uf   ", создайте схему и укажите префикс кода активов в файле.)systemr  Tu   Не указана схема активов. Установлена схема активов по-умолчанию (системная))
ry   r  r   upperr   CmfAssetSchemer  r   rv   warning)r4   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   rh   rn   r  r   LIKE%r	  re   r   u1   Не найдена группа активов "u   " в схеме uY   , создайте группу и укажите ID, код или имя в файле.)ry   r  r   CmfAssetCatr  )r4   	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   rn   r   )ry   r  r   r   CmfAssetType)r4   
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 r&  )ry   r  r   r   CmfAssetTypeCat)r4   asset_type_catr  asset_type_cat_objr   r   r   r   s           r#   _get_asset_type_catz CmfPluginCsv._get_asset_type_cat  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 r@   )r   )rB   kvs      r#   
<dictcomp>z9CmfPluginCsv._get_asset_field_choises.<locals>.<dictcomp>*  s6     
 
 
1 GGIIq
 
 
r%   c                     g | ]}d | d 	S rJ   r@   )rB   r3  s     r#   rD   z9CmfPluginCsv._get_asset_field_choises.<locals>.<listcomp>2  s     ???1h!hhh???r%   u&   Не найдено значение "u
   " для "u2   ". Укажите одно из значений: , )r   r    r   ry   defaultr   r   r  r   valuesr  r   join)	r4   r   rA   r   field_defaultfield_choisesr   field_valuer9  s	            r#   _get_asset_field_choisesz%CmfPluginCsv._get_asset_field_choises"  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   r  r  loginr	  emailrh   r   r   r  u7   Не найдена группа владельцев "rJ   zERR-0085r    r
  )ry   r  r   r   r   r   r  )r4   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   rI   r   r  r  r@  r	  rA  rh   r   r   r  u5   Не найдена группа поддержки "rJ   zERR-0086r    r
  )	ry   r   r  r   r   r   r   r  r   )r4   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   r  r  r   r  rh   r	  r   u/   Не найдена локация/адрес "rJ   zERR-0087r    r
  )ry   r  r   r!   r   r  )r4   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%   r  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   rv   infoprocess_any_table_fieldsr   r   dpcommitrP   r   r   CmfProjectRoleAssignry   membersr   save)r4   r  r   r  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 )Nr  r   u9   Пытаемся создать пользователя rU  )ry   r  r   rv   rV  rW  r   r   rX  rY  rP   r   r   
user_localrA   rb   person_emails
setdefaultsetrA  endswithconfig
ORG_DOMAINadd)	r4   ra  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::rn   ::r   u   БП для проекта u    и типа r   r  r   u/   Не нашли БП, создаем новыйr   r  r(   r   r  zdefault.system:defaultr   T)r   templater   import_originalsave_importr   r   rh   r   r   r   N)rh   r   rv  cache_status_typeworkflowstatus_codeu7   Не нашли статус, создаем новый)r|  r   r}  rv  u%   CSV-схема для проекта softdev:default)task.agile:defaulttask.base:defaultr   )r   targer_workflow	scheme_wfcmf_model_name)r   target_workflowr  r  r   rv  r@   )rb   rh   r   CmfWorkflowry   r   rv   rV  r   r   
is_changedr\  CmfStatusCoder   calc_status_typestatus_type	CmfStatusr}  CmfSchemeWfrP   default_task_workflowCmfSchemeWfRule)r4   taskr   rh   r|  ru  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   r  %::::%r   u   Ищем БП по коду "rJ   r   r  r   u   Ищем БП по имени "rh   r	  rs  Trw  r   u-   Ищем статус в БП по коду "rz  r}  u/   Ищем статус в БП по имени "r   ut   Невозможно создать БП и статус, не указан логический тип задачи)ry   r  r   r  r   rv   rV  r   r\  r  r  r  r  )	r4   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                    |                                 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         |           | j                            |j                                        j        j                   d S )Ndataproject_typer   r   project.agile:defaultrt  r   r  r~  r   	workflowssprintsr  ra  )r9  ry   r   CmfLogicType_process_logic_typer  _process_activityrW  r   r   rX  rY  _process_workflowsr  r\  _process_sprintsr`  rq  gantt_project_idsrj  main_gantt_projectloadrb   rA   )r4   r  r   project_datar   r^  r  s          r#   _process_projectszCmfPluginCsv._process_projects`  s   (( 	[ 	[G"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!!### 	["&"9"9'+:NP["\"\" ',;K)$$&&&%%gi&8+FFF''(<kJJJ%%gi&8+FFF&**;+I+N+N+P+P+S+YZZZ1	[ 	[r%   c                 4   t           j                            d          }|D ]t}t           j                            |d          }||d<   ||d<   ||d<   |                     | j        t           j        |          \  }}|j                                         ud S )Nzlist.agile_sprint:defaultrt  r   r   rn   r  r   )	r   r  ry   r  rW  r   r   rX  rY  )r4   r  r   sprint_logic_typer   r  r  r^  s           r#   r  zCmfPluginCsv._process_sprints{  s    "/339T3UU 	# 	#F",00Wx0XXM&F8$1F=!#4F< !%!>!>tPVP^`f!g!gJM  """"	# 	#r%   c                     d }|D ]_}||d<   |                     d          r|                     |d          |d<   |                     d          r|                     |          }`|S )Nrn   r   r   r   )ry   r  r  )r4   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 )SNrq   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 r6  r@   rB   ts     r#   rD   z/CmfPluginCsv._process_gantt.<locals>.<listcomp>  s      m m maQ m m mr%   uG   Не найден тип ограничения даты начала "u,   ". Укажите один из типов: r7  zERR-0082r   r
  rp   )r  r  r  c                     g | ]}d | d 	S r6  r@   r  s     r#   rD   z/CmfPluginCsv._process_gantt.<locals>.<listcomp>  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.r@   )rB   keys     r#   rD   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   rc   r   r   ry   r  r   r   r   r9  r  r:  _has_errorsr  rg  floatresearch
IGNORECASEgroupreplaceload_fieldsr|   r}   r   intsetattrop_gantt_taskrA   r   r   CmfCalendarget_duration_minutes_get_calendar	is_manualr   check_gantt_projectr  commit_with_event)r4   r   task_objganttconstrain_start_type_mappingconstrain_finish_type_mappingr   constrain_start_type_rawr   typesconstrain_finish_type_rawr  patternmatchr   _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rh   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 DeskrU  ServiceDeskDeviceasset.device:defaultSoftwarezasset.software:defaultVMzasset.vm:defaultr!  r   default_logic_typeu   Логический тип r   rh   r   r   r   rs  Trw  r  r  r  r   uF   Ищем логический тип по коду или имени ''r	  uF   Не нашли, создаем новый логический типr   r   )r    r!  )r   rh   r  ru  )r   rv   rV  ry   r  r   r  r   r  r\  r   rW  r  )r4   objr   	name2codelogic_type_fieldr   logic_type_dictr   template_coderu  logic_type_paramsr^  s               r#   r  z CmfPluginCsv._process_logic_typeG  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"    Виды деятельности   Бизнесbusinessr
     Продажиsales   Маркетинг	marketing   Производство
production   Поддержкаhelpdesk   Бухгалтерияfinance!   ИТ инфраструктураservicedesk%   Хозяйственная часть	household   Разработка ПОsoftdev)	r   r"  r$  r&  r(  r*  r,  r.  r0  u    Вид деятельности r   r   rh   r   r   r   rs  Trw  r  r  r  r   uJ   Ищем вид деятельности по коду или имени 'r  r	  uJ   Не нашли, создаем новый вид деятельности)r   rh   )r   rv   rV  ry   r   CmfActivityr   r  r\  r  r   rW  r  )r4   r   r  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                 8   | 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	        
                    |          }|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t          j                    |z
  }| j         j                            d|dd           d S )Nu5   Привяжем подзадачи к задачамrp       из r   r   r   r   r   uE   Не удалось найти родительскую задачу zERR-0073r   r
  )r   r  r   r   ztask.subproject	task.epicTrw  r  u4   Не удалось привязать задачу zERR-0074u<   Обработка подзадач выполнена за .3f    сек.)r   rv   rV  r   subtaskstime	monotonic	is_cancelr   r   ry   r  r  r   r   r   
startswithr  r\  r  r  save_preload_fieldsr  rA   r  r  )r4   totalr   t1parent_ext_idr   r   child_ext_id_filter_childr  r  t2s               r#   _process_subtaskszCmfPluginCsv._process_subtasks  s   ##$[\\\DM""^!] #	* #	*M((** O"''1(;(;E(;(;<<<FAhm<vt]>[\G .,,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--]|]]"!* .   
 $$)$$$$$$$**, ^"##$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&   Создадим связи задачrp   r6  typert  rh   r  r   u2   Не удалось найти тип связи "rJ   zERR-0075CmfRelationTyper
  r   r   u=   Не удалось найти входящую задачу zERR-0076r   out_linku?   Не удалось найти исходящую задачу zERR-0077)relation_typer   rJ  T)rK  r   rJ  r   rv  constrain_lagconstrain_lag_pctrw  u.   Не удалось создать связь zERR-0078r   u8   Обработка связей выполнена за r8  r9  )r   rv   rV  r   	relationsr;  r<  r=  r   rI  ry   r  r  r   r   rL  rM  r\  )
r4   r@  r   rA  relation_datarK  r   rJ  relation_optionrE  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 )Nrq   u   Грузим журнал closedr   r   Trv  
cmf_authorr@  r	  r   r   rn   ry  )minutesrw  r@   )r   r   rc   r   r   rv   rV  ry   r   r   
start_date
time_spentrA   r}   	timedeltaend_dater\  )r4   r   timetracker_historyhistorys       r#   _process_timetrackerz!CmfPluginCsv._process_timetrackerC  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                 8   | 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| 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           d/|                    d           d0|                    d           d1	           n`| j                             d2| d.|                    d           d/|                    d           d0|                    d           d1	           | $                    ||           | j         j        j                            d3          rCt          j%                            | j         j        j                            d3                    }n| &                    ||          }|r3|j'        (                                 |j'        )                    |           |j*        r|!                    d*,           |j+        j        j*        r|j+        !                    d*,           |j"        #                                 |                     ||t          j                  }|rX|                    d4          rC|                    d5          r.||d<   |                     | j         t          j        |          \  }}n/|r-| j         ,                    d6d7d8           | xj-        d9z  c_-        | .                    |           | j         j"        #                                 d S );Nrq   target_project_id)rb   rh   u:   Не указано наименование задачи!rn   r   r   r7  epicr   r  r   r   )rT  	cmf_ownerr   rB  waiting_forr   r@  r	  r   )r   )r   Fu_   Пытаемся создать или обновить задачу по параметрам cmf_import.pluginr   rv  r   Tmerge_identic_namesext_id_per_importr(   r   r   r   .lockx   timeout
filter_objdont_updateuB   Задача импортирована из файла: <a href="z" target="_blank">z</a> ()   T)r   	log_levelrn   r   rv  rw  u'   Создали новую задачу  ext_id= code= name='r  u   Нашли задачу target_list_idr   r   u   Невозможно импортировать задачу без проекта, создайте проект и укажите ID в файлеzERR-0079r
  rp   r@   )/r   rc   r   r   r   rA   ry   r   r   r  r  r   r>  r  r  r   rP   r   logpluginrb   hashlibsha256encode	hexdigestredis_dbredislockrW  r   import_filerl   rh   r\  rX  rY  r  r   r  listsr  r   r  r  r  r  r\  )r4   r   rq   r  r   r  r   rk  r   rp  ri  lock_keyr  r  task_is_newcommentr  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 H	"4 H	"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 %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" 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   #-RR #R 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 )3Nrq   rh   u2   Не указано название актива.rn   r"  r   r    r   zasset.system:defaultr|  r   r   ownership_typedevice_typeenabled_statusoperational_statusrO  rB  rJ  u[   Попытка создать или обновить актив по параметрам rf  r   rg  rh  Fr   serial_numberimeir   r   inv_nophone_numbermarkcoderj  rk  rl  rn  u#   Создан новый актив rt  ru  rv  r  u   Найден актив asset_typesTrw  rp   u*   Ошибка импорта актива. zERR-0084r
  )+r   rc   r   r   r    ry   r  r  r  r!  r$  rn   r  r  r  r>  rR  rE  rx  ry  rA   rz  r{  rP   r|  r}  r~  r  r  rW  r'  r*  r  r  r   rM  rJ  r  r\  rX  rY  r  r  )r4   r   rq   assetr  r  r"  r#  support_group_tmpr   rp  r  r  	asset_objasset_is_newr(  r)  rH  excs                      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}t          d          5  t          j        | _        	 | j                                        rn|                                \  }}||                    ||f           n	 | j        j        	                    d| d|            | 
                    |           |                     |           n`# t          $ rS}| j        j                                         |dz  }| j                            d| d	| d
| dd           Y d }~nd }~ww xY wd d d            n# 1 swxY w Y   |                    |           d S )Nr   F)init_views_and_dsTu   Импорт строки r6  rp   u<   Не удалось импортировать строку z: z. zERR-0041r   r
  )r   APPREDIS_DBr~  r   r=  ry   putrv   rV  r  r  r  rX  rollbackr  )r4   	row_queuerow_queue_errors
total_rowserrorsrow_numrow_datar  s           r#   _process_row_workerz CmfPluginCsv._process_row_worker  s   5111 	 	LDM?,,.. $-MMOO!#MM7H"5666O*//0hW0h0h\f0h0hiii&&x000''1111    O&//111aKFO--sW^ssbjssnqss"!* .        	 	 	 	 	 	 	 	 	 	 	 	 	 	 	2 	V$$$$$s>   AD/2ACD/
DA	DD/DD//D36D3c                 4   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|            tt1          |                     | j
                            D ]]\  }}| j                                        r n>|j        d         r|dk    r4||k     r;||k    r n|                    |dz   |f           ^|                    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	   )rb   r   ri   rj   rk   ra   rl   rm   c                     g | ]}d S rp   r@   rB   r:   s     r#   rD   z2CmfPluginCsv.process_rows_fork.<locals>.<listcomp>  s    JJJAaJJJr%   i  )maxsizez_process_row_worker rp   )r  r  r  )targetrh   kwargsu.   Параллельный обработчик ro   )NN)cmf.appr   r   disable_acldisable_notifyr   rx   ry   r   rz   r  r   r,   queueQueuerangethreading_max_forks	threadingThreadr  r   startrv   rV  r-   r=  rc   r  r:  empty)r4   cmf_import_idstart_index	end_indexr   r  r   r  r  r  threadsr   threadr   s                 r#   process_rows_forkzCmfPluginCsv.process_rows_fork  sL   ''''''  "" 1	1 1	1G$:$:$<$< 1	1 1	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#DNN43C$D$DEE , ,3?,,.. E+K8 Q!VV{??y==Eq1ucl++++MM,'''!  &,,.. 1*..000 ',,.. 1a1	1 1	1 1	1 1	1 1	1 1	1 1	1 1	1 1	1 1	1 1	1 1	1 1	1 1	1 1	1 1	1 1	1 1	1 1	1 1	1 1	1 1	1 1	1 1	1 1	1 1	1 1	1 1	1 1	1 1	1f s5   JH.I6*J6I:	:J=I:	>JJJ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", r7  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   ry  rb   rY   rx  pid
log_detail)r4   r  r  r  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         }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 )Nc                     g | ]}d S r  r@   r  s     r#   rD   z.CmfPluginCsv._process_rows.<locals>.<listcomp>  s    FFF!FFFr%   u5   Запуск обработки строк файлаrp   uA   Обработка строк файла выполнена за r8  r9  )max_processesr   r,   r  r   rv   rV  r;  r<  r  r  r   communicate
returncoder  )r4   r  r  
chunk_size	remainderrA  	processesr   r  r  r  rE  s               r#   _process_rowszCmfPluginCsv._process_rows  sr   *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 )NrH  u"   Обработка локации T)r   rv  r	   rn   rg   rw  u   Создана локация children)r   r   r   rv   rV  r   r!   r  
_calc_namery   rP   rh   r  rv  rn   r\  rX  rY  _process_locations)r4   	locationsparent_location_dataparent_location_objrh   r  current_locationrO  new_locationr   rA   existing_locations               r#   r  zCmfPluginCsv._process_locations7  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                     |D ]I}||d<   |                      | j        t          j        |          \  }}|j                                         Jd S )Nrn   )rW  r   r   r,  rX  rY  )r4   asset_type_catsr  r-  r.  r:   s         r#   _process_asset_type_catsz%CmfPluginCsv._process_asset_type_catsX  sh    - 	+ 	+N'7N8$$($A$A&% %!
 !((****	+ 	+r%   c                     |D ]h}||d<   |                      |d         |          |d<   |                     | j        t          j        |          \  }}|j                                         id S )Nrn   r-  )r/  rW  r   r   r'  rX  rY  )r4   r  r  r(  r)  r:   s         r#   _process_asset_typesz!CmfPluginCsv._process_asset_typesb  s    % 	' 	'J#3Jx +/+C+CJO_D`br+s+sJ'( $ = =#! !NA
 $$&&&&	' 	'r%   c                     |                                 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 )
Nr  rn   r  r!  r  rt  r  Trw  )r9  ry   r  r   r  rW  r   r!  rX  rY  r/  asset_types_catr   r\  )	r4   
asset_catsr  r"  asset_cat_datar#  r:   r-  r.  s	            r#   _process_asset_catsz CmfPluginCsv._process_asset_catsm  sB   #**,, 	5 	5I&v.N'7N8$!!"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  )ro  r  r  r  )r9  ry   r  rW  r   r   r  rX  rY  r  r  r  )r4   asset_schemesr  asset_scheme_datar   r  r:   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)rH  rh   r  r  )rH  rh   )ry   r  re  )r4   location_datacountry_name	area_name	city_namestreet_namer  floor_numberflat_numberroom_numberr  r  r  r  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 )
Nrq   )r   r  r   r   r  r  r  r-  r  r   )r   rc   r   r   r  ry   r  re  r,  r   r'  r!  )r4   r   rq   r  r   r   r   r  r  asset_type_cat_datar  asset_type_datar  r  r"  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                    | j         j        d         }| j         j        j                            dd          }t	          |                     | j                            D ]b\  }}| j                                         r d S | j         j        d         r|dk    r;|                     ||t          j
                  }|                     ||t          j                  }|                     ||t          j                  }|r*g d}|D ]<}	|                    |	d          }
|
r"| j                            |
i           }||d<    n=|                    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}t3          j        d|          \  }}|                    d          r&t7          |d d                   }||z  d!z  d"z  |d#<   n|                    d$          r#t7          |d d                   }||z  d!z  |d#<   ni|                    d%          r t7          |d d                   }||z  |d#<   n4|                    d&          rt7          |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    d/d0d           |                    d1          |                    d2          |                    d3          d4}||vr|                    |           ||d
<   |                     || j         j        d         t          j                  }|r|                    d5          r|d5         }|d5= |                    d          st3          j        d6|          }d7                    |          }d7                    |d d                   } |                    d          | j        |<   | | j        v rS| j        |          }|| j        vr
g | j        |<   | j        |                             |                    d                     |                    d8g           }!|r||!vr|!                    |           |!|d8<   |                    d9g           }"|r||"vr|"                    |           |"|d9<   nJ|r#|| j         vr| j                             |           |r#|| j!        vr| j!                            |           |                     ||t          j"                  }#|#r| #                    |#           | $                    |           dd S ):u   
        Из строк файла собирает данные проектов, спринтов, БП, компаний и пользователей для последующего импорта
        rq   ri  Fro   r   r   r   r  r  r  r   r(   r   rc  r   rp   u   Строка u   : Невозможно создать связь с Epic или родительской задачей. Укажите код или ИД задачи в файлеzERR-0080r   r
  zsystem.finish:startrK  r   rI   )rH  r   rJ  r   r   r  z[+-]u   дNr  r  rL  r  u   мr  rM  u   ОНrH  u   ООu   НОu   ННrJ  uy   : Невозможно создать связи задач. Укажите код или ИД задачи в файлеzERR-0081r|  r   r   )r|  r   r   r   z[,./+-]r   r  ra  )%r   rc   rA   ry   r-   r,   r  r=  r   r   r   r   r   r  re  r   r   r   r>  rb   r:  r  r  r   r   r  rg  r  rN  r   r:  subtasks_outliner  ra  r!   r  r  )$r4   rq   ri  r   r   company_dataperson_datar  r   r   r   r   project_sprintssprint_dataproject_workflowsr  task_ext_idr   rB  r:  rO  rK  related_tasksrelated_taskrelation	task_linkminuslagr|  r  r   outline_listparent_outlineproject_companiesproject_personsr  s$                                       r#   _prepare_import_dataz!CmfPluginCsv._prepare_import_data  s1
    /78IJ O9?CCDWY^__t/? @ @AA u	* u	*FAs((** ,[9 a1ff++C&BSTTL**3AQRRK++C&BSTTL c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	"$+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))))ku	* u	*r%   c                 x   || _         | j                                         | _        g | _        g | _        i | _        i | _        i | _        i | _        g | _	        t                      | _        i | _        i | _        t          j                            |ddg dgdgdg          | _        |                                  |                     | j                   |                     | j                   |                     | j                   |                     | j                   |                     | j                   t1                       |                                  |                                  |                                  | j        D ]#}t9          t          j        j        |g           $| j         j        j                             dd	          r| j        !                                D ]\  }}|s| j         j"        #                    d
tI          |           d|            |r0t9          t          j%        j&        |tO          |          g           lt9          t          j%        j(        tO          |          g           | j)        r"| j         *                    d| j)                    | j)         S )Nri   rj   rk   ra   rl   rm   )argssend_invitesTu,   Отправляем приглашения u    пользователям: u#   Ошибок обнаружено: )+r   get_max_processesr  r  ra  r  rd  r:  r  rN  rf  r  r  r  r   rz   ry   r  r  r`  rq  r  r  r  
cmf_commitr  rF  rQ  schedule_deferred_jobr   _outline_force_recalcrc   rA   r   rv   rV  r   r   register_sdesk_clientr  register_personsr  rx  )r4   r   gantt_project_idr   rd  s        r#   process_importzCmfPluginCsv.process_import  s   $!_>>@@ "!$!/33'@'@'@A()7	 4 
 
 	!!###///dl+++t}---///##D$6777 	 	   !!! !% 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   )B__name__
__module____qualname__r   logginggetLoggerClass__annotations__r  staticmethodr$   boolr<   r   r  r,   r   r   rP   r{   r   r   r   r   r   r  r  r  r$  r*  r/  r>  rE  rM  rR  r`  rq  r  r  r  r  r  r  r  r  rF  rQ  r\  backoffon_exceptionexpor  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r@   r%   r#   r   r      sI        (,GW##%%,,,K  \6    * $    \&C C CJ i+$sDy/ i+ i+ i+ \i+V # $    \"# # #J#T #T #T # # # #J  *  .  (     >  8  6" " "65 5 50  B#" #" #"J  0# #D # # # #"B B B B B B.`- `- `-D< < <|[$ [ [ [ [6# # #  s& s& s&jG G GR6 6 6p-u -u -u^Jq Jq JqX+ + +4 W',#$&#%( ( (U$ U$	( (U$ns$ s$ s$j% % % %<7 7 7r  (z z z> BDY] m m m mB+ + +	' 	' 	'5 5 5.W W W0M M M^.4 .4 .4`|* |* |*|E$ E$ E$ E$ E$r%   r   )rW   mathcopyr   r}   rz  pathlibr   typingr   r   r)  multiprocessingr  r  psutilr;  rS   rN   r  r   dateutildateutil.parserr   cmf.includemodules.settings.fieldsr
   r  r   r   r@   r%   r#   <module>r6     sZ   



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