B
    af                 @   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                sn   | j | jkrtddd t j||}| jjdkrj| ddg | j jj	rj| j jj
rjttjj| j jgd |S )NuV   Внимание! Нельзя связывать задачу саму с собой!T)abortzsystem.finish:startz'out_link.op_gantt_task.sched_start_datez(out_link.op_gantt_task.sched_finish_date)args)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   kwargsZ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
gd}x~|D ]v}|j	}t
|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 qtW d S )Nr   z==r   zop_gantt_task.sched_finish_date)filterZfieldszrelation_type.codezsystem.finish:startr   z&in_link.op_gantt_task.sched_start_dateconstrain_lagr   )ZhoursT)Zfrom_sort_order
      )pathdepth)setaddr   ZCmfTaskgetr   r   r   listr	   r   r   valuer   r   Z
cmf_commitr   r   )	Ztask_idr   r   ZtaskZtask_finish_dateZfollowing_linksZfollowing_linkZfollowing_taskr   r   r   r   r      s0    



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   projectcheck_project_role_accessr	   )r   r   r   r   check_edit_perm7   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 )Nzout_link.projectzin_link.projectzPPP-TSK-LINK)r%   )r   r   r&   r'   r	   )r   r   r   r   check_delete_perm?   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_notifyr*   Zin_tasks)ZinitiatorSessionTabIdZinitiatorCurrentPersonactionZinitiatorActionZinitiatorObjIdZinitiatorObjChangedFieldsu   initiatorСomponentId	projectIdzproject_notify-r-   )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   r+   F   s.    $$z CmfRelationOption.project_notify)Nr   )r*   )__name__
__module____qualname____doc__r   staticmethodZcmf_deferred_jobr   r(   r)   r+   __classcell__r   r   )r   r   r      s   

 r   N)Zcmf.includeZmodules.task.fieldsr   Zdatetimer   r   r   r   r   r   <module>   s   