U
    r;d9                     @   s*   d dl T d dlZG dd dejjjZdS )    )*Nc                       s   e Zd Zedd Zdd Zdd Zdd Z fd	d
Z fddZ	 fddZ
dd Zdd Zdd Zdd Zed fdd	Zdd fdd
Z  ZS )CmfSchemeWfc                 C   sl   d}| j r"t| j dr"| j j }|sFtjjdddgdd| jggd}|shtjjdddgddd	ggd}|S )
uy   
        Возвращает CmfSchemeWf
        Алгоритм выбора схемы для объекта
        N	scheme_wfsystem=Tactivity)filtercodezsystem:default)parenthasattrr   loadmodelsr   getr   )objr    r    ./common/models/cmf_scheme_wf.pycalc_scheme   s    
zCmfSchemeWf.calc_schemec                 C   s   |j dkr|jrP|jj  |jjr2|jjjdksP| j rB| jS tjjddS t	|j
dkrv|j
d j }|rv|S | j r| jS tjjddS |j dkrtjjddS |j d	krtjjd
dS |j dkrtjjddS |j dkrtjjddS d S )NCmfTask)	task.epicztask.gantt_projectztask.sub:defaultr	   r   ztask.base:defaultZ
CmfProjectzproject.base:defaultCmfDocumentzdocument.base:defaultZCmfDealzdeal.base:defaultCmfListzlist.base:default)
class_nameZparent_tasklogic_prefixr   valuedefault_subtask_logic_typer   ZCmfLogicTyper   lenlistsdefault_task_logic_type)selfr   ltr   r   r   calc_logic_type   s.    






zCmfSchemeWf.calc_logic_typec                 C   sf  d}|  |}|r2td| d| d|   |S |jrn|jj rn|jj}td| d| d|j  |S |jdkr|jdkr|jdkr| j }|st	j
jd	d
}td| d| d |S |jdkr| j }|st	j
jdd
}td| d| d |S |jr6|jdg |jjjr6|jjS | j  |jD ]0}|dg |jjrF|j| jkrF|j}qF|rtd| d| d |S |jdkr| j }n
| j }|jdkr| j }|jdkr|jdkr| j }n|jdkr| j }|s| j }|rBtd| d| d|   |S t	j
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.subprojectr   ztask.epic:defaultr   u    из default_epic_workflowr"   ztask.subproject:defaultu!    из default_subproject_workflowdefault_task_workflowu     по list.default_task_workflowztask.subr   r   zlist.releasezlist.agile_sprintu*    по CmfSchemeRules.default_NNN_workflow default.system:defaultu2    не нашли wf, вернули system:default)_find_wf_in_rulesgdebug
logic_typeZdefault_workflowr   r   r   default_epic_workflowr   CmfWorkflowr   default_subproject_workflowZ	main_listload_fieldsr#   Zis_not_nullr   default_subtask_workflowdefault_document_workflowdefault_release_workflowdefault_sprint_workflowdefault_list_workflow)r   r   workflowZlist_r   r   r   calc_workflow6   sh    










zCmfSchemeWf.calc_workflowc              	   C   s   t jjdd| gdddd gdd|jggdddd gdd|jggdddd gdd|jgggdgddddd	gd
}|spd S |jrtd| d|j  |j	|S |j
S )Nr   r   ORZcmf_model_namer(   r   Zordernotarget_workflowtarget_scheme_wf)r   Zorder_byfieldsu.   DEV: _find_wf_in_rules: для объекта u>    рекурсивно перешли в rule.target_scheme_wf=)r   CmfSchemeWfRuler   r   r(   r   r6   r&   r'   r3   r5   )r   r   ruler   r   r   r%      s    
zCmfSchemeWf._find_wf_in_rulesc                    s.   ddddddddd	d
ddddg}t   | S )Ntemplater#   r1   r)   r+   r/   r0   r.   r-   r   r   strict_task_logic_typestrict_list_logic_typestrict_document_logic_type)supersave_preload_fields)r   r7   	__class__r   r   r?      s     zCmfSchemeWf.save_preload_fieldsc                    s   ddl m} | jr$| js$tddd | jsJ| jjrJd| jjkrJtddd | js| jjr| 	dd	g | j
r| j
| jkrtd
| j
j  | jjr| jr| jj  | jjjdstddd |   t j|| d S )Nr   )translituG   Для создания SchemeWf нужно указать шаблонT)abortz:defaultuF   Нельзя менять код у типов по умолчаниюzstrict_task_logic_type.namer   uG  Тип по умолчанию для новых задач отсутствует в Разрешенных типах задач. Выберите в поле Тип по умолчанию один из разрешенных типов, иначе в проекте могут появиться задачи с типом z	task.sub:u   В поле Тип по умолчанию для новых Подзадач можно указывать только типы для Подзадач (task.sub))ZtransliteraterB   Zis_newr:   Z	cmf_alertr	   Z
is_changedoldr;   r,   r   namer   r   r   
startswith_calc_default_workflowsr>   save)r   argskwargsrB   r@   r   r   rH      s$    zCmfSchemeWf.savec                    s   |    t j|| d S N)rG   r>   _save_import)r   rI   rJ   r@   r   r   rL      s    zCmfSchemeWf._save_importc                 C   s
  | j s| jj  | _ | js(| jj | _| js<| jj | _| jsP| jj | _| jsd| jj | _| jsx| 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 | _dS )uG   
        Бизнес-процессы по умолчанию
        N)r#   r:   r   r1   r)   r+   r/   r0   r.   r-   r   r   r;   r<   r=   r   r   r   r   rG      s4    z#CmfSchemeWf._calc_default_workflowsc                 C   s   d S rK   r   rM   r   r   r   _calc_scheme_wf   s    zCmfSchemeWf._calc_scheme_wfc                 C   s   d S rK   r   rM   r   r   r   _calc_logic_type   s    zCmfSchemeWf._calc_logic_typec                 C   s   | j r
d S tjjdd| _ d S )Nr$   r   )r2   r   r*   r   rM   r   r   r   _calc_workflow   s    zCmfSchemeWf._calc_workflowNc                    s   |sg }|dkr|dddgg}|dkr4|dddgg}|dkrJ|dddgg}|d	kr`|dd
dgg}|dkrv|dddgg}t  j|fd|i|S )Nr;   r	   ZLIKEztask.%r<   zlist.%r=   z
document.%r   zNOT LIKEz
task.sub:%r   r   )r>   field_options_list)clsZrelation_field_namer   rJ   r@   r   r   rQ      s    zCmfSchemeWf.field_options_listF)TEXKOM_db_deletec                   s   ddl m} tjjddd| gdd| gg||dD ]}|j|d|i| q0| D ]4}|jdd| g||dD ]}|j|d|i| qlqRt j|d|i|S )	Nr   )CmfActiveEntityr4   r   z==r6   )r   Zinclude_deletedZinclude_systemrS   )Zcommon.models.cmf_active_entityrT   r   r8   listdeleteZiter_subclassesr>   )r   rS   rI   rJ   rT   r9   Zmodelr   r@   r   r   rV   	  s     
 
zCmfSchemeWf.delete)N)__name__
__module____qualname__staticmethodr   r!   r3   r%   r?   rH   rL   rG   rN   rO   rP   classmethodrQ   rV   __classcell__r   r   r@   r   r      s   
Rr   )Zcmf.includeZcommon.fields.cmf_scheme_wfcommonr7   Zcmf_scheme_wfr   r   r   r   r   <module>   s   