U
    [c                     @   s6   d dl T d dlZd dlmZ G dd dejjjZdS )    )*N)CmfActiveEntityc                       sh   e Zd ZedddZdddZdd	d
Z fddZdd Z fddZ	 fddZ
dddZ  ZS )CmfWorkflowNFc                    s  |s|st ddd |s\dd|g}|r.||g}tjjf d|i|}|rX|jdd d	 |S tj|dd
gd}tjjdd|j	j
gdddgd}	tjjdd|	gd}
|	jD ]T  jjs|jj
jdd  jD kr |s jst ddd  fdd|
D }
q|
S )Nz6DEV: FATAL get_status_list if not obj and not workflowTabortworkflow==filterc                 S   s
   | j dkS Nclosedcodes r   ./common/models/cmf_workflow.py<lambda>       z-CmfWorkflow.get_status_list.<locals>.<lambda>keystatus)fieldsid=transztrans.status_toztrans.status_from)r	   r   r	   c                 S   s   g | ]}|j jqS r   )r   value).0tr   r   r   
<listcomp>    s     z/CmfWorkflow.get_status_list.<locals>.<listcomp>z)DEV: Not supported if not trans.status_toc                    s   g | ]}| j kr|qS r   )	status_to)r   str   r   r   r   $   s     
 )	cmf_alertmodels	CmfStatuslistsortZcmfutilZget_obj_by_idr   getr   r   r   status_fromZis_nullr   r   Ztrans_filter_okr    )clsZobj_idZworkflow_idr	   closed_lastkwargs
get_filterresobjr   Zvalid_statusesr   r"   r   get_status_list   s.    

"
zCmfWorkflow.get_status_listc                 O   sD   dd| g}|r||g}t jj|d|i|}|r@|jdd d |S )Nr   r   r	   c                 S   s
   | j dkS r
   r   r   r   r   r   r   /   r   z)CmfWorkflow.status_list.<locals>.<lambda>r   )r$   r%   r&   r'   )selfr	   r+   argsr,   r-   r.   r   r   r   status_list(   s    
zCmfWorkflow.status_listopenTc              	      s   dg}d }|r$| j dd|g|d}np rN| j |dd}|jd fddd	 nF|d
krzdg}| j ddd
gddd
gg|d}|s| j dd|g|dd}|r|d S |rtd|  d| d| d  d S )NZordernor   r   )r	   order_byT)r5   r+   c                    s4   | j  j k| j jk| j jk jdko0| jdkfS )NZ	in_reviewr   )r   namestatus_typer   r   r   r   r   A   s
    


z0CmfWorkflow.get_default_status.<locals>.<lambda>)reverser   r   z-ordernor7   )r	   r5   r+   r   u+   Отсутствует статус для z status_type=z, status_code=z	, status=)r3   r'   ZCmfError)r1   r7   Zstatus_coder   Zraise_errorr5   r.   r   r8   r   get_default_status4   sB    
 zCmfWorkflow.get_default_statusc                    s   t   dg S )Nr   )supersave_preload_fields)r1   	__class__r   r   r<   a   s    zCmfWorkflow.save_preload_fieldsc                 C   sP   | j dg | j jD ]4}|dg | }d|_|j|_| |_|  qd S )Nstatusesz**F)templateZload_fieldsr?   Zclonesystemr   r   save)r1   r!   Zst_newr   r   r   scaffold_statusesd   s    
zCmfWorkflow.scaffold_statusesc                    sV   | j r| jstddd | jjr2tjs2tddd | j }t j|| |rR| 	  d S )NuB   Выберите шаблон для Бизнес-процессаTr   u   Использование "Действий после сохранения объекта" недоступно в Вашей версии, обратитесь в Техническую поддержку.)
is_newr@   r#   Zsave_eval_codeZ
is_changedZconfigZIS_BOX_VERSIONr;   rB   rC   )r1   r2   r,   rD   r=   r   r   rB   o   s    zCmfWorkflow.savec                    s   d}g }t  D ]:}||jdd| gd7 }|r|s|jdd| gddgd}q|rn|d td| d	d
d t jf | d S )Nr   r   r   r   
   )r	   slicez...u   Невозможно удалить используемый бизнес процесс. Данный бизнес процесс используется в u    объектахTr   )r   Ziter_subclassescountZslistappendr#   r;   delete)r1   r,   Z	ref_countZ	top_usageZmodelr=   r   r   rI   |   s    

 zCmfWorkflow.deletec                 C   sp   d}|sd S t jjdd|jggdd|ggd}|sPt jjddd gdd|ggd}|sXd S || ||}|S )NFr)   INr    r   r   )r$   ZCmfTransr(   r   Ztrans_validator_okZtrans_run_actions)r1   r/   r)   r    Zis_task_transition_runZhas_changesZ
transitionr   r   r   run_transition   s"    

zCmfWorkflow.run_transition)NNNF)NF)r4   NNT)F)__name__
__module____qualname__classmethodr0   r3   r:   r<   rC   rB   rI   rK   __classcell__r   r   r=   r   r      s    

-r   )Zcmf.includeZcommon.fields.cmf_workflowcommonZcommon.models.cmf_active_entityr   r   Zcmf_workflowr   r   r   r   r   <module>   s   