
    fiB                     P    d dl T d dlZ G d dej        j        j                  ZdS )    )*Nc                        e Zd Zed             Zd Zd Zd Z fdZ fdZ	 fdZ
d Zd	 Zd
 Zd Zed fd	            Zdd fd
Z xZS )CmfSchemeWfc                 ^   ddg}d}| j         rEt          | j         d          r0| j                             d |D                        | j         j        }|s.t          j                            g ddd| j        gg|d	
          }|s(t          j                            g dg dg|d	
          }|S )uy   
        Возвращает CmfSchemeWf
        Алгоритм выбора схемы для объекта
        default_task_logic_typedefault_subtask_logic_typeN	scheme_wfc                     g | ]}d | S )z
scheme_wf. .0fs      ./common/models/cmf_scheme_wf.py
<listcomp>z+CmfSchemeWf.calc_scheme.<locals>.<listcomp>   s!    #N#N#N$4$4$4#N#N#N    )system=Tactivityr   T)filterfieldscache_inmemory)coder   zsystem:default)parenthasattrload_fieldsr	   modelsr   getr   )objautoload_fieldsr	   s      r   calc_schemezCmfSchemeWf.calc_scheme   s     *,
 	: 	-'#*k:: 	-J""#N#No#N#N#NOOO
,I 	A+//*** #s|48 +4 0 A AY  	<*..%%%///7 &d / < <I r   c                 @   |j         dk    r|j        rl|j        j                                         |j        j        r|j        j        j        dv s/| j        r| j        S t          j                            dd          S t          |j
                  dk    r(|j
        d         j                                        }|r|S | j        r| j        S t          j                            dd          S |j         dk    r!t          j                            d	d          S |j         d
k    r!t          j                            dd          S |j         dk    r!t          j                            dd          S |j         dk    r!t          j                            dd          S d S )NCmfTask)	task.epicztask.gantt_projectztask.sub:defaultT)r   r   r   ztask.base:default
CmfProjectzproject.base:defaultCmfDocumentzdocument.base:defaultCmfDealzdeal.base:defaultCmfListzlist.base:default)
class_nameparent_tasklogic_prefixloadvaluer   r   CmfLogicTyper   lenlistsr   )selfr   lts      r   calc_logic_typezCmfSchemeWf.calc_logic_type    s   >Y&& a,113334 a9U9[  `C  :C  :C6 ?#>>!.228J[_2```39~~!!Yq\9>>@@ I+ 433&**0CTX*YYY>\))&**0FW[*\\\>]**&**0GX\*]]]>Y&&&**0CTX*YYY>Y&&&**0CTX*YYYtr   c                 	   dg}d}|                      ||          }|r%t                              d| d| d|             |S |j        rV|j        j                            |          r6|j        j        }t                              d| d| d|j                    |S |j        dk    rO|j        d	vrE|j        rN|	                    d
 |D                        |j
        j        }t                              d| d| d           |S |j        dk    rb| j                            |          }|s"t          j                            d|d          }t                              d| d| d           |S |j        dk    rb| j                            |          }|s"t          j                            d|d          }t                              d| d| d           |S |j        rA|j        	                    d |D                        |j        j        j        r|j        j        S | j                            |           |j        D ]D}|	                    d |D                        |j        j        r|j        | j        k    r|j        }E|r#t                              d| d| d           |S |j        dk    r| j                            |          }n| j                            |          }|j        dk    r|j        rt.                              |j                  t          j        u r[|j        j                            |           |j        j        r/|j        j        }t                              d| d| d           |S | j                            |          }|j        dk    rj|j        dk    r| j                            |          }n&|j        dk    r| j                            |          }|s| j                            |          }|r%t                              d| d| d|             |S t          j                            d|d          }t                              d| d           |S ) uW   
        Возвращает CmfWorkflow для данного объекта
        save_eval_codeN)r   u*   DEV: calc_workflow: для объекта u    найден wf u    по CmfSchemeRules u&    по obj.logic_type.default_workflow r"   )r#   task.subprojectc                     g | ]}d | S )zcloned_from.workflow.r   r   s     r   r   z-CmfSchemeWf.calc_workflow.<locals>.<listcomp>X   s!     P P P!<!<!< P P Pr   u    по obj.cloned_from.workflowr#   ztask.epic:defaultT)r   r   r   u    из default_epic_workflowr5   ztask.subproject:defaultu!    из default_subproject_workflowc                     g | ]}d | S zdefault_task_workflow.r   r   s     r   r   z-CmfSchemeWf.calc_workflow.<locals>.<listcomp>p   s!    *[*[*[A+GA+G+G*[*[*[r   c                     g | ]}d | S r8   r   r   s     r   r   z-CmfSchemeWf.calc_workflow.<locals>.<listcomp>v   s!    "S"S"SA#?A#?#?"S"S"Sr   u     по list.default_task_workflowztask.subr%   u    по tree_parent.workflowr'   zlist.releasezlist.agile_sprintu*    по CmfSchemeRules.default_NNN_workflow default.system:defaultu2    не нашли wf, вернули system:default)_find_wf_in_rulesgdebug
