
    oiG                     X    d dl Z d dlmZ d dl d dlmZ  G d dej                        Zy)    N)Decimal)*)	cmf_transc                   V    e Zd Zej                  j
                  dgz   Zed) fd	       Zd Zd Z	d Z
d Zd Zd	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z d Z!g fdZ"d Z#d  Z$d! Z%d" Z&d# Z'd$ Z( fd%Z) fd&Z*e+dddd'd(       Z, xZ-S )*CmfTranstrans_ui_form_getNc                 z    |dv r#|sg }d }|r|j                  dd       }|r|dd|gg}t        |   |f|||d|S )N)status_from	status_toworkflow_idworkflow=)filtermodels_listobject_fields)getsuperfield_options_list)clsrelation_field_namer   r   r   kwargsr   	__class__s          ./common/models/cmf_trans.pyr   zCmfTrans.field_options_list   sx    ">>K+//tD :sK"@Aw)*=  NfZe  vC  N  GM  N  	N    c                     t         j                  |j                        }t        j	                  |      }ddd|j
                  g|g}t        |j                  |            S )NANDidr   r   )cmfutilget_model_by_name
class_namejsonloadsr   boolr   )selfbql_strobjmodel
filter_bqls        r   _trans_ok_bqlzCmfTrans._trans_ok_bql   sS     ))#..9ZZ(
dC0*=
EIIZI011r   c                     d}t         j                  j                  ddd|j                  gddt        j
                  j                  gggd      }|rd}|j                  d	v s|j                  s|S | S )
NFr   r   r   wz_value_objINT)r   cache_inmemory)z1 =z5 >=z6 <=z7 INz9 LIKEz	11 REGEXP)modelsCmfTransFilterr   r   gcurrent_personwz_conditionr,   
isinstance	CmfPersonCmfPersonGrouprg_member_ofCmfRoleperson
CmfOrgUnitset
tree_nodesloadpopadd	cmf_alertr!   )
r%   r   r'   res
search_obj	value_objnodeschecked_nodesnode_nodes
             r   _trans_filter_ok_current_userz&CmfTrans._trans_filter_ok_current_user%   s    **..3		*#TA,<,<,?,?+@A #'	 / 

 C"XX`f`s`sJ7Nr   c           	         t        ||j                  j                        j                         j                  }|d}|j                  j                  j                  d      d   }|j                  j                  }|d}|dk(  r|st        |       S ||k(  S |dk(  r|st        |      S ||k7  S |dk(  r||kD  S |dk(  r||k  S |dk(  r||k\  S |d	k(  r||k  S |d
