
    @i                     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           t          j                            ddd| ggdd| gg          }d |D             }|r)t          d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   ORstatus_fromIN	status_to==c                 &    g | ]}|j         j        S  )r   value).0els     r   
<listcomp>z:CmfStatus._check_primary_status_delete.<locals>.<listcomp>I   s    AAArRW]AAAr   ui   Нельзя удалить статус, который используется в переходах: z, )
r   r   loadr   r   r   modelsCmfTranslistjoin)r   other_primaryexist_transexist_trans_namess       r   _check_primary_status_deletez&CmfStatus._check_primary_status_delete2   sv   #DDDF4!dm,C!12)
  
  	a  C  O a a a    o**D4&)$%3
*  
 BA[AAA 	 [  }A  }F  }F  GX  }Y  }Y  [  [     	 	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_filtersQ   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@   )r1   CmfTransFilterexistsr   save)r   r>   r@   s      r   r;   zCmfStatus._create_trans_filterX   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   rH   zCmfStatus.save_preload_fieldsb   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_jobr1   CmfWorkflowrecalc_all_approvesr   r   r=   rG   rE   r   rK   kwargsrI   s      r   rE   zCmfStatus.savee   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   rG   _save_importrP   s      r   rS   zCmfStatus._save_importq   s7       d-f-----r   c                     | j                                         r&t          |d          r|                                 dS dS dS )u]   Событие. Возникает при переключении на этот статусstart_approveN)need_approver0   hasattrapprove_objectr   objs     r   event_inzCmfStatus.event_inu   sV    !!## 	!_(E(E 	!     	! 	! 	! 	!r   c                     | j                                         r&t          |d          r|                                 dS dS dS )u_   Событие. Возникает при переключении с этого статусаcancel_approveN)rV   r0   rW   r]   rY   s     r   	event_outzCmfStatus.event_outz   sW    !!## 	!5E(F(F 	!     	! 	! 	! 	!r   Nc           	        
 |sg }|s|                     dd           }|sdg}|dv r|                     dd           }|                     dd           
|                     dd           }|rMd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slicer'   )rd   r   r`   fieldsc                     g | ]=}|j         	                                |j         j                                        v ;|>S r+   )r   lowerr,   )r-   statusre   s     r   r/   z0CmfStatus.field_options_list.<locals>.<listcomp>   sE    sssfv{sv||~~Y_YdYjYpYpYrYrGrGr6GrGrGrr   r      )relation_field_nameobject_fieldsr   rg   r`   r+   )r   r1   rN   get_status_listrG   field_options_list)clsrl   rm   r   rg   r`   rQ   wfrf   retre   rI   s             @r   ro   zCmfStatus.field_options_list   sx    	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: - используется когда удаляем весь БП
        )rj   u   Нельзя удалять статусы, которые в данный момент используются задачамиTr   r(   r)   )r   include_deleted)rt   rs   N)
r1   CmfTaskrD   r   r8   r2   r3   deleterG   r   )r   rt   ru   rK   rQ   transrI   s         r   ry   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@   rA   )NNNN)__name__
__module____qualname__r   r    r8   r=   r;   rH   rE   rS   r[   r^   classmethodro   ry   __classcell__)rI   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: .3% g g g g g g g g g g gr   r   )cmf.includecommon.fields.cmf_statuscommonrg   
cmf_statusr   r+   r   r   <module>r      sm           eg eg eg eg eg(2 eg eg eg eg egr   