B
    f                 @   s*   d dl T d dlZG dd dejjjZdS )    )*Nc                   sv   e Zd Zdd Zdd Zdd Z fddZ fd	d
Zdd Zdd Z	e
d fdd	Zddd fdd
Z  ZS )	CmfStatusc             C   sR   | j js| jr| j r| jsd S | j s:td| j ddd | j j| _| j j| _d S )Nu.   DEV: Нельзя созадть статус u    без status_codeT)abort)status_codeZ
is_changedstatus_typeZis_new	cmf_alertnamecode)self r   ./common/models/cmf_status.py_calc_status_code   s    
zCmfStatus._calc_status_codec             C   s   | j dd| jgdd| jgdd| jggd}|rJtd| j d| d	d
d | j dd| jgdd| jgdd| jggd}|rtd| j dd
d d S )Nidz!=workflow=r   )filteru   Статус с кодом (u/   ) уже создан в данном Workflow.T)r   r   u   Статус "up   " уже существует, используйте его или переименуйте созданный.)getr   r   r   r   r   )r
   Zdublicates_by_codeZdublicates_by_namer   r   r   _check_dublicates   s     



zCmfStatus._check_dublicatesc             C   s`   | j dkrdS | j  | jdd| jgdd| jgdd| j ggd}|s\td	| j  d
dd dS )ux   У Workflow обязательно должен быть хотя бы один статус open, in_progress и closed)ZOPENZIN_PROGRESSZCLOSEDNr   z!=r   r   r   )r   uk   У Workflow обязательно должен быть хотя бы один статус с типом u   . Нельзя удалить последний статус с этим типом. Сначала создайте новый статус.T)r   )r   r   loadr   r   r   )r
   Zother_primaryr   r   r   _check_primary_status_delete2   s    



z&CmfStatus._check_primary_status_deletec                s   t   ddg S )Nr   r   )supersave_preload_fields)r
   )	__class__r   r   r   C   s    zCmfStatus.save_preload_fieldsc                s0   | j stddd |   |   t j||S )NuK   Нельзя создать Статус без указания StatusCodeT)r   )r   r   r   r   r   save)r
   argskwargs)r   r   r   r   F   s
    zCmfStatus.savec             C   s    | j  rt|dr|  dS )u]   Событие. Возникает при переключении на этот статусZstart_approveN)need_approver   hasattrZapprove_object)r
   objr   r   r   event_inM   s    zCmfStatus.event_inc             C   s    | j  rt|dr|  dS )u_   Событие. Возникает при переключении с этого статусаcancel_approveN)r   r   r   r!   )r
   r   r   r   r   	event_outR   s    zCmfStatus.event_outNc       
         s   |sg }|s"| dd }|s"dg}|dkr| dd }| dd  | dd }|rdd|gg|g}tjjf |||d|}	 r fd	d
|	D }	|r|	|d |d  }	|	S nt jf |||||d|S d S )Norder_byZorderno)Ztrans_approvedZtrans_rejectedZtrans_updatedZtrans_expiredworkflow_idsearchsliceIN)r$   r   r#   c                s*   g | ]"}|j r  |j j kr|qS r   )r   lowervalue).0status)r%   r   r   
<listcomp>m   s    z0CmfStatus.field_options_list.<locals>.<listcomp>r      )relation_field_nameobject_fieldsr   fieldsr#   )r   modelsZCmfWorkflowZget_status_listr   field_options_list)
clsr.   r/   r   r0   r#   r   Zwfr&   ret)r   )r%   r   r2   W   s.    zCmfStatus.field_options_listF)TEXKOM_db_deleteforcec               sv   t jj| drtddd |s*|s*|   x*t jjdd| g|dD ]}|j|d qBW tt	| j|||d	| d
S )ug   
        :param bool force: - используется когда удаляем весь БП
        )r+   u   Нельзя удалять статусы, которые в данный момент используются задачамиT)r   Z	status_toz==)r   Zinclude_deleted)r5   )r5   r6   N)
r1   ZCmfTaskexistsr   r   ZCmfTranslistdeleter   r   )r
   r5   r6   r   r   Ztrans)r   r   r   r9   t   s    zCmfStatus.delete)NNNN)__name__
__module____qualname__r   r   r   r   r   r    r"   classmethodr2   r9   __classcell__r   r   )r   r   r      s   r   )Zcmf.includeZcommon.fields.cmf_statuscommonr0   Z
cmf_statusr   r   r   r   r   <module>   s   