k(  r||v S |dk(  r||vS |dk(  r||v S |dk(  r||vS |dk(  r0	 t        j                  |      }t        j                  |            S |dk(  r1	 t        j                  |      }t        j                  |             S |dk(  rt        |       S |dk(  rt        |      S |dk(  r4||j                  j                  k\  xr ||j                  j                  k  S |dk(  r5||j                  j                  k\  xr ||j                  j                  k   S t        d| d       y # t        j                  $ r!}t        d| d| d| d       Y d }~$d }~ww xY w# t        j                  $ r!}t        d| d| d| d       Y d }~&d }~ww xY w)N     r   !=><>=<=r-   NOT INLIKENOT LIKEREGEXP   Ошибка в условии uC   : некорректное регулярное выражение : Tabort
NOT REGEXPIS_NULLNOT_NULLBETWEENNOT_BETWEENz@DEV: FATAL _trans_field_compare_text unknown clean_wz_condition=)getattrwz_field_namevaluer=   r3   	partitionwz_value_textr$   recompileerrorr@   searchwz_start_valuewz_end_value)r%   
trans_metar'   obj_valclean_wz_conditionvalidator_valregexpes           r   _trans_field_compare_textz"CmfTrans._trans_field_compare_text]   s,   #z77==>CCEKK?G'44::DDSI!L"0066 M$ =((m++4' G}$m++3&]**3&]**4'm++4'm++4' m++8+-//6) !G++:- %//8+mM2 g.//</mM2 FMM'23339,G}$$:-= 9,j77===j'ZMdMdMjMjBjj=0:#<#<#B#BBowR\RiRiRoRoGoppXYkXlmuyz' 88 m;J<  HK  LY  KZ  Z\  ]^  \_  `  hl  m  mm 88 m;J<  HK  LY  KZ  Z\  ]^  \_  `  hl  m  mms0    H
 5I 
H>H99H>I5I00I5c                    t        ||j                  j                        j                  }|j                  j                  j	                  d      d   }d }|dvr#|y	 t        |j                  j                        }|d	k(  r||k(  S |d
k(  r||k7  S |dk(  r||kD  S |dk(  r||k  S |dk(  r||k\  S |dk(  r||k  S |dk(  rt        d| d| dd       y |dk(  rt        d| d| dd       y |dk(  rt        d| d| dd       y |dk(  rt        d| d| dd       y |dk(  rt        d| d| dd       y |dk(  rt        d| d| dd       y |dk(  r|d u S |dk(  r|d uS |dk(  r||k\  xr ||k  S |dk(  r||k\  xr ||k   S t        d| d       y # t        $ r+ t        d| d|j                  j                   d       Y Qw xY w)NrK   rL   )r[   r\   F!   Ошибка в Действии 4   : значние должно быть числом TrX   r   rM   rN   rO   rP   rQ   r-   rV   rW   uE    не поддерживается для цифровых полейrR   rS   rT   rU   rZ   r[   r\   r]   r^   zCDEV: FATAL _trans_field_compare_numeric unknown clean_wz_condition=)	r_   r`   ra   r3   rb   r   rc   
ValueErrorr@   )r%   rj   r'   rk   rl   vals         r   _trans_field_compare_numericz%CmfTrans._trans_field_compare_numeric   s   #z77==>DD'44::DDSI!L%<< j66<<= $c>!4'c>!3&S= 3&S= 4'c>!4'c>!4'7
|2FXEY  Z_  `  hl  m8+7
|2FXEY  Z_  `  hl  m6)7
|2FXEY  Z_  `  hl  m:-7
|2FXEY  Z_  `  hl  m8+7
|2FXEY  Z_  `  hl  m</7
|2FXEY  Z_  `  hl  m9,d?":-$&&9,c>4gn4=0397c>::[\n[opx|}M   7
|Cw  yC  yQ  yQ  yW  yW  xX  Y    s   F 0GGc                    t        ||j                  j                        j                  }t        |      }|j                  j                  sd}ny|j                  j                  j                         dv rd}nP|j                  j                  j                         dv rd}n't        d| d|j                  j                   d       |j                  j                  j                  d      d	   }|d
k(  r|k(  S |dk(  r|k7  S |dk(  rt        d| d| dd       y |dk(  rt        d| d| dd       y |dk(  rt        d| d| dd       y |dk(  rt        d| d| dd       y |dk(  rt        d| d| dd       y |dk(  rt        d| d| dd       y |dk(  rt        d| d| dd       y |dk(  rt        d| d| dd       y |dk(  rt        d| d| dd       y |dk(  rt        d| d| dd       y |dk(  r|d u S |dk(  r|d uS |dk(  rt        d| d| dd       y |dk(  rt        d| d| dd       y t        d| d       y )NF0falseu   нет1trueu   даTrr   Q   : значние должно быть Boolean (0, 1, true, false, да, нет) rX   rK   rL   r   rM   rN   rV   rW   u<    не поддерживается для Boolean полейrO   rP   rQ   r-   rR   rS   rT   rU   rZ   r[   r\   r]   r^   zCDEV: FATAL _trans_field_compare_boolean unknown clean_wz_condition=)	r_   r`   ra   r$   rc   lowerr@   r3   rb   )r%   rj   r'   rk   obj_val_boolru   rl   s          r   _trans_field_compare_booleanz%CmfTrans._trans_field_compare_boolean   s   #z77==>DDG}''--C%%++1137OOC%%++1137LLC3J<  @Q  R\  Rj  Rj  Rp  Rp  Qq  r (44::DDSI!L$3&&4'3&&3&7
|2FXEY  ZV  W  _c  d3&7
|2FXEY  ZV  W  _c  d4'7
|2FXEY  ZV  W  _c  d4'7
|2FXEY  ZV  W  _c  d4'7
|2FXEY  ZV  W  _c  d8+7
|2FXEY  ZV  W  _c  d6)7
|2FXEY  ZV  W  _c  d:-7
|2FXEY  ZV  W  _c  d8+7
|2FXEY  ZV  W  _c  d</7
|2FXEY  ZV  W  _c  d9,d?":-$&9,7
|2FXEY  ZV  W  _c  d=07
|2FXEY  ZV  W  _c  d[\n[opx|}r   c                    t        ||j                  j                        j                         j                  }|j                  j                         }t        |D cg c]  }|j                  j                   c}      }t        |D cg c]  }|j                  j                   c}      }|j                  j                  j                  d      d   }|dk(  r||k(  S |dk(  r||k7  S |dk(  r||kD  S |dk(  r||k  S |dk(  r||k\  S |dk(  r||k  S |d	k(  r||v S |d
k(  r||vS |dk(  rt        d| d| dd       y |dk(  rt        d| d| dd       y |dk(  rt        d| d| dd       y |dk(  rt        d| d| dd       y |dk(  rt        |       S |dk(  rt        |      S |dk(  rt        d| d| dd       y |dk(  rt        d| d| dd       y t        d| d       y c c}w c c}w )NrK   rL   r   rM   rN   rO   rP   rQ   r-   rR   rS   rV   rW   u8    не поддерживается для m2m полейTrX   rT   rU   rZ   r[   r\   r]   r^   z?DEV: FATAL _trans_field_compare_m2m unknown clean_wz_condition=r_   r`   ra   r=   r,   r;   r   r3   rb   r@   r$   )	r%   rj   r'   rk   val_listoobj_val_id_setval_list_id_setrl   s	            r   _trans_field_compare_m2mz!CmfTrans._trans_field_compare_m2m  s   #z77==>CCEKK**//1':Qaddjj:;8<aqttzz<='44::DDSI!L$!_444'!_443&!O333&!O334'!_444'!_444'!_448+%886)7
|2FXEY  ZR  S  [_  `:-7
|2FXEY  ZR  S  [_  `8+7
|2FXEY  ZR  S  [_  `</7
|2FXEY  ZR  S  [_  `9,G}$$:-= 9,7
|2FXEY  ZR  S  [_  `=07
|2FXEY  ZR  S  [_  `WXjWkltxyO ;<s   G1	G6c                    t        |j                  j                        j                         j                  }j                  j                         t        D cg c]  }|j                  j                   c}      }fd}j                  j                  j                  d      d   }|dk(  r |        |d   k(  S |dk(  r |        |d   k7  S |dk(  rt        d d	| d
d       y |dk(  rt        d d	| d
d       y |dk(  rt        d d	| d
d       y |dk(  rt        d d	| d
d       y |dk(  r|j                  j                  |v S |dk(  r|j                  j                  |vS |dk(  rt        d d	| d
d       y |dk(  rt        d d	| d
d       y |dk(  rt        d d	| d
d       y |dk(  rt        d d	| d
d       y |dk(  rt        |       S |dk(  rt        |      S |dk(  rt        d d	| d
d       y |dk(  rt        d d	| d
d       y t        d d| d       y c c}w )Nc                  J    t              dkD  rt        d  d d       y y )N   rV   :    должен быть только один объект TrX   )lenr@   )rj   r   s   r   __check_one_itemz:CmfTrans._trans_field_compare_fk.<locals>.__check_one_item6  s=    8}q 5j\A{  }E  |F  G  !r   rK   rL   r   r   rM   rN   rV   rW   u7    не поддерживается для fk полейTrX   rO   rP   rQ   r-   rR   rS   rT   rU   rZ   r[   r\   r]   r^   z#DEV: FATAL _trans_field_compare_fk z unknown clean_wz_condition=r   )	r%   rj   r'   rk   r   r   _CmfTrans__check_one_itemrl   r   s	    `      @r   _trans_field_compare_fkz CmfTrans._trans_field_compare_fk1  sP   #z77==>CCEKK**//18<aqttzz<=	  (44::DDSI!L$hqk))4'hqk))3&7
|2FXEY  ZQ  R  Z^  _3&7
|2FXEY  ZQ  R  Z^  _4'7
|2FXEY  ZQ  R  Z^  _4'7
|2FXEY  ZQ  R  Z^  _4'::##668+zz''?::6)7
|2FXEY  ZQ  R  Z^  _:-7
|2FXEY  ZQ  R  Z^  _8+7
|2FXEY  ZQ  R  Z^  _</7
|2FXEY  ZQ  R  Z^  _9,G}$$:-= 9,7
|2FXEY  ZQ  R  Z^  _=07
|2FXEY  ZQ  R  Z^  _;J<Gcdvcwx  AE  F] =s   Ic                 V   |j                   |j                  k7  ry|j                  syt        ||j                  j
                        }t        |t        j                  j                        r| j                  ||      S t        |t        j                  j                        r| j                  ||      S t        |t        j                  j                        r| j                  ||      S t        |t        j                  j                        r| j!                  ||      S t        |t        j                  j"                        r| j!                  ||      S t        |t        j                  j$                        rt'        d| dt)        |       d       nwt        |t        j                  j*                        rt'        d| dt)        |       d       n6t        |t        j                  j,                        r| j/                  ||      S t'        d| dt)        |       d       y )NFz0DEV: FATAL _trans_field_compare NotImplemented: rK   TrX   uH   DEV: FATAL _trans_field_compare Неизвестный тип поля: )r!   cmf_model_namer3   r_   r`   ra   r4   cmffields
CmfM2MBaser   
CmfRelBaser   CmfStrrp   CmfIntrv   
CmfNumericCmfDateTimer@   typeCmfDateCmfBoolr   )r%   rj   r'   fields       r   _trans_field_comparezCmfTrans._trans_field_compared  s   >>Z666&&Z55;;<eSZZ22300SAAszz445//
C@@szz00111*cBBszz00144ZEEszz44544ZEEszz556HqQUV[Q\P]^fjkszz112HqQUV[Q\P]^fjkszz11244ZEE 	\]b\ccdeijoepdqrz~r   c                 *   | j                   d   }|j                  j                         syt        |t        j
                        r|j                  j                  }nd}t        j                  j                  |||dg      }|xr |j                  dk(  S )Nr   T
resolution)r'   obj_version
obj_statusr   approved)r
   need_approver=   r4   r/   CmfDocumentcur_workflow_versiondoc_version
CmfApprover   r   )r%   r   r'   r
   r   aggreg_fulls         r   _trans_filter_approvedzCmfTrans._trans_filter_approved  s    &&q)'',,.cF../22>>KK''++"L> , 

 C{55CCr   c                     | j                   d   j                  j                         syt        j                  j                  |ddg      }|xr |j                  dk(  S )Nr   Tr   )r'   is_cur_approver   rejected)r
   r   r=   r/   r   r   r   )r%   r   r'   r   s       r   _trans_filter_rejectedzCmfTrans._trans_filter_rejected  sY    "//446''++DR^Q_+`C{55CCr   c                 &    | j                  ||      S Nr   r%   r   r'   s      r   _trans_filter_ok_fieldzCmfTrans._trans_filter_ok_field  s    ((55r   c                      yNF r   s      r   _trans_filter_ok_always_falsez&CmfTrans._trans_filter_ok_always_false  s    r   c                 N    | j                  |j                  j                  |      S r   )r*   bqlra   r   s      r   _trans_filter_ok_bqlzCmfTrans._trans_filter_ok_bql  s!     !!&**"2"2C88r   c                     t         j                  re|j                  |      }|j                         }|r@t        j
                  s|t        _        |S t        t        j
                  |      t        _        |S yr   )configBZPYTHON_ENABLEDeval_bzpythonget_bzpython_jscache_timelifer1   jscache_timelifemin)r%   r   r'   rA   r   s        r   _trans_filter_ok_evalzCmfTrans._trans_filter_ok_eval  se    ""&&s+C%CCE)))9A& J *-Q-?-?AQ)RA&Jr   c                     t        dd       y )Nz,DEV: Not supported _trans_filter_ok_union_orTrX   r@   r   s      r   _trans_filter_ok_union_orz"CmfTrans._trans_filter_ok_union_or  s    @Mr   c                     t        dd       y )Nz-DEV: Not supported _trans_filter_ok_union_andTrX   r   r   s      r   _trans_filter_ok_union_andz#CmfTrans._trans_filter_ok_union_and  s    ANr   c                    t        t        dd       }dt        _        d}t        j                  j                  | dgddgd      D ]  }|j                  s|j                  j                  j                  d      d   }|d	k(  r| j                  ||      }nV|d
k(  r| j                  ||      }n=|dk(  r| j                  ||      }n$|dk(  r| j                  ||      }n|dk(  r| j                  ||      }n|dk(  rt|j                  j                  rK|j                  j                  }|j                  j                   |_        | j#                  ||      }||_        n| j#                  ||      }nz|dk(  r| j%                  ||      }nb|dk(  r| j'                  ||      }nJ|dk(  r| j)                  ||      }n2|dk(  r| j+                  ||      }nt-        d|j                   d       |r|c S  |t        _        |S )Ndisable_raise_lazyloadTordernor   r,   
transitionorderbyr   r.   rK   rL   current_userr   always_falseprev_statusr   evalunion_or	union_andr   r   z5DEV: FATAL trans_filter_ok unknown filter.logic_type=rX   )r_   r1   r   r/   r0   list
logic_typera   rb   rH   r   r   _trans_prev_statusr   status
is_changedoldr   r   r   r   r   r@   )r%   r'   prev_disable_raise_lazyloadrA   r   clean_logic_type
new_statuss          r   trans_filter_okzCmfTrans.trans_filter_ok  s   &-a1I4&P##' ++00D9+_bdr^s@D 1 F '	F$$%0066@@EaH>188E!W,11&#>!^388E!]2--fc:!U*//<!V+ ::((!$!1!1J!$CJ44VSAC!+CJ44VSAC!Z/44VSA![055fcB!Z/11&#>!Z/11&#>QRXRcRcQdemqr
O'	P $? 
r   c                 &    | j                  ||      S r   r   r%   	validatorr'   s      r   _trans_validator_fieldzCmfTrans._trans_validator_field  s    ((C88r   c                    |j                   j                         }|sy|j                  j                         j                  }|si }|j	                  dd      }|j	                  dd      }|j	                  dd      }d}|j
                  j                  rd}d}	|r!|j
                  j                  |vrd}	|r|	 S |	S |D ]  }
ddd|
j                  j                  z   d	z   g}|sddd
|
j                  j                  z   d	z   g}|r1|s/t        j                  j                  dd|g|g      }|dk  srd}	 n+t        j                  j	                  dd|g|g      rd}	 n |r|	 S |	S )NTinclude_current_statusFreverse_rulemost_recent_status_only
audit_dataz
SIMILAR TOz%{"status":{[^}]*"z"%z%{"status":{[^}]*old":"parentr   r   r   )r,   r=   wz_prev_status_optionsra   r   r   r   r   r   r/   CmfAuditcount)r%   rj   r'   status_listr   r   r   r   
audit_donerA   r   status_filterr   s                r   r   zCmfTrans._trans_prev_status  s    --224!+!B!B!G!G!I!O!O%%'"!7!;!;<TV[!\-11.%H"8"<"<=VX]"^ 
::  J"zz~~[0wJ! 	F *<9Mfiioo9]^b9bcM)!-|=VY_YbYbYhYh=hko=o p"8--!3,%6-  A:C **sC(!3*   C1	4 7N
r   c                     t        dd       y)Nz4DEV: Not supported _trans_validator_trans_form_fieldTrX   r   r   s      r   !_trans_validator_trans_form_fieldz*CmfTrans._trans_validator_trans_form_field$  s    HPTUr   c                 L   | j                  |j                  j                  |      }|s{|j                  rt	        |j                  d       |j
                  j                          t	        d|j
                  j                   d|j                   d|j                   d       |S )NTrX   u   Переход "u/   " запрещен UBQL-Валидатором     у объекта )	r*   r   ra   error_messager@   r   r=   namecode)r%   r   r'   rA   s       r   _trans_validator_bqlzCmfTrans._trans_validator_bql(  s      !4!4c:&&)11>  %%'()=)=)B)B(CCrs|  tB  tB  sC  CV  WZ  W_  W_  V`  a  im  n
r   c                 F    t         j                  r|j                  |      S yr   r   r   r   r   s      r   _trans_validator_evalzCmfTrans._trans_validator_eval1  s    ""**3//r   c           
         t        t        dd       }dt        _        d}| j                  r| j                  n| }t        j
                  j                  |dgdgd      D ]  }|j                  s|j                  j                  j                  d      d   }|dk(  r| j                  ||      }nz|d	k(  r| j                  ||      }nb|d
k(  r| j                  ||      }nJ|dk(  r| j                  ||      }n2|dk(  r| j                  ||      }nt        d|j                   d       |r n |t        _        |ry j                   rt        |j                   d       |j"                  j%                          t        d|j&                   d|j"                  j(                   d|j                  j(                   d|j&                   d       y )Nr   Tr   r   r   rK   rL   r   r   trans_form_fieldr   r   z;DEV: FATAL trans_validator_ok unknown validator.logic_type=rX   u7   Ошибка выполнения Валидатора u    для перехода r   rW   )r_   r1   r   do_validation_byr/   CmfTransValidr   r   ra   rb   r   r   r   r   r   r@   r   r   r=   r   r   )r%   r'   r   validr   r   r   s          r   trans_validator_okzCmfTrans.trans_validator_ok6  s   &-a1I4&P##' .2.C.CT**
--22jS\R]gjfk  }A2  B 	I''(3399CCCHK7*33IsC!]2//	3?!%77>>y#N!U*11)SA!V+229cBWXaXlXlWmnvz{%	& $? ""i--T:!!#KINNK[[tu~  vJ  vJ  vO  vO  uP  Pc  dg  dr  dr  dw  dw  cx  xz  {~  {C  {C  zD  E  MQ  	Rr   c                    d}|j                   j                  j                  d      d   }|dk(  r"t        ||j                  j                  g        y|dk(  r<|j
                  j                         }t        ||j                  j                  |       y|dv rit        ||j                  j                        j                         }|j
                  j                         }|D ]  }||vs|j                  |       d} |S |dv rit        ||j                  j                        j                         }|j
                  j                         }|D ]  }||v s|j                  |       d} |S t        d	|j                   d
| d       y )NFrK   rL   clearT:=)addItemr?   )delItemdeluX   DEV: FATAL _trans_action_field_m2m неподдерживаемое действие в  wz_operate=rX   )
wz_operatera   rb   setattrr`   r,   r=   r_   appendremover@   r   )r%   actionr'   has_changesclean_wz_operateru   r   r   s           r   _trans_action_field_m2mz CmfTrans._trans_action_field_m2mX  s   !,,22<<SA!Dw&C--33R8%%%**,CC--33S9!33C!5!5!;!;<AACE**//1H 'e#LL%"&K' !33C!5!5!;!;<AACE**//1H '%<LL%"&K' pqwq|q|p}  ~J  K[  J\  ]  ei  jr   c                 H   |j                   j                  j                  d      d   }|dk(  r"t        ||j                  j                  d        y|dk(  ru|j
                  j                         }t        |      dkD  rt        d| d| d	       |st        d| d
