
    `>h-                         d dl mZmZ d dlmZmZ d dlmZ d dl d dlmZ d dl	m
Z
 d dlmZ  G d d	e
j                        Zy
)    )ListOptional)datetimetimezone)copy)*fields)cmf_plugin_import_mixin)	CmfImportc                       e Zd Zd Zdd fd
Zd Zd Zd Zd Ze		 dd
e
dedee   deeffd       Ze	dedeeeffd       Ze	d
e
dee   dd	fd       Ze	dedefd       Ze	dedefd       Ze	dedefd       Z xZS )CmfPluginImportMixinc                 j    | j                   r'| j                  st        j                         | _        y y y N)is_newpluginmodels	CmfPlugin)selfs    *./common/models/cmf_plugin_import_mixin.py_init_settingsz#CmfPluginImportMixin._init_settings   s&    ;;t{{ **,DK  +;    r   )depthc                F    | j                          t        |   |d|i|S )Nr   )r   supersave)r   r   argskwargs	__class__s       r   r   zCmfPluginImportMixin.save   s(    w|T99&99r   c                     t               r   NotImplementedr   r   r   s      r   calc_import_settingsz)CmfPluginImportMixin.calc_import_settings       r   c                     t               r   r!   r#   s      r   process_importz#CmfPluginImportMixin.process_import   r%   r   c                     t               )u2    Превью результата импорта r!   r#   s      r   previewzCmfPluginImportMixin.preview   s    r   c                     t               r   r!   r#   s      r   calc_models_settingsz)CmfPluginImportMixin.calc_models_settings   r%   r   N
cmf_import
obj_fields
filter_objreturnc                 ,   dd}fdt         j                  ||      \  }}}|j                         D ]+  \  }}	t         j                  | |	d   |	d         \  }
}|
||<   - |j                         D ]  \  }}	|j	                  |      g ||<   t        |	d   t              r=|	d   D ]4  }t         j                  | |	d   |      \  }
}||   j                  |
       6 lt         j                  | |	d   |	d         \  }
}||   j                  |
        |t        j                  k(  r>|s<d|d	<   d
|v r3t        j                  j	                  |d
   dg      }|r|dfS |d
   |d<   |t        j                  k(  r8dd|d   gdd|d   gg}|j	                  d      r|j                  dd|d   g       |r|}ng }g d}|D ],  }|j	                  |d      }|s|j                  |d|g        n |s|j                         D ]  \  }}t        ||      s|st        |t        j                  j                        s%t        t        ||      t         j"                        s_|j                  | ddt%        |j&                        g        d}|r\|D cg c]  }| }}|j)                  |      } |      dkD  r|j	                  |      }|r |||       n|j	                  ||      }|rdnd}|r|n8 || |j	                  d      |j	                  d      |j	                  d            }t        |d      r|j*                  s|r%|j                         D ]  \  }}t-        |||        |j.                  r|j1                  d       |}||fS c c}w )u.  
        Создание объектов на основании моделей при импорте
        :param CmfImport cmf_import: Объект импорта для хранения настроек, статуса по текущему импорту
        :param model: Модель по которой создается объект
        :param dict obj_fields: Параметры объекта
        :param Optional[list] filter_obj: Фильтр для проверки на существование объекта в БД
        @  c                 n    t        dt        |      |      D ]  }||||z    }| j                  |        y )Nr   r	   )rangelenload_fields)obj
all_fields
batch_sizeibatchs        r   safe_load_fieldszGCmfPluginImportMixin.process_any_table_fields.<locals>.safe_load_fields+   s<    1c*oz: ."1Qz\2u-.r   c                 ~    d}| j                         D ]&  \  }}|dz  }t        |t              s| |      z  }( |S )Nr      )items
isinstancedict)dtotalkeyvaluecount_all_keyss       r   rE   zECmfPluginImportMixin.process_any_table_fields.<locals>.count_all_keys/   sJ    Eggi 3
U
eT*^E22E3 Lr   modelr
   )rF   r-   NT
user_localemailz**)rH   r
   Floginstatus_typez==workflowname)coderL   rH    _idfilter)rQ   r
   parentrM   )r,   rL   rR   rM   import_original)save_import)r1   )r   _get_any_table_fieldsr>   process_any_table_fieldsgetr?   listappendr   	CmfPerson	CmfStatushasattrcmf	CmfEntity
issubclassgetattrr
   
CmfRelBasestrid_build_load_planrS   setattr
is_changedr   )r,   rF   r-   r.   r;   related_objscurrent_objm2m_objsmain_field_namerelated_inforelated_obj_valexisted_person_filteruniq_field_namesuniq_field_nameuniq_field_value
field_namerD   existing_obj_fieldsfull_fields_loadr   new_objrE   s                            @r   rV   z-CmfPluginImportMixin.process_any_table_fields!   s   	.	 /C.X.XY^`j.k+k8 .:-?-?-A 	7)O\1JJ:]ijq]rVbckVl K nNK+6K(	7
 .6^^-= 	A)O\/7/1O,,x0$7'1 EC%9%R%RS]eqryezEH &S &JNK077DE
 "6!N!NzamnuavGST\G] "O "_QO,33K@	A F$$$Z(,K%+%!'!1!1!5!5K<PZ^Y_!5!`!)500'27';G$F$$$k-&@AT;z#:;J v&!!64V1D"EF  GG8#3 #.???B#G #NNOT;K#LM	 )4):):)< R%J"5*5 *UCJJ4H4H"I%/z0JFL]L]%^:,c(:D#ehh-'PQR 2=>JZ>G>$55g>./$6$yyy8$\7;$yyyH&D".,EZVaVeVeflVmALQYAZ?Jv?V5X 7-.73J3Jf%0%6%6%8 4!
