U
    $-dgA                     @   sT   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 deZ	dS )	    )cached_property)JiraBaseImport)CmfPluginImportMixin)*)fieldsNc                   @   sl   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Zdd Z	e
dd Zedd Zdd Zedd ZdS )JiraCSVImportu5   Класс загрузки объектов из CSVc                 C   s   | j  }| |S N)
cmf_importZcalc_import_excel_settings_set_default_import_settings)selfsettings r   ./modules/jira/csv_import.pytmplt_import_settings   s    
z#JiraCSVImport.tmplt_import_settingsc           
   	   C   s   t  }|  }t| jjd jdv}t|}t|D ]\\}}|dkrT| jj	d rTq6| 
||}|s6| |\}}	|	r6|jr6|jdkr6||j q6W 5 Q R X 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	CmfPersonZregister_persons)
r   Znew_user_emailsissue_id_to_code_infofr   irowZtaskperson
is_createdr   r   r   process_import   s    
zJiraCSVImport.process_importc           
   	   C   s   i }t | jjD ]\}}|||d  < qd}d}d|krB|d }d|krR|d }d|krb|d }d|krr|d }|dks|dkri S i }t| jjd jdH}t|}t |D ].\}}	|dkr| jj	d	 rq|	| ||	| < qW 5 Q R X |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   Zcolumn_name_to_num_mappingr$   settingZcolumn_key_numZcolumn_id_numZissue_id_to_code_mappingr#   r   r%   r   r   r   r   $   s.    
z(JiraCSVImport._get_issue_id_to_code_infoc              	   C   s\  g }ddg g d}d}d}t | jjd jd}t|}| jjd rNt| t|D ]\}}|dkrl qg }	|d	 	|	 t| jj
D ]v\}
}|d
 sq|d
 d dd }|dkrd}n|dkrd}|dkr|dkr|d 	|d
 d  |		||
  qqVW 5 Q R X |d r"|	| |r>d|d< tjj|d< n|rXd|d< tjj|d< |S )Nu   СделкиZ	handshake)r)   icontitlesrowsFr   r   r      r1   model_fieldZfield_qualname.CmfTaskTr!   )r!   r5   r0   Zcaptionu   Задачиr)   r/   u   Пользователи)r   r	   r   r   r   r   r   nextr   appendr,   splitr    r5   r/   r!   )r   resultZdealsZis_taskZ	is_personr#   r   r$   r%   Zdata_rowjr   Z
model_namer   r   r   previewC   sD    
 

zJiraCSVImport.previewc                 C   s   t | dsi | _|| jkrd| j|< t| jjD ]z\}}|| |kr0|d dd dd }t| jjD ]0\}}|d  |rjd|| i| j|<  qqj| j| r0 qq0| j| S )u  Получение имени автора по названию столбцу, соответствующему названию столбцу с его id

        Args:
            author_id: id автора
            row: строчка из excel
        _get_jira_comment_info_cacheNr)    name)hasattrr<   r   r	   r,   r8   r-   
startswith)r   Z	author_idr%   r$   r.   column_namer:   Zsetting2r   r   r   _get_jira_author_infog   s    



z#JiraCSVImport._get_jira_author_infoc           	      C   s   t j}i }t| jjD ]^\}}|d r|| s0q|d d t jjkrFq|d d }|| ||< |dkr||  ||< q|s~dS t| j||\}}||fS )Nr3   verbose_name
field_namer   )NF)r    r!   r   r	   r,   rE   r   process_any_table_fields)	r   r%   
main_modelnormalized_fieldsr$   r.   rF   new_objr'   r   r   r   r   ~   s"    
zJiraCSVImport._process_personc                 C   s6   t  }tjj D ]\}}t|tjr|| q|S r   )r   r    r5   r   items
issubclassZ
CmfRelBaser   )r   ZrelsrF   Zfieldr   r   r   
_tasks_rel   s
    zJiraCSVImport._tasks_relc                 C   s   t dd| S )Nz(\!(.+?)\|.+?\!) )resub)textr   r   r   _delete_images   s    zJiraCSVImport._delete_imagesc              	   C   s  t j}i }d}d }g }g }d }	t t  }
}i }t| jjD ]\}}|d  }d|krx|| rx|| |||  d|kr|| r|| |kr|| ||||   d|kr|| r|| }	|d r<|| sq<|d d ||  }}| 	||}|d d t j
jkr^|jd	d
d}t|dkr^|| |d | |d || |d
 d |d d t jjkr|dkrd|i}|||< |d d t jjkrq<|dkrd}nF|dkr|}n6|dkr|r<|