| d	       t        ||j                  j                  |d          y|dk(  rt        ||j                  j                        j                         }|j                  ry|j
                  j                         }t        |      dkD  rt        d| d| d	       |st        d| d
| d	       t        ||j                  j                  |d          y|dk(  rt        ||j                  j                        j                         }|j
                  j                         }|D ]4  }||j                  k(  st        ||j                  j                  d         y yt        d|j                   d| d	       y )NrK   rL   r  Tr  r   rr   r   rX   u8    не указан обьект для значения r   r?   Fr  uW   DEV: FATAL _trans_action_field_fk неподдерживаемое действие в r  )r  ra   rb   r  r`   r,   r=   r   r@   r_   is_not_nullr   )r%   r  r'   r  ru   r   r   s          r   _trans_action_field_fkzCmfTrans._trans_action_field_fku  s8   !,,22<<SA!Dw&C--33T:%%%**,C3x!|7x?yz}y~  7x?wx{w|}  C--33SV<&C!5!5!;!;<AACE  %%**,C3x!|7x?yz}y~  7x?wx{w|}  C--33SV<&C!5!5!;!;<AACE**//1H  %++%C!5!5!;!;TB  opvp{p{o|  }I  JZ  I[  \  dh  ir   c                 8   |j                   j                  j                  d      d   }|dk(  r"t        ||j                  j                  d        y|dk(  r,t        ||j                  j                  |j
                         y|dk(  rmt        ||j                  j                        }|j
                  j                  }|sy|j                  dz   |z   }t        ||j                  j                  |       y|dk(  rt        ||j                  j                        }|j
                  j                  }|sy||j                  v r>|j                  j                  |d	      }t        ||j                  j                  |       yyt        d
|j                   d| d       y )NrK   rL   r  Tr  r?   Fr  rJ   uY   DEV: FATAL _trans_action_field_text неподдерживаемое действие в r  rX   )
r  ra   rb   r  r`   rc   r_   replacer@   r   )r%   r  r'   r  r   ru   new_vals          r   _trans_action_field_textz!CmfTrans._trans_action_field_text  s   !,,22<<SA!Dw&C--33T:%C--33V5I5IJ&C!5!5!;!;<E&&,,CkkC'#-GC--33W=&C!5!5!;!;<E&&,,Cekk!++--c26V1177Aqrxr}r}q~  K  L\  K]  ^  fj  kr   c                 b  	 |j                   j                  j                  d      d   }t        ||j                  j                        j                  }|sd}|dk(  r"t        ||j                  j                  d        y	 t        |j                  j                        }|d	k(  r"t        ||j                  j                         y|d
v r|z   	|r^	|vrZ	}t        |      }t        t        	fd|            }|r|d   	n|d   	t        d|j                  j                   d| d	        t        ||j                  j                  	       y|dv r|z
  	|r^	|vrZ	}t        |      }t        t        	fd|            }|r|d   	n|d   	t        d|j                  j                   d| d	        t        ||j                  j                  	       yt        d|j                   d| d       y # t        $ r+ t        d| d|j                  j                   d       Y w xY w)NrK   rL   r   r  Trr   rs   rX   r  )incr?   c                     | k  S r   r   xr  s    r   <lambda>z6CmfTrans._trans_action_field_numeric.<locals>.<lambda>      AL r   u5   Действие пыталось выставить uC    в недопустимое значение для выбора: u<   . Выставили ближайшее доступное: )decr  c                     | k\  S r   r   r  s    r   r  z6CmfTrans._trans_action_field_numeric.<locals>.<lambda>  r  r   u\   DEV: FATAL _trans_action_field_numeric неподдерживаемое действие в r  )r  ra   rb   r_   r`   r  r   rc   rt   r@   sortedr   r   r   )
