U
    [Se8(                     @   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dZed	d
 Zdd Ze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    zPPP-TSK-CREATE)r   write   Нет доступа!Tabort)r   Z
CmfProjectgetCmfTaskr   cmfutilacl_set_policyZsdesk_sla_cyclesZsaver   	cmf_alertr   )clsr    argskwargsZprojectresr   r   r   sdesk_create!   s    zCmfTaskMixin.sdesk_createc           	      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_)code
startswith)sr   r   r   <lambda>:       z7CmfTaskMixin.sdesk_field_options_list.<locals>.<lambda>readZcf_)r&   r   ZCmfWorkflowr4   r5   Zfield_options_listr   builtinsr   r(   r)   )	r+   r2   r3   r,   r-   r1   workflowr.   Zfiltered_resr   r   r   sdesk_field_options_list-   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)r+   r,   r-   taskr.   r   r   r   sdesk_approve_oneF   s    zCmfTaskMixin.sdesk_approve_onec                 O   s    |   stddd | j||S )Nr#   Tr$   )r   r*   update)r   r,   r-   r   r   r   sdesk_updateR   s    zCmfTaskMixin.sdesk_update)reporterr   r   order_byc                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 d|krdtjj|||d|d d}n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    r0   Zparent_logic_prefixr	   zproject.servicedesk)allrelater   r   Tr
   r   r   r   rD   z!=ZmyZapprove_forZis_templatez==Fzstatus.need_approveZapprovers_forzUnknown reporter optionr$   slice)r   r   rB   include_deletedrE   )r   r   rB   rF   c                 S   s   |   S )N)r   )tr   r   r   r7      r8   z)CmfTaskMixin.sdesk_list.<locals>.<lambda>r9   )appendr   r   r   r   r   r   r
   r   r   valuer*   r'   r:   r   r(   r)   r    r0   )r+   rA   r   r   rB   r,   r-   ZfieldZtask_filterr   r   r   r   r.   Zres_filteredZtasksr=   r   r   r   
sdesk_listW   sZ    




zCmfTaskMixin.sdesk_listc                 O   s0   | j ||}|r| sd S |r,t|d |S )Nr9   )r&   r   r(   r)   )r+   r,   r-   r.   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'   rJ   len)r+   r   r,   r-   Z	task_listr   r   r   sdesk_count   s    zCmfTaskMixin.sdesk_countc                O   s  | j }d}|dd}|rd| j|ddgd}| s8dS |jrd|jjrd|jj}|rd|j j}|j}t	|plg }	|r|dg }
|
D ]}|	
|dg  q| |	}| j||d	d
|}|rdd |jD |_t|d t|jd t|jd t|jd ||_||_|S )ux   
        fields - список мета-правил для указания какие поля грузить
        defaultr   Nzrequest_type.ui_form_viewr;   )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>r9   )ui_formr&   r   Zrequest_typeZui_form_viewui_form_jsonloadrI   namer   r?   Z_build_load_planZ_getZcommentsr(   r)   r0   r;   ui_form_name)r+   r   r,   r-   rS   rV   r   r=   rR   Z
fields_setgroupsZ
group_datarO   retr   r   r   sdesk_ui_get   s8    
zCmfTaskMixin.sdesk_ui_getc                    s(   | j dr d| j d| j S t jS )Nztask.sdz/servicedesk//)Zlogic_prefixr5   Zui_namer4   superhref)r   	__class__r   r   r\      s    zCmfTaskMixin.href)N)__name__
__module____qualname__r   classmethodr/   r<   r>   r@   rJ   rK   rM   rY   propertyr\   __classcell__r   r   r]   r   r      s&    
I
&r   )r:   Zcmf.includer   r   r   r   r   <module>   s   