U
     ef                     @   sF   d dl T d dlmZmZ d dlmZ d dlmZ G dd dejZdS )    )*)ListDict)cmf_relation_option)	timedeltac                       s\   e Zd ZdZ fddZeedde dfddZ fd	d
Z	dd Z
dddZ  ZS )CmfRelationOptionuN    Класс для соединения задач и типов связей c                    s4   t  j||}| jjdkr0ttjj| jj	gd |S )Nsystem.finish:start)args)
supersaveZrelation_typecodeZschedule_deferred_jobmodelsr   sort_task_by_order_relationsout_linkid)selfr	   kwargsres	__class__ ,./modules/task/models/cmf_relation_option.pyr   
   s    zCmfRelationOption.saveT)Z	only_oncer   c           	      C   s   | |krd S | |  tjjdd| gddgd}|jj}tjjdddgdd|ggd	d
gd}|D ]x}|j}t	|j
jpvdd}|jj|| k r`|t	dd | |j_|jjdd |d rt  tjj|jj||d d q`d S )Nr   z==op_gantt_taskzop_gantt_task.sched_finish_date)filterZfieldszrelation_type.coder   r   z&in_link.op_gantt_task.sched_start_dateconstrain_lagr   )Zhours   )ZdaysT)Zfrom_sort_order
   )pathdepth)addr   ZCmfTaskgetr   Zsched_finish_dater   listin_linkr   r   valueZsched_start_dater   Z
cmf_commitr   r   )	Ztask_idr   r   ZtaskZtask_finish_dateZfollowing_linksZfollowing_linkZfollowing_taskr   r   r   r   r      s.    
z.CmfRelationOption.sort_task_by_order_relationsc                    s   |  ddg | jr@| jjr@| jjjjdkr@| jjjd| jd | jrr| jjrr| jjjjdkrr| jjjd| jd t j||S Nzout_link.parentzin_link.parent
CmfProjectzPPP-TSK-LINK)obj)	load_fieldsr   parentr#   
class_namecheck_project_role_accessr"   r
   delete)r   r	   r   r   r   r   r+   ,   s    zCmfRelationOption.deletec                 C   sv   |  ddg | jr@| jjr@| jjjjdkr@| jjjd| jd | jrr| jjrr| jjjjdkrr| jjjd| jd d S r$   )r'   r   r(   r#   r)   r*   r"   )r   r   r   r   _check_project_perm4   s
    z%CmfRelationOption._check_project_permupdatec              	   C   s
  |  ddg tjsd S | jr| jjr| jjjjdkrtjtjjjdgd| jjjdgtj	| jjjjd}t
d|d	  ||d	 |d	 gd
 | jr| jjr| jjjjdkrtjtjjjdgd| jjjdgtj	| jjjjd}t
d|d	  ||d	 |d	 gd
 d S )Nzout_link.parent.idzin_link.parent.idr%   project_notifyr-   Zin_tasks)ZinitiatorSessionTabIdZinitiatorCurrentPersonactionZinitiatorActionZinitiatorObjIdZinitiatorObjChangedFieldsu   initiatorСomponentId	projectIdzproject_notify-r0   )ZroomZevent_personsZ	out_tasks)r'   gZsession_tab_idr   r(   r#   r)   Zcurrent_personr   Zcomponent_idZcmf_emit_eventr"   )r   Zinitiator_actionZeventr   r   r   r.   <   s4    

$$

z CmfRelationOption.project_notify)r-   )__name__
__module____qualname____doc__r   staticmethodZcmf_deferred_jobsetr   r+   r,   r.   __classcell__r   r   r   r   r      s   r   N)	Zcmf.includetypingr   r   Zmodules.task.fieldsr   Zdatetimer   r   r   r   r   r   <module>   s   