U
    gfL                     @   s6   d dl T d dlmZ d dlmZ G dd dejZdS )    )*)cmf_relation_option)	timedeltac                       sV   e Zd ZdZ fddZeedddddd	d
Zdd Zdd Z	dddZ
  ZS )CmfRelationOptionuN    Класс для соединения задач и типов связей c                    st   | j | jkrtddd t j||}| jjdkrp| ddg | j jj	rp| j jj
rpttjj| j jgddid	 |S )
NuV   Внимание! Нельзя связывать задачу саму с собой!T)abortsystem.finish:startz'out_link.op_gantt_task.sched_start_datez(out_link.op_gantt_task.sched_finish_dateactioncreate)argskwargs)out_linkin_linkZ	cmf_alertsupersaveZrelation_typecodeload_fieldsop_gantt_tasksched_start_datesched_finish_dateZschedule_deferred_jobmodelsr   sort_task_by_order_relationsid)selfr
   r   res	__class__ ,./modules/task/models/cmf_relation_option.pyr   
   s    zCmfRelationOption.saveTuc   Вычисление плановых дат у задач от выставленной связи)Z	only_onceZshow_bg_progressbardescriptionNr   c           
      C   s
  |s
t  }| |krd S ||  tjjdd| gddgd}|jj}|sJd S tjjdddgdd|ggd	d
dgd}|D ]}|j	}|jj
r|dkrt|dksqtt|jjpdd}	|jjr|jj||	 k rt||	 |j_|jjdd |d rt  tjj|jj||d d qtd S )Nr   z==r   zop_gantt_task.sched_finish_date)filterZfieldszrelation_type.coder   r   z&in_link.op_gantt_task.sched_start_datez$in_link.op_gantt_task.const_durationconstrain_lagr   r	   )ZhoursT)Zfrom_sort_order
      )pathdepth)setaddr   ZCmfTaskgetr   r   r   listr   Zconst_durationr   r    valuer   r   Z
cmf_commitr   r   )
Ztask_idr   r#   r$   ZtaskZtask_finish_dateZfollowing_linksZfollowing_linkZfollowing_taskr    r   r   r   r      sL    
z.CmfRelationOption.sort_task_by_order_relationsc                 C   sV   |  ddg | jr0| jjr0| jjjd| jd | jrR| jjrR| jjjd| jd d S Nzout_link.projectzin_link.projectzPPP-TSK-LINK)objr   r   ZprojectZcheck_project_role_accessr   r   r   r   r   check_edit_permA   s
    z!CmfRelationOption.check_edit_permc                 C   sV   |  ddg | jr0| jjr0| jjjd| jd | jrR| jjrR| jjjd| jd d S r*   r,   r-   r   r   r   check_delete_permI   s
    z#CmfRelationOption.check_delete_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.idZ
CmfProjectproject_notifyr0   Zin_tasks)ZinitiatorSessionTabIdZinitiatorCurrentPersonr   ZinitiatorActionZinitiatorObjIdZinitiatorObjChangedFieldsu   initiatorСomponentId	projectIdzproject_notify-r2   )ZroomZevent_personsZ	out_tasks)r   gZsession_tab_idr   parentr)   
class_nameZcurrent_personr   Zcomponent_idZcmf_emit_eventr   )r   Zinitiator_actionZeventr   r   r   r1   P   s4    

$$

z CmfRelationOption.project_notify)NNr   )r0   )__name__
__module____qualname____doc__r   staticmethodZcmf_deferred_jobr   r.   r/   r1   __classcell__r   r   r   r   r      s   
  *r   N)Zcmf.includeZmodules.task.fieldsr   Zdatetimer   r   r   r   r   r   <module>   s   