
    @iu                     (    d dl T  G d d          ZdS )    )*c                       e Zd Zg dZd#dZ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            Ze
dd fd
            Ze
d             Ze eddd          d                         Ze fd            Zd Zd&defd Z d#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_hint_docs_search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                 H    | j         dk    rd S |                                  d S )Nproject.servicedesk)parent_logic_prefix_calc_sdesk_hint_docsr"   _kwargss     r$   _sdesk_before_super_savez%CmfTaskMixin._sdesk_before_super_save    s.    #'<<<F""$$$$$r&   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 )Nr(   T	only_dataCLOSED)args)r)   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"   r,   r>   s      r$   _sdesk_after_super_savez$CmfTaskMixin._sdesk_after_super_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cmf_owner_assistants rL   r&   r$   _sdesk_check_access_fieldsz'CmfTaskMixin._sdesk_check_access_fieldsB   s    7 7 7 	7r&   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 t          j
        | j        v rdS dS )NzPPP-PR-BROWSEF)objraise_errorT)r   rM   r<   r=   rG   rF   r   check_project_role_accessrI   gcurrent_userrH   cmf_owner_idr?   companyloadrJ   rK   )r"   r>   s     r$   _sdesk_check_accessz CmfTaskMixin._sdesk_check_accessH   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>T666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rO   write   Нет доступа!Tabort)r<   r=   r   rA   rQ   r   r    sdesk_sla_cyclesr!   rW   	cmf_alertr?   )clsr   r2   kwargsr>   ress         r$   r   zCmfTaskMixin.sdesk_create|   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)coder>   r   rY   rZ   r[   Tr\   r]   )r    r?   rL   )r<   r=   r   rA   r?   rf   rQ   r   r    r_   rF   _calc_default_fieldr!   rW   r`   r%   )ra   r   rb   r>   
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 Nr\   Tr]   )rW   r`   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 rj   )rW   r`   save_dummy_taskr"   r2   rb   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 rj   )rW   r`   task_transition_runro   s      r$   r   z&CmfTaskMixin.sdesk_task_transition_run   sB    '')) 	<.d;;;;'t'8888r&   c                    |dk    r}|o|                     dd           }ddg}|r]t          j                             |          }|r;|r9|                    ||dd|	||
          }t                              |d           |S n|d	k    r=d
g}|                     |||||	|
||          }t                              |d           |S |dk    rQdddt          j        gggi}dg}|                     ||||||	|
||	  	        }t                              |d           |S |dk    rt          j	        
                    ddt          j        ggddg          }d |D             }dd|g}|rd|dd|gdd|gg}d|i}|                     |||dgdg|	|
|||
  
        }|                     ||           t                              |d           |S |                    d          rnt          j                            | j        |d g!          }d}|j        d"v rd#}|                     |||||||
