U
    jgK                     @   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                       sL   e Zd Zedd Ze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_resourcesc           	   
      s  |  ddddddg t }| jrHt| jjtjrH| jjsH|| jj | j	rd|
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p4tj |d}t  |  W 5 Q R X || qވ sp|r| jj|p~d d d S )Nzexecutors.cmf_deletedzresponsible.cmf_deletedzexecutors.calendarzresponsible.calendarop_gantt_taskzop_gantt_task.sched_start_datec                 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	   Zfieldsc                 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>T)Z
is_defaultd   )r   r   ZunitsZ
date_startZdate_endr   )r   )load_fieldssetZresponsibler   valuer
   r   r   addZ	executorsupdater   r   ZcmfutilZdisable_aclr   r   ZCmfCalendargetr   Zsched_start_datedtdateZtodayZsaveappendZtask_resources_changed_hook)	r   r   Zcur_assignmentsZcur_personsZto_be_assigned_personsr   pr   r   r   r   r   sync_task_resources   sH     

z$CmfTaskResAssign.sync_task_resourcesc                    sB   t t  }| dg | jr:| j D ]}|| q*t|S )Nr   )r"   super
get_ownersr!   r   r$   r   )selfargskwargsZownersZparent_owner	__class__r   r   r-   9   s    zCmfTaskResAssign.get_ownersc                    sJ   |  ddg | jr<| jjd| jddsF| jjd| jd n
t   d S Nr   projectzPPP-TSK-ASSIGNF)objZraise_errorzPPP-TSK-ASSIGN-EXECUTORS)r5   )r!   r4   check_project_role_accessr   r,   check_edit_permr.   r1   r   r   r7   C   s
    z CmfTaskResAssign.check_edit_permc                    sJ   |  ddg | jr<| jjd| jddsF| jjd| jd n
t   d S r3   )r!   r4   r6   r   r,   check_delete_permr8   r1   r   r   r9   Q   s
    z"CmfTaskResAssign.check_delete_perm)
__name__
__module____qualname__staticmethodr   r+   r-   r7   r9   __classcell__r   r   r1   r   r      s   

(
r   )Zcmf.includeZmodules.gantt.fieldsr   Zdatetimer'   r   r   r   r   r   <module>   s   