U
    hd                     @   s"   d dl Z d dlT G dd dZdS )    N)*c                       sl  e Zd Zddddddddd	d
ddddddgZdd Zdd Zdd 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
dJd'd(Ze
d)d* Zd+d, Ze
dKd-d.Ze
dd/d0d1Ze
d2d3 Ze
dd/d4d5Ze
dd/ fd6d7
Ze
d8d9 Zeed:d;d:d<d=d> Ze fd?d@ZdAdB ZdLedCdDdEZdMdFdGZ dHdI Z!  Z"S )N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_approversc                 C   s6   | j dgd | jr2| jjr2tj| | jjd  d S )Nzrequest_type.task_form.textfields)parent	task_form)load_fieldsrequest_typer   modelsZCmfTaskFormDatasaveself r   (./modules/servicedesk/models/cmf_task.py_init_task_form   s    zCmfTaskMixin._init_task_formc                 K   s   | j dkrd S |   d S )Nproject.servicedesk)parent_logic_prefix_calc_sdesk_hint_docsr   _kwargsr   r   r   _sdesk_before_super_save   s    
z%CmfTaskMixin._sdesk_before_super_savec                 K   s   | j dkrd S | jr*| j  | jdd tj|  | jsN| jrNtj	
|  | jjr| jdkrt| jj}|jrttjj| jjgd d S )Nr!   TZ	only_dataZCLOSED)args)r"   Zis_newZcmf_created_atset_nowr   r   ZCmfSDeskSlaTriggerZtask_changed_hook
is_changedZCmfSDeskSlaCycleZupdate_cycle_goalsZcache_status_typeAPPget_cache_projectprojectidr   Zschedule_deferred_jobCmfTasksdesk_send_feedback_requestvalue)r   r%   r-   r   r   r   _sdesk_after_super_save$   s    

z$CmfTaskMixin._sdesk_after_super_savec                   C   s   dddddddgS )Nis_dummyr   
project_id	cmf_ownerzcmf_owner.company
cmf_authorshare_companiesr   r   r   r   r   _sdesk_check_access_fields@   s         z'CmfTaskMixin._sdesk_check_access_fieldsc                 C   s   |  |   t| j}| jr0|s0| jr0| j}|jd|ddsDdS | jrZ| jt	j
krZdS | jt	j
krjdS |jt	j
jkr|dS t	j
j rt	j
j| jkrdS dS )NzPPP-PR-BROWSEF)objZraise_errorT)r   r8   r+   r,   r4   r3   r   check_project_role_accessr6   gcurrent_userr5   Zcmf_owner_idr.   companyloadr7   )r   r-   r   r   r   _sdesk_check_accessF   s    z CmfTaskMixin._sdesk_check_accessN)r   c                O   sh   t |}tj|d|i|}|jd|d t|d t|jd |  |	 sbt
ddd |jS )Nr   PPP-TSK-CREATEr9   write   Нет доступа!Tabort)r+   r,   r   r/   r:   cmfutilacl_set_policysdesk_sla_cyclesr   r?   	cmf_alertr.   )clsr   r(   kwargsr-   resr   r   r   r   x   s    
zCmfTaskMixin.sdesk_createc                 K   s   t |}tjf d||d|}|j|_|jd|d t|d t|j	d d|_
|  |  |  | stddd d	|jiS )
NZdummy)coder-   r   r@   rA   rB   TrC   rD   r.   )r+   r,   r   r/   r.   rM   r:   rF   rG   rH   r3   Z_calc_default_fieldr   r    r?   rI   )rJ   r   rK   r-   Z
dummy_taskr   r   r   r      s    
z$CmfTaskMixin.sdesk_create_dummy_taskc                 C   s   |   stddd |  S NrC   TrD   )r?   rI   Zdelete_dummy_taskr   r   r   r   r      s    z$CmfTaskMixin.sdesk_delete_dummy_taskc                 O   s    |   stddd | j||S rN   )r?   rI   Zsave_dummy_taskr   r(   rK   r   r   r   r      s    z"CmfTaskMixin.sdesk_save_dummy_taskc                 O   s    |   stddd | j||S rN   )r?   rI   Ztask_transition_runrO   r   r   r   r      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_id)r.   T)obj_idrQ   Zclosed_lastZtrans_sdesk_portal_allowreadassetsr.   rM   namelogic_prefixr   object_fieldsr7   Z
CmfCompanyORZpersonsINZservicedesk_allow=)relation_field_namerW   models_filterscf_field_custom_type)Zcmf_model_namerU   r   )Zchoice_multiZchoice_cascade_multiF)rW   require_field_filter)getr   ZCmfWorkflowZget_status_listrF   rG   Zfield_options_listr;   r<   r=   r>   
startswithZCmfCustFieldsget
class_namer^   )rJ   r[   rW   Z	object_idrK   rQ   workflowrL   r\   Z
cust_fieldr_   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!   Не найдена задача!TrD   rC   )r   r/   r`   rI   r?   Zapprove_one)rJ   r(   rK   taskrL   r   r   r   r      s    zCmfTaskMixin.sdesk_approve_onec                 O   s    |   stddd | j||S rN   )r?   rI   updaterO   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 )Nr"   rZ   r!   r=   rX   r5   zproject.cmf_ownerr7   rY   )r   filterorder_bysliceFT)Z
is_defined)r   rP   r7   r]   rS   )extendr8   appendr;   r<   r   r=   r   r/   listr?   keys
issubclassr   cmf
CmfRelBasera   rF   rG   getattr)rJ   r   rg   rh   ri   r%   Ztask_filterrL   Zfields_filledZrel_fields_allowre   
field_namer   r   r   r      s@    




zCmfTaskMixin.sdesk_listr   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)rR   simpler   rS   )rk   r   r/   Zattach_list
isinstancer   r1   Zprivater?   rF   rG   Z
CmfComment)	rJ   r   rR   r(   rK   fieldattachmentsZfiltered_attachZattachr   r   r   r   7  s"    
zCmfTaskMixin.sdesk_attach_listc                 O   s0   | j ||}|r| sd S |r,t|d |S )NrS   )r`   r?   rF   rG   )rJ   r(   rK   rL   r   r   r   r   M  s    zCmfTaskMixin.sdesk_getc                O   s$   dg}t jj|d|i|}t|S )Nr.   r   )r   r/   r   len)rJ   r   r(   rK   Z	task_listr   r   r   r   V  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 - список мета-правил для указания какие поля грузить
        defaultNrg   zrequest_type.ui_form_viewzrequest_type.ui_form_createZlogic_type_idrd   Zactivity_id)rg   r   Fre   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activityr7   Zui_group_fieldsr   rs   )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>rS   rT   rv   rP   CmfAutomationUiForm)Zcmf_ui_form)&ry   r`   r?   r3   r   Zui_form_createZui_form_viewui_form_jsonr>   superZ_build_ui_formrU   r.   setrf   rk   Z_build_load_planZ_getZcommentssumrq   rn   ro   r   rp   rF   rG   rT   rv   rP   rd   r7   ui_form_namerz   hasattrr   r~   Zui_get_hook)rJ   r   r(   rK   r   r   ry   rg   re   Z
ui_form_idZ
fields_setZui_form_fieldsgroupsZ
group_datar{   retrr   ru   	__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_tokenr   Z     TF)datetimerw   r   r/   r`   Znowr   Zdaysreplacemark_commentr   Z	mark_dater)   r   )rJ   r   r   r   r   re   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.   r   r       Tr'   z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   r/   r`   r   secretsZ	token_hexr   r   r   Zjinja2ZFileSystemLoaderospathjoinZconfigZPROJECT_DIRZEnvironmentr5   Zemailr1   rU   rM   r   Zget_templateZrenderZAPP_FQDNZCmfPluginMailBoxZget_local_mailboxZsend_message)Ztask_idre   r   Z_optionsZ_loaderZ
_jinja_envZrcpt_tor   templateZ
email_bodyZmail_boxr   r   r   r0     s:    