| q<n|dkr|r<|| q<|| jkrBd}d|krd}t||ts4i ||< ||| |< q<|||< q<|rZ||d< |sdd S |r|rd|i|d d< d|d d< t|d d |d d< |rd|kr|d  dd | d!7  < d"|kr|d" | t| j||\}}d"|krd#d$dg}|D ]2}t||rt| jt j|jt||d% q|	rt| jt j|	|j|jd&\}}t| jt j ||d% |
D ]R}t j!j|d'}|st| jt j!d|i t| jt j"|t j!j|d'd% qt#| j|| |S )(NFr)   u   внешняя ссылкаu   родительu   спринтr3   rF   rE   ;   )maxsplit   r   r2   )cmf_created_at
cmf_authorrQ   	cmf_ownerr@   statusTactivity
spectatorstagsu   идентификаторcodecommentsZcmf_model_activityr5   Z	cmf_modelZstatus_typerQ   z
<ul>rN   z</ul>parentresponsiblerX   )leftright)r@   r`   Ztree_parent)r@   )$r    r5   r   r   r	   r,   r-   r7   Z_get_link_for_descriptionZ_normalize_jira_value
CmfCommentrE   r8   lenZ_translate_monthrD   rR   
CmfProjectr   rM   
isinstancegetdictr   Zget_status_typejoinupdaterG   getattrZCmfProjectExecutorsr`   ZCmfListZCmfListCmfTaskr!   ZCmfTaskSpectatorsZprocess_tags)r   r%   r"   rH   rI   Zset_activity_fieldZactivity_namer_   ZlinksZ	list_nameZspectator_namesZ	tag_namesZparent_infor$   r.   rC   rF   valueZcomment_valuesZrel_field_namerJ   _Zproject_executorsexecutorZlist_objZspectator_namer&   r   r   r   r      s    












z(JiraCSVImport._process_task_without_dealc                 C   s  | s| S dd }ddddddddd	d
ddd}|t jd|t jd|t jd|t jd|t jd|t jd|t jd|t jd|t jd|t jd|t jd|t jd|t jd|t jd|t jd|t jdd}|d|t jdi ||t jd|t jd|t jd d! |d"|t jdi | D ]\}|d# D ]L}|d$  }|||}|d% d kr:||kr:|| r:|| |d%< q:q.| S )&Nc                 S   s   | j |gd}|r|d S d S )N)Zfields_namer   )Zimport_shop_fields)ZmodelrF   resr   r   r   _get_field_name  s    zCJiraCSVImport._set_default_import_settings.<locals>._get_field_name   резюмеr*      описаниеr+      статусu   ключ проекта   приоритет
   автор   создательu   комментарий)Zsummaryu   темаu   pезюмеkeydescriptionidrZ   ZprojectpriorityZauthorZreporterZcommentr@   r^   rQ   r[   rZ   r{   ra   rX   rY   rW   Zcmf_modified_atZ
alarm_dateZdeadliner`   r\   r]   )rr   r*   rs   u   тип задачиrt   ru   u   исполнительrv   rw   u   созданоu   обновленоu6   пользовательское поле (start date)u   срок исполненияu   название проектаu   наблюдателиu
   меткиr   r   )z	user namer   zuser statusu'   руководитель проектаr   r)   r3   )r    r5   rk   rd   r!   rf   r-   rh   )r   rq   Zsynonymsmappingr.   Zcolumn_inforC   r   r   r   r
     sj    















 



 
"z*JiraCSVImport._set_default_import_settingsN)__name__
__module____qualname____doc__r   r(   r   r;   rD   r   r   rM   staticmethodrR   r   r
   r   r   r   r   r   
   s   $

ur   )
r   Zmodules.jira.base_importr   Z%common.models.cmf_plugin_import_mixinr   Zcmf.includeZcmfr   r   r   r   r   r   r   <module>   s   