B
    Efl=                 @   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   s   ddg}d}| j r.t| j dr.| j jj|d}|sVtjjdddgd	d| jgg|dd
}|s|tjjdddgdddgg|dd
}|S )uy   
        Возвращает CmfSchemeWf
        Алгоритм выбора схемы для объекта
        default_task_logic_typedefault_subtask_logic_typeN	scheme_wf)fieldssystem=Tactivity)filterr   cache_inmemorycodezsystem:default)parenthasattrr   loadmodelsr   getr
   )objZautoload_fieldsr    r    ./common/models/cmf_scheme_wf.pycalc_scheme   s     


zCmfSchemeWf.calc_schemec             C   s   |j dkr|jrN|jj  |jjr2|jjjdksN| jr>| jS tjjdddS t	|j
dkrt|j
d j }|rt|S | jr| jS tjjdddS |j dkrtjjd	ddS |j d
krtjjdddS |j dkrtjjdddS |j dkrtjjdddS d S )NCmfTask)z	task.epicztask.gantt_projectztask.sub:defaultT)r   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   valuer   r   ZCmfLogicTyper   lenlistsr   )selfr   ltr   r   r   calc_logic_type   s.    




zCmfSchemeWf.calc_logic_typec             C   sp  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
d}td| d| d |S |jdkr| j }|st	j
jdd
d}td| d| d |S |jr:|jdg |jjjr:|jjS | j  x:|jD ]0}|dg |jjrL|j| jkrL|j}qLW |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 }|rJtd| d| d|   |S t	j
jdd
d}td| d |S )uW   
        Возвращает CmfWorkflow для данного объекта
        Nu*   DEV: calc_workflow: для объекта u    найден wf u    по CmfSchemeRules u&    по obj.logic_type.default_workflow r   )z	task.epicztask.subprojectz	task.epicztask.epic:defaultT)r   r   u    из default_epic_workflowztask.subprojectz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 z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_workflow:   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
d}|srd S |jr| |jkrtd| d|j  |j	|S |j
S )Nr   r	   ORZcmf_model_namer&   r
   Zordernotarget_workflowtarget_scheme_wfT)r   Zorder_byr   r   u.   DEV: _find_wf_in_rules: для объекта u>    рекурсивно перешли в rule.target_scheme_wf=)r   CmfSchemeWfRuler   r   r&   r
   r4   r$   r%   r1   r3   )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"   r/   r'   r)   r-   r.   r,   r+   r   r   strict_task_logic_typestrict_list_logic_typestrict_document_logic_type)supersave_preload_fields)r   r   )	__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   u  Логический тип по умолчанию для новых задач отсутствует в Разрешенных логических типах задач. Выберите в поле Логический тип по умолчанию один из разрешенных логических типов, иначе в проекте могут появиться задачи с логическим типом z	task.sub:u   В поле Логический тип по умолчанию для новых Подзадач можно указывать только логические типы для Подзадач (task.sub))Ztransliterater>   Zis_newr7   	cmf_alertr   Z
is_changedoldr8   r*   r   namer   r   r   
startswith_calc_default_workflowsr;   save)r   argskwargsr>   )r=   r   r   rE      s"    zCmfSchemeWf.savec                s   |    t j|| d S )N)rD   r;   _save_import)r   rF   rG   )r=   r   r   rH      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r| jj | _| js| jr| jj | _| js| jr| jj | _dS )uG   
        Бизнес-процессы по умолчанию
        N)r"   r7   r   r/   r'   r)   r-   r.   r,   r+   r   r   r8   r9   r:   )r   r   r   r   rD      s4    z#CmfSchemeWf._calc_default_workflowsc             C   s   d S )Nr   )r   r   r   r   _calc_scheme_wf   s    zCmfSchemeWf._calc_scheme_wfc             C   s   d S )Nr   )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| _ d S )Nzdefault.system:defaultT)r   r   )r0   r   r(   r   )r   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 )Nr8   r   ZLIKEztask.%r9   zlist.%r:   z
document.%r   zNOT LIKEz
task.sub:%r   r   )r;   field_options_list)clsZrelation_field_namer   rG   )r=   r   r   rL      s    zCmfSchemeWf.field_options_listF)TEXKOM_db_deletec               s   ddl m} x@tjjddd| gdd| gg||dD ]}|j|d|i| q2W x\| D ]P}xJ|jdd| g||dD ]0}|rd |_|jd	d
 qtt	d| dd	d qtW qXW t
 j|d|i|S )Nr   )CmfActiveEntityr2   r   z==r4   )r   Zinclude_deletedZinclude_systemrN   T)Z	only_datau.   Эта схема используется в u(   , удаление невозможно.)r?   )Zcommon.models.cmf_active_entityrO   r   r5   listdeleteZiter_subclassesr   rE   r@   r;   )r   rN   rF   rG   rO   r6   Zmodelr   )r=   r   r   rQ     s    zCmfSchemeWf.delete)N)__name__
__module____qualname__staticmethodr   r!   r1   r#   r<   rE   rH   rD   rI   rJ   rK   classmethodrL   rQ   __classcell__r   r   )r=   r   r      s   Rr   )Zcmf.includeZcommon.fields.cmf_scheme_wfcommonr   Zcmf_scheme_wfr   r   r   r   r   <module>   s   