r%   r  r'   choice_limitr  
prev_valueru   bad_valnew_val_tmpr  s
            @r   _trans_action_field_numericz$CmfTrans._trans_action_field_numeric  s   !,,22<<SA!DS&"6"6"<"<=CC
Jw&C--33T:	&..445C t#C--33S9/ 3&G| ;!%l3"6*@,#OP)"oG +1oGQRXRfRfRlRlQm  nq  ry  qz  zv  w~  v  @  AC--33W=/ 3&G| ;!%l3"6*@,#OP)!nG +2.GQRXRfRfRlRlQm  nq  ry  qz  zv  w~  v  @  AC--33W=tu{  vA  vA  uB  BN  O_  N`  a  im  nS  	3F8;opv  qE  qE  qK  qK  pL  M 	s    G: :0H.-H.c                 N   |j                   j                  j                  d      d   }|j                  j                  sd}ny|j                  j                  j	                         dv rd}nP|j                  j                  j	                         dv rd}n't        d| d|j                  j                   d	       |d
k(  r"t        ||j                  j                  d        y|dk(  r"t        ||j                  j                         yt        d|j                   d| d	       y )NrK   rL   Frx   r{   Trr   r~   rX   r  r  u\   DEV: FATAL _trans_action_field_boolean неподдерживаемое действие в r  )	r  ra   rb   rc   r   r@   r  r`   r   )r%   r  r'   r  ru   s        r   _trans_action_field_booleanz$CmfTrans._trans_action_field_boolean  sT   !,,22<<SA!D##))C!!''--/3KKC!!''--/3HHC3F8  <M  NT  Nb  Nb  Nh  Nh  Mi  j w&C--33T:%C--33S9tu{  vA  vA  uB  BN  O_  N`  a  im  nr   c                    |j                  g d       |j                  r|j                  }t               }|j                  r|j                  j                  }n|}t
        j                  |j                        dk(  r2|j                  r|j                  |d<   ||d<   |j                  |       yt
        j                  |j                        dk(  r||d<   |j                  |      }t
        j                  |j                  j                        dk(  rUt        j                  j                  |      }|j                  j                  |j                         |j                          |j                  sYt
        j                  |j                        dk(  r7t        j                  j                  |      }||_        |j                          y)	N)wz_templatewz_template_targetzwz_template_target.parentr   tree_parentr   CmfTaskCmfList)r   F)load_fieldsr)  dictr*  r   r   get_class_name_by_idr   create_doc_from_templatecreate_task_from_templater/   r,  r   listsr	  saveparent_task)r%   r  r'   tmpltparamsr   task_idnew_tasks           r   "_trans_action_create_from_templatez+CmfTrans._trans_action_create_from_template(  sq   ]^&&EVF((2299++EHH5F,,,2,E,EF=)#)x ..v6  --ehh79D#)x 99&A//0I0I0L0LMQZZ%~~11W1=HNN))&*C*CDMMO00W5Q5QRURXRX5Y]f5f%~~11W1=H+.H(MMOr   c                    |j                   |j                  k7  ry|j                  syt        ||j                  j
                        }t        |t        j                  j                        r| j                  ||      S t        |t        j                  j                        r| j                  ||      S t        |t        j                  j                        r| j                  ||      S t        |t        j                  j                        r,| j!                  |||j"                  j%                               S t        |t        j                  j&                        r| j!                  ||      S t        |t        j                  j(                        r| j!                  ||      S t        |t        j                  j*                        rt-        d| dt/        |       d       nwt        |t        j                  j0                        rt-        d| dt/        |       d       n6t        |t        j                  j2                        r| j5                  ||      S t-        d| dt/        |       d       y )NF)r!  zDEV: FATAL NotImplemented: rK   TrX   u3   DEV: FATAL Неизвестный тип поля: )r!   r   r  r_   r`   ra   r4   r   r   r   r  r   r  r   r  CmfChoiceIntr%  choiceskeysr   r   r   r@   r   r   r   r'  )r%   r  r'   r   s       r   _trans_action_fieldzCmfTrans._trans_action_fieldG  s   >>V222  V11778eSZZ223//<<szz445..vs;;szz00100==szz66733FCemmN`N`Nb3ccszz00133FC@@szz44533FC@@szz5563E7!DK=IQUVszz1123E7!DK=IQUVszz11233FC@@GwaPTUZP[}]eijr   c                 H    t         j                  r|j                  |       yy)NTFr   )r%   r  r'   s      r   _trans_action_evalzCmfTrans._trans_action_evalf  s!    
 ""  %r   c                 $    d}t        dd       |S )NFz(DEV: Not supported _trans_action_webhookTrX   r   )r%   r  r'   r  s       r   _trans_action_webhookzCmfTrans._trans_action_webhookq  s    <DIr   c                 "   t        t        dd       }dt        _        d}t        j                  j                  | dgdgd      D ]  }|j                  dk(  r|| j                  ||      z  }(|j                  dk(  r|| j                  ||      z  }M|j                  d	k(  r|| j                  ||      z  }r|j                  d
