U
    fA                     @   s"   d dl Z d dlT G dd dZdS )    N)*c                       s  e Zd Zddddddddd	d
dddgZdd ZeddddZedd Zdd Zdd Z	dd Z
ed5ddZedd Zd d! Zedddddd"d#d$Zed%d& Zedd'd(d)Zedd' fd*d+
Zed,d- Zeed.d/d.d0d1d2 Ze fd3d4Z  ZS )6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_feedbackc                 C   s   |  ddddddg | jr0| js0| jr0| j}n| j}|jd|dd	sJdS | jtjkrZd
S |jtjkrjd
S | jr| jjrtj dg tjjrtjjj	r| jjtjjkrd
S dS )Nis_dummyparentproject	cmf_ownerzproject.cmf_ownercmf_owner.companyzPPP-PR-BROWSEF)objZraise_errorTcompany.servicedesk_allow)
load_fieldsr   r   r   check_project_role_accessr   gcurrent_usercompanyservicedesk_allow)selfr    r   (./modules/servicedesk/models/cmf_task.py_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   ?   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|_
|  | svtddd	 d
|jiS )Nr"   Zdummy)coder   r$   r%   r&   Tr'   r(   r#   )r*   r+   r,   r-   r#   r7   r   r.   r/   r0   r   r1   r!   r2   )r3   r   r5   r   Z
dummy_taskr   r   r    r   K   s    z$CmfTaskMixin.sdesk_create_dummy_taskc                 C   s   |   stddd |  S Nr'   Tr(   )r!   r2   Zdelete_dummy_taskr   r   r   r    r   ]   s    z$CmfTaskMixin.sdesk_delete_dummy_taskc                 O   s    |   stddd | j||S r8   )r!   r2   Zsave_dummy_taskr   r4   r5   r   r   r    r   b   s    z"CmfTaskMixin.sdesk_save_dummy_taskc                 O   s    |   stddd | j||S r8   )r!   r2   Ztask_transition_runr:   r   r   r    r   g   s    z&CmfTaskMixin.sdesk_task_transition_runc           	      O   s   |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|||d|}t|d |S |dr| j|||d|S g S )Nstatusworkflow_idr"   T)Zobj_idr<   Zclosed_lastZtrans_sdesk_portal_allowreadassetsr#   r7   namelogic_prefixfields)relation_field_nameobject_fieldsZcf_)r,   r*   ZCmfWorkflowZget_status_listr.   r/   Zfield_options_list
startswith)	r3   rB   rC   Z	object_idr4   r5   r<   workflowr6   r   r   r    r
   l   s6    
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*   r-   r,   r2   r!   Zapprove_one)r3   r4   r5   taskr6   r   r   r    r      s    zCmfTaskMixin.sdesk_approve_onec                 O   s    |   stddd | j||S r8   )r!   r2   updater:   r   r   r    r	      s    zCmfTaskMixin.sdesk_update)reporterrA   filterorder_byslicec                O   s  |sg }dD ]}||kr| | qg }	|r6|	 | |	 dddg |dkrtjdg tjjrtjjjr|	 ddtjjg |dkr|	 d	d
tjg nj|r|dkr|	 d	dtjg nJ|dkr|	 dddg |	 dddg |	 ddtjgg ntddd tjj	||	||dd}
|
s(|
S t
dd |
}g }t	|D ]8}t|d t|jd t|jd | | qD|S )N)r   r;   zcmf_owner.company.idZparent_logic_prefix=zproject.servicedesk)allrelater   r   rN   r   z!=ZmyZapprove_forZis_templatez==Fzstatus.need_approveTZapprovers_forINzUnknown reporter optionr(   )rA   rI   rJ   rK   Zinclude_deletedc                 S   s   |   S )N)r!   )tr   r   r    <lambda>       z)CmfTaskMixin.sdesk_list.<locals>.<lambda>r=   )appendr   r   r   r   r   r2   r*   r-   listbuiltinsrI   r.   r/   r   r;   )r3   rH   rA   rI   rJ   rK   r4   r5   fieldZtask_filterr6   Zres_filteredZtasksrF   r   r   r    r      sH    
zCmfTaskMixin.sdesk_listc                 O   s0   | j ||}|r| sd S |r,t|d |S )Nr=   )r,   r!   r.   r/   )r3   r4   r5   r6   r   r   r    r      s    zCmfTaskMixin.sdesk_get)rA   c                O   s$   dg}t jj|d|i|}t|S )Nr#   rA   )r*   r-   r   len)r3   rA   r4   r5   Z	task_listr   r   r    r      s    zCmfTaskMixin.sdesk_countc                   sB  | 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g g }|r|dg }|D ]&}||d |
|dg  q| |
}| j||dd|}|r>|jsdd |jD |_t|g }|D ]:}t||d}|rRtt| |tjjrRt|d qRt|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 ||_||_|j s>|r>t!t"dr>t"j#j$||	d}|S ) ux   
        fields - список мета-правил для указания какие поля грузить
        defaultNrI   zrequest_type.ui_form_viewzrequest_type.ui_form_createZlogic_type_idrE   Zactivity_id)rI   rA   FrF   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activityZui_group_fieldsrA   Zsimple)full_fields_loadZmapperc                 S   s   g | ]}|j d kr|qS )r   )Z	log_level).0Zcommentr   r   r    
