U
    UKfd5                     @   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 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dddddZedd ZeddddZedd fdd
Ze fdd Z  ZS )"CmfTaskMixinc                 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   sdesk_create/   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   r+   r   r!   r"   r#   r   r$   r   r%   )r&   r   r(   r   Z
dummy_taskr   r   r   sdesk_create_dummy_task;   s    z$CmfTaskMixin.sdesk_create_dummy_taskc                 C   s   |   stddd |  S Nr   Tr   )r   r%   Zdelete_dummy_taskr   r   r   r   sdesk_delete_dummy_taskM   s    z$CmfTaskMixin.sdesk_delete_dummy_taskc                 O   s    |   stddd | j||S r-   )r   r%   Zsave_dummy_taskr   r'   r(   r   r   r   sdesk_save_dummy_taskR   s    z"CmfTaskMixin.sdesk_save_dummy_taskc                 O   s    |   stddd | j||S r-   )r   r%   Ztask_transition_runr0   r   r   r   sdesk_task_transition_runW   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_idr4   Zclosed_lastZtrans_sdesk_portal_allowreadassetsr   r+   namelogic_prefixfields)relation_field_nameobject_fieldsZcf_)r   r   ZCmfWorkflowZget_status_listr!   r"   Zfield_options_list
startswith)	r&   r:   r;   Z	object_idr'   r(   r4   workflowr)   r   r   r   sdesk_field_options_list\   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   r%   r   Zapprove_one)r&   r'   r(   taskr)   r   r   r   sdesk_approve_one   s    zCmfTaskMixin.sdesk_approve_onec                 O   s    |   stddd | j||S r-   )r   r%   updater0   r   r   r   sdesk_update   s    zCmfTaskMixin.sdesk_update)reporterr9   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   r3   zcmf_owner.company.idZparent_logic_prefix=zproject.servicedesk)allrelater
   r   rI   r   z!=ZmyZapprove_forZis_templatez==Fzstatus.need_approveTZapprovers_forINzUnknown reporter optionr   )r9   rD   rE   rF   Zinclude_deletedc                 S   s   |   S )N)r   )tr   r   r   <lambda>       z)CmfTaskMixin.sdesk_list.<locals>.<lambda>r5   )appendr   r   r   r   r   r%   r   r    listbuiltinsrD   r!   r"   r   r3   )r&   rC   r9   rD   rE   rF   r'   r(   fieldZtask_filterr)   Zres_filteredZtasksr?   r   r   r   
sdesk_list   sH    
zCmfTaskMixin.sdesk_listc                 O   s0   | j ||}|r| sd S |r,t|d |S )Nr5   )r   r   r!   r"   )r&   r'   r(   r)   r   r   r   	sdesk_get   s    zCmfTaskMixin.sdesk_get)r9   c                O   s$   dg}t jj|d|i|}t|S )Nr   r9   )r   r    rR   len)r&   r9   r'   r(   Z	task_listr   r   r   sdesk_count   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 - список мета-правил для указания какие поля грузить
        defaultNrD   zrequest_type.ui_form_viewzrequest_type.ui_form_createZlogic_type_idr=   Zactivity_id)rD   r9   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_fieldsr9   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>r5   r6   attachmentsr3   CmfAutomationUiForm)Zcmf_ui_form)%rW   r   r   r   Zrequest_typeZui_form_createZui_form_viewui_form_jsonloadsuperZ_build_ui_formr7   r   setrA   rN   Z_build_load_planZ_getZcommentssumgetattr
issubclassZcmfr9   Z
CmfRelBaser!   r"   r6   r\   r3   r=   ui_form_namerX   hasattrr   r]   Zui_get_hook)r&   r9   r'   r(   r^   re   rW   rD   r?   Z
ui_form_idZ
fields_setZui_form_fieldsgroupsZ
group_datarY   retZ
field_namerQ   	__class__r   r   sdesk_ui_get   s|    







zCmfTaskMixin.sdesk_ui_getc                    s(   | j dr d| j d| j S t jS )Nztask.sdz/servicedesk//)r8   r<   Zui_namer+   r`   hrefr.   ri   r   r   rm   -  s    zCmfTaskMixin.href)NN)__name__
__module____qualname__r   classmethodr*   r,   r/   r1   r2   r>   r@   rB   rR   rS   rU   rk   propertyrm   __classcell__r   r   ri   r   r      s2   )
   "
>
Mr   )rP   Zcmf.includer   r   r   r   r   <module>   s   