logic_typedefault_workflowr+   r(   r*   cloned_from_idr   cloned_fromworkflowdefault_epic_workflowr   CmfWorkflowr   default_subproject_workflow	main_listdefault_task_workflowis_not_nullr/   default_subtask_workflowtree_parentcmfutilget_model_by_idtree_parent_idr%   default_document_workflowdefault_release_workflowdefault_sprint_workflowdefault_list_workflow)r0   r   	wf_fieldsrB   list_s        r   calc_workflowzCmfSchemeWf.calc_workflow;   s    &(	))#i)@@ 	GG|||W_||vz||}}}O > 	cn=BB)BTT 	~6HGG  X  X  XW_  X  X  HK  HV  X  X  Y  Y  YO>Y&&3+;Cc+c+c!   P Pi P P PQQQ?3  DS  D  D[c  D  D  D  E  E  E;..5::):LL w%155;NW`qu5vvH  AS  A  A[c  A  A  A  B  B  B#444;@@	@RR }%155;T]fw{5||H  GS  G  G[c  G  G  G  H  H  H } ?))*[*[QZ*[*[*[\\\=6B ?=>>&++9+=== ; ;!!"S"S"S"S"STTT.: ;u?Z^b^x?x?x$:H    FS  F  F[c  F  F  F  G  G  G :--8==Y=OO5::):LL>]**$++C,>??6CUUU(--Y-????+ $"7HGG  D  D  D_g  D  D  D  E  E  E#O5::):LLH>Y&&>118==Y=OO!%8887<<I<NN M5::):LL 	GG  R  R  RW_  R  R  LP  R  R  S  S  SO%))/GPYjn)oo	tStttuuur   c           
         t           j                            dd| gdg ddd|j        ggdg ddd|j        ggdg dd	d|j        gggd
gg d|z   d |D             z   d          }|sd S |j        rJ| |j        k    r?t                              d| d|j                    |j        	                    |          S |j
        S )Nr	   r   OR)cmf_model_namer   NrW   )r>   r   Nr>   )r   r   Nr   orderno)rW   r>   r   target_scheme_wfc                     g | ]}d | S )ztarget_workflow.r   r   s     r   r   z1CmfSchemeWf._find_wf_in_rules.<locals>.<listcomp>   s;      `H  `H  `H{|`vst`v`v  `H  `H  `Hr   T)r   order_byr   r   u.   DEV: _find_wf_in_rules: для объекта u>    рекурсивно перешли в rule.target_scheme_wf=)r   CmfSchemeWfRuler   r(   r>   r   rY   r<   r=   rT   target_workflow)r0   r   r   rules       r   r;   zCmfSchemeWf._find_wf_in_rules   sT   %))c4(4447Gcn6]^000<cn2UV...S#,0OP	  [SSSV\\  `H  `H  AG  `H  `H  `H  H * 

 

  	4  	<TT-B%B%BGG  `S  `  `  IM  I^  `  `  a  a  a(66s;;;##r   c                 R    g d}t                                                      |z   S )N)templaterG   rQ   rC   rE   rO   rP   rN   rI   r   r   strict_task_logic_typestrict_list_logic_typestrict_document_logic_type)supersave_preload_fields)r0   r   	__class__s     r   re   zCmfSchemeWf.save_preload_fields   s1    
 
 
  ww**,,v55r   c                    ddl m} | j        r| j        st	          dd           | j        s+| j        j        rd| j        j        v rt	          dd           | j        sT| j        j        rH| 	                    dd	g           | j
        r*| j
        | j        vrt	          d
| j
        j                    | j        j        rZ| j        rS| j        j                                         | j        j        j                            d          st	          dd           |                                   t#                      j        |i | d S )Nr   )translituG   Для создания SchemeWf нужно указать шаблонTabortz:defaultuF   Нельзя менять код у типов по умолчаниюzstrict_task_logic_type.namer   u  Логический тип по умолчанию для новых задач отсутствует в Разрешенных логических типах задач. Выберите в поле Логический тип по умолчанию один из разрешенных логических типов, иначе в проекте могут появиться задачи с логическим типом z	task.sub:u   В поле Логический тип по умолчанию для новых Подзадач можно указывать только логические типы для Подзадач (task.sub))transliteraterh   is_newr`   	cmf_alertr   
