
    \dgA                     \    d dl m Z  d dlmZ d dlmZ d dl d dlmZ d dlZ G d de      Z	y)	    )cached_property)JiraBaseImport)CmfPluginImportMixin)*)fieldsNc                   j    e Zd ZdZd Zd Zd Zd Zd Zd Z	e
d        Zed	        Zd
 Zed        Zy)JiraCSVImportu5   Класс загрузки объектов из CSVc                 X    | j                   j                         }| j                  |      S N)
cmf_importcalc_import_excel_settings_set_default_import_settings)selfsettingss     ./modules/jira/csv_import.pytmplt_import_settingsz#JiraCSVImport.tmplt_import_settings   s%    ??==?00::    c                 P   t               }| j                         }t        | j                  j                  d   j
                  d      5 }t        j                  |      }t        |      D ]  \  }}|dk(  r| j                  j                  d   r%| j                  ||      }|r:| j                  |      \  }}	|	sQ|j                  s^|j                  du sm|j                  |j                          	 d d d        t        j                   j#                  |       y# 1 sw Y   )xY w)Nr   r	first_rowFT)set_get_issue_id_to_code_infoopenr   attachments	file_pathcsvreader	enumeratejson_settings_process_task_without_deal_process_personemaildoes_not_workaddmodels	CmfPersonregister_persons)
r   new_user_emailsissue_id_to_code_infofr   irowtaskperson
is_createds
             r   process_importzJiraCSVImport.process_import   s    % $ ? ? A$//--a0::C@ 
	:AZZ]F#F+ :36doo;;KH66s<QR)-)=)=c)B&FJ!fllv7K7Ku7T'++FLL9:
	: 	))/:
	: 
	:s%   AD#D:DDDD%c                    i }t        | j                  j                        D ]  \  }}|||d   j                         <    d}d}d|v r|d   }d|v r|d   }d|v r|d   }d|v r|d   }||i S i }t	        | j                  j
                  d   j                  d      5 }t        j                  |      }t        |      D ]/  \  }}	|dk(  r| j                  j                  d	   r%|	|   ||	|   <   1 	 ddd       |S # 1 sw Y   |S xY w)
u   Заранее получаем список маппинг ID задачи к Коду, так некоторые ссылки указаны по IDtitleN   ключ задачиz	issue key'   идентификатор задачиzissue idr   r   r   )
r   r   csv_import_settings_fieldslowerr   r   r   r   r   r   )
r   column_name_to_num_mappingr+   settingcolumn_key_numcolumn_id_numissue_id_to_code_mappingr*   r   r,   s
             r   r   z(JiraCSVImport._get_issue_id_to_code_info$   sP   %'"#DOO$N$NO 	EJAwCD&ww'7'='='?@	E "&@@78OPN447DN48RR67`aM336zBM!]%:I#% $//--a0::C@ 	SAZZ]F#F+ S36doo;;KH?B>?R(]);<S	S ('	S ('s   AC;;Dc                 R   g }ddg g d}d}d}t        | j                  j                  d   j                  d      5 }t	        j
                  |      }| j                  j                  d   rt        |       t        |      D ]  \  }}|dk(  r ng }	|d	   j                  |	       t        | j                  j                        D ]l  \  }
}|d
   s|d
   d   j                  d      d   }|dk(  rd}n|dk(  rd}|dv s:|dk(  r|d   j                  |d
   d          |	j                  ||
          n  d d d        |d   r|j                  |       |r$d|d<   t        j                  j                  |d<   |S |r"d|d<   t        j                  j                  |d<   |S # 1 sw Y   kxY w)Nu   Сделки	handshake)r2   icontitlesrowsFr   r   r      r@   model_fieldfield_qualname.CmfTaskTr&   )r&   rE   r?   captionu   Задачиr2   r>   u   Пользователи)r   r   r   r   r   r   r   nextr   appendr5   splitr%   rE   r>   r&   )r   resultdealsis_task	is_personr*   r   r+   r,   data_rowjr   
model_names                r   previewzJiraCSVImport.previewC   s   (+UWX	$//--a0::C@ 	0AZZ]F,,[9V#F+ 0365f$$X.#,T__-W-W#X 0KAx#M2 !)-!89I!J!P!PQT!UVW!XJ!Y."&#{2$(	!%==6!(O228M3J93UV A/0	0		0( ?MM% +E'N"NN//E&M
 	 7E'N",,11E&M;	0 	0s   C F<7FF&c                    t        | d      si | _        || j                  vrd| j                  |<   t        | j                  j                        D ]  \  }}||   |k(  s|d   j                  d      d   dd }t        | j                  j                        D ]=  \  }}|d   j                         j                  |      s)d||   i| j                  |<    n | j                  |   s n | j                  |   S )u  Получение имени автора по названию столбцу, соответствующему названию столбцу с его id

        Args:
            author_id: id автора
            row: строчка из excel
        _get_jira_comment_info_cacheNr2    name)hasattrrS   r   r   r5   rI   r6   
startswith)r   	author_idr,   r+   r8   column_namerO   setting2s           r   _get_jira_author_infoz#JiraCSVImport._get_jira_author_infog   s    t;<02D-D===;?D--i8'(R(RS 
7q6Y&")'"2"8"8"=b"A#2"FK'01[1['\ "8#G,224??LLRTWXYTZK[D==iH!" 88C 00;;r   c                 f   t         j                  }i }t        | j                  j                        D ]S  \  }}|d   r||   s|d   d   t         j                  j
                  k7  r5|d   d   }||   ||<   |dk(  sK||    ||<   U |syt        j                  | j                  ||      \  }}||fS )NrB   verbose_name