<listcomp>#  s     
 z-CmfTaskMixin.sdesk_ui_get.<locals>.<listcomp>r=   r>   attachmentsr;   CmfAutomationUiForm)Zcmf_ui_form)%rY   r,   r!   r   Zrequest_typeZui_form_createZui_form_viewui_form_jsonloadsuperZ_build_ui_formr?   r#   setrG   rS   Z_build_load_planZ_getZcommentssumgetattr
issubclassZcmfrA   Z
CmfRelBaser.   r/   r>   r^   r;   rE   ui_form_namerZ   hasattrr*   r_   Zui_get_hook)r3   rA   r4   r5   r`   rg   rY   rI   rF   Z
ui_form_idZ
fields_setZui_form_fieldsgroupsZ
group_datar[   retZ
field_namerV   	__class__r   r    r      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_tokenrA   Z     TF)datetimerW   r*   r-   r,   Znowrn   Zdaysreplacemark_commentro   Z	mark_dateZset_nowr1   )r3   rp   rv   ro   rt   rF   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ri }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|j|jjdtj dd}	t j }
|
j||	|d d S )Nrp   zparent.sdesk_feedbackzparent.sdesk_feedback_textzparent.namezcmf_owner.email)r#   rA   r       T)Z	only_datazcommon/templateszcmf/templatesloader[z] (z) rr   zsdesk_mail_notification.htmlzhttps://z/servicedesk/feedback)rp   sdesk_feedback_textZsdesk_feedback_url)subject)r*   r-   r,   rp   secretsZ	token_hexr1   r   r   Zjinja2ZFileSystemLoaderospathjoinZconfigZPROJECT_DIRZEnvironmentr   Zemailvaluer?   r7   r{   Zget_templateZrenderZAPP_FQDNZCmfPluginMailBoxZget_local_mailboxZsend_message)Ztask_idrF   r}   Z_optionsZ_loaderZ
_jinja_envZrcpt_tor|   templateZ
email_bodyZmail_boxr   r   r    sdesk_send_feedback_requestM  s8    
(

z(CmfTaskMixin.sdesk_send_feedback_requestc                    s(   | j dr d| j d| j S t jS )Nztask.sdzservicedesk//)r@   rD   Zui_namer7   rb   hrefr9   rk   r   r    r   u  s    zCmfTaskMixin.href)NN)__name__
__module____qualname__Zapi_methodsr!   classmethodr   r   r   r   r   r
   r   r	   r   r   r   r   r   staticmethodZcmf_deferred_jobr   propertyr   __classcell__r   r   rk   r    r      sX   )
   "
>
M
&r   )rU   Zcmf.includer   r   r   r   r    <module>   s   