U
    e-                     @   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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ddZe fddZ  ZS ) CmfTaskMixinc                 C   s   |  dddddg | jr.| js.| jr.| j}n| j}|jd|ddsHdS | jtjkrXd	S |jtjkrhd	S tj	j
d
gddd	gddtjgggd}t }|D ]}|jD ]}||j qq| jj|krd	S dS )Nis_dummyparentroot_parent	cmf_ownerzroot_parent.cmf_ownerzPPP-PR-BROWSEF)objZraise_errorT
persons.idservicedesk_allow=personsINfieldsfilter)Zload_fieldsr   r   r   check_project_role_accessr   gcurrent_usermodels
CmfCompanylistsetr   addid)selfr   company_personsall_memberscompanyperson 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r   r   PPP-TSK-CREATEr   write   Нет доступа!Tabort)r   
CmfProjectgetCmfTaskr   cmfutilacl_set_policysdesk_sla_cyclessaver!   	cmf_alertr   )clsr   argskwargsproject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   r7   r   r,   r-   r.   r   r/   r!   r0   )r1   r   r3   r4   Z
dummy_taskr   r   r    sdesk_create_dummy_task5   s    z$CmfTaskMixin.sdesk_create_dummy_taskc                 C   s   |   stddd |  S Nr&   Tr'   )r!   r0   Zdelete_dummy_taskr   r   r   r    sdesk_delete_dummy_taskG   s    z$CmfTaskMixin.sdesk_delete_dummy_taskc                 O   s    |   stddd | j||S r9   )r!   r0   Zsave_dummy_taskr   r2   r3   r   r   r    sdesk_save_dummy_taskL   s    z"CmfTaskMixin.sdesk_save_dummy_taskc           	      O   s   |dkrt|o| dd }|rttjj |d}|rt|jdrt| j|||d|}ttdd |}t	
|d |S |d	r| j|||d|S g S )
Nstatusworkflow_idr"   ztask.sd_)relation_field_nameobject_fieldsc                 S   s   | j dS )NZsd_)r7   
startswith)sr   r   r    <lambda>^       z7CmfTaskMixin.sdesk_field_options_list.<locals>.<lambda>readZcf_)r*   r   ZCmfWorkflowr7   rB   Zfield_options_listr   builtinsr   r,   r-   )	r1   r@   rA   r2   r3   r?   workflowr5   Zfiltered_resr   r   r    sdesk_field_options_listQ   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!   Не найдена задача!Tr'   r&   )r   r+   r*   r0   r!   Zapprove_one)r1   r2   r3   taskr5   r   r   r    sdesk_approve_onej   s    zCmfTaskMixin.sdesk_approve_onec                 O   s    |   stddd | j||S r9   )r!   r0   updater<   r   r   r    sdesk_updatev   s    zCmfTaskMixin.sdesk_update)reporterr   r   order_byslicec                O   s  |sg }dD ]}||kr| | qg }	|r6|	 | |	 dddg |dkrtjjdgdddgd	d
tjgggd}
t }|
D ]}|jD ]}||j	j
 qq~|r|	 dd
t|g |dkr|	 ddtjg nl|r|dkr|	 ddtjg nL|dkr2|	 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 | | qz|S )N)r   r>   Zparent_logic_prefixr   zproject.servicedesk)allrelater	   r
   Tr   r   r   r   rR   z!=ZmyZapprove_forZis_templatez==Fzstatus.need_approveZapprovers_forzUnknown reporter optionr'   )r   r   rO   rP   Zinclude_deletedc                 S   s   |   S )N)r!   )tr   r   r    rD      rE   z)CmfTaskMixin.sdesk_list.<locals>.<lambda>rF   )appendr   r   r   r   r   r   r   r   r   valuer0   r+   rG   r   r,   r-   r   r>   )r1   rN   r   r   rO   rP   r2   r3   ZfieldZtask_filterr   r   r   r   r5   Zres_filteredZtasksrJ   r   r   r    
sdesk_list{   sV    



zCmfTaskMixin.sdesk_listc                 O   s0   | j ||}|r| sd S |r,t|d |S )NrF   )r*   r!   r,   r-   )r1   r2   r3   r5   r   r   r    	sdesk_get   s    zCmfTaskMixin.sdesk_get)r   c                O   s$   dg}t jj|d|i|}t|S )Nr   r   )r   r+   rV   len)r1   r   r2   r3   Z	task_listr   r   r    sdesk_count   s    zCmfTaskMixin.sdesk_countc                O   sJ  | j }d}|dd}|rj| j|ddgd}| s8dS |jrj|jjrj|jj}|rj|j j}|j}|j	}	t
|prg }
|r|dg }|D ]}|
|dg  q| |
}| j||d	d
|}|rFdd |jD |_t|d t|jd t|jd t|jd ||_||_|jsF|rFttdrFtjj||	d}|S )ux   
        fields - список мета-правил для указания какие поля грузить
        defaultr   Nzrequest_type.ui_form_viewrH   )r   r   Zui_group_fieldsr   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>rF   CmfAutomationUiForm)Zcmf_ui_form)ui_formr*   r!   Zrequest_typeZui_form_viewui_form_jsonloadrU   namer   r   rL   Z_build_load_planZ_getZcommentsr,   r-   r>   rH   ui_form_nameZcmf_deletedhasattrr   r^   Zui_get_hook)r1   r   r2   r3   r`   rc   r   rJ   r_   Z
ui_form_idZ
fields_setgroupsZ
group_datar[   retr   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//)Zlogic_prefixrB   Zui_namer7   superhrefr:   	__class__r   r    rj      s    zCmfTaskMixin.href)N)__name__
__module____qualname__r!   classmethodr6   r8   r;   r=   rI   rK   rM   rV   rW   rY   rg   propertyrj   __classcell__r   r   rk   r    r      s.   #
 
G
*r   )rG   Zcmf.includer   r   r   r   r    <module>   s   