
    -Li5Z                     0    d dl Z d dlT  G d d          ZdS )    N)*c                       e Zd Zg dZddZd Zed             Zd Ze	ddd            Z
e	d	             Zd
 Zd Zd Ze		 dd            Ze	d             Zd Ze	dd            Ze	ddd            Ze	d             Ze	ddd            Ze	dd fd
            Ze	d             Ze eddd          d                         Ze fd            Zd Z xZS ) CmfTaskMixin)sdesk_create
sdesk_listsdesk_count	sdesk_getsdesk_ui_getsdesk_updatesdesk_field_options_listsdesk_approve_onesdesk_create_dummy_tasksdesk_delete_dummy_tasksdesk_save_dummy_tasksdesk_task_transition_runsdesk_feedbacksdesk_attach_listsdesk_count_approversNc                    |                      dg           | j        re| j        j        r[t                              | | j        j                  }|rt
                              ||           |                                 d S d S d S )Nzrequest_type.task_form.textfields)parent	task_form)load_fieldsrequest_typer   modelsCmfTaskFormDatacmfutilacl_set_policysave)selfr   	form_datas      (./modules/servicedesk/models/cmf_task.py_init_task_formzCmfTaskMixin._init_task_form   s    !> ?@@@ 	!2!< 	..ddFWFa.bbI B&&y.AAANN		 	 	 	    c                 
   | j         dk    rd S | j        r/| j                                         |                     d           t
          j                            |            | j        s&| j        rt
          j	        
                    |            | j        j        rc| j        dk    rZt                              | j        j                  }|j        r1t#          t
          j        j        | j        j        g           d S d S d S d S )Nproject.servicedeskT	only_dataCLOSED)args)parent_logic_prefixis_newcmf_created_atset_nowr    r   CmfSDeskSlaTriggertask_changed_hook
is_changedCmfSDeskSlaCycleupdate_cycle_goalscache_status_typeAPPget_cache_projectprojectidr   schedule_deferred_jobCmfTasksdesk_send_feedback_requestvalue)r!   _kwargsr8   s      r#   _sdesk_savezCmfTaskMixin._sdesk_save    s   #'<<<F; 	& ''))) III%%%
 	!33D999{ 	=t 	=#66t<<< !, 	h1G81S1S++DLO<<G% h%fn&PX\X_XeWfgggggg	h 	h1S1Sh hr%   c                  
    g dS )N)is_dummyr   
project_id	cmf_ownerzcmf_owner.company
cmf_authorshare_companies rF   r%   r#   _sdesk_check_access_fieldsz'CmfTaskMixin._sdesk_check_access_fields;   s       	r%   c                    |                      |                                            t                              | j                  }| j        r|s| j        r| j        }|                    d|d          sdS | j        r| j        t          j
        k    rdS | j        t          j
        k    rdS |j        t          j
        j        k    rdS t          j
        j                                        rt          j
        j        | j        v rdS dS )NzPPP-PR-BROWSEF)objraise_errorT)r   rG   r6   r7   rB   rA   r   check_project_role_accessrD   gcurrent_userrC   cmf_owner_idr9   companyloadrE   )r!   r8   s     r#   _sdesk_check_accessz CmfTaskMixin._sdesk_check_accessA   s   
 	88::;;; ''88= 	" 	"T[ 	"kG00g[`0aa 	5= 	T_>>4>Q^++41>#4444 >!&&(( 	Q^-CtG[-[-[4( ur%   )r   c                   t                               |          }t          j        |d|i|}|                    d|           t
                              |d           t
                              |j        d           |                                 |	                                st          dd           |j        S )Nr   PPP-TSK-CREATErI   write   Нет доступа!Tabort)r6   r7   r   r;   rK   r   r   sdesk_sla_cyclesr    rQ   	cmf_alertr9   )clsr   r+   kwargsr8   ress         r#   r   zCmfTaskMixin.sdesk_creates   s    ''//nd<6<V<<))*:)DDDsG,,,s3W===


&&(( 	<.d;;;;vr%   c                    t                               |          }t          j        dd||d|}|j        |_        |                    d|           t                              |d           t                              |j	        d           d|_
        |                                 |                                 |                                st          dd           |                    d	           d