field_namer#   )NF)r%   r&   r   r   r5   r_   r   process_any_table_fields)	r   r,   
main_modelnormalized_fieldsr+   r8   r`   new_objr/   s	            r   r!   zJiraCSVImport._process_person~   s    %%
#DOO$N$NO 	RJAw=)Q}%n59I9I9V9VV /=J,/Fj)_,4Ej4Q0Q!*-	R !2KKDOO]gL]_
""r   c                     t               }t        j                  j                  j	                         D ]1  \  }}t        |t        j                        s!|j                  |       3 |S r   )r   r%   rE   r   items
issubclass
CmfRelBaser$   )r   relsr`   fields       r   
_tasks_relzJiraCSVImport._tasks_rel   sS    u!'!6!6!<!<!> 	%J%!2!23$	% r   c                 0    t         j                  dd|       S )Nz(\!(.+?)\|.+?\!) )resub)texts    r   _delete_imageszJiraCSVImport._delete_images   s    vv)2t44r   c           
      	   t         j                  }i }d}d }g }g }d }	t               t               }}
i }t        | j                  j
                        D ](  \  }}|d   j                         }d|v r)||   r$|j                  | j                  |||                d|v r3||   r.||   |v r'|j                  | j                  ||||                   d|v r
||   r||   }	|d   r||   s|d   d   ||   }}| j                  ||      }|d   d   t         j                  j                  k(  rm|j                  d	d
      }t        |      dk(  rL|j                  | j                  |d         | j                  |d   |      | j!                  |d
         d       |d   d   t         j"                  j                  k(  r|dk(  rd|i}|||<   |d   d   t         j                  j                  k7  r|dk(  rd}n<|dk(  r|}n4|dk(  r|r|
j%                  |       |dk(  r|r|j%                  |       || j&                  v r6d}d|v rd}t)        |j+                  |      t,              si ||<   |||   |<   $|||<   + |r||d<   |sy |r5|r3d|i|d   d<   d|d   d<   t/        j0                  |d   d         |d   d<   |r$d|v r |dxx   dd j3                  |       d!z  cc<   d"|v r|d"   j5                  |       t/        j6                  | j                  ||      \  }}d"|v rg d#}|D ]U  }t9        ||      st/        j6                  | j                  t         j:                  |j<                  t9        ||      d$       W |	r|t/        j6                  | j                  t         j>                  |	|j<                  |j<                  d%      \  }}t/        j6                  | j                  t         j@                  ||d$       |
D ]  }t         jB                  j+                  |&      }|s1t/        j6                  | j                  t         jB                  d|i       t/        j6                  | j                  t         jD                  |t         jB                  j+                  |&      d$        t/        jF                  | j                  ||       |S )'NFr2   u   внешняя ссылкаu   родительu   спринтrB   r`   r_   ;   )maxsplit   r   rA   )cmf_created_at
cmf_authorrp   	cmf_ownerrW   statusTactivity
spectatorstagsu   идентификаторcodecommentscmf_model_activityrE   	cmf_modelstatus_typerp   z
<ul>rm   z</ul>parent)responsiblerx   ry   )leftright)rW   r   tree_parent)rW   )$r%   rE   r   r   r   r5   r6   rH   _get_link_for_description_normalize_jira_value
CmfCommentr_   rI   len_translate_monthr]   rq   
CmfProjectr$   rk   
isinstancegetdictr   get_status_typejoinupdatera   getattrCmfProjectExecutorsr   CmfListCmfListCmfTaskr&   CmfTaskSpectatorsprocess_tags)r   r,   r)   rb   rc   set_activity_fieldactivity_namer   links	list_namespectator_names	tag_namesparent_infor+   r8   r[   r`   valuecomment_valuesrel_field_namerd   _project_executorsexecutorlist_objspectator_namer.   s                              r   r    z(JiraCSVImport._process_task_without_deal   s#   ^^
"	%(UCE#DOO$N$NO 9	6JAw!'*002K -;AT;;KQPQ![0SVAJ_@_T;;KI^_bcd_eIfgh,QF	=)Q ' 6| Dc!fJ..z5AE}%n59J9J9W9WW!&SA!>~&!+OO*.*?*?q@Q*R&*&@&@PQARTW&X $ 3 3N14E F%  }%n59J9J9W9WW,#UOE*/J'}%n59T9TTX%%)"z) %|+#''.v%MM%(T__,!'/;>%+N!"3"7"7
"CTJ46%j1@E!*-n=05!*-s9	6v ,4j) -AG@Wh'(<=7@h'49M9]9]!(+F3:5h'6 V00f%6"''%.1A)GG%((h'..{;)BB4??T^`qr
(( J- i7H-(AA$//SYSmSmKR>>LST[]eLfChii 2KKDOO]c]k]kU^W^WeWe\c\j\jMlm! %==doovOdOdGOZa>bd . 	AN%%))~)>F$==doovO_O_?E~>VX 99$//6KcKcnuouoo  pD  pDo} pD pf@ A	A 	))$//7INr   c                    | s| S d }dddddddddd	d
dd}i d |t         j                  d      d |t         j                  d      d |t         j                  d      d |t         j                  d      d |t         j                  d      d |t         j                  d      d |t         j                  d      d	 |t         j                  d      d
 |t         j                  d      d |t         j                  d      d |t         j                  d      d |t         j                  d      d |t         j                  d      d  |t         j                  d!      d" |t         j                  d#      d$ |t         j                  d%      }|j                  d |t         j                  d      i       |j                   |t         j                  d       |t         j                  d&       |t         j                  d'      d(       |j                  d) |t         j
                  d      i       | D ]J  }|d*   D ]@  }|d+   j                         }|j                  ||      }|d,   .||v s3||   s9||   |d,<   B L | S )-Nc                 :    | j                  |g      }|r|d   S d S )N)fields_namer   )import_shop_fields)modelr`   ress      r   _get_field_namezCJiraCSVImport._set_default_import_settings.<locals>._get_field_name  s(    **
|*DC 3q6*d*r   u   резюмеr3   u   описаниеr4   u   статусu   ключ проектаu   приоритетu
   авторu   создательu   комментарий)summaryu   темаu   pезюмеkeydescriptionidrz   projectpriorityauthorreportercommentrW   r~   rp   u   тип задачиr{   rz   r   u   исполнительr   rx   ry   u   созданоrw   u   обновленоcmf_modified_atu6   пользовательское поле (start date)
alarm_dateu   срок исполненияdeadlineu   название проектаr   u   наблюдателиr|   u
   меткиr}   r"   r#   )z	user namer"   zuser statusu'   руководитель проектаr   r2   rB   )r%   rE   r   r   r&   r   r6   r   )r   r   synonymsmappingr8   column_infor[   s          r   r   z*JiraCSVImport._set_default_import_settings  s   O	+
 &&)*-;$0,",/

OFNNFC
#_V^^V%L
  G
 "?6>>:#N	

 OFNNHE
 !/&..*"M
 %ofnnm&T
 /&..,G
 !/&..+"N
 ofnn>NO
 !/&..BS"T
 EoV\VdVdfrFs
 ,_V^^Z-X
 .v~~x/X
 %ofnnl&S
  /&..&A!
$ 	$of6G6G&P
 	 	()9)96B$V%5%5w?*6+;+;_M
 	
 	5vGXGXZe7f
 	   	FG&x0 F)'288:&ll;D}-5+:PU\]hUi181EK.	F	F r   N)__name__
__module____qualname____doc__r   r0   r   rQ   r]   r!   r   rk   staticmethodrq   r    r    r   r   r	   r	   
   sg    ?;&(>"H<.#0   5 5sj ; ;r   r	   )
r   modules.jira.base_importr   %common.models.cmf_plugin_import_mixinr   cmf.includecmfr   r   r	   r   r   r   <module>r      s%    + 3 F   
IN Ir   