is_changedoldra   r   r   namer   r+   r,   
startswith_calc_default_workflowsrd   save)r0   argskwargsrh   rf   s       r   rs   zCmfSchemeWf.save   s   ******; 	mt} 	m_gkllll{ 	lty3 	l
dim8S8S^fjkkkk{ 	Ft:E 	F;=VWXXX+ F0LTXTo0o0o Eaea}  bCE E F F F *5 	k$:Y 	k+05577727=HHUU k ^eik k k k 	$$&&& 	d%f%%%r   c                 b    |                                    t                      j        |i | d S N)rr   rd   _save_import)r0   rt   ru   rf   s      r   rx   zCmfSchemeWf._save_import   s7    $$&&&d-f-----r   c                 |   | j         s#| j        j                                         | _         | j        s#| j        j                                        | _        | j        s#| j        j                                        | _        | j        s#| j        j                                        | _        | j        s#| j        j                                        | _        | j        s#| j        j                                        | _        | j        s#| j        j                                        | _        | j	        s#| j        j	                                        | _	        | j
        s#| j        j
                                        | _
        | j        s#| j        j                                        | _        | j        s*| j        r#| j        j                                        | _        | j        s*| j        r#| j        j                                        | _        | j        s,| j        r'| j        j                                        | _        dS dS dS )uG   
        Бизнес-процессы по умолчанию
        N)rG   r`   r+   rQ   rC   rE   rO   rP   rN   rI   r   r   ra   rb   rc   r0   s    r   rr   z#CmfSchemeWf._calc_default_workflows   s!    ) 	T)-)L)Q)Q)S)SD&) 	T)-)L)Q)Q)S)SD&) 	T)-)L)Q)Q)S)SD&/ 	`/3}/X/]/]/_/_D,, 	Z,0M,R,W,W,Y,YD)+ 	X+/=+P+U+U+W+WD(- 	\-1]-T-Y-Y-[-[D*, 	Z,0M,R,W,W,Y,YD)+ 	X+/=+P+U+U+W+WD(. 	^.2m.V.[.[.].]D+* 	Vt} 	V*.-*N*S*S*U*UD'* 	Vt} 	V*.-*N*S*S*U*UD'. 	^4= 	^.2m.V.[.[.].]D+++	^ 	^ 	^ 	^r   c                     d S rw   r   rz   s    r   _calc_scheme_wfzCmfSchemeWf._calc_scheme_wf      r   c                     d S rw   r   rz   s    r   _calc_logic_typezCmfSchemeWf._calc_logic_type  r}   r   c                 h    | j         rd S t          j                            dddg          | _         d S )Nr:   Tr4   )r   r   r   )rB   r   rD   r   rz   s    r   _calc_workflowzCmfSchemeWf._calc_workflow  s:    = 	F*..4L]ak{j|.}}r   Nc                     |sg }|dk    r|g dg}|dk    r|g dg}|dk    r|g dg}|dk    r|g dg}|d	k    r|g d
g} t                      j        |fd|i|S )Nra   )r   LIKEztask.%rb   )r   r   zlist.%rc   )r   r   z
document.%r   )r   zNOT LIKE
task.sub:%r   )r   r   r   r   )rd   field_options_list)clsrelation_field_namer   ru   rf   s       r   r   zCmfSchemeWf.field_options_list  s     	F":::8889F":::8889F">>><<<=F";;;@@@AF">>><<<=F)uww)*=WWfWPVWWWr   F)TEXKOM_db_deletec                   ddl m} t          j                            ddd| gdd| gg||          D ]} |j        |d|i| |                                D ]U}|                    dd| g||          D ]7}|rd |_        |                    d	
           "t          d| dd	           8V t                      j        |d|i|S )Nr   )CmfActiveEntityrV   r	   z==rY   )r   include_deletedinclude_systemr   T)	only_datau.   Эта схема используется в u(   , удаление невозможно.ri   )common.models.cmf_active_entityr   r   r\   listdeleteiter_subclassesr	   rs   rm   rd   )	r0   r   rt   ru   r   r^   modelr   rf   s	           r   r   zCmfSchemeWf.delete!  sY   CCCCCC*//{DQU>VYkmqrvXw7x@Paq 0 s s 	L 	LDDKK0@KFKKKK$4466 	J 	JEzz+tD)A0@Qa " c c J J# J$(CMHHtH,,,,|s|||  EI  J  J  J  J  JJ uww~tQ6FQ&QQQr   rw   )__name__
__module____qualname__staticmethodr    r2   rT   r;   re   rs   rx   rr   r|   r   r   classmethodr   r   __classcell__)rf   s   @r   r   r      sY         \2  6b b bH$ $ $&6 6 6 6 6&    :. . . . .^ ^ ^>    ~ ~ ~
 X X X X X [X  .3 R R R R R R R R R R Rr   r   )cmf.includecommon.fields.cmf_scheme_wfcommonr   cmf_scheme_wfr   r   r   r   <module>r      sm        " " " "kR kR kR kR kR&--9 kR kR kR kR kRr   