U
    Vc'                     @   s*   d dl T d dlZG dd dejjjZdS )    )*Nc                       sj   e Zd Zedd Zdd Zdd Zdd Z fd	d
Zdd Z	dd Z
dd Ze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rb|jrtjjddS t|jdkrD|jd j }|rD|S | j rT| jS tjjddS |j dkrzt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CmfTaskz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_taskr   ZCmfLogicTyper   lenlistsdefault_task_logic_typer   )selfr   ltr   r   r   calc_logic_type   s&    





zCmfSchemeWf.calc_logic_typec                 C   s  d}|  |}|r2td| d| d|   |S |jrn|jj rn|jj}td| d| d|j  |S |jdkr| j  |jD ]"}|	dg |j| jkr|j}q|rtd| d| d |S |jdkr|j
d	kr| j }n
| j }|jd
kr| j }|jdkr|j
dkr0| j }nF|j
dkrH| j }n.|j
dkr`| j }n|j
dkrv| j }|s| j }|rt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   default_task_workflowu     по list.default_task_workflowztask.subr   r   zlist.agile_epiczlist.releasezlist.versionzlist.agile_sprintu*    по CmfSchemeRules.default_NNN_workflow default.system:defaultr   u2    не нашли wf, вернули system:default)_find_wf_in_rulesgdebug
logic_typeZdefault_workflowr   r   r   r   Zload_fieldsZlogic_prefixdefault_subtask_workflowdefault_document_workflowdefault_epic_workflowdefault_release_workflowdefault_version_workflowdefault_sprint_workflowdefault_list_workflowr   CmfWorkflowr   )r   r   workflowZlist_r   r   r   calc_workflow1   sR    









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   ZCmfSchemeWfRuler   r   r#   r   r0   r!   r"   r-   r/   )r   r   Zruler   r   r   r    t   s    
zCmfSchemeWf._find_wf_in_rulesc                    sf  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rT| j  | j	sp| 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j | _| jsT| jj | _t j|| d S )Nr   )translituG   Для создания SchemeWf нужно указать шаблонT)abortz:defaultuF   Нельзя менять код у типов по умолчанию)Ztransliterater2   Zis_newtemplateZ	cmf_alertr	   Z
is_changedoldr   r   r*   r&   r'   r(   r)   r%   r$   r   strict_task_logic_typestrict_list_logic_typestrict_document_logic_typesupersave)r   argskwargsr2   	__class__r   r   r:      sB    
zCmfSchemeWf.savec                 C   s   d S Nr   r   r   r   r   _calc_scheme_wf   s    zCmfSchemeWf._calc_scheme_wfc                 C   s   d S r?   r   r@   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   )r,   r   r+   r   r@   r   r   r   _calc_workflow   s    zCmfSchemeWf._calc_workflowNc                    sb   |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}t  j|fd	|i|S )
Nr6   r	   ZLIKEztask.%r7   zlist.%r8   z
document.%r   )r9   field_options_list)clsZrelation_field_namer   r<   r=   r   r   rD      s    zCmfSchemeWf.field_options_list)N)__name__
__module____qualname__staticmethodr   r   r-   r    r:   rA   rB   rC   classmethodrD   __classcell__r   r   r=   r   r      s   
C*r   )Zcmf.includeZcommon.fields.cmf_scheme_wfcommonr1   Zcmf_scheme_wfr   r   r   r   r   <module>   s   