U
    Ef                     @   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           	   
   C   s  |  ddddddg g }| jjr8| jjr8|| jj | jjrdt| jjt| jj }|t|7 }|rt	
  tj| | W 5 Q R X g }| jr|| jj | jr|| jj7 }|rtjjdd| gd	d
|ggd	ddgd}t|dd |D  }|D ]}t|tjsq|jp"tjjdd}tj| |d| jjp@tj | jjpRtj |d}t	
  |  W 5 Q R X || q| jj|d d S )N	executorsresponsiblezexecutors.calendarzresponsible.calendarop_gantt_taskzop_gantt_task.sched_start_dater   r   r   r   calendar)r
   Zfieldsc                 S   s   h | ]
}|j qS r   )r   ).0r   r   r   r   	<setcomp>)   s     z7CmfTaskResAssign.sync_task_resources.<locals>.<setcomp>T)Z
is_defaultd   )r   r   ZunitsZ
date_startZdate_endr   )r   )load_fieldsr   Z
is_changedoldappendr   setnewr   ZcmfutilZdisable_aclr   r   r   value
isinstanceZ	CmfPersonr   ZCmfCalendargetr   Zsched_start_datedtdateZtodayZsaveZtask_resources_changed_hook)	r   Zremoved_resourcesZremoved_executorsr   r   Zno_assign_personspr   r   r   r   r   sync_task_resources   sR     

z$CmfTaskResAssign.sync_task_resourcesc                    sX   |  ddg dd| jgdd| jgdddgg}tjj|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   ;   s    


zCmfTaskResAssign.deletec                    sB   t t  }| dg | jr:| j D ]}|| q*t|S )Nr   )r   r(   
get_ownersr   r   addr   )r)   r*   r+   ZownersZparent_ownerr,   r   r   r.   E   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)r2   )r   r1   check_project_role_accessr   r(   check_edit_permr)   r,   r   r   r4   O   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 r0   )r   r1   r3   r   r(   check_delete_permr5   r,   r   r   r6   ]   s
    z"CmfTaskResAssign.check_delete_perm)__name__
__module____qualname__staticmethodr   r'   r   r.   r4   r6   __classcell__r   r   r,   r   r      s   

*

r   )Zcmf.includeZmodules.gantt.fieldsr   Zdatetimer$   r   r   r   r   r   <module>   s   