
    Y~hR                     0    d dl Z d dlT  G d d          ZdS )    N)*c                       e Zd Zg 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 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_listc                  
    g dS )N)is_dummyparentproject	cmf_ownerproject.cmf_ownerzcmf_owner.company
cmf_authorshare_companies r       (./modules/servicedesk/models/cmf_task.py_sdesk_check_access_fieldsz'CmfTaskMixin._sdesk_check_access_fields   s       	r   c                    |                      |                                            | j        r| j        s| j        r| j        }n| 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        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)load_fieldsr   r   r   r   check_project_role_accessr   gcurrent_userr   companyloadr   )selfr   s     r   _sdesk_check_accessz CmfTaskMixin._sdesk_check_access   s    
 	88::;;; = 	# 	#$+ 	#kGGlG00g[`0aa 	5= 	T_>>4>Q^++4..4 >!&&(( 	Q^-CtG[-[-[4( ur   N)r   c                   t           j                            |          }t          j        |d|i|}|                    d|           t
                              |d           t
                              |j        d           |                                 |	                                st          dd           |j        S )	Nidr   PPP-TSK-CREATEr!   write   Нет доступа!Tabort)models
CmfProjectgetCmfTaskr$   cmfutilacl_set_policysdesk_sla_cyclessaver*   	cmf_alertr-   )clsr   argskwargsr   ress         r   r   zCmfTaskMixin.sdesk_createP   s    #''6'22nd<6<V<<))*:)DDDsG,,,s3W===


&&(( 	<.d;;;;vr   c                    t           j                            |          }t          j        dd||d|}|j        |_        |                    d|           t                              |d           t                              |j	        d           d|_
        |                                 |                                 |                                st          dd	           d
