
    @i                     h    d dl  d dlZ G d dej                  j                  j
                        Zy)    )*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                 4   | j                   j                  s%| j                  r| j                   r| j                  sy | j                   st	        d| j
                   dd       | j                   j                  | _        | j                   j                  | _        y )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   sw      ++'''';;FtyykQdemqr$$))	++77    c                 p   | j                  dd| j                  gdd| j                  gdd| j                  gg      }|rt	        d| j                   d| d	d
       | j                  dd| j                  gdd| j                  gdd| j
                  gg      }|rt	        d| j
                   dd
       y y )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!dmm,C!1!12.
X 
 -d.>.>-?qAS@T  UD  E
 "XX4!dmm,S$))$.
X 
    ,\  ] r   c                    | j                   dvry| j                  j                          | j                  dd| j                  gdd| j                  gdd| j                   gg      }|st        d	| j                    d
d       t        j                  j                  dd| g      }|D cg c]  }|j                  j                   }}|r t        ddj                  |       d       yyc c}w )ux   У Workflow обязательно должен быть хотя бы один статус open, in_progress и closed)OPENIN_PROGRESSCLOSEDNr   r   r   r   r   r   uk   У Workflow обязательно должен быть хотя бы один статус с типом u   . Нельзя удалить последний статус с этим типом. Сначала создайте новый статус.Tr   	status_to==ui   Нельзя удалить статус, который используется в переходах: z, )r   r   loadr   r   r   modelsCmfTranslistr   valuejoin)r   other_primaryexist_transelexist_trans_namess        r   _check_primary_status_deletez&CmfStatus._check_primary_status_delete2   s)   #DD4!dmm,C!1!12)
 
 }  C  O  O  ~P P` a oo**;d2K*L5@ArRWW]]AA{  }A  }F  }F  GX  }Y  |Z  [  Bs   *C,c                    | j                   j                  r+| j                   d k7  r| j                  | j                   d       | j                  j                  r-| j                  d k7  r| j                  | j                  d       y y y )Nz
9 approvedz10 rejected)trans_approvedr
   _create_trans_filtertrans_rejectedr   s    r   _create_trans_filterszCmfStatus._create_trans_filtersM   so    ))d.A.AT.I%%d&9&9<H))d.A.AT.I%%d&9&9=I /J)r   c                     t         j                  j                  dd| j                  gdd|gdd|gg      s1t         j                  | j                  ||      j	                          y y )Nr   r   
transition
logic_typer   )r   r8   r9   )r(   CmfTransFilterexistsr   save)r   r8   r9   s      r   r4   zCmfStatus._create_trans_filterT   sl    $$++S$--0sJ/sJ/ , 
 !!4==Z\f!glln
r   c                 *    t         |          ddgz   S )Nr   r	   )supersave_preload_fields)r   	__class__s    r   r?   zCmfStatus.save_preload_fields^   s    w*,
M/JJJr   c                 T   | j                   st        dd       | j                          | j                          | j                  j
                  r:t        t        j                  j                  | j                  j                  g       | j                          t        | 8  |i |S )NuK   Нельзя создать Статус без указания StatusCodeTr   )args)r	   r   r   r    master_approversr
   schedule_deferred_jobr(   CmfWorkflowrecalc_all_approvesr   r   r6   r>   r<   r   rB   kwargsr@   s      r   r<   zCmfStatus.savea   s    ckop    ++!&"4"4"H"HPTP]P]P`P`Oab""$w|T,V,,r   c                 D    | j                          t        |   |i | y )N)r   r>   _save_importrG   s      r   rJ   zCmfStatus._save_importm   s!     d-f-r   c                 t    | j                   j                         rt        |d      r|j                          yyy)u]   Событие. Возникает при переключении на этот статусstart_approveN)need_approver'   hasattrapprove_objectr   objs     r   event_inzCmfStatus.event_inq   s2    !!#_(E  )F#r   c                 t    | j                   j                         rt        |d      r|j                          yyy)u_   Событие. Возникает при переключении с этого статусаcancel_approveN)rM   r'   rN   rT   rP   s     r   	event_outzCmfStatus.event_outv   s3    !!#5E(F  )G#r   c           	         |sg }|s|j                  dd       }|sdg}|dv r|j                  dd       }|j                  dd       }|j                  dd       }	|rdd|gg|g}t        j                  j                  d||||d|}
|rQ|
D cg c]F  }|j                  s|j                         |j                  j                  j                         v sE|H }
}|	r|
|	d	   |	d
    }
|
S y t        |    d|||||d|S c c}w )Norder_byorderno)r3   r5   trans_updatedtrans_expiredworkflow_idsearchsliceIN)r[   r   rW   fieldsr      )relation_field_nameobject_fieldsr   r_   rW    )	r   r(   rE   get_status_listr   lowerr+   r>   field_options_list)clsra   rb   r   r_   rW   rH   wfr\   r]   retstatusr@   s               r   rf   zCmfStatus.field_options_list{   sV   Fzz*d3H%;"hh""=$7BZZ$/FJJw-E($5v>((88  "!%!	
  03sfv{{v||~Y_YdYdYjYjYpYpYrGr6sCseAhuQx0C
  7-  nBUer  {A  JP  [c  n  gm  n  n ts   C?4C?C?FTEXKOM_db_deleteforcec                *   t         j                  j                  |       rt        dd       |s|s| j	                          t         j
                  j                  dd| g|      D ]  }|j                  |        t        t        |   |||d	| y
)ug   
        :param bool force: - используется когда удаляем весь БП
        )rj   u   Нельзя удалять статусы, которые в данный момент используются задачамиTr   r%   r&   )r   include_deleted)rl   rk   N)
r(   CmfTaskr;   r   r1   r)   r*   deleter>   r   )r   rl   rm   rB   rH   transr@   s         r   rq   zCmfStatus.delete   s     >>   -  Z  bf  g--/__))+d41H:J * L 	<ELL*:L;	< 	i%t>NV[f_efr   )r8   zmodels.CmfTransFilterr9   str)NNNN)__name__
__module____qualname__r   r    r1   r6   r4   r?   r<   rJ   rR   rU   classmethodrf   rq   __classcell__)r@   s   @r   r   r      sa    8*.6JoK
-.!
!
 n n: .3% g gr   r   )cmf.includecommon.fields.cmf_statuscommonr_   
cmf_statusr   rc   r   r   <module>r}      s+     ag((22 agr   