|j        iS )Ndummy)coder8   r   rS   rT   rU   TrV   rW   )r   r9   rF   )r6   r7   r   r;   r9   r`   rK   r   r   rY   rA   _calc_default_fieldr    rQ   rZ   r$   )r[   r   r\   r8   
dummy_tasks        r#   r   z$CmfTaskMixin.sdesk_create_dummy_task   s    ''//^\''\\U[\\
$-
))*:
)KKKz7333z:GDDD"
&&(((--// 	<.d;;;;""'":::jm$$r%   c                 t    |                                  st          dd           |                                 S NrV   TrW   )rQ   rZ   delete_dummy_task)r!   s    r#   r   z$CmfTaskMixin.sdesk_delete_dummy_task   s<    '')) 	<.d;;;;%%'''r%   c                 f    |                                  st          dd            | j        |i |S rd   )rQ   rZ   save_dummy_taskr!   r+   r\   s      r#   r   z"CmfTaskMixin.sdesk_save_dummy_task   sB    '')) 	<.d;;;;#t#T4V444r%   c                 f    |                                  st          dd            | j        |i |S rd   )rQ   rZ   task_transition_runrh   s      r#   r   z&CmfTaskMixin.sdesk_task_transition_run   sB    '')) 	<.d;;;;'t'8888r%   c                 T   |dk    rm|o|                     dd           }|rSt          j                             |          }|r1|r/ |j        d||ddd|}t                              |d           |S |dk    r4g d|d	<    | j        |fd
|i|}t                              |d           |S |dk    r|t          j        j	        
                                 ddddt          j        ggg dgddt          j        j	        ggi} | j        d|||d|}t                              |d           |S |                    d          rct          j                            | j        |dg          }	d}
|	j        dv rd}
 | j        |f||
d|}t                              |d           |S g S )Nstatusworkflow_id)r9   T)obj_idrm   closed_lasttrans_sdesk_portal_allowreadassets)r9   r`   namelogic_prefixr   object_fieldsrE   
CmfCompanyORpersonsIN)servicedesk_allow=Tr9   r{   )relation_field_nameru   models_filterscf_field_custom_type)cmf_model_namers   r   )choice_multichoice_cascade_multiF)ru   require_field_filterrF   )getr   CmfWorkflowget_status_listr   r   field_options_listrL   rM   rO   rP   
startswithCmfCustFieldsget
class_namer   )r[   r|   ru   	object_idr\   rm   workflowr]   r}   
cust_fieldr   s              r#   r   z%CmfTaskMixin.sdesk_field_options_list   sh    (**'RM,=,=mT,R,RK !-11[1AA 		 	2(2 ($/$(15	 
 ! C **3777J(**  FEEF8 )#()<ddMd]cddC""3///J"333N"'')))'78:Z:Z:Z[3 67N )#( $7}es  C ""3///J ))%00 	,11#&>8K/0 2 2 2J "& +/VVV',$ )#(#w3@Wkw wouw wC""3///J	r%   c                     t           j                            |d                   }|st          dd           |                                st          dd            |j        di |}|S )Nr   u!   Не найдена задача!TrW   rV   rF   )r   r;   r   rZ   rQ   approve_one)r[   r+   r\   taskr]   s        r#   r   zCmfTaskMixin.sdesk_approve_one   s}    ~!!$q'** 	G9FFFF'')) 	<.d;;;;d((((
r%   c                 f    |                                  st          dd            | j        |i |S rd   )rQ   rZ   updaterh   s      r#   r   zCmfTaskMixin.sdesk_update   sA    '')) 	<.d;;;;t{D+F+++r%   c                    |sg }|                     |                                            g }|r|                    |           |                    g d           t          j                            dg           |                    dddt          j        gddt          j        gddt          j        j        ggg           t          j        	                    ||||	          }d
}g }	|D ]}
|

                                r|sud}|
                    d          D ]\}t          |
j        |         t          j        j                  s-|dv r|	                    |           |                    d          r	 ]t"                              |
d           |	D ]+}t"                              t'          |
|          d           ,|S )N)r,   r{   r'   rO   rw   rC   r{   zproject.cmf_ownerrE   ry   )r   filterorder_bysliceFT)
is_defined)r   rl   rE   r~   rq   )extendrG   appendrL   rM   r   rO   r   r;   listrQ   keys
issubclassr   cmf
CmfRelBaser   r   r   getattr)r[   r   r   r   r   r>   task_filterr]   fields_filledrel_fields_allowr   
field_names               r#   r   zCmfTaskMixin.sdesk_list   s   "  	Fc4466777 	'v&&& 	NNNOOO	""I;///#q~. #q~6q~'=&>?	
 	 	 	 n!!h^c!dd 	N 	ND'')) N$ 
