U
    H|cE#                     @   sN   d dl mZ d dlT d dlmZ d dlmZ d dlmZ G dd dej	Z	dS )	    )Optional)*)fields)cmf_import_plugin)	CmfImportc                       s   e Zd ZeeedddZeeedddZeeedddZee	e	e	e	fdd	d
Z
ed#ee	ee eefdddZdd Zddddd fdd
Zdd fdd
Zdd Zdd Zdd Zedd  Zd!d" Z  ZS )$CmfImportPlugin)namereturnc                 C   sf   dddddgdddd	gd
dgdddddgd}|  D ]*\}}|D ]}||  krB|    S qBq6dS )Nu   открытopenu   к выполнениюZtodonewu
   работZprogressZindeterminateZactiveZreviewu
   ревьюcloseu   закрытu
   готовZdoneZarchived)r
   Zin_progressZ	in_reviewcloseditemslower)r   mappingstatus_typewordsword r   $./common/models/cmf_import_plugin.pycalc_status_type
   s    
z CmfImportPlugin.calc_status_typec                 C   sT   dgddgdgdddgd}|  D ]*\}}|D ]}||  kr0|    S q0q$d	S )
u+    Поиск priority по синониму u   низкu
   обычнu   нормальнu   срокu   блокирующu
   высокu
   больш)r         r   r   )r   r   priorityr   r   r   r   r   calc_priority   s    zCmfImportPlugin.calc_priorityc                 C   sV   dgdddgdgdgdgd}|  D ]*\}}|D ]}||  kr2|    S q2q&d	S )
ue    Поиск программных типов workflow для проектов по синониму Zagilebaseu   основнu   классическZhelpdeskZservicedeskZwiki)project.agilezproject.basezproject.helpdeskzproject.servicedeskzproject.wikir   r   )r   r   Zlogic_prefixr   r   r   r   r   calc_logic_type(   s    zCmfImportPlugin.calc_logic_type)
obj_fieldsr	   c           
      C   s   i }i }i }|  D ]x\}}t|ttfr| j|}|dkrVdd | D d }n| d }t|trp|n|}	||d|	|< q|||< q|||fS )Nparentc                 S   s   g | ]}|j d kr|qS )Z
CmfProject)__name__).0mr   r   r   
<listcomp>B   s     
 z9CmfImportPlugin._get_any_table_fields.<locals>.<listcomp>r   )modelr   )r   
isinstancedictlistr   getZrelated_models)
r&   r    related_objscurrent_objm2m_objs
field_namevalueZ
main_fieldZrelated_modelZobj_typer   r   r   _get_any_table_fields8   s    
z%CmfImportPlugin._get_any_table_fieldsN)
cmf_importr    
filter_objr	   c                 C   sl  |  ||\}}}| D ],\}}	| j||	d |	d d\}
}|
||< q|tjkr|sd|d< d|krtjj|d dgd}|r|d	fS |d |d
< |tjkrdd|d gdd|d gg}|dr|dd|d g |r|}ng }ddddg}|D ]*}||d}|r||d|g  q"q|s| D ]P\}}|r0t|t	jj
sbtt||tjr0|| ddt|jg q0d}|r|j|dd |D d}|rd	nd}|r|n|||dd}| D ]\}}t||| q|jr|r|  n|jdd |}| D ]D\}}|j|j}|d D ]"}|||< | j||d |d q<q||fS )u.  
        Создание объектов на основании моделей при импорте
        :param CmfImport cmf_import: Объект импорта для хранения настроек, статуса по текущему импорту
        :param model: Модель по которой создается объект
        :param dict obj_fields: Параметры объекта
        :param Optional[list] filter_obj: Фильтр для проверки на существование объекта в БД
        r&   r   )r&   r    TZ
user_localemailz**)r3   r   FZloginr   ==Zworkflowr   Zext_idcode Z_idNc                 S   s   g | ]}|qS r   r   )r#   r.   r   r   r   r%      s     z<CmfImportPlugin.process_any_table_fields.<locals>.<listcomp>filterr   )r1   r   )Z	only_data)r0   r   process_any_table_fieldsmodelsZ	CmfPersonr*   Z	CmfStatusappendr'   cmfZ	CmfEntity
issubclassgetattrr   Z
CmfRelBasestridsetattrZ
is_changedsaveZbackref)clsr1   r&   r    r2   r+   r,   r-   Zmain_field_nameZrelated_infoZrelated_obj_Zexisted_personZ_filterZuniq_field_namesZuniq_field_nameZuniq_field_valuer.   r/   Zexisting_objis_newZnew_objZm2m_infoZto_main_field_nameZ
field_infor   r   r   r9   L   sl    




 
z(CmfImportPlugin.process_any_table_fieldsc              	   K   s@   | j r
dS tjf | j| j| j|||d|}|  || _ dS )u3   
        Дает доступ из вне
        N)r   typetokenext_url	ext_login	ext_token)pluginr:   	CmfPluginr5   
class_namer@   rB   )selfrH   rI   rJ   kwargsrK   r   r   r   _init_secret   s      zCmfImportPlugin._init_secretr   )depthrH   rI   rJ   c                   s*   | j r| ||| t j|d|i|S )NrQ   )rE   rP   superrB   )rN   rQ   rH   rI   rJ   argsrO   	__class__r   r   rB      s    zCmfImportPlugin.saveF)forcec                   s>   t jjdd| jgddddgd}|  t j|d|i|S )NrG   r4   rH   rI   rJ   r7   rV   )r:   rL   r*   r@   deleterR   )rN   rV   rS   rO   rK   rT   r   r   rW      s
    
zCmfImportPlugin.deletec                 C   s
   t  dS )uJ   
        Формирование шаблона настроек
        NNotImplementedrN   r1   r   r   r   tmplt_import_settings   s    z%CmfImportPlugin.tmplt_import_settingsc                 C   s
   t  dS )u9   
        Предпросмотр импорта
        NrX   rZ   r   r   r   preview   s    zCmfImportPlugin.previewc                 C   s
   t  dS )u-   
        Запуск импорта
        NrX   rZ   r   r   r   process_import   s    zCmfImportPlugin.process_importc                   C   s
   t  dS )uC   
        Маппинг полей по умолчанию
        NrX   r   r   r   r   calc_models_settings   s    z$CmfImportPlugin.calc_models_settingsc                 O   s
   t  dS )uK   
        Тестирование подключения к апи
        NrX   )rN   rS   rO   r   r   r   test   s    zCmfImportPlugin.test)N)r"   
__module____qualname__staticmethodr?   r   intr   r   r(   r0   classmethodr   r   r)   anyboolr9   rP   rB   rW   r[   r\   r]   r^   r_   __classcell__r   r   rT   r   r   	   s0      O
r   N)
typingr   Zcmf.includer<   r   Zcommon.fieldsr   Zcommon.models.cmf_importr   r   r   r   r   r   <module>   s
   