
    EfgA                     b    d dl m Z  d dlmZ d dlmZ d dlT d dlmZ d dlZ G d de          Z	dS )	    )cached_property)JiraBaseImport)CmfPluginImportMixin)*)fieldsNc                   ~    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dS )JiraCSVImportu5   Класс загрузки объектов из CSVc                 ^    | 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                 @   t                      }|                                 }t          | j        j        d         j        d          5 }t          j        |          }t          |          D ]z\  }}|dk    r| j        j	        d         r| 
                    ||          }|sD|                     |          \  }}	|	r*|j        r#|j        du r|                    |j                   {	 d d d            n# 1 swxY w Y   t          j                            |           dS )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$/-a0:C@@ 
	:AZ]]F#F++ : :366do;KH666s<QRR :)-)=)=c)B)B&FJ! :fl :v7Ku7T7T'++FL999:
	: 
	: 
	: 
	: 
	: 
	: 
	: 
	: 
	: 
	: 
	: 
	: 
	: 
	: 
	: 	))/:::ts   BC44C8;C8c                    i }t          | j        j                  D ]"\  }}|||d                                         <   #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|	|         ||	|         <   0	 ddd           n# 1 swxY w Y   |S )
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$   s   %'"#DO$NOO 	E 	EJAwCD&ww'7'='='?'?@@"&@@@78OPN4447DN48RRR67`aM3336zBM!]%:I#% $/-a0:C@@ 	SAZ]]F#F++ S S366do;KH6?B>?R(]);<<S	S 	S 	S 	S 	S 	S 	S 	S 	S 	S 	S 	S 	S 	S 	S ('s    ADDDc                 x   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	         	                    |	           t          | j        j
                  D ]\  }
}|d
         s|d
         d                             d          d         }|dk    rd}n|dk    rd}|dv rH|dk    r'|d         	                    |d
         d                    |		                    ||
                    d d d            n# 1 swxY w Y   |d         r|	                    |           |rd|d<   t          j        j        |d<   n|rd|d<   t          j        j        |d<   |S )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   s1   (+UWXX	$/-a0:C@@ 	0AZ]]F,[9 V#F++ 0 036655f$$X...#,T_-W#X#X 0 0KAx#M2 ! !)-!89I!J!P!PQT!U!UVW!XJ!Y.."&#{22$(	!%===66!(O228M3J93UVVV A///0	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0( ? 	!MM%    	2+E'N"N/E&MM 	27E'N",1E&Ms   DEE"Ec                    t          | d          si | _        || j        vrd| j        |<   t          | j        j                  D ]\  }}||         |k    r|d                             d          d         dd         }t          | j        j                  D ]F\  }}|d                                                             |          rd||         i| j        |<    nG| j        |         r 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;<< 	302D-D===;?D-i8'(RSS  
