
    Uh@                     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         r5t          | j         d          r | 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_wf)fields)system=Tactivityr   T)filterr
   cache_inmemory)coder   zsystem:default)parenthasattrr	   loadmodelsr   getr   )objautoload_fieldsr	   s       ./common/models/cmf_scheme_wf.pycalc_schemezCmfSchemeWf.calc_scheme   s     *,
 	: 	J'#*k:: 	J
,111III 	A+//*** #s|48 +4 0 A AY  	<*..%%%///7 &d / < <I     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_prefixr   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}|                      |          }|r%t                              d| d| d|             |S |j        rT|j        j                                        r6|j        j        }t                              d| d| d|j                    |S |j        dk    r(|j        dvr|j        rE|	                    dg           |j
        j        }t                              d| d| d	           |S |j        d
k    r_| j                                        }|s!t          j                            dd          }t                              d| d| d           |S |j        dk    r_| j                                        }|s!t          j                            dd          }t                              d| d| d           |S |j        r8|j        	                    dg           |j        j        j        r|j        j        S | j                                         |j        D ];}|	                    dg           |j        j        r|j        | j        k    r|j        }<|r#t                              d| d| d           |S |j        dk    r| j                                        }n| j                                        }|j        dk    r|j        rt.                              |j                  t          j        u rY|j        j                                         |j        j        r/|j        j        }t                              d| d| d           |S | j                                        }|j        dk    rd|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 для данного объекта
        Nu*   DEV: calc_workflow: для объекта u    найден wf u    по CmfSchemeRules u&    по obj.logic_type.default_workflow r   )r   task.subprojectzcloned_from.workflowu    по obj.cloned_from.workflowr   ztask.epic:defaultTr   u    из default_epic_workflowr.   ztask.subproject:defaultu!    из default_subproject_workflowdefault_task_workflowu     по 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_idload_fieldscloned_fromworkflowdefault_epic_workflowr   CmfWorkflowr   default_subproject_workflow	main_listr/   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)r*   r   r9   list_s       r   calc_workflowzCmfSchemeWf.calc_workflow:   s    ))#.. 	GG|||W_||vz||}}}O > 	cn=BBDD 	~6HGG  X  X  XW_  X  X  HK  HV  X  X  Y  Y  YO>Y&&3+;Cc+c+c!  !7 8999?3  DS  D  D[c  D  D  D  E  E  E;..5::<< e%155;N_c5ddH  AS  A  A[c  A  A  A  B  B  B#444;@@BB k%155;Tei5jjH  GS  G  G[c  G  G  G  H  H  H } ?))+B*CDDD=6B ?=>>&++--- ; ;!!#:";<<<.: ;u?Z^b^x?x?x$:H    FS  F  F[c  F  F  F  G  G  G :--8==??5::<<>]**$++C,>??6CUUU(--///?+ $"7HGG  D  D  D_g  D  D  D  E  E  E#O5::<<H>Y&&>118==??!%8887<<>> =5::<< 	GG  R  R  RW_  R  R  LP  R  R  S  S  SO%))/GX\)]]	tStttuuur   c           
      b   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d          }|sd S |j        rJ| |j        k    r?t                              d| d|j                    |j        	                    |          S |j
        S )Nr	   r   OR)cmf_model_namer   NrL   )r4   r   Nr4   )r   r   Nr   orderno)rL   r4   r   target_workflowtarget_scheme_wfT)r   order_byr
   r   u.   DEV: _find_wf_in_rules: для объекта u>    рекурсивно перешли в rule.target_scheme_wf=)r   CmfSchemeWfRuler   r#   r4   r   rO   r2   r3   rI   rN   )r*   r   rules      r   r1   zCmfSchemeWf._find_wf_in_rules   s   %))c4(4447Gcn6]^000<cn2UV...S#,0OP	  [fff * 

 

  	4  	<TT-B%B%BGG  `S  `  `  IM  I^  `  `  a  a  a(66s;;;##r   c                 R    g d}t                                                      |z   S )N)templater/   rG   r:   r<   rE   rF   rD   r?   r   r   strict_task_logic_typestrict_list_logic_typestrict_document_logic_type)supersave_preload_fields)r*   r
   	__class__s     r   rY   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))transliterater\   is_newrT   	cmf_alertr   
is_changedoldrU   r7   r   namer   r   r&   
startswith_calc_default_workflowsrX   save)r*   argskwargsr\   rZ   s       r   rg   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)rf   rX   _save_import)r*   rh   ri   rZ   s      r   rl   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)r/   rT   r   rG   r:   r<   rE   rF   rD   r?   r   r   rU   rV   rW   r*   s    r   rf   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 rk    rn   s    r   _calc_scheme_wfzCmfSchemeWf._calc_scheme_wf      r   c                     d S rk   rp   rn   s    r   _calc_logic_typezCmfSchemeWf._calc_logic_type  rr   r   c                 d    | j         rd S t          j                            dd          | _         d S )Nr0   Tr   )r9   r   r;   r   rn   s    r   _calc_workflowzCmfSchemeWf._calc_workflow  s4    = 	F*..4L]a.bb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 )NrU   )r   LIKEztask.%rV   )r   rx   zlist.%rW   )r   rx   z
document.%r   )r   zNOT LIKE
task.sub:%r   )r   rx   ry   r   )rX   field_options_list)clsrelation_field_namer   ri   rZ   s       r   rz   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   )CmfActiveEntityrK   r	   z==rO   )r   include_deletedinclude_systemr}   T)	only_datau.   Эта схема используется в u(   , удаление невозможно.r]   )common.models.cmf_active_entityr   r   rQ   listdeleteiter_subclassesr	   rg   ra   rX   )	r*   r}   rh   ri   r   rR   modelr   rZ   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   rk   )__name__
__module____qualname__staticmethodr   r,   rI   r1   rY   rg   rl   rf   rq   rt   rv   classmethodrz   r   __classcell__)rZ   s   @r   r   r      sY         \0  6` ` `D$ $ $&6 6 6 6 6&    :. . . . .^ ^ ^>    c c c
 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   rp   r   r   <module>r      sm        " " " "hR hR hR hR hR&--9 hR hR hR hR hRr   