U
    @hqS                     @   s"   d dl Z d dlT G dd dZdS )    N)*c                       s0  e Zd Zddddddddd	d
dddddgZedd Zdd ZeddddZedd Z	dd Z
dd Zdd Zed<d d!Zed"d# Zd$d% Zed=d&d'Zedd(d)d*Zed+d, Zedd(d-d.Zedd( fd/d0
Zed1d2 Zeed3d4d3d5d6d7 Ze fd8d9Zd:d; Z  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_approversc                   C   s   ddddddddgS )	Nis_dummyparentproject	cmf_ownerproject.cmf_ownerzcmf_owner.company
cmf_authorshare_companies r   r   r   (./modules/servicedesk/models/cmf_task.py_sdesk_check_access_fields   s          z'CmfTaskMixin._sdesk_check_access_fieldsc                 C   s   |  |   | jr(| js(| jr(| j}n| j}|jd|ddsBdS | jrX| jtjkrXdS | j	tjkrhdS |j	tjkrxdS tjj
 rtjj
| jkrdS dS )NzPPP-PR-BROWSEF)objZraise_errorT)load_fieldsr   r   r   r   check_project_role_accessr   gcurrent_userr   companyloadr   )selfr   r   r   r   _sdesk_check_access   s    z CmfTaskMixin._sdesk_check_accessN)r   c                O   sl   t jj|d}t j|d|i|}|jd|d t|d t|jd |  |	 sft
d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   resr   r   r   r   Q   s    zCmfTaskMixin.sdesk_createc                 K   s   t jj|d}t jf d||d|}|j|_|jd|d t|d t|j	d d|_
|  |  | stddd	 d
|jiS )Nr&   Zdummy)coder   r   r(   r)   r*   Tr+   r,   r'   )r.   r/   r0   r1   r'   r;   r   r2   r3   r4   r   Z_calc_default_fieldr5   r%   r6   )r7   r   r9   r   Z
dummy_taskr   r   r   r   ]   s    z$CmfTaskMixin.sdesk_create_dummy_taskc                 C   s   |   stddd |  S Nr+   Tr,   )r%   r6   Zdelete_dummy_taskr$   r   r   r   r   p   s    z$CmfTaskMixin.sdesk_delete_dummy_taskc                 O   s    |   stddd | j||S r<   )r%   r6   Zsave_dummy_taskr$   r8   r9   r   r   r   r   u   s    z"CmfTaskMixin.sdesk_save_dummy_taskc                 O   s    |   stddd | j||S r<   )r%   r6   Ztask_transition_runr>   r   r   r   r   z   s    z&CmfTaskMixin.sdesk_task_transition_runc                 K   sf  |dkr\|o| dd }|r\tjj |d}|r\|r\|jf ||ddd|}t|d |S |dkrdd	d
dg|d< | j|fd|i|}t|d |S |dkrtjj	
  ddddtjggdddggddtjj	ggi}| jf |||d|}t|d |S |drbtjj| j|dgd}	d}
|	jdkr:d}
| j|f||
d|}t|d |S g S )Nstatusworkflow_idr&   T)obj_idr@   Zclosed_lastZtrans_sdesk_portal_allowreadassetsr'   r;   namelogic_prefixfieldsobject_fieldsr   Z
CmfCompanyORZpersonsINZservicedesk_allow=)relation_field_namerG   models_filterscf_field_custom_type)Zcmf_model_namerD   rF   )Zchoice_multiZchoice_cascade_multiF)rG   require_field_filter)r0   r.   ZCmfWorkflowZget_status_listr2   r3   Zfield_options_listr    r!   r"   r#   
startswithZCmfCustFieldsget
class_namerN   )r7   rK   rG   Z	object_idr9   r@   workflowr:   rL   Z
cust_fieldrO   r   r   r   r
      sr    
    z%CmfTaskMixin.sdesk_field_options_listc                 O   sD   t j|d }|s tddd | s4tddd |jf |}|S )Nr   u!   Не найдена задача!Tr,   r+   )r.   r1   r0   r6   r%   Zapprove_one)r7   r8   r9   taskr:   r   r   r   r      s    zCmfTaskMixin.sdesk_approve_onec                 O   s    |   stddd | j||S r<   )r%   r6   updater>   r   r   r   r	      s    zCmfTaskMixin.sdesk_updatec                 K   s  |sg }| |   g }|r(|| |dddg 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j	||||d
}d}g }	|D ]}
|

 r|sd}|
jddD ]6}t|
j| tjjsq|dkr|	| |drqt|
d |	D ]}tt|
|d qq|S )NZparent_logic_prefixrJ   zproject.servicedeskr"   rH   r   r   r   rI   )rF   filterorder_bysliceFT)Z
is_defined)r   r?   r   rM   rB   )extendr   appendr    r!   r   r"   r.   r1   listr%   keys
issubclassrF   cmf
CmfRelBaserP   r2   r3   getattr)r7   rF   rV   rW   rX   _kwargsZtask_filterr:   Zfields_filledZrel_fields_allowrT   
field_namer   r   r   r      s@    




