
    Ii#                     :    d dl  d dl d dlmZ  G d de      Zy)    )*)CmfGanttBaselinec                        e Zd Zej                  dgz   Ze eddgdd      d               Zdd	 fd

Z fdZ	 fdZ
d Zed        Ze edddd      d               Z xZS )r   create_baseline_with_scopeT
project_id   u(   Расчет активного baseline)	only_onceonly_once_argsprioritydescriptionc           
      T   t         j                  j                  |       }|sy dd| gg}t         j                  j                  |g dgz   dg      }|s0t         j                  j                  dd| gg dgd	d	d	d d d	d
       y g d}t         j                  j                  dd|g|      }|D ci c]  }|j                  | }}ddt        |j                               gg dg}t         j                  j                  |dg      D ]  }	|j                  |	j                  d       }
|
s"|
j                  |	_
        |
j                  |	_        |
j                  |	_        |
j                  |	_        |
j                  |	_        |
j"                  |	_        |	j'                  d        y c c}w )N)id	parent_id==active_baseliner   Tz-cmf_modified_at)filterorder_byr   )parentr   Nr   )start_variancefinish_varianceduration_variancebaseline_start_datebaseline_finish_datebaseline_durationr   values)task_idsched_start_datesched_finish_datesched_durationr   r   r   r   r   fieldsr   INT)	only_data)models
CmfProjectgetr   CmfGanttTaskbulk_updateslistr   listkeysr   r   r   r   r   r    r   r!   r   save)r   projectbaseline_filterr   "active_baseline_gantt_tasks_fieldsactive_baseline_gantt_tasksgt&active_baseline_gantt_tasks_by_task_idgantt_task_filter
gantt_taskbaseline_gantt_tasks              ,./modules/gantt/models/cmf_gantt_baseline.pycalc_active_baseline_jobz)CmfGanttBaseline.calc_active_baseline_job   s    ##'':'6'z:; 1155_PoOp=p  }O  |P5  Q++\44TVl3mBCCDEFGKHLEF4. , /2l.*0*=*=*C*CHVZ\kKl  vX*C  +Y'Oj5kbjj"n5k25k"+T48^8c8c8e3f!gi  !A$1166>OYbXc6d 
0
&L&P&PQ[QcQcei&j#*,?,N,N
)-@-P-P
*/B/T/T
,1D1U1U
.2E2W2W
//B/Q/Q
,$/
0 6ls   0F%Fallowed_methodc                $   | j                   r|st        dd       | j                   r8t        j                  j	                  dd| j
                  gg dg      sd| _        | j                  j                  r| j                  rN| j                   sBt        j                  j                  dd| j
                  gg ddd	| j                  ggd
di       t        t        j                  j                  d| j                  i       t        | 8  |i | y )Nul   CmfGanttBaseline можно создавать только через метод create_baseline_with_scopeTabortr   r   r   )r   r   z!=r   Fr   r   kwargs)is_new	cmf_alertr&   r   sgetr   r   
is_changedr*   r   schedule_deferred_jobr9   r   superr.   )selfr;   argsr@   	__class__s       r8   r.   zCmfGanttBaseline.save2   s    ;;~  E  MQ  R;;**//48UWv7w/x'+$**##DKK''33XtT[[<Y<[=A4<Q<S =Nu;U 4 W
 "&"9"9"R"R\hjnjxjx[yzd%f%    c                     t         j                  j                  |       D ]  }|j                           t	        |   |i |S )N)r   )r&   r)   r,   deleterF   )rG   rH   r@   r6   rI   s       r8   rL   zCmfGanttBaseline.deleteF   sF     --22$2? 	 J	 w~t.v..rJ   c                     t        |   |i |}t        j                  j	                  | d      D ]  }|j                           |S )NT)r   include_deleted)rF   restorer&   r)   r,   )rG   rH   r@   resr6   rI   s        r8   rO   zCmfGanttBaseline.restoreK   sM    got.v. --22$PT2U 	!J 	!
rJ   c                     t         j                  j                  | |      ry |j                  ddg       t         j                  j	                  ||        |j
                  r| j                  |j
                         y y )N)r   taskparent_taskr   )r&   r)   r(   load_fieldscreate_gantt_taskrS   _create_op_gant_tasks_rec)rG   rR   s     r8   rV   z*CmfGanttBaseline._create_op_gant_tasks_recQ   si    ""$T":-23--dD9**4+;+;< rJ   c                     t         j                  |dg      }|j                  st        d| dd       t	        t
        j                  j                  |||d       y )	Nr   r#   u   У объекта u    нет проектаTr=   )name
scope_typeobj_idr?   )cmfutilget_obj_by_idr   rB   rE   r&   r   create_baseline_with_scope_job)clsrY   rZ   r[   objs        r8   r   z+CmfGanttBaseline.create_baseline_with_scope[   sW    ##FH:#>zz*3%/EFdSf55TT.2*X^%_	arJ   u   Создание baseline)r   show_bg_progressbarr	   r   c                 D   t         j                  |g d      }|j                  sy t        j	                         }| |_        |j                  |_        d|_        |j                  d       |dk(  rSt        j                  j                  |j                  ddg      D ]"  }t        j                  j                  ||       $ y |d	k(  rI|j                  d
k(  rZ|j                  |       t        j                  j                  |ddg      D ]"  }t        j                  j                  ||       $ y |j                  dk(  r>t        j                  j                  dd|ggddg      D ]  }|j                  |        y |j                  dk(  s|j                  dk(  r\t        j                  j                  |j                  j                         j                   ddg      D ]  }|j                  |        y t#        d|j                          y t#        d|        y )N)rS   r   zparent.main_gantt_projectrX   r/   Tr:   rS   r   )r   r#   rR   CmfTask)rS   r#   CmfListlistsr$   r"   CmfTaskFilterCmfBqlFilterzUnknown obj_class=zUnknown scope_type=)r\   r]   r   r&   r   rY   
view_scoper.   rc   r,   r)   rU   
class_namerV   bqlloadvaluerB   )rY   rZ   r[   r`   baselinerR   s         r8   r^   z/CmfGanttBaseline.create_baseline_with_scope_jobd   s    ##F3i#jzz **,**'T* "++8??M[cKd+e F##55dHEF6!~~* 2237"NN//CX`Ha/b JD''99$IJ9,"NN//u7MWdfnVo/p =D66t<=?2cnn6V"NN//sww||~7K7KUbdlTm/n =D66t<= .s~~.>?@+J<89rJ   )__name__
__module____qualname__r   api_methodsstaticmethodcmf_deferred_jobr9   r.   rL   rO   rV   classmethodr   r^   __classcell__)rI   s   @r8   r   r      s    "..(2
 
K l^a"LN"0N "0H */ &(/
= a a "=SWcgrst.: u .:rJ   r   N)
cmf.fieldscmf.include'modules.gantt.fields.cmf_gantt_baseliner    rJ   r8   <module>rz      s      DN:' N:rJ   