$          }t                              |d           |S t"                              d%d&| d'           g S )(Nstatusworkflow_idcolorzworkflow.namer?   T)obj_idrt   closed_lasttrans_sdesk_portal_allowfilterr   slicereadassetslogic_prefix)object_fieldsr   searchrz   r{   cust_field_conf_idcust_field_confrJ   
CmfCompanypersonsINinn)	relation_field_namer   models_filtersr   r   rz   r{   r   r   rK   --r?   rz   r   c                     h | ]	}|j         
S rL   rv   ).0rU   s     r$   	<setcomp>z8CmfTaskMixin.sdesk_field_options_list.<locals>.<setcomp>   s    ???'7:???r&   rU   ORlogin=email	CmfPerson
company_id)
r   r   r   models_listr   rz   r{   r   r   r   cf_field_custom_type)cmf_model_namenamer   )choice_multichoice_cascade_multiF)r   require_field_filterr   r   r   r{   z%sz!CmfTask.sdesk_field_options_list(z): prohibited field requested)getr   CmfWorkflowget_status_listr   r    field_options_listrR   rS   r   slist_sdesk_hide_person_info
startswithCmfCustFieldsget
class_namer   loggingwarning)ra   r   r   	object_idr   all_optionsr   r   r   rz   r{   r,   rt   workflowrc   r   	companiescompany_idscmf_person_filter
cust_fieldr   s                        r$   r   z%CmfTaskMixin.sdesk_field_options_list   so    (**'RM,=,=mT,R,RK/F !-11[1AA 		 	"22($/$(15%fE 3  C **3777J H,, %%F ((#=fV5#5 ) X XC ""3///J $555 
 q~&67N WF(($7}esfV5#5 ) X XC ""3///J $::: )//	4!.IY7Zdhjnco/ppI??Y???K!*D+ >  %c6*c6*	%! *+<=N(($7}es(M$~fE2DVe	 ) g gC ''[999""3///J !++E22 	,11#&>8K/0 2 2 2J $( +/WWW',$ ((#=Wk2DVemr ) t tC ""3///JtBUtttuuu	r&   c                     t           j                            |d                   }|st          dd           |                                st          dd            |j        di |}|S )Nr   u!   Не найдена задача!Tr]   r\   rL   )r   rA   r   r`   rW   approve_one)ra   r2   rb   taskrc   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 rj   )rW   r`   updatero   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d	dt          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(   rU   r   rH   r   zproject.cmf_ownerrJ   r   rK   )r   rz   order_byr{   FT)
is_defined)r   rs   rJ   r   r|   )extendrM   appendrR   rS   r   rU   r   rA   listrW   keys
issubclassr   cmf
CmfRelBaser   r   r    getattr)ra   r   rz   r   r{   r,   task_filterrc   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~'=&>?#TAN+;<
 	 	 	 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)rw   simpler   r|   )r   r   rA   attach_list
isinstancer   rC   privaterW   r   r    
CmfComment)	ra   r   rw   r2   rb   fieldattachmentsfiltered_attachattachs	            r$   r   zCmfTaskMixin.sdesk_attach_listl  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 )Nr|   )r   rW   r   r    )ra   r2   rb   rc   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?   r   )r   rA   r   len)ra   r   r2   rb   	task_lists        r$   r   zCmfTaskMixin.sdesk_count  s3     N-tMFMfMM	9~~r&   c                     |:t           j                            t          j        j        ddg          }|j        g}|D ]}|j        |vr|j        |_        d S )Nr   r   r?   r   )	r   r   r   rR   rS   r?   r   r   r   )ra   r   r   rS   persons        r$   r   z$CmfTaskMixin._sdesk_hide_person_info  sj    !+00AN4EtUaNb0ccL'23K 	+ 	+F 33$l	+ 	+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                   |j        s?t)          |g           }|D ]]}t+          ||d          }|rHt-          t+          | |          t.          j        j                  rt4                              |d           ^t4                              |d           d|v r t4                              |j        d           d|
v r t4                              |j        d           d|v r t4                              |j        d           d|v r t4                              |j        d           d|v r t4                              |j         d           ||_        ||_!        |j"        s8|r6tG          tH          d          r!tH          j%        &                    ||	          }|S )ux   
        fields - список мета-правил для указания какие поля грузить
        defaultNrz   )zrequest_type.ui_form_viewzrequest_type.ui_form_createlogic_type_idr   activity_idr   Fr   inline_save)tmp_objtmp_is_public_formtmp_ui_view_formcreate_formui_formr   r>   )cmf_deleted
logic_type	scheme_wfactivityrJ   zcmf_owner_assistants.company.idui_group_fieldsr   r   )full_fields_loadmapperr|   r}   r   rs   r   rJ   CmfAutomationUiForm)cmf_ui_form)'r   r   rW   rF   r   ui_form_createui_form_viewui_form_jsonrV   super_build_ui_formr   r?   setr   r   _build_load_plan_getr   rK   sumr   r   r   r   r   r   r    r}   r   rs   r   rJ   ui_form_namer   hasattrr   r   ui_get_hook)ra   r   r2   rb   r   r   r   rz   r   
ui_form_id
fields_setui_form_fieldsgroups
group_datar   retr   r   	__class__s                     r$   r
   zCmfTaskMixin.sdesk_ui_get  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
 x x x 	y 	y 	y  	@!%%&7<<F$ @ @