(

z(CmfTaskMixin.sdesk_send_feedback_requestc                    s(   | j dr d| j d| j S t jS )Nztask.sdzservicedesk//)rV   ra   Zui_namerM   r   hrefr   r   r   r   r     s    zCmfTaskMixin.hrefc                 C   sN   | j r| jr| jsd S | jjs2| j js2| jjs2d S | j dg |  | _d S )Nhint_docs_mandatory_tags)r   rU   r-   r*   r   _sdesk_hint_docs_searchZsdesk_hint_docsr   r   r   r   r#     s    z"CmfTaskMixin._calc_sdesk_hint_docs)searchc                 C   s   |d kr| j j}|r0t| dk s0| jr0| js4g S dd }|dd}dd | jjD }tj	j
dd	|| jjj||d
dgd|d	S )N   c                 S   sH   d}| j rD| j jdkrDt| tjr,| j  }|rDt| d |   |S )NFr!   rS   )	r-   rV   rt   r   CmfDocumentr?   rF   rG   Z_acl_check_read)r9   checkr   r   r   check_access  s    
z:CmfTaskMixin._sdesk_hint_docs_search.<locals>.check_access#r   c                 S   s   g | ]}|j jqS r   )rU   r1   )r|   tagr   r   r   r}     s     z8CmfTaskMixin._sdesk_hint_docs_search.<locals>.<listcomp>r   ANYr-   zproject.logic_prefixT)	Z
model_namerr   Zsearch_queryZ	parent_idZtag_nameri   r   Z	query_rawr   )rU   r1   rw   stripr-   r   r   r   r   ZCmfFullSearchZfulltext_searchr.   )r   r   ri   r   Z	tags_listr   r   r   r     s$           z$CmfTaskMixin._sdesk_hint_docs_searchc                 K   s<   |  ddg|    |  s*tddd | j|ddgdS )	Nr-   z%request_type.hint_docs_mandatory_tagsrC   TrD   r   r   )ri   )r   r8   r?   rI   r   )r   r   r%   r   r   r   r     s    z#CmfTaskMixin.sdesk_hint_docs_searchc                 K   s   |    |  S )N)r?   Zcount_approversr$   r   r   r   r     s    z"CmfTaskMixin.sdesk_count_approvers)NN)NNNN)NN)N)#__name__
__module____qualname__Zapi_methodsr    r&   r2   staticmethodr8   r?   classmethodr   r   r   r   r   r
   r   r	   r   r   r   r   r   r   Zcmf_deferred_jobr0   propertyr   r#   strr   r   r   __classcell__r   r   r   r   r      st   
2
   A
<
M
'
r   )builtinsZcmf.includer   r   r   r   r   <module>   s   