k(  r|| j                  ||      z  }|j                  st        d|j                   d        |t        _        |S )Nr   TFr   r   r   r   r   webhookcreate_from_templatez7DEV: FATAL trans_run_actions unknown action.logic_type=rX   )r_   r1   r   r/   CmfTransActionr   r   r?  rA  rC  r:  r@   )r%   r'   r   r  r  s        r   trans_run_actionszCmfTrans.trans_run_actionsv  s   &-a1I4&P##' ++00D9+_b^ctx0y 	uF  G+t77DD""f,t66vsCC""i/t99&#FF""&<<tFFvsSS&&STZTeTeSfgost	u $? r   c                 *    t         |          g dz   S )N)r
   zstatus_to.status_typer   is_create_transition)r   save_preload_fields)r%   r   s    r   rK  zCmfTrans.save_preload_fields  s    w*,/|||r   c                     | j                   r\| j                  rPdd| j                  gg ddd| j                  gg}t        j
                  j                  |      }|rt        dd	       t        | $  |i | y )
Nr   r   )rJ  r   Tr   rM   r   u[   В этом бизнес-процессе уже есть стартовый переходTrX   )
is_newrJ  r   r   r/   r   r   r@   r   r4  )r%   argsr   r   transr   s        r   r4  zCmfTrans.save  sx    ;;444!368[^bdhjnjqjq]rsFOO''v'6Ew  @D  Ed%f%r   )obj_id
obj_fieldsuser_form_inputc           	      Z   t        j                  j                  |ddi|}|j                  r| rt         j                  j                  t        |j                  j                              D ]'  }d|v s|d   D ]  }||vs|j                  |        ) |j                  g d       t        j                  d| |      }t        t               |j                     j                  ||j                        |_        |r|j!                         D ]  \  }	}
|D cg c](  }|j#                  |	 d      s|t%        |	 d      d  * }}t'        |
t(              r d|
v rt        j                  d|
d   |      }
nA|
r?t'        |
t*              r/d|
d	   v r(|
D cg c]  }t        j                  d|d   |       }
}t-        ||	|
        t/        t         d
      r,t         j0                  j3                  |||j                         |j                  |j                  _        |S c c}w c c}w )Nr.   Tr   )request_type_idr   activityzproject.ui_form_schemezproject.cust_field_conf_schemezproject.logic_prefixcmf_deletedis_dummy)simpler   r   )ui_form.r   r   CmfAutomationUiForm)r   cmf_ui_form)r/   r   r   r\  	CmfUiFormget_ui_group_fieldsstrr   r	  extendr   get_obj_by_idvarsr!   _build_ui_formui_form_jsonitems
