U
    $g                     @   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                       sX   e Zd Zedd Zedd Z f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                    s\   |  ddg dd| jgdd| jgdddgg}tjj|dgdD ]}|  q@t j||S )Nr   r   Z	cmf_ownerr   Zhistory_typeZplanr   )r"   r   r   r
   ZCmfTimeTrackerHistoryr   r   super)selfargskwargsZ_filterZtth	__class__r   r   r   9   s    


zCmfTaskResAssign.deletec                    sB   t t  }| dg | jr:| j D ]}|| q*t|S )Nr   )r#   r-   
get_ownersr"   r   r%   r   )r.   r/   r0   ZownersZparent_ownerr1   r   r   r3   C   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)r6   )r"   r5   check_project_role_accessr   r-   check_edit_permr.   r1   r   r   r8   M   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 r4   )r"   r5   r7   r   r-   check_delete_permr9   r1   r   r   r:   [   s
    z"CmfTaskResAssign.check_delete_perm)__name__
__module____qualname__staticmethodr   r,   r   r3   r8   r:   __classcell__r   r   r1   r   r      s   

(

r   )Zcmf.includeZmodules.gantt.fieldsr   Zdatetimer(   r   r   r   r   r   <module>   s   