B
    EfgA                 @   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z}t|}xht|D ]\\}}|dkrV| jj	d rVq8| 
||}|s8| |\}}	|	r8|jr8|jdkr8||j q8W W d 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 }x(t | jjD ]\}}|||d  < qW d}d}d|krF|d }d|krV|d }d|krf|d }d|krv|d }|dks|dkri S i }t| jjd jdL}t|}x:t |D ].\}}	|dkr| jj	d	 rq|	| ||	| < qW W dQ R X |S )
u   Заранее получаем список маппинг ID задачи к Коду, так некоторые ссылки указаны по IDtitleNu   ключ задачиz	issue keyu'   идентификатор задачи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| xt|D ]\}}|dkrjP g }	|d	 	|	 xt| 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  |		||
  qW qXW W d Q R X |d r&|	| |rBd|d< tjj|d< n|r\d|d< tjj|d< |S )Nu   СделкиZ	handshake)r(   icontitlesrowsFr   r   r      r.   model_fieldZfield_qualname.CmfTaskTr    )r    r2   r-   Zcaptionu   Задачиr(   r,   u   Пользователи)r   r   r   r   r   r   r   nextr   appendr)   splitr   r2   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|< xt| jjD ]z\}}|| |kr2|d dd dd }x>t| jjD ].\}}|d  |rnd|| i| j|< P qnW | j| r2P q2W | j| S )u  Получение имени автора по названию столбцу, соответствующему названию столбцу с его id

        Args:
            author_id: id автора
            row: строчка из excel
        _get_jira_comment_info_cacheNr(    name)hasattrr9   r   r   r)   r5   r*   
startswith)r
   Z	author_idr$   r#   r+   column_namer7   Zsetting2r   r   r   _get_jira_author_infog   s    



z#JiraCSVImport._get_jira_author_infoc       	      C   s   t j}i }xnt| jjD ]^\}}|d r|| s2q|d d t jjkrHq|d d }|| ||< |dkr||  ||< qW |sdS t| j||\}}||fS )Nr0   verbose_name
field_namer   )NF)r   r    r   r   r)   rB   r   process_any_table_fields)	r
   r$   
main_modelnormalized_fieldsr#   r+   rC   new_objr&   r   r   r   r   ~   s     

zJiraCSVImport._process_personc             C   s:   t  }x.tjj D ]\}}t|tjr|| qW |S )N)r   r   r2   r   items
issubclassZ
CmfRelBaser   )r
   ZrelsrC   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 }xt| jjD ]\}}|d  }d|kr||| r||| |||  d|kr|| r|| |kr|| ||||   d|kr|| r|| }	|d r@|| sq@|d d ||  }}| 	||}|d d t j
jkrb|jd	d
d}t|dkrb|| |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rFd}d|krd}t||ts8i ||< ||| |< q@|||< q@W |r`||d< |sjd 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}x:|D ]2}t||r t| jt j|jt||d% q W |	rt| jt j|	|j|jd&\}}t| jt j ||d% xZ|
D ]R}t j!j|d'}|st| jt j!d|i t| jt j"|t j!j|d'd% qW t#| j|| |S )(NFr(   u   внешняя ссылкаu   родительu   спринтr0   rC   rB   ;   )maxsplit   r   r/   )cmf_created_at
cmf_authorrN   	cmf_ownerr=   statusTactivity
spectatorstagsu   идентификаторcodecommentsZcmf_model_activityr2   Z	cmf_modelZstatus_typerN   z
<ul>rK   z</ul>parentresponsiblerU   )leftright)r=   r]   Ztree_parent)r=   )$r   r2   r   r   r   r)   r*   r4   Z_get_link_for_descriptionZ_normalize_jira_value
CmfCommentrB   r5   lenZ_translate_monthrA   rO   
CmfProjectr   rJ   
isinstancegetdictr   Zget_status_typejoinupdaterD   getattrZCmfProjectExecutorsr]   ZCmfListZCmfListCmfTaskr    ZCmfTaskSpectatorsZprocess_tags)r
   r$   r!   rE   rF   Zset_activity_fieldZactivity_namer\   ZlinksZ	list_nameZspectator_namesZ	tag_namesZparent_infor#   r+   r@   rC   valueZcomment_valuesZrel_field_namerG   _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 xh| D ]`}xX|d# D ]L}|d$  }|||}|d% d kr>||kr>|| r>|| |d%< q>W q0W | S )&Nc             S   s   | j |gd}|r|d S d S )N)Zfields_namer   )Zimport_shop_fields)ZmodelrC   Zresr   r   r   _get_field_name  s    zCJiraCSVImport._set_default_import_settings.<locals>._get_field_nameu   резюмеu   ключ задачиu   описаниеu'   идентификатор задачиu   статусu   ключ проектаu   приоритетu
   авторu   создательu   комментарий)Zsummaryu   темаu   pезюмеkeydescriptionidrW   ZprojectpriorityZauthorZreportercommentr=   r[   rN   rX   rW   rq   r^   rU   rV   rT   Zcmf_modified_atZ
alarm_dateZdeadliner]   rY   rZ   )u   резюмеu   ключ задачиu   описаниеu   тип задачиu   статусu   приоритетu   исполнительu
   авторu   создательu   созданоu   обновленоu6   пользовательское поле (start date)u   срок исполненияu   название проектаu   наблюдателиu
   меткиr   r   )z	user namer   zuser statusu'   руководитель проектаr   r(   r0   )r   r2   rh   ra   r    rc   r*   re   )r   rm   Zsynonymsmappingr+   Zcolumn_infor@   r   r   r   r	     s\    

















"z*JiraCSVImport._set_default_import_settingsN)__name__
__module____qualname____doc__r   r'   r   r8   rA   r   r   rJ   staticmethodrO   r   r	   r   r   r   r   r   
   s   $ur   )
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   