
    Uh!                     P    d dl T d dlZ G d dej        j        j                  ZdS )    )*Nc                        e Zd Zd Zd Zd Zd Zdd	Z fd
Z fdZ	 fdZ
d Zd Zed fd	            Zddd fd
Z xZS )	CmfStatusc                     | j         j        s| j        r| j         r	| j        sd S | j         st	          d| j         dd           | j         j        | _        | j         j        | _        d S )Nu.   DEV: Нельзя созадть статус u    без status_codeTabort)status_code
is_changedstatus_typeis_new	cmf_alertnamecodeselfs    ./common/models/cmf_status.py_calc_status_codezCmfStatus._calc_status_code   s     +	'	 '	 ;		 F 	setyeeemqrrrr$)	+7    c                 D   |                      dd| j        gdd| j        gdd| j        gg          }|rt	          d| j         d| d	d
           |                      dd| j        gdd| j        gdd| j        gg          }|rt	          d| j         dd
           d S d S )Nid!=workflow=r	   filteru   Статус с кодом (u/   ) уже создан в данном Workflow.Tr   r   u   Статус "up   " уже существует, используйте его или переименуйте созданный.)getr   r   r	   r   r   )r   dublicates_by_codedublicates_by_names      r   _check_dublicateszCmfStatus._check_dublicates   s'   !XX4!dm,C!12.
X  
  	 Ed.>  E  EAS  E  E  E   
 "XX4!dm,S$)$.
X  
  	 ]  ]  ]  ]     	 	r   c                     | j         dvrdS | j                                         |                     dd| j        gdd| j        gdd| j         gg          }|st          d	| j          d
d           dS dS )ux   У Workflow обязательно должен быть хотя бы один статус open, in_progress и closed)OPENIN_PROGRESSCLOSEDNr   r   r   r   r   r   uk   У Workflow обязательно должен быть хотя бы один статус с типом u   . Нельзя удалить последний статус с этим типом. Сначала создайте новый статус.Tr   )r   r   loadr   r   r   )r   other_primarys     r   _check_primary_status_deletez&CmfStatus._check_primary_status_delete2   s    #DDDF4!dm,C!12)
  
  	a  C  O a a a     	 	r   c                     | j         j        r&| j         d k    r|                     | j         d           | j        j        r(| j        d k    r|                     | j        d           d S d S d S )Nz
9 approvedz10 rejected)trans_approvedr
   _create_trans_filtertrans_rejectedr   s    r   _create_trans_filterszCmfStatus._create_trans_filtersC   s    ) 	Id.AT.I.I%%d&9<HHH) 	Jd.AT.I.I%%d&9=IIIII	J 	J.I.Ir   
transitionmodels.CmfTransFilter
logic_typestrc                     t           j                            dd| j        gdd|gdd|gg          s6t                               | j        ||                                           d S d S )Nr   r   r-   r/   r   )r   r-   r/   )modelsCmfTransFilterexistsr   save)r   r-   r/   s      r   r*   zCmfStatus._create_trans_filterJ   s    $++S$-0sJ/sJ/ , 
 
 	o !!4=Z\f!ggllnnnnn	o 	or   c                 N    t                                                      ddgz   S )Nr   r	   )supersave_preload_fields)r   	__class__s    r   r8   zCmfStatus.save_preload_fieldsT   s#    ww**,,
M/JJJr   c                 L   | j         st          dd           |                                  |                                  | j        j        r+t          t          j        j	        | j
        j        g           |                                   t                      j        |i |S )NuK   Нельзя создать Статус без указания StatusCodeTr   )args)r	   r   r   r    master_approversr
   schedule_deferred_jobr2   CmfWorkflowrecalc_all_approvesr   r   r,   r7   r5   r   r;   kwargsr9   s      r   r5   zCmfStatus.saveW   s     	qckopppp       + 	c!&"4"HPTP]P`Oabbbb""$$$uww|T,V,,,r   c                 b    |                                    t                      j        |i | d S )N)r   r7   _save_importr@   s      r   rC   zCmfStatus._save_importc   s7       d-f-----r   c                     | j                                         r&t          |d          r|                                 dS dS dS )u]   Событие. Возникает при переключении на этот статусstart_approveN)need_approver%   hasattrapprove_objectr   objs     r   event_inzCmfStatus.event_ing   sV    !!## 	!_(E(E 	!     	! 	! 	! 	!r   c                     | j                                         r&t          |d          r|                                 dS dS dS )u_   Событие. Возникает при переключении с этого статусаcancel_approveN)rF   r%   rG   rM   rI   s     r   	event_outzCmfStatus.event_outl   sW    !!## 	!5E(F(F 	!     	! 	! 	! 	!r   Nc           	        
 |sg }|s|                     dd           }|sdg}|dv r|                     dd           }|                     dd           
|                     dd           }|rLdd|gg|g}t          j        j        d|||d|}	
r
fd	|	D             }	|r|	|d
         |d                  }	|	S d S  t	                      j        d|||||d|S )Norder_byorderno)r)   r+   trans_updatedtrans_expiredworkflow_idsearchsliceIN)rT   r   rP   c                     g | ]=}|j         	                                |j         j                                        v ;|>S  )r   lowervalue).0statusrU   s     r   
<listcomp>z0CmfStatus.field_options_list.<locals>.<listcomp>   sE    sssfv{sv||~~Y_YdYjYpYpYrYrGrGr6GrGrGrr   r      )relation_field_nameobject_fieldsr   fieldsrP   rY   )r   r2   r>   get_status_listr7   field_options_list)clsr`   ra   r   rb   rP   rA   wfrV   retrU   r9   s             @r   rd   zCmfStatus.field_options_listq   su    	F 	'zz*d33H '%;"hhh""=$77BZZ$//FJJw--E ($5v>(8  "!%  	   tsssssssC 1eAhuQx/0C
  .577-  nBUer  {A  JP  [c  n  n  gm  n  n  nr   FTEXKOM_db_deleteforcec                Z   t           j                            |           rt          dd           |s|s|                                  t           j                            dd| g|          D ]}|                    |            t          t          |           j        |||d	| d
S )ug   
        :param bool force: - используется когда удаляем весь БП
        )r]   u   Нельзя удалять статусы, которые в данный момент используются задачамиTr   	status_toz==)r   include_deleted)ri   rh   N)
r2   CmfTaskr4   r   r'   CmfTranslistdeleter7   r   )r   ri   rj   r;   rA   transr9   s         r   rq   zCmfStatus.delete   s     >   -- 	g  Z  bf  g  g  g  g 	0 	0--///_))+d41H:J * L L 	< 	<ELL*:L;;;;%i%t>NV[ff_efffffr   )r-   r.   r/   r0   )NNNN)__name__
__module____qualname__r   r    r'   r,   r*   r8   r5   rC   rK   rN   classmethodrd   rq   __classcell__)r9   s   @r   r   r      sI       8 8 8*  .  "J J Jo o o oK K K K K
- 
- 
- 
- 
-. . . . .! ! !
! ! !
 n n n n n [n8 .3% g g g g g g g g g g gr   r   )cmf.includecommon.fields.cmf_statuscommonrb   
cmf_statusr   rY   r   r   <module>r|      sm           Vg Vg Vg Vg Vg(2 Vg Vg Vg Vg Vgr   