
    oi/D                     h    d dl  d dlZ G d dej                  j                  j
                        Zy)    )*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                   rXt        | j                   d      rB| j                   j                  |D cg c]  }d| 	 c}       | j                   j                  }|s3t        j
                  j                  g ddd| j                  gg|d	
      }|s(t        j
                  j                  g dg dg|d	
      }|S c c}w )uy   
        Возвращает CmfSchemeWf
        Алгоритм выбора схемы для объекта
        default_task_logic_typedefault_subtask_logic_typeN	scheme_wfz
scheme_wf.)system=Tactivityr   T)filterfieldscache_inmemory)coder   zsystem:default)parenthasattrload_fieldsr	   modelsr   getr   )objautoload_fieldsr	   fs        ./common/models/cmf_scheme_wf.pycalc_schemezCmfSchemeWf.calc_scheme   s     *,
 	::'#**k:JJ""o#Nj$4#NO

,,I++//* #s||48 +4 0 AY **..%/7 &d / <I  $Os   Cc                    |j                   dk(  r|j                  r|j                  j                  j                          |j                  j                  r"|j                  j                  j                  dv s9| j
                  r| j
                  S t        j                  j                  dd      S t        |j                        dkD  r+|j                  d   j                  j                         }|r|S | j                  r| j                  S t        j                  j                  dd      S |j                   dk(  r!t        j                  j                  d	d      S |j                   d
k(  r!t        j                  j                  dd      S |j                   dk(  r!t        j                  j                  dd      S |j                   dk(  r!t        j                  j                  dd      S y )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&,,113449U9U9[9[  `C  :C66#>>>!..228J[_2``399~!YYq\99>>@I++333&&**0CTX*YY>>\)&&**0FW[*\\>>]*&&**0GX\*]]>>Y&&&**0CTX*YY>>Y&&&**0CTX*YY    c                 L   dg}d}| j                  ||      }|r t        j                  d| d| d|         |S |j                  rf|j                  j                  j                  |      r@|j                  j                  }t        j                  d| d| d|j                          |S |j                  dk(  r|j                  d	vr|j                  rV|j                  |D cg c]  }d
| 	 c}       |j                  j                  }t        j                  d| d| d       |S |j                  dk(  r^| j                  j                  |      }|s"t        j                  j                  d|d      }t        j                  d| d| d       |S |j                  dk(  r^| j                   j                  |      }|s"t        j                  j                  d|d      }t        j                  d| d| d       |S |j"                  rb|j"                  j                  |D cg c]  }d| 	 c}       |j"                  j$                  j&                  r|j"                  j$                  S | j$                  j                  |       |j(                  D ]a  }|j                  |D cg c]  }d| 	 c}       |j$                  j&                  s<|j$                  | j$                  k7  sV|j$                  }c |rt        j                  d| d| d       |S |j                  dk(  r| j*                  j                  |      }n| j$                  j                  |      }|j                  dk(  r:|j,                  rg|j                  r[|j                  j.                  rE|j                  j.                  }|j                  |       t        j                  d| d| d       |S |j0                  rt2        j5                  |j6                        t        j8                  u rp|j0                  j                  j                  |       |j0                  j                  r4|j0                  j                  }t        j                  d| d| d       |S | j:                  j                  |      }|j                  dk(  ru|j                  dk(  r| j<                  j                  |      }n+|j                  dk(  r| j>                  j                  |      }|s| j@                  j                  |      }|r t        j                  d| d| d|         |S t        j                  j                  d|d      }t        j                  d| d       |S c c}w c c}w c c}w ) uW   
        Возвращает CmfWorkflow для данного объекта
        save_eval_codeN)r   u*   DEV: calc_workflow: для объекта u    найден wf u    по CmfSchemeRules u&    по obj.logic_type.default_workflow r   )r   task.subprojectzcloned_from.workflow.u    по obj.cloned_from.workflowr   ztask.epic:defaultT)r   r   r   u    из default_epic_workflowr0   ztask.subproject:defaultu!    из default_subproject_workflowzdefault_task_workflow.u     по list.default_task_workflowztask.subr   u,    по obj.cloned_from.default_clone_workflowu    по 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is_newdefault_clone_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   	wf_fieldsr9   r   list_s         r   calc_workflowzCmfSchemeWf.calc_workflow;   s    &(	))#i)@GG@EVW_V``uvzu{|}O >>cnn==BB)BT~~66HGG@EVW_V`  aG  HK  HV  HV  GW  X  YO>>Y&3+;+;Cc+c!!i P#8!< PQ??33DSEIZ[cZd  eC  D  E;.55::):L%1155;NW`qu5vHDSEIZ[cZdd  A  B#44;;@@	@R%1155;T]fw{5|HDSEIZ[cZd  eF  G  H }}))QZ*[A-CA3+G*[\==66BB==>>>&&++9+= ;!!"SA%;A3#?"ST..::u?Z?Z^b^x^x?x$::H; DSEIZ[cZd  eE  F  G :-88==Y=O55::):L>>]*zzc00S__5[5[??AA$$Y/DSEIZ[cZd  eQ  R  S ++C,>,>?6CUCUU((--Y-???++"77HGGHM^_g^h  iC  D  E#O55::):LH>>Y&>188==Y=O!!%8877<<I<N55::):LGG@EVW_V`  aK  LP  KQ  R  SO%%))/GPYjn)o	<SEAstuY !Q0 +\ #Ts   'V-V0V!
c           
         t         j                  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 cg c]  }d| 	 c}z   d      }|sy |j                  rO| |j                  k7  r@t        j                  d| d|j                          |j                  j                  |      S |j                  S c c}w )Nr	   r   OR)cmf_model_namer   NrP   )r5   r   Nr5   )r   r   Nr   orderno)rP   r5   r   target_scheme_wfztarget_workflow.T)r   order_byr   r   u.   DEV: _find_wf_in_rules: для объекта u>    рекурсивно перешли в rule.target_scheme_wf=)r   CmfSchemeWfRuler   r"   r5   r   rR   r3   r4   rM   target_workflow)r*   r   r   r   rules        r   r2   zCmfSchemeWf._find_wf_in_rules   s2   %%))c4(47Gcnn6]^0<cnn2UV.S#,,0OP	  [SV\\  AG  `H{|brstru`v  `H  H * 

   TT-B-B%BGGDSE  JH  IM  I^  I^  H_  `  a((66s;;### `Hs   $C%c                 .    g d}t         |          |z   S )N)templater>   rJ   r:   r<   rH   rI   rG   r@   r   r   strict_task_logic_typestrict_list_logic_typestrict_document_logic_type)supersave_preload_fields)r*   r   	__class__s     r   r]   zCmfSchemeWf.save_preload_fields   s    
  w*,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                  so| j                  j                  rY| j                  dd	g       | j                  r:| j                  | j                  vr"t	        d
