B
    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_ownerzcmf_owner.companyzPPP-PR-BROWSEF)objZraise_errorTz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   zPPP-TSK-CREATE)r   writeu   Нет доступа!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 )N)r    Zdummy)coder   zPPP-TSK-CREATE)r   r!   Tu   Нет доступа!)r"   r    )r#   r$   r%   r&   r    r0   r   r'   r(   r)   r   r*   r   r+   )r,   r   r.   r   Z
dummy_taskr   r   r   r   K   s    z$CmfTaskMixin.sdesk_create_dummy_taskc             C   s   |   stddd |  S )Nu   Нет доступа!T)r"   )r   r+   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 )Nu   Нет доступа!T)r"   )r   r+   Zsave_dummy_task)r   r-   r.   r   r   r   r   b   s    z"CmfTaskMixin.sdesk_save_dummy_taskc             O   s    |   stddd | j||S )Nu   Нет доступа!T)r"   )r   r+   Ztask_transition_run)r   r-   r.   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_id)r    T)Zobj_idr2   Zclosed_lastZtrans_sdesk_portal_allowreadassetsr    r0   namelogic_prefixfields)relation_field_nameobject_fieldsZcf_)r%   r#   ZCmfWorkflowZget_status_listr'   r(   Zfield_options_list
startswith)	r,   r8   r9   Z	object_idr-   r.   r2   workflowr/   r   r   r   r
   l   s.    
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!   Не найдена задача!T)r"   u   Нет доступа!)r#   r&   r%   r+   r   Zapprove_one)r,   r-   r.   taskr/   r   r   r   r      s    zCmfTaskMixin.sdesk_approve_onec             O   s    |   stddd | j||S )Nu   Нет доступа!T)r"   )r   r+   update)r   r-   r.   r   r   r   r	      s    zCmfTaskMixin.sdesk_update)reporterr7   filterorder_byslicec            O   s  |sg }xdD ]}||kr| | qW g }	|r:|	 | |	 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 nl|r|dkr|	 d	dtjg nL|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 }xDt	|D ]8}t|d t|jd t|jd | | qLW |S )N)r   r1   zcmf_owner.company.idZparent_logic_prefix=zproject.servicedesk)allrelatezcompany.servicedesk_allowzcmf_owner.companyrD   r   z!=ZmyZapprove_forZis_templatez==Fzstatus.need_approveTZapprovers_forINzUnknown reporter option)r"   )r7   r?   r@   rA   Zinclude_deletedc             S   s   |   S )N)r   )tr   r   r   <lambda>       z)CmfTaskMixin.sdesk_list.<locals>.<lambda>r3   )appendr   r   r   r   r   r+   r#   r&   listbuiltinsr?   r'   r(   r   r1   )r,   r>   r7   r?   r@   rA   r-   r.   fieldZtask_filterr/   Zres_filteredZtasksr<   r   r   r   r      sF    


zCmfTaskMixin.sdesk_listc             O   s0   | j ||}|r| sd S |r,t|d |S )Nr3   )r%   r   r'   r(   )r,   r-   r.   r/   r   r   r   r      s    zCmfTaskMixin.sdesk_get)r7   c            O   s$   dg}t jj|d|i|}t|S )Nr    r7   )r#   r&   r   len)r,   r7   r-   r.   Z	task_listr   r   r   r      s    zCmfTaskMixin.sdesk_countc               sJ  | 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 }x.|D ]&}||d |
|dg  qW | |
}| j||dd|}|rF|jsdd |jD |_t|g }xB|D ]:}t||d}|rXtt| |tjjrXt|d qXW t|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 sF|rFt!t"drFt"j#j$||	d}|S ) ux   
        fields - список мета-правил для указания какие поля грузить
        defaultNr?   zrequest_type.ui_form_viewzrequest_type.ui_form_createZlogic_type_idr;   Zactivity_id)r?   r7   Fr<   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_fieldsr7   Zsimple)full_fields_loadZmapperc             S   s   g | ]}|j d kr|qS )r   )Z	log_level).0commentr   r   r   
<listcomp>#  s    z-CmfTaskMixin.sdesk_ui_get.<locals>.<listcomp>r3   r4   attachmentsr1   CmfAutomationUiForm)Zcmf_ui_form)%rO   r%   r   r   Zrequest_typeZui_form_createZui_form_viewui_form_jsonloadsuperZ_build_ui_formr5   r    setr=   rI   Z_build_load_planZ_getZcommentssumgetattr
issubclassZcmfr7   Z
CmfRelBaser'   r(   r4   rU   r1   r;   ui_form_namerP   hasattrr#   rV   Zui_get_hook)r,   r7   r-   r.   rW   r^   rO   r?   r<   Z
ui_form_idZ
fields_setZui_form_fieldsgroupsZ
group_datarQ   retZ
field_namerL   )	__class__r   r   r      sx    










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_tokenr7   Z     TF)datetimerM   r#   r&   r%   Znowrd   Zdaysreplacemark_commentre   Z	mark_dateZset_nowr*   )r,   rf   rl   re   rj   r<   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 )Nrf   zparent.sdesk_feedbackzparent.sdesk_feedback_textzparent.namezcmf_owner.email)r    r7   r       T)Z	only_datazcommon/templateszcmf/templatesloader[z] (z) rh   zsdesk_mail_notification.htmlzhttps://z/servicedesk/feedback)rf   sdesk_feedback_textZsdesk_feedback_url)subject)r#   r&   r%   rf   secretsZ	token_hexr*   r   r   Zjinja2ZFileSystemLoaderospathjoinZconfigZPROJECT_DIRZEnvironmentr   Zemailvaluer5   r0   rq   Zget_templateZrenderZAPP_FQDNZCmfPluginMailBoxZget_local_mailboxZsend_message)Ztask_idr<   rs   Z_optionsZ_loaderZ
_jinja_envZrcpt_torr   templateZ
email_bodyZmail_boxr   r   r   sdesk_send_feedback_requestM  s2    
"
(

z(CmfTaskMixin.sdesk_send_feedback_requestc                s(   | j dr d| j d| j S t jS )Nztask.sdzservicedesk//)r6   r:   Zui_namer0   rY   href)r   )rb   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_jobry   propertyr{   __classcell__r   r   )rb   r   r      sF   )!>	M'r   )rK   Zcmf.includer   r   r   r   r   <module>   s   