U
    gAJ                     @   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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d8ddZedd  Zd!d" Zeddddd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-d.
Zed/d0 Zeed1d2d1d3d4d5 Ze fd6d7Z  ZS )9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              	   C   s   |  dddddddg | jr2| js2| jr2| j}n| j}|jd|d	d
sLd	S | jrb| jtjkrbdS | jtjkrrdS |jtjkrd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.company
cmf_authorzPPP-PR-BROWSEF)objZraise_errorTcompany.servicedesk_allow)load_fieldsr   r   r   check_project_role_accessr   gcurrent_userr   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   B   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|_
|  | sxtddd	 d
|jiS )Nr$   Zdummy)coder   r   r&   r'   r(   Tr)   r*   r%   )r,   r-   r.   r/   r%   r9   r   r0   r1   r2   r   r3   r#   r4   )r5   r   r7   r   Z
dummy_taskr!   r!   r"   r   N   s    z$CmfTaskMixin.sdesk_create_dummy_taskc                 C   s   |   stddd |  S Nr)   Tr*   )r#   r4   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 r:   )r#   r4   Zsave_dummy_taskr    r6   r7   r!   r!   r"   r   e   s    z"CmfTaskMixin.sdesk_save_dummy_taskc                 O   s    |   stddd | j||S r:   )r#   r4   Ztask_transition_runr<   r!   r!   r"   r   j   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krtjjddt	j
ggdddggd}t|d |S |dr| j|||d|}t|d |S g S )Nstatusworkflow_idr$   T)obj_idr>   Zclosed_lastZtrans_sdesk_portal_allowreadassetsr%   r9   namelogic_prefixfields)relation_field_nameobject_fieldsshare_companiesZpersonsINr   =)filterZcf_)r.   r,   ZCmfWorkflowZget_status_listr0   r1   Zfield_options_listZ
CmfCompanylistr   r   
startswith)	r5   rE   rF   Z	object_idr6   r7   r>   workflowr8   r!   r!   r"   r
   o   sB    "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.   r4   r#   Zapprove_one)r5   r6   r7   taskr8   r!   r!   r"   r      s    zCmfTaskMixin.sdesk_approve_onec                 O   s    |   stddd | j||S r:   )r#   r4   updater<   r!   r!   r"   r	      s    zCmfTaskMixin.sdesk_update)reporterrD   rJ   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 |	 ddtjjg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 }t	|D ]8}t|d t|jd t|jd | | q\|S )N)r   r=   zcmf_owner.company.idZparent_logic_prefixrI   zproject.servicedesk)allrelater   r   rT   r   z!=rG   rH   ZmyZapprove_forZis_templatez==Fzstatus.need_approveTZapprovers_forzUnknown reporter optionr*   )rD   rJ   rQ   rR   Zinclude_deletedc                 S   s   |   S )N)r#   )tr!   r!   r"   <lambda>       z)CmfTaskMixin.sdesk_list.<locals>.<lambda>r@   )appendr   r   r   r   r   r4   r,   r/   rK   builtinsrJ   r0   r1   r   r=   )r5   rP   rD   rJ   rQ   rR   r6   r7   fieldZtask_filterr8   Zres_filteredZtasksrN   r!   r!   r"   r      sJ    

zCmfTaskMixin.sdesk_list)rD   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)r?   simplerD   r@   )rX   r,   r/   Zattach_list
isinstancer   valueZprivater#   r0   r1   Z
CmfComment)	r5   rD   r?   r6   r7   rZ   attachmentsZfiltered_attachZattachr!   r!   r"   r      s"    
zCmfTaskMixin.sdesk_attach_listc                 O   s0   | j ||}|r| sd S |r,t|d |S )Nr@   )r.   r#   r0   r1   )r5   r6   r7   r8   r!   r!   r"   r     s    zCmfTaskMixin.sdesk_getc                O   s$   dg}t jj|d|i|}t|S )Nr%   rD   )r,   r/   r   len)r5   rD   r6   r7   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 - список мета-правил для указания какие поля грузить
        defaultNrJ   zrequest_type.ui_form_viewzrequest_type.ui_form_createZlogic_type_idrM   Zactivity_id)rJ   rD   FrN   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activityrG   Zui_group_fieldsrD   r[   )full_fields_loadZmapperc                 S   s   g | ]}|j d kr|qS )r   )Z	log_level).0Zcommentr!   r!   r"   
<listcomp>F  s     
 z-CmfTaskMixin.sdesk_ui_get.<locals>.<listcomp>r@   rA   r^   r=   CmfAutomationUiForm)Zcmf_ui_form)&ra   r.   r#   r   Zrequest_typeZui_form_createZui_form_viewui_form_jsonloadsuperZ_build_ui_formrB   r%   setrO   rX   Z_build_load_planZ_getZcommentssumgetattr
issubclassZcmfrD   Z
CmfRelBaser0   r1   rA   r^   r=   rM   rG   ui_form_namerb   hasattrr,   rf   Zui_get_hook)r5   rD   r6   r7   rg   rn   ra   rJ   rN   Z
ui_form_idZ
fields_setZui_form_fieldsgroupsZ
group_datarc   retZ
field_namerZ   	__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_tokenrD   Z     TF)datetimer_   r,   r/   r.   Znowru   Zdaysreplacemark_commentrv   Z	mark_dateZset_nowr3   )r5   rw   r}   rv   r{   rN   r!   r!   r"   r   b  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 )Nrw   zparent.sdesk_feedbackzparent.sdesk_feedback_textzparent.namezcmf_owner.email)r%   rD   r       T)Z	only_datazcommon/templateszcmf/templatesloader[z] (z) ry   zsdesk_mail_notification.htmlzhttps://z/servicedesk/feedback)Z	mail_textrw   sdesk_feedback_textZsdesk_feedback_url)subject)r,   r/   r.   rw   secretsZ	token_hexr3   r   r   Zjinja2ZFileSystemLoaderospathjoinZconfigZPROJECT_DIRZEnvironmentr   Zemailr]   rB   r9   r   Zget_templateZrenderZAPP_FQDNZCmfPluginMailBoxZget_local_mailboxZsend_message)Ztask_idrN   r   Z_optionsZ_loaderZ
_jinja_envZrcpt_tor   templateZ
email_bodyZmail_boxr!   r!   r"   sdesk_send_feedback_requestr  s:    

(

z(CmfTaskMixin.sdesk_send_feedback_requestc                    s(   | j dr d| j d| j S t jS )Nztask.sdzservicedesk//)rC   rL   Zui_namer9   ri   hrefr;   rr   r!   r"   r     s    zCmfTaskMixin.href)NN)__name__
__module____qualname__Zapi_methodsr#   classmethodr   r   r   r   r   r
   r   r	   r   r   r   r   r   r   staticmethodZcmf_deferred_jobr   propertyr   __classcell__r!   r!   rr   r"   r      s^   +
   +
?
O
'r   )rY   Zcmf.includer   r!   r!   r!   r"   <module>   s   