7q6Y&&")'"2"8"8"="=b"A#2#"FK'01['\'\ " "8#G,2244??LL "LRTWXYTZK[D=iH!E" 8C 0;;r   c                 d   t           j        }i }t          | j        j                  D ]c\  }}|d         r||         s|d         d         t           j        j        k    r8|d         d         }||         ||<   |dk    r||          ||<   d|sdS 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    %
#DO$NOO 	R 	RJAw=) Q }%n59I9VVV /=J,/Fj)_,,4Ej4Q0Q!*-  	;2KDO]gL]_ _
""r   c                     t                      }t          j        j                                        D ]4\  }}t          |t          j                  r|                    |           5|S r   )r   r%   rE   r   items
issubclass
CmfRelBaser$   )r   relsr`   fields       r   
_tasks_relzJiraCSVImport._tasks_rel   s]    uu!'!6!<!<!>!> 	% 	%J%!233 %$$$r   c                 :    t                               dd|           S )Nz(\!(.+?)\|.+?\!) )resub)texts    r   _delete_imageszJiraCSVImport._delete_images   s    vv)2t444r   c           
      
   t           j        }i }d}d }g }g }d }	t                      t                      }}
i }t          | j        j                  D ]\  }}|d                                         }d|v r7||         r/|                    |                     |||                              d|v rG||         r?||         |v r5|                    |                     ||||                                       d|v r||         r||         }	|d         r||         s|d         d         ||         }}| 	                    ||          }|d         d         t           j
        j        k    r|                    d	d
          }t          |          dk    re|                    |                     |d                   |                     |d         |          |                     |d
                   d           |d         d         t           j        j        k    r|dk    rd|i}|||<   |d         d         t           j        j        k    r|dk    rd}nG|dk    r|}n>|dk    r|r|
                    |           +|dk    r|r|                    |           J|| j        v rBd}d|v rd}t)          |                    |          t,                    si ||<   |||         |<   |||<   |r||d<   |sd S |rC|rAd|i|d         d<   d|d         d<   t/          j        |d         d                   |d         d<   |r+d|v r'|dxx         dd                     |           d!z  cc<   d"|v r|d"                             |           t/          j        | j        ||          \  }}d"|v rg d#}|D ]M}t9          ||          r;t/          j        | j        t           j        |j        t9          ||          d$           N|	r^t/          j        | j        t           j        |	|j        |j        d%          \  }}t/          j        | j        t           j         ||d$           |
D ]}t           j!                            |&          }|s't/          j        | j        t           j!        d|i           t/          j        | j        t           j"        |t           j!                            |&          d$           t/          j#        | 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   s1   ^
"	%(UUCEE#DO$NOO 9	6 9	6JAw!'*0022K -;;A;T;;KQPPQQQ![00SV0AJ_@_@_T;;KI^_bcd_eIfgghhh,,Q,F	=) Q  ' 6| Dc!fJ..z5AAE}%n59J9WWW!&SA!>!>~&&!++OO*.*?*?q@Q*R*R&*&@&@PQARTW&X&X $ 3 3N14E F F% %    }%n59J9WWW,,#UOE*/J'}%n59TTTX%%%)""z)) %|++ /#''...v%% )MM%(((T_,,!'/;>>%+N!"3"7"7
"C"CTJJ 746%j1@E!*-n==05!*-- 	5,4j)  	4 	5- 	5AG@Wh'(<=7@h'49M9]!(+F3:5 :5h'6  	HV000f%%%)G"''%..)G)G)GG%%%(((h'..{;;;)B4?T^`qrr
((( J J J- i i7H-- i(A$/SYSmKR>LST[]eLfLfCh Chi i i  d2KDO]c]kU^W^We\c\jMl Mlm m! %=dovOdGOZa>b>bd d d . 	A 	AN%))~)>>F X$=dovO_?E~>VX X X 9$/6Kcnuouo  pD  pDo} pD p pf@ f@ A A A A 	)$/7INN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%          }|                    d |t           j        d          i           |                     |t           j        d           |t           j        d&           |t           j        d'          d(           |                    d) |t           j        d          i           | D ]\}|d*         D ]Q}|d+                                         }|                    ||          }|d,         ||v r||         r||         |d,<   R]| S )-Nc                 H    |                      |g          }|r|d         nd S )N)fields_namer   )import_shop_fields)modelr`   ress      r   _get_field_namezCJiraCSVImport._set_default_import_settings.<locals>._get_field_name  s-    **
|*DDC *3q66d*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  sD    	O	+ 	+ 	+
 &&)*-;$0,",/
 

OOFNFCC
#__V^V%L%L
  G G
 "??6>:#N#N	

 OOFNHEE
 !//&.*"M"M
 %oofnm&T&T
 //&.,GG
 !//&.+"N"N
 oofn>NOO
 !//&.BS"T"T
 EooV\VdfrFsFs
 ,__V^Z-X-X
 .v~x/X/X
 %oofnl&S&S
  //&.&AA!
$ 	$oof6G&P&P
 	 	 	 	()96BB$_V%5w??*?6+;_MM
 
 	 	 	
 	5vGXZe7f7f
 	 	 	   	F 	FG&x0 F F)'288::&ll;DD}-5+:P:PU\]hUi:P181EK.	F
 r   N)__name__
__module____qualname____doc__r   r0   r   rQ   r]   r!   r   rk   staticmethodrq   r    r    r   r   r	   r	   
   s        ??; ; ;  &( ( (>" " "H< < <.# # #0   _ 5 5 \5s s 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 3 3 3 3 3 F F F F F F           



I I I I IN I I I I Ir   