
    oi#                     :    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      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show_bg_progressbar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_jobr:   r   superr/   )selfr<   argsrA   	__class__s       r9   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-   deleterG   )rH   rI   rA   r7   rJ   s       r9   rM   zCmfGanttBaseline.deleteF   sF     --22$2? 	 J	 w~t.v..rK   c                     t        |   |i |}t        j                  j	                  | d      D ]  }|j                           |S )NT)r   include_deleted)rG   restorer'   r*   r-   )rH   rI   rA   resr7   rJ   s        r9   rP   zCmfGanttBaseline.restoreK   sM    got.v. --22$PT2U 	!J 	!
rK   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_taskrT   _create_op_gant_tasks_rec)rH   rS   s     r9   rW   z*CmfGanttBaseline._create_op_gant_tasks_recQ   si    ""$T":-23--dD9**4+;+;< rK   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   rC   rF   r'   r   create_baseline_with_scope_job)clsrZ   r[   r\   objs        r9   r   z+CmfGanttBaseline.create_baseline_with_scope[   sW    ##FH:#>zz*3%/EFdSf55TT.2*X^%_	arK   u   Создание baseline)r   r   r	   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)rT   r   zparent.main_gantt_projectrY   r0   Tr;   rT   r   )r   r$   rS   CmfTask)rT   r$   CmfListlistsr%   r#   CmfTaskFilterCmfBqlFilterzUnknown obj_class=zUnknown scope_type=)r]   r^   r   r'   r   rZ   
view_scoper/   rc   r-   r*   rV   
class_namerW   bqlloadvaluerC   )rZ   r[   r\   ra   baselinerS   s         r9   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9rK   )__name__
__module____qualname__r   api_methodsstaticmethodcmf_deferred_jobr:   r/   rM   rP   rW   classmethodr   r_   __classcell__)rJ   s   @r9   r   r      s    "..(2
 
K l^a*.<fh"0h "0H */ &(/
= a a "=SWcgrst.: u .:rK   r   N)
cmf.fieldscmf.include'modules.gantt.fields.cmf_gantt_baseliner    rK   r9   <module>rz      s      DN:' N:rK   