!$(M&*ii4i&@&@ ! !
)$+j*A3:CXYY %$%)PPP,33J???%0077 ! !&&tV444"2 N NJ**74+D+DfMMMM
r%   r   c                h   dD ]}||vr|                     |           t          j        j        ||d|d|}|s|S g }|D ]}t	          |j        j        t          j                  rQ|j        sJ|j                                        r0t          
                    |d           |                     |           wt	          |j        j        t          j                  rU|j        sN|j        j                                        r0t          
                    |d           |                     |           |S )N)r   zparent.parentF)rn   simpler   rq   )r   r   r;   attach_list
isinstancer   r=   privaterQ   r   r   
CmfComment)	r[   r   rn   r+   r\   fieldattachmentsfiltered_attachattachs	            r#   r   zCmfTaskMixin.sdesk_attach_list3  sC   0 	% 	%EF""e$$$n0$ve\bmmflmm 	! 		3 		3F&--v~>> 3v~ 3=4466 3**66:::#**6222FM/1BCC 3FN 3=';;== 3**66:::#**6222r%   c                      | j         |i |}|r|                                sd S |rt                              |d           |S )Nrq   )r   rQ   r   r   )r[   r+   r\   r]   s       r#   r	   zCmfTaskMixin.sdesk_getI  s[    cgt&v&& 	s..00 	4 	0""3///
r%   c                V    dg}t          j        j        |d|i|}t          |          S )Nr9   r   )r   r;   r   len)r[   r   r+   r\   	task_lists        r#   r   zCmfTaskMixin.sdesk_countR  s3     N-tMFMfMM	9~~r%   c                t   | j         }d}d}|                    dd          }|r|                     |g d          }|                                sdS |j        r|j        j        }n|j        j        }|j                                         |j        rN|j        j        s|j        j        r6|r4t                      
                    |ddd|	          }|j        }|j        }	t          |pd
dg          }
|
                    g d           g }|rl|                    dg           }|D ]S}|                    |                    d                     |
                    |                    dg                      T|                     |
          } | j        ||dd|}|r|j        s?t%          |g           }|D ]]}t'          ||d          }|rHt)          t'          | |          t*          j        j                  rt0                              |d           ^t0                              |d           d|v r t0                              |j        d           d|
v r t0                              |j        d           d|v r t0                              |j        d           d|v r t0                              |j        d           d|v r t0                              |j        d           ||_        ||_        |j         s8|r6tC          tD          d          r!tD          j#        $                    ||	          }|S )ux   
        fields - список мета-правил для указания какие поля грузить
        defaultNr   )zrequest_type.ui_form_viewzrequest_type.ui_form_createlogic_type_idr   activity_id)r   r   Fr   inline_save)tmp_objtmp_is_public_formtmp_ui_view_formcreate_formui_formr   r8   )cmf_deleted
