
    i#                     >    d dl T d dlT d dlmZ  G d de          ZdS )    )*)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           j                            |           }|sd S dd| gg}t           j                            |g dgz   dg          }|s1t           j                            dd| gg dgd	d	d	d d d	d
           d S g d}t           j                            dd|g|          }d |D             }ddt          |                                          gg dg}t           j                            |dg          D ]~}|                    |j	        d           }	|	s |	j
        |_
        |	j        |_        |	j        |_        |	j        |_        |	j        |_        |	j        |_        |                    d           d S )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   fieldsc                     i | ]
}|j         |S  )r   ).0gts     ,./modules/gantt/models/cmf_gantt_baseline.py
<dictcomp>z=CmfGanttBaseline.calc_active_baseline_job.<locals>.<dictcomp>$   s    5k5k5kbj"5k5k5k    r   INT)	only_data)models
CmfProjectgetr   CmfGanttTaskbulk_updateslistlistkeysr   r   r   r   r   r   r    r   r!   r   save)
r   projectbaseline_filterr   "active_baseline_gantt_tasks_fieldsactive_baseline_gantt_tasks&active_baseline_gantt_tasks_by_task_idgantt_task_filter
gantt_taskbaseline_gantt_tasks
             r(   calc_active_baseline_jobz)CmfGanttBaseline.calc_active_baseline_job   s    #'':'66 	F'z:; 155_PoPoPoOp=p  }O  |P5  Q  Q 	0++\44TVlVlVl3mBCCDEFGKHLEF4. 4. , / / / / /2l 2l 2l.*0*=*C*CHVZ\kKl  vX*C  +Y  +Y'5k5kOj5k5k5k2"+T48^8c8c8e8e3f3f!giii  !A$166>OYbXc6dd 
0 
0
&L&P&PQ[Qcei&j&j#* ,?,N
)-@-P
*/B/T
,1D1U
.2E2W
//B/Q
,$////
0 
0r*   Fallowed_methodc                   | j         r|st          dd           | j         r3t          j                            dd| j        gg dg          sd| _        | j        j        rm| j        r?| j         s8t          j                            dd| j        gg ddd	| j	        ggd
di           t          t          j        j        d| j        i            t                      j        |i | d S )Nul   CmfGanttBaseline можно создавать только через метод create_baseline_with_scopeTabortr   r   r   )r   r   z!=r   Fr   r   kwargs)is_new	cmf_alertr-   r   sgetr   r   
is_changedr1   r   schedule_deferred_jobr>   r   superr5   )selfr@   argsrE   	__class__s       r(   r5   zCmfGanttBaseline.save2   s@   ; 	R~ 	R  E  MQ  R  R  R  R; 	,*//48UWvWvWv7w/xx ,'+$* 	{# WDK W'33XtT[<Y<[<[<[=A4<Q<S =Nu;U 4 W W W
 "&"9"R\hjnjx[yzzzzd%f%%%%%r*   c                     t           j                            |           D ]}|                                  t	                      j        |i |S )N)r   )r-   r0   r3   deleterK   )rL   rM   rE   r<   rN   s       r(   rP   zCmfGanttBaseline.deleteF   sV     -22$2?? 	  	 Juww~t.v...r*   c                      t                      j        |i |}t          j                            | d          D ]}|                                 |S )NT)r   include_deleted)rK   restorer-   r0   r3   )rL   rM   rE   resr<   rN   s        r(   rS   zCmfGanttBaseline.restoreK   s]    eggot.v.. -22$PT2UU 	! 	!J    
r*   c                     t           j                            | |          rd S |                    ddg           t           j                            ||            |j        r|                     |j                   d S d S )N)r   taskparent_taskr   )r-   r0   r/   load_fieldscreate_gantt_taskrW   _create_op_gant_tasks_rec)rL   rV   s     r(   rZ   z*CmfGanttBaseline._create_op_gant_tasks_recQ   s    ""$T":: 	F-2333--dD999 	=**4+;<<<<<	= 	=r*   c                     t                               |dg          }|j        st          d| dd           t	          t
          j        j        |||d           d S )	Nr   r#   u   У объекта u    нет проектаTrB   )name
scope_typeobj_idrD   )cmfutilget_obj_by_idr   rG   rJ   r-   r   create_baseline_with_scope_job)clsr]   r^   r_   objs        r(   r   z+CmfGanttBaseline.create_baseline_with_scope[   s    ##FH:#>>z 	TF3FFFdSSSSf5T.2*X^%_%_	a 	a 	a 	a 	a 	ar*   u   Создание baseline)r   show_bg_progressbarr	   r   c                 6   t                               |g d          }|j        sd S t                                          }| |_        |j        |_        d|_        |                    d           |dk    rMt          j        	                    |j        ddg          D ]"}t          j
                            ||           #d S |d	k    r<|j        d
k    r]|                    |           t          j        	                    |ddg          D ]"}t          j
                            ||           #d S |j        dk    rAt          j        	                    dd|ggddg          D ]}|                    |           d S |j        dk    s|j        dk    rYt          j        	                    |j                                        j        ddg          D ]}|                    |           d S t#          d|j                    d S t#          d|            d S )N)rW   r   zparent.main_gantt_projectr\   r6   Tr?   rW   r   )r   r#   rV   CmfTask)rW   r#   CmfListlistsr+   r"   CmfTaskFilterCmfBqlFilterzUnknown obj_class=zUnknown scope_type=)r`   ra   r   r-   r   r]   
view_scoper5   rg   r3   r0   rY   
class_namerZ   bqlloadvaluerG   )r]   r^   r_   rd   baselinerV   s         r(   rb   z/CmfGanttBaseline.create_baseline_with_scope_jobd   sh    ##F3i3i3i#jjz 	F **,,*'T*** ""++8?M[cKd+ee F F#55dHEEEEF F6!!~** 223777"N//CX`Ha/bb J JD'99$IIIIJ J9,,"N//u7MWdfnVo/pp = =D66t<<<<= =?22cn6V6V"N//sw||~~7KUbdlTm/nn = =D66t<<<<= = ?s~??@@@@@8J8899999r*   )__name__
__module____qualname__r   api_methodsstaticmethodcmf_deferred_jobr>   r5   rP   rS   rZ   classmethodr   rb   __classcell__)rN   s   @r(   r   r      sE       ".(2
 
K l^a"LN N N"0 "0N N \"0H */ & & & & & & &(/ / / / /
    = = = a a [a "=SWcgrsttt.: .: ut \.: .: .: .: .:r*   r   N)
cmf.fieldscmf.include'modules.gantt.fields.cmf_gantt_baseliner   r%   r*   r(   <module>r}      sn            D D D D D DN: N: N: N: N:' N: N: N: N: N:r*   