startswithr   r4   r/  r   r  hasattrr[  ui_get_hook)rP  rQ  rR  rN  r   	trans_obj	gr_fields
field_namer'   kvfrelation_fieldsis                 r   r   zCmfTrans.trans_ui_form_get  s    OO''MdMfM	  V $--AA#iF[F[F^F^B_` :	y(&/&9 :
%Z7&--j9::  C D ''tz'RC#F|CNN;JJ3XaXmXmJnC*002 'CAa BL&eAq||_`^aab\cOdqs!W'7&eO&e!!T*tqy#11!D'Ra1bz!T2tqt|mnohiW22$1T7Sb2cooCA&' v45**66sy^g^s^s6t141A1AI!!. 'f ps   H#5H#"H()NNN).__name__
__module____qualname__r   r   api_methodsclassmethodr   r*   rH   rp   rv   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r%  r'  r:  r?  rA  rC  rH  rK  r4  staticmethodr   __classcell__)r   s   @r   r   r      s&   $$004
 
K 
N 
N26p?{B1~f2~h*zX1Ff@:D"D69
NO.b96p
 RDj:+iZkr EG 4nln.>k>	
,}& (,t & &r   r   )rd   decimalr   cmf.includecommon.fieldsr   r   r   r   r   <module>r{     s%    	   #xy!! xr   