U
    Qfh                     @   s2   d dl T d dlmZ d dlZG dd dejZdS )    )*)cmf_task_resource_assignmentNc                       sb   e Zd Zedd Zeeddddgdddd
dZ fddZ fddZ fddZ	  Z
S )CmfTaskResAssignc                 C   s4   t jjdd| gdd|ggd}|D ]}|  q"d S )Nparent==personIN)filter)modelsr   listdelete)taskpersonsassignments
assignment r   6./modules/gantt/models/cmf_task_resource_assignment.pyremove_task_resources	   s
    z&CmfTaskResAssign.remove_task_resourcesu   Расчет CmfTaskResAssignFTtask_id   )descriptionZshow_bg_progressbarZ	only_onceZonly_once_argspriorityNc           
   
      s  t jj| ddddddgdd}t }|jrPt|jjt jrP|jjsP|	|jj |j
rl|d	d
 |j
D  t jjdd|gdddgd}dd
 |D }|| }||   rt  t j|t  W 5 Q R X  fdd|D }|D ]}t|t jsq|jpt jjdd}t j||d|jjp*tj |jjp<tj |d}	t  |	  W 5 Q R X ||	 q sx|r|jj|pd d d S )Nzexecutors.cmf_deletedzresponsible.cmf_deletedzexecutors.calendarzresponsible.calendarop_gantt_taskzop_gantt_task.sched_start_dateT)idfieldsZinclude_deletedc                 S   s"   h | ]}t |tjr|js|qS r   )
isinstancer
   	CmfPersoncmf_deleted).0executorr   r   r   	<setcomp>"   s       z7CmfTaskResAssign.sync_task_resources.<locals>.<setcomp>r   r   r   calendar)r	   r   c                 S   s   h | ]
}|j qS r   r   r   r   r   r   r   r    &   s     c                    s   g | ]}|j  kr|qS r   r"   r#   Zto_be_removed_personsr   r   
<listcomp>.   s     
 z8CmfTaskResAssign.sync_task_resources.<locals>.<listcomp>)Z
is_defaultd   )r   r   ZunitsZ
date_startZdate_endr!   )r   )r
   ZCmfTaskgetsetZresponsibler   valuer   r   addZ	executorsupdater   r   ZcmfutilZdisable_aclr   r!   ZCmfCalendarr   Zsched_start_datedtdateZtodayZsaveappendZtask_resources_changed_hook)
r   r   r   Zcur_assignmentsZcur_personsZto_be_assigned_personsr   pr!   r   r   r$   r   sync_task_resources   sL     

z$CmfTaskResAssign.sync_task_resourcesc                    sB   t t  }| dg | jr:| j D ]}|| q*t|S )Nr   )r(   super
get_ownersload_fieldsr   r*   r   )selfargskwargsZownersZparent_owner	__class__r   r   r2   B   s    zCmfTaskResAssign.get_ownersc                    sP   |  ddg t| j}|rB|jd| jddsL|jd| jd n
t   d S Nr   
project_idzPPP-TSK-ASSIGNF)objZraise_errorzPPP-TSK-ASSIGN-EXECUTORS)r;   )r3   APPget_cache_projectr:   check_project_role_accessr   r1   check_edit_permr4   Zprojectr7   r   r   r?   L   s    z CmfTaskResAssign.check_edit_permc                    sP   |  ddg t| j}|rB|jd| jddsL|jd| jd n
t   d S r9   )r3   r<   r=   r:   r>   r   r1   check_delete_permr@   r7   r   r   rA   [   s    z"CmfTaskResAssign.check_delete_perm)N)__name__
__module____qualname__staticmethodr   Zcmf_deferred_jobr0   r2   r?   rA   __classcell__r   r   r7   r   r      s   
/
r   )Zcmf.includeZmodules.gantt.fieldsr   Zdatetimer,   r   r   r   r   r   <module>   s   