zCmfTaskMixin.sdesk_list)rF   c          	      O   s   dD ]}||kr| | qtjj||d|d|}|s>|S g }|D ]t}t|jjtjr|js|j rt	
|d | | qFt|jjtjrF|jsF|jj rFt	
|d | | qF|S )N)r   zparent.parentF)rA   simplerF   rB   )rZ   r.   r1   Zattach_list
isinstancer   valueZprivater%   r2   r3   Z
CmfComment)	r7   rF   rA   r8   r9   fieldattachmentsZfiltered_attachZattachr   r   r   r     s"    
zCmfTaskMixin.sdesk_attach_listc                 O   s0   | j ||}|r| sd S |r,t|d |S )NrB   )r0   r%   r2   r3   )r7   r8   r9   r:   r   r   r   r   %  s    zCmfTaskMixin.sdesk_getc                O   s$   dg}t jj|d|i|}t|S )Nr'   rF   )r.   r1   r   len)r7   rF   r8   r9   Z	task_listr   r   r   r   .  s    zCmfTaskMixin.sdesk_countc                   s\  | j }d}d}|dd}|r| j|dddddgd	}| sBdS |jrR|jj}n|jj}|j  |jr|jjsz|jjr|rt	 j
|d
dd|d}|j}|j}	t|pddg}
|
dddddg g }|r|dg }|D ]&}||d |
|dg  q| |
}| j||dd|}|rX|js"dd |jD |_t|g }|D ]:}t||d}|rTtt| |tjjrTt|d qTt|d t|jd d|krt|jd d|
krt|jd d|krt|jd d|kr
t|jd d|kr"t|jd ||_||_ |j!sX|rXt"t#drXt#j$j%||	d }|S )!ux   
        fields - список мета-правил для указания какие поля грузить
        defaultNrV   zrequest_type.ui_form_viewzrequest_type.ui_form_createZlogic_type_idrS   Zactivity_id)rV   rF   FrT   Zinline_save)Ztmp_objZtmp_is_public_formZtmp_ui_view_formZcreate_formui_formr   r   cmf_deletedZ
logic_typeZ	scheme_wfZactivityr   Zui_group_fieldsrF   rc   )full_fields_loadZmapperc                 S   s   g | ]}|j d kr|qS )r   )Z	log_level).0Zcommentr   r   r   
<listcomp>g  s     
 z-CmfTaskMixin.sdesk_ui_get.<locals>.<listcomp>rB   rC   rg   r?   CmfAutomationUiForm)Zcmf_ui_form)&rj   r0   r%   r   Zrequest_typeZui_form_createZui_form_viewui_form_jsonr#   superZ_build_ui_formrD   r'   setrU   rZ   Z_build_load_planZ_getZcommentssumr`   r]   r^   rF   r_   r2   r3   rC   rg   r?   rS   r   ui_form_namerk   hasattrr.   ro   Zui_get_hook)r7   rF   r8   r9   rp   rt   rj   rV   rT   Z
ui_form_idZ
fields_setZui_form_fieldsgroupsZ
group_datarl   retrb   rf   	__class__r   r   r   5  s       








zCmfTaskMixin.sdesk_ui_getc                 C   s   dd l }|rt|dkr|rtjj|ddgd}|r|j  |j jdkr|rht|dddkrh||_	|j
|kr||_
|j  |  d	S d
S )Nr   @   status_modified_atmark)
mark_tokenrF   Z     TF)datetimerh   r.   r1   r0   Znowr{   Zdaysreplacemark_commentr|   Z	mark_dateZset_nowr5   )r7   r}   r   r|   r   rT   r   r   r   r     s    

zCmfTaskMixin.sdesk_feedbackTu`   Отправка письма оценки качества обслуживания ServiceDesk)Z	only_oncedescriptionZ
system_jobc                 C   s  t jj| dddddgd}|js@dd l}|d|_|jd	d
 |jjri }t	
tjtjdtjtjdg}||d< t	jf |}|jjj}d|jj d|j d|j d|jj }|d}|jd|jj d|j d|j |j|jjdtj dd}	t j }
|
j||	|d d S )Nr}   zparent.sdesk_feedbackzparent.sdesk_feedback_textzparent.namezcmf_owner.email)r'   rF   r       T)Z	only_datazcommon/templateszcmf/templatesloader[z] (z) r   zsdesk_mail_notification.htmlzhttps://z/servicedesk/feedback)Z	mail_textr}   sdesk_feedback_textZsdesk_feedback_url)subject)r.   r1   r0   r}   secretsZ	token_hexr5   r   r   Zjinja2ZFileSystemLoaderospathjoinZconfigZPROJECT_DIRZEnvironmentr   Zemailre   rD   r;   r   Zget_templateZrenderZAPP_FQDNZCmfPluginMailBoxZget_local_mailboxZsend_message)Ztask_idrT   r   Z_optionsZ_loaderZ
_jinja_envZrcpt_tor   templateZ
email_bodyZmail_boxr   r   r   sdesk_send_feedback_request  s:    

(

z(CmfTaskMixin.sdesk_send_feedback_requestc                    s(   | j dr d| j d| j S t jS )Nztask.sdzservicedesk//)rE   rP   Zui_namer;   rq   hrefr=   rx   r   r   r     s    zCmfTaskMixin.hrefc                 K   s   |    |  S )N)r%   Zcount_approvers)r$   ra   r   r   r   r     s    z"CmfTaskMixin.sdesk_count_approvers)NN)NNNN)__name__
__module____qualname__Zapi_methodsstaticmethodr   r%   classmethodr   r   r   r   r   r
   r   r	   r   r   r   r   r   r   Zcmf_deferred_jobr   propertyr   r   __classcell__r   r   rx   r   r      sf   
3
   A
<
M
'r   )builtinsZcmf.includer   r   r   r   r   <module>   s   