|j        iS )Nr,   dummy)coder   r   r.   r/   r0   Tr1   r2   r-   r   )r4   r5   r6   r7   r-   rC   r$   r8   r9   r:   r   _calc_default_fieldr;   r*   r<   )r=   r   r?   r   
dummy_tasks        r   r   z$CmfTaskMixin.sdesk_create_dummy_task\   s    #''6'22^\''\\U[\\
$-
))*:
)KKKz7333z:GDDD"
&&(((--// 	<.d;;;;jm$$r   c                 t    |                                  st          dd           |                                 S Nr1   Tr2   )r*   r<   delete_dummy_task)r)   s    r   r   z$CmfTaskMixin.sdesk_delete_dummy_tasko   s<    '')) 	<.d;;;;%%'''r   c                 f    |                                  st          dd            | j        |i |S rG   )r*   r<   save_dummy_taskr)   r>   r?   s      r   r   z"CmfTaskMixin.sdesk_save_dummy_taskt   sB    '')) 	<.d;;;;#t#T4V444r   c                 f    |                                  st          dd            | j        |i |S rG   )r*   r<   task_transition_runrK   s      r   r   z&CmfTaskMixin.sdesk_task_transition_runy   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_idr,   T)obj_idrP   closed_lasttrans_sdesk_portal_allowreadassets)r-   rC   namelogic_prefixfieldsobject_fieldsr   
CmfCompanyORpersonsIN)servicedesk_allow=Tr-   r_   )relation_field_namerY   models_filterscf_field_custom_type)cmf_model_namerV   rX   )choice_multichoice_cascade_multiF)rY   require_field_filterr   )r6   r4   CmfWorkflowget_status_listr8   r9   field_options_listr%   r&   r'   r(   
startswithCmfCustFieldsget
class_namerc   )r=   r`   rY   	object_idr?   rP   workflowr@   ra   
cust_fieldrg   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!   Не найдена задача!Tr2   r1   r   )r4   r7   r6   r<   r*   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 rG   )r*   r<   updaterK   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)parent_logic_prefixr_   zproject.servicedeskr'   r[   r   r_   r   r   r]   )rX   filterorder_bysliceFT)
is_defined)r   rO   r   rb   rT   )extendr   appendr%   r&   r#   r'   r4   r7   listr*   keys
issubclassrX   cmf
CmfRelBaserk   r8   r9   getattr)r=   rX   ry   rz   r{   _kwargstask_filterr@   fields_filledrel_fields_allowrt   
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   )rX   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)rQ   simplerX   rT   )r~   r4   r7   attach_list
isinstancer   valueprivater*   r8   r9   
CmfComment)	r=   rX   rQ   r>   r?   fieldattachmentsfiltered_attachattachs	            r   r   zCmfTaskMixin.sdesk_attach_list  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 )NrT   )r6   r*   r8   r9   )r=   r>   r?   r@   s       r   r	   zCmfTaskMixin.sdesk_get$  s[    cgt&v&& 	s..00 	4 	0""3///
r   c                V    dg}t          j        j        |d|i|}t          |          S )Nr-   rX   )r4   r7   r   len)r=   rX   r>   r?   	task_lists        r   r   zCmfTaskMixin.sdesk_count-  s3     N-tMFMfMM	9~~r   c                   | 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        sud |j        D             |_        t'          |g           }|D ]]}t)          ||d          }|rHt+          t)          | |          t,          j        j                  rt2                              |d           ^t2                              |d           t2                              |j        d           d|v r t2                              |j        d           d|
v r t2                              |j        d           d|v r t2                              |j        d           d|v r t2                              |j        d           d|v r t2                              |j        d           ||_        ||_         |j!        s8|r6tE          tF          d          r!tF          j$        %                    ||	          }|S )ux   
        fields - список мета-правил для указания какие поля грузить
        defaultNry   )zrequest_type.ui_form_viewzrequest_type.ui_form_createlogic_type_idrp   activity_id)ry   rX   Frt   inline_save)tmp_objtmp_is_public_formtmp_ui_view_formcreate_formui_formr   r   )cmf_deleted
logic_type	scheme_wfactivityr   ui_group_fieldsrX   r   )full_fields_loadmapperc                 (    g | ]}|j         d k    |S )r   )	log_level).0comments     r   
<listcomp>z-CmfTaskMixin.sdesk_ui_get.<locals>.<listcomp>f  s&    ^^^GwGX\]G]G]G]G]G]r   rT   rU   r   rO   rp   r   CmfAutomationUiForm)cmf_ui_form)&r   r6   r*   r   request_typeui_form_createui_form_viewui_form_jsonr(   super_build_ui_formrV   r-   setrv   r~   _build_load_plan_getcommentssumr   r   r   rX   r   r8   r9   rU   r   rO   rp   r   ui_form_namer   hasattrr4   r   ui_get_hook)r=   rX   r>   r?   r   r   r   ry   rt   
ui_form_id
fields_setui_form_fieldsgroups
group_datar   retr   r   	__class__s                     r   r
   zCmfTaskMixin.sdesk_ui_get4  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^^s|^^^!$^R!8!8"0 > >J#CT::E >GC,D,DcjF[!\!\ >..uf===&&sF333&&s|V<<<///**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_tokenrX   Z     TF)datetimer   r4   r7   r6   nowr   daysreplacemark_commentr   	mark_dateset_nowr;   )r=   r   r   r   r   rt   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        rai }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)r-   rX   r       T)	only_dataz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)subjectr   )r4   r7   r6   r   secrets	token_hexr;   r   r   jinja2FileSystemLoaderospathjoinconfigPROJECT_DIREnvironmentr   emailr   rV   rC   r   get_templaterenderAPP_FQDNCmfPluginMailBoxget_local_mailboxsend_message)task_idrt   r   _options_loader
_jinja_envrcpt_tor   template
email_bodymail_boxs              r   sdesk_send_feedback_requestz(CmfTaskMixin.sdesk_send_feedback_request  s    ~!!W 6
 6
 6
!    	&NNN%//33DOIII%%% ;% 	HH--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//)rW   rk   ui_namerC   r   href)r)   r   s    r   r   zCmfTaskMixin.href  sB    ''	22 	=<$,<<<<<ww|r   )NN)NNNN)__name__
__module____qualname__api_methodsstaticmethodr   r*   classmethodr   r   r   r   r   r   r   r   r   r   r	   r   r
   r   cmf_deferred_jobr   propertyr   __classcell__)r   s   @r   r   r      sq       
 
 
K"   \
1 1 1f (, 	 	 	 	 [	 % % [%$( ( (
5 5 5
9 9 9
 DH? ? ? [?B 	 	 [	, , ,
 : : : [:x -1     [*   [ '+     [ (, K K K K K K [KZ   [   3U  bf  g  g  g%H %H g  g \%HN     X    r   r   )builtinscmf.includer   r   r   r   <module>r
     sV        { { { { { { { { { {r   