U
    !eY.                     @   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g | jjd| jdds(dS | jtjkr8dS | jjtjkrJdS tjjdgd	d
dgddtjgggd}t	 }|D ]}|j
D ]}||j qqz| jj|krdS dS )N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   check_project_role_accessr   gcurrent_usermodels
CmfCompanylistsetr
   addid)selfcompany_personsall_memberscompanyperson r   (./modules/servicedesk/models/cmf_task.py_sdesk_check_access   s$    

z CmfTaskMixin._sdesk_check_accessN)parentc                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|_
|  ||_| s|tddd	 d
|jiS )Nr!   Zdummy)coder    r"   r#   r$   Tr%   r&   r   )r   r(   r)   r*   r   r6   r   r+   r,   r-   Zis_dummyr.   r   r   r/   )r0   r    r2   r3   Z
dummy_taskr   r   r   sdesk_create_dummy_task-   s    z$CmfTaskMixin.sdesk_create_dummy_taskc                 C   s$   | j | _|  stddd |  S Nr%   Tr&   )r    r   r   r/   Zdelete_dummy_taskr   r   r   r   sdesk_delete_dummy_taskB   s    z$CmfTaskMixin.sdesk_delete_dummy_taskc                 O   s,   | j  | _|  s tddd | j||S r8   )r    loadr   r   r/   Zsave_dummy_taskr   r1   r2   r   r   r   sdesk_save_dummy_taskJ   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_)r6   
startswith)sr   r   r   <lambda>_       z7CmfTaskMixin.sdesk_field_options_list.<locals>.<lambda>readZcf_)r)   r   ZCmfWorkflowr6   rB   Zfield_options_listr   builtinsr   r+   r,   )	r0   r@   rA   r1   r2   r?   workflowr4   Zfiltered_resr   r   r   sdesk_field_options_listR   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)   r/   r   Zapprove_one)r0   r1   r2   taskr4   r   r   r   sdesk_approve_onek   s    zCmfTaskMixin.sdesk_approve_onec                 O   s    |   stddd | j||S r8   )r   r/   updater<   r   r   r   sdesk_updatew   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   valuer/   r*   rG   r   r+   r,   r    r>   )r0   rN   r   r   rO   rP   r1   r2   ZfieldZtask_filterr   r   r   r   r4   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,   )r0   r1   r2   r4   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)r0   r   r1   r2   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_jsonr;   rU   namer   r   rL   Z_build_load_planZ_getZcommentsr+   r,   r>   rH   ui_form_nameZcmf_deletedhasattrr   r^   Zui_get_hook)r0   r   r1   r2   r`   rb   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_namer6   superhrefr9   	__class__r   r   ri      s    zCmfTaskMixin.href)N)__name__
__module____qualname__r   classmethodr5   r7   r:   r=   rI   rK   rM   rV   rW   rY   rf   propertyri   __classcell__r   r   rj   r   r      s.   
 
G
*r   )rG   Zcmf.includer   r   r   r   r   <module>   s   