EU34 LLTL* V##? ?s   	Nc                    i }i }i }|j                         D ]  \  }}t        |t        t        f      r| j                  j                  |      }|dk(  r2|j                         D cg c]  }|j                  dk(  s| c}d   }	n|j                         d   }	t        |t              r|n|}
|	|d|
|<   |||<    |||fS c c}w )NrR   
CmfProjectr   )rF   r
   )r>   r?   r@   rX   r
   rW   related_models__name__)rF   r-   rg   rh   ri   rt   rD   
main_fieldmrelated_modelobj_types              r   rU   z*CmfPluginImportMixin._get_any_table_fields   s    !+!1!1!3 
	0J%$."\\--j9
)0:0I0I0K$j1qzz]iOiQ$jkl$mM$.$=$=$?$BM+5eT+B<1>%'P$*/J'
	0 [(22 %ks   %C:C	tag_namesc           	      ~   ddl m} |sy|j                  j                          |D ]  }|j	                  dd      j	                  dd      } ||dd	
      }	 dddd| dgdd|gddd| dgg}t
        j                  j                  |      }|s&t
        j                  |      }|j                          |j                  j                  |        |j                  r-|j                  d	       |j                  j                          yy# t        $ r&}t        j                  d| d|        Y d}~d}~ww xY w)u{  
        Создание тегов при импорте
        :param CmfImport cmf_import: Объект импорта для хранения настроек, статуса по текущему импорту
        :param CmfTask obj: Родитель для связки тегов
        :param List[str] tag_names: Список названий тегов
        r   )translitN rm   #rN   ruT)language_codereversedORaliasILIKE"z"%rL   rP   )rL   u*   Не удалось создать тег z: )	only_data)transliterater   tagsloadreplacer   CmfTagrW   r   	ExceptionloggingwarningrY   rf   dpcommit)	r,   r6   r   r   tag_name
name_aliasrp   tag_objes	            r   process_tagsz!CmfPluginImportMixin.process_tags   s8    	+! 	%H''S199#rBH!($NJ#W(2.>?"GX6#W*R.@AC !--++7+;$mmm:GLLN HHOOG$	%  >>HHtH$FFMMO 	  "LXJVXYZX[ \]s   AD	D<D77D<rL   c                     dgg ddgdgdgd}|j                         D ]$  \  }}|D ]  }|| j                         v s|c c S  & y)ue    Поиск программных типов workflow для проектов по синониму agile)baseu   основнu   классическhelpdeskservicedeskwiki)project.agilezproject.basezproject.helpdeskzproject.servicedeskzproject.wikir   r>   lower)rL   mappinglogic_prefixwordswords        r   get_logic_prefixz%CmfPluginImportMixin.get_logic_prefix   sf     &YL!+$1?#H
 $+==? 	(L% (4::<'''(	( r   c                     dgddgdgg dd}|j                         D ]$  \  }}|D ]  }|| j                         v s|c c S  & y)u+    Поиск priority по синониму u   низкu
   обычнu   нормальнu   срок)u   блокирующu
   высокu
   больш)r   r=      r   r   )rL   r   priorityr   r   s        r   get_priorityz!CmfPluginImportMixin.get_priority   sc     01|A	
  '}} 	$OHe $4::<'#O$	$ r   c                     g dg dddgg dd}|j                         D ]$  \  }}|D ]  }|| j                         v s|c c S  & y)N)u   открытopenu   к выполнениюtodonew)u
   работprogressindeterminateactivereviewu
   ревью)closeu   закрытu
   готовdonearchived)OPENIN_PROGRESS	IN_REVIEWCLOSEDr   r   )rL   r   rJ   r   r   s        r   get_status_typez$CmfPluginImportMixin.get_status_type   sa     WP"L1Q
 #*--/ 	'K '4::<'&&'	'
 r   r   )r|   
__module____qualname__r   r   r$   r'   r)   r+   staticmethodr   r@   r   rX   anyboolrV   rU   r   rb   r   r   intr   r   __classcell__)r   s   @r   r   r      s)   - !" : W[o$Y o$48o$FNtno$adfj`ko$ o$b 3 34t:L 3 3&  DI $  > s s   3 3   c c  r   r   N)typingr   r   r   r   r   cmf.includer]   r
   common.fieldsr   common.models.cmf_importr   r    r   r   <module>r      s/    ! '    1 .i2GG ir   