| j                  j                          | j                  j                  rl| j                  r`| j                  j
                  j                          | j                  j
                  j                  j                  d      st	        dd       | j!                          t#        | H  |i | y )Nr   )translituG   Для создания SchemeWf нужно указать шаблонTabortz:defaultuF   Нельзя менять код у типов по умолчаниюzstrict_task_logic_type.namer   u  Логический тип по умолчанию для новых задач отсутствует в Разрешенных логических типах задач. Выберите в поле Логический тип по умолчанию один из разрешенных логических типов, иначе в проекте могут появиться задачи с логическим типом z	task.sub:u   В поле Логический тип по умолчанию для новых Подзадач можно указывать только логические типы для Подзадач (task.sub))transliterater`   rA   rX   	cmf_alertr   
is_changedoldrY   r   r   namer   r%   r&   
startswith_calc_default_workflowsr\   save)r*   argskwargsr`   r^   s       r   rj   zCmfSchemeWf.save   sN   *;;t}}_gkl{{tyy33
diimm8S^fjk{{t::EE;=VWX++0L0LTXToTo0o aaea}a}  bC  bC  aDE F **55$:Y:Y++005572277==HHU ^eik 	$$& 	d%f%r-   c                 D    | j                          t        |   |i | y N)ri   r\   _save_import)r*   rk   rl   r^   s      r   ro   zCmfSchemeWf._save_import   s!    $$&d-f-r-   c                    | j                   s)| j                  j                   j                         | _         | j                  s)| j                  j                  j                         | _        | j                  s)| j                  j                  j                         | _        | j
                  s)| j                  j
                  j                         | _        | j                  s)| j                  j                  j                         | _        | j                  s)| j                  j                  j                         | _        | j                  s)| j                  j                  j                         | _        | j                  s)| j                  j                  j                         | _	        | j                  s)| j                  j                  j                         | _
        | j                  s)| j                  j                  j                         | _        | j                  s5| j                  r)| j                  j                  j                         | _        | j                  s5| j                  r)| j                  j                  j                         | _        | j                  s7| j                  r*| j                  j                  j                         | _        yyy)uG   
        Бизнес-процессы по умолчанию
        N)r>   rX   r%   rJ   r:   r<   rH   rI   rG   r@   r   r   rY   rZ   r[   r*   s    r   ri   z#CmfSchemeWf._calc_default_workflows   s    )))-)L)L)Q)Q)SD&)))-)L)L)Q)Q)SD&)))-)L)L)Q)Q)SD&///3}}/X/X/]/]/_D,,,,0MM,R,R,W,W,YD)+++/==+P+P+U+U+WD(---1]]-T-T-Y-Y-[D*,,,0MM,R,R,W,W,YD)+++/==+P+P+U+U+WD(...2mm.V.V.[.[.]D+**t}}*.--*N*N*S*S*UD'**t}}*.--*N*N*S*S*UD'..4==.2mm.V.V.[.[.]D+ 4A.r-   c                      y rn    rq   s    r   _calc_scheme_wfzCmfSchemeWf._calc_scheme_wf      r-   c                      y rn   rs   rq   s    r   _calc_logic_typezCmfSchemeWf._calc_logic_type  ru   r-   c                 n    | j                   ry t        j                  j                  dddg      | _         y )Nr1   Tr/   )r   r   r   )r9   r   r;   r   rq   s    r   _calc_workflowzCmfSchemeWf._calc_workflow  s1    ==**..4L]ak{j|.}r-   c                     |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        |   |fd|i|S )NrY   )r   LIKEztask.%rZ   )r   r{   zlist.%r[   )r   r{   z
document.%r   )r   zNOT LIKE
task.sub:%r   )r   r{   r|   r   )r\   field_options_list)clsrelation_field_namer   rl   r^   s       r   r}   zCmfSchemeWf.field_options_list  s    F"::89F"::89F">><=F";;@AF">><=Fw)*=WfWPVWWr-   F)TEXKOM_db_deletec                v   ddl m} t        j                  j	                  ddd| gdd| gg||      D ]  } |j
                  |d|i|  |j                         D ]K  }|j	                  dd| g||      D ]/  }|rd |_        |j                  d	
       t        d| dd	       1 M t        |   |d|i|S )Nr   )CmfActiveEntityrO   r	   z==rR   )r   include_deletedinclude_systemr   T)	only_datau.   Эта схема используется в u(   , удаление невозможно.ra   )common.models.cmf_active_entityr   r   rT   listdeleteiter_subclassesr	   rj   rd   r\   )	r*   r   rk   rl   r   rV   modelr   r^   s	           r   r   zCmfSchemeWf.delete(  s   C**//{DQU>VYkmqrvXw7x@Paq 0 s 	LDDKKK0@KFK	L %446 	JEzz+tD)A0@Qa " c J#$(CMHHtH, NseS{|  EI  JJ	J w~tQ6FQ&QQr-   rn   )__name__
__module____qualname__staticmethodr   r,   rM   r2   r]   rj   ro   ri   rt   rw   ry   classmethodr}   r   __classcell__)r^   s   @r   r   r      sr     26iV$&6&:.^>~
 X X  .3 R Rr-   r   )cmf.includecommon.fields.cmf_scheme_wfcommonr   cmf_scheme_wfr   rs   r-   r   <module>r      s+     "rR&----99 rRr-   