%%jnnX&>&>???!!*..2">">????//
;;ch/?[[TZ[[ 	Z''(@AAA= 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   rA   r   nowr   daysreplacemark_commentr   	mark_dater5   r!   )ra   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.emailr   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)subjectrL   )r   rA   r   r   secrets	token_hexr!   r   r   r<   select_jinja_autoescapejinja2FileSystemLoaderospathjoinconfigPROJECT_DIREnvironmentrH   r   rC   r   rf   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$   rB   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//)r~   r   ui_namerf   r   href)r"   r   s    r$   r0  zCmfTaskMixin.href+  sB    ''	22 	=<$,<<<<<ww|r&   c                     | j         r| j        r| j        sd S | j        j        s| j         j        s| j        j        sd S | j                             dg           |                                 | _        d S )Nhint_docs_mandatory_tags)r   r   r>   r8   r   _sdesk_hint_docs_searchsdesk_hint_docsrl   s    r$   r*   z"CmfTaskMixin._calc_sdesk_hint_docs2  s    ! 	di 	DL 	F L#	 +	 y#	
 F%%'A&BCCC#;;==r&   r   c                 \   || j         j        }|r3t          |                                          dk     s| j        r| j        sg S d }|                    dd          }d | j        j        D             }t          j	        
                    dd|| j        j        j        ||dd	gd
|	  	        S )N   c                     d}| j         rt| j         j        dk    rdt          | t          j                  r| j                                         }|r/t                              | d           |                                  |S )NFr(   r|   )	r>   r~   r   r   CmfDocumentrW   r   r    _acl_check_read)rO   checks     r$   check_accessz:CmfTaskMixin._sdesk_hint_docs_search.<locals>.check_accessH  s     E{ *s{7;PPPc6#566 >K;;==E ***3777'')))Lr&   #r   c                 &    g | ]}|j         j        S rL   )r   rC   )r   tags     r$   
<listcomp>z8CmfTaskMixin._sdesk_hint_docs_search.<locals>.<listcomp>X  s    ZZZSX^ZZZr&   r8  ANYr>   zproject.logic_prefixT)	
model_namer   search_query	parent_idtag_namer{   r   	query_rawr;  )r   rC   r   stripr>   r   r  r2  r   CmfFullSearchfulltext_searchr?   )r"   r   r{   r;  	tags_lists        r$   r3  z$CmfTaskMixin._sdesk_hint_docs_search@  s    >Y_F 	V\\^^,,q000DL]0I	 	 	 S))ZZt/@/YZZZ	#33$Vlo+i,B Ctbn 4 p p 	pr&   c                     |                      ddg|                                 z              |                                 st          dd           |                     |ddg          S )	Nr>   z%request_type.hint_docs_mandatory_tagsr\   Tr]   r   r6  )r{   )r   rM   rW   r`   r3  )r"   r   r,   s      r$   r   z#CmfTaskMixin.sdesk_hint_docs_search_  sr    )%LMdNmNmNoNooppp'')) 	<.d;;;;++F1a&+AAAr&   c                 R    |                                   |                                 S N)rW   count_approversr+   s     r$   r   z"CmfTaskMixin.sdesk_count_approverse  s&      """##%%%r&   rL  )	NNNNNNNNN)NNNN)NN)$__name__
__module____qualname__api_methodsr%   r-   rD   staticmethodrM   rW   classmethodr   r   r   r   r   r   r   r   r   r   r	   r   r   r
   r   cmf_deferred_jobrB   propertyr0  r*   strr3  r   r   __classcell__)r   s   @r$   r   r      s)       
 
 
K&   % % %h h h8 7 7 \7
2 2 2h (, 	 	 	 	 [	 % % [%(( ( (
5 5 5
9 9 9
 ptNRn n n [n` 	 	 [	, , ,
 ; ; ; [;z -1     [*   [ '+     [ + + + [+ (, O O O O O O [Ob   [   3U  bf  g  g  g&H &H g  g \&HP     X> > >p pc p p p p>B B B B& & & & & & &r&   r   N)cmf.includer   rL   r&   r$   <module>rY     sM       c	& c	& c	& c	& c	& c	& c	& c	& c	& c	&r&   