logic_type	scheme_wfactivityrE   ui_group_fieldsr   r   )full_fields_loadmapperrq   rr   r   rl   r   rE   CmfAutomationUiForm)cmf_ui_form)%r   r   rQ   rA   r   ui_form_createui_form_viewui_form_jsonrP   super_build_ui_formrs   r9   setr   r   _build_load_plan_getsumr   r   r   r   r   r   r   rr   r   rl   r   rE   ui_form_namer   hasattrr   r   ui_get_hook)r[   r   r+   r\   r   r   r   r   r   
ui_form_id
fields_setui_form_fieldsgroups
group_datar   retr   r   	__class__s                     r#   r
   zCmfTaskMixin.sdesk_ui_getY  s   
 { Hd++ 	,77& 2 2 27  D ++-- t} 9+:+8 %%'''  ,d&7&F ,$J[Jh , 
,#(77#9#9 $+0)/$1 ' $: $ $L $+<L!(J8Hi#899
cccddd 	@!%%&7<<F$ @ @
%%jnnX&>&>???!!*..2">">????//
;;ch/?[[TZ[[ 	Z= H!$^R!8!8"0 > >J#CT::E >GC,D,DcjF[!\!\ >..uf===&&sF333///**3:v>>> J..**3?FCCC///**3:v>>>!111**3<@@@$(888**3+>GGG+C+C? Zw Z76CX3Y3Y Z0<<Sj<YY
r%   c                    dd l }|rt          |          dk    r|rt          j                            |ddg          }|r|j                                         |j        z
  j        dk    rq|r.t          |                    dd                    dk    r||_	        |j
        |k    r ||_
        |j                                         |                                 d	S d
S )Nr   @   status_modified_atmark)
mark_tokenr   Z     TF)datetimer   r   r;   r   nowr   daysreplacemark_commentr   	mark_dater/   r    )r[   r   r   r   r   r   s         r#   r   zCmfTaskMixin.sdesk_feedback  s     
	#j//R//D/>%%EY[aDb%ccD *..0043JJPTVVV 5C(<(<S"(E(E$F$F$J$J(4D%9$$ $DIN**,,,		tur%   Tu`   Отправка письма оценки качества обслуживания ServiceDesk)	only_oncedescription
system_jobc                    t           j                            | g d          }|j        s4dd l}|                    d          |_        |                    d           |j        j        rmdt          j
        i}t                              t          j                            t           j        d          t          j                            t           j        d	          g          }||d
<   t          j        di |}|j        j        j        }d|j        j         d|j         d|j         d|j        j         }|                    d          }|                    d|j        j         d|j         d|j         |j        |j        j        dt           j         d          }	t           j                                        }
|
                    ||	|           d S d S )N)r   zparent.sdesk_feedbackzparent.sdesk_feedback_textzparent.namezcmf_owner.email)r9   r   r       Tr(   
autoescapezcommon/templateszcmf/templatesloader[z] (z) r   zsdesk_mail_notification.htmlzhttps://z/servicedesk/feedback)	mail_textr   sdesk_feedback_textsdesk_feedback_url)subjectrF   )r   r;   r   r   secrets	token_hexr    r   r   r6   select_jinja_autoescapejinja2FileSystemLoaderospathjoinconfigPROJECT_DIREnvironmentrC   emailr=   rs   r`   r   get_templaterenderAPP_FQDNCmfPluginMailBoxget_local_mailboxsend_message)task_idr   r   _options_loader
_jinja_envrcpt_tor   template
email_bodymail_boxs              r#   r<   z(CmfTaskMixin.sdesk_send_feedback_request  s    ~!!W 6
 6
 6
!    	&NNN%//33DOIII%%% ;% 	H$c&ABH--f02DEErw||TZTfhwGxGxy{ {G!(HX+77h77Jn*0Gi$+*iityiiDIiiHgiiG!../MNNH!Kdk.KK49KK	KK?$(K$C#Tfo#T#T#T	 )  J .@@BBH!!':w!GGGGG)	H 	Hr%   c                     | j                             d          rd| j         d| j         S t	                      j        S )Nztask.sdzservicedesk//)rt   r   ui_namer`   r   href)r!   r   s    r#   r  zCmfTaskMixin.href  sB    ''	22 	=<$,<<<<<ww|r%   c                 R    |                                   |                                 S N)rQ   count_approvers)r!   r>   s     r#   r   z"CmfTaskMixin.sdesk_count_approvers  s&      """##%%%r%   r  )NN)NNNN)__name__
__module____qualname__api_methodsr$   r?   staticmethodrG   rQ   classmethodr   r   r   r   r   r   r   r   r   r   r	   r   r
   r   cmf_deferred_jobr<   propertyr  r   __classcell__)r   s   @r#   r   r      s       
 
 
K$   h h h6   \
0 0 0d (, 	 	 	 	 [	 % % [%(( ( (
5 5 5
9 9 9
 DH? ? ? [?B 	 	 [	, , ,
 : : : [:x -1     [*   [ '+     [ (, H H H H H H [HT   [   3U  bf  g  g  g&H &H g  g \&HP     X& & & & & & &r%   r   )builtinscmf.includer   rF   r%   r#   <module>r     sV        b& b& b& b& b& b& b& b& b& b&r%   