
    f&                     `    d dl T d dlZd dlmZ d dlmZ d dlmZ  G d dej                  ZdS )    )*N)	timedeltafields)cmf_time_trackerc                       e Zd Zej        j        g dz   Zd Zd Zd Ze	d             Z
d Zedd	            Ze	d
             Ze	d             ZdS )CmfTimeTracker)timetracker_starttimetracker_stoptimetracker_pausetimetracker_recalcc                    t           j                            |g d          }|st          dd           |j        st          dd           | j                                        dk    r|                                  d|_        |j	        dk    r+|
                    d	           |                                 n|                    d
           t          j                            t          j        j                  }t                               ||d||           }|                    d
           d| _        || _        || _        |                     d
           dS )uH   
        Нажатие кнопки плей по задаче
        )responsibletimetracker_is_runningcache_status_type)idr   u    Задача не найденаT)abortuV   У задачи нет исполнителя, нельзя начать работу!in_progressIN_PROGRESS)status_type	only_dataopen)
start_dateend_datestatusparenttimetrackerN)modelsCmfTaskget	cmf_alertr   r   loadr   r   r   set_default_statussavedatetimenowtimezoneutcCmfTimeTrackerHistoryplay_start_datetask)selftask_idactive_taskr   
tt_historys        +./modules/person/models/cmf_time_tracker.pyr
   z CmfTimeTracker.timetracker_start   st    n((G<z<z<z({{ 	F8EEEE& 	|nvz{{{{ ;..""$$$-1*(M99**}*EEEt,,,&**8+<+@AA
11! 2 
 

 	$'''#)			D	!!!!!    c                    |                      g d           | j        dk    r|                                  | j        rbd}t          j                            dd| j        gg ddd	| j        gg
          sd| j        _        d}|r| j        	                    d           d| _        d| _        d| _
        | 	                    d           dS )uH   
        Нажатие кнопки стоп по задаче
        )r,   ztask.timetracker_cache_statusr   r   r   Fr   !=r   =r   r,   r6   filterTr   closedN)load_fieldsr   _timetracker_history_closer,   r   r	   r!   r   r   r%   r+   )r-   task_changeds     r1   r   zCmfTimeTracker.timetracker_stop5   s    
 	 S S STTT;-''++---9 
	/ L(,,dD$'5J5S5S5S6<c495M5O, P P $ 49	0# /	... 	#		D	!!!!!r2   c                 \   |                                   |                     dg           | j        r\t          j                            dd| j        gg ddd| j        gg          s'd| j        _        | j                            d	
           d| _	        |                     d	
           dS )uJ   
        Нажатие кнопки пауза по задаче
        r,   r   r   r4   r5   r6   r7   FTr   pauseN)
r;   r:   r,   r   r	   r!   r   r   r%   r   )r-   s    r1   r   z CmfTimeTracker.timetracker_pauseS   s     	''))))))9 	+V266dDG?T1O1O1O28#ty1I?K6 L L 	+ 05DI,INNTN***		D	!!!!!r2   c                 F   t           j                            dd|ddg          }d}|D ]v}t          j                            t          j        j                  |_        |j        |j        z
  	                                dz  |_
        |                    d	           d}wd
S )u   
        Вызываем из внутренних методов и с фронтенда периодически по активной задаче
        r   factr   r   )r   history_typer   r   F<   Tr   N)r   r*   listr&   r'   r(   r)   r   r   total_seconds
time_spentr%   )clsr,   open_history_listhave_changesopen_historys        r1   r   z!CmfTimeTracker.timetracker_recalcb   s     #8==VZ`im  xB  DP  wQ=  R  R- 	  	 L$,$5$9$9(:K:O$P$PL!'3'<|?V'V&e&e&g&gkm&mL#---LL		  	 r2   c                 R   |                      dg           | j        rt          j                            d| j        | ddg          }|st          d           d S d|_        t          j                            t          j	        j
                  |_        |j        |j        z
                                  d	z  |_        |j        rJ|                    d
           | j        j        r&| j        j                            |j                   d S d S |                                 d S d S )Nr,   r   r   r   r   )r   r   r   r   u   DEV: WARNING. Не найден текущий активный отрезок времени при паузе timetracker. Возможно, пытались остановить уже остановленную задачу.r9   rB   Tr   )r:   r,   r   r*   r!   r"   r   r&   r'   r(   r)   r   r   rD   rE   r%   op_gantt_tasktimetracker_add_work_hookdelete)r-   rI   s     r1   r;   z)CmfTimeTracker._timetracker_history_close   sX   )))9 	&!7;;6RVR[im  xD  FP  wQ;  R  RL  C D D D"*L$,$5$9$9(:K:O$P$PL!'3'<|?V'V&e&e&g&gkm&mL#& &!!D!1119* _I+EElF]^^^^^_ _ ##%%%%%	& 	&r2      ДобавленоNc                 >   |                      dg           | j        rO| j                            ||           |r1|                                |z  }| j                            |           |dk    r|r.| j                            |          }|t          |          z   }nAt          j        	                    t          j
        j                  }|t          |          z
  }t                              |||d|| d||	  	        }|                                 |S dS )u   
        Вызываем из внутренних методов и с фронтенда для изменения списанного и оставшегося времени
        start_date - строка
        rK   )remaining_estimater   minutesr9   N)	r   r   rE   r   textr   r   rP   	cmf_owner)r:   rK   rL   rate_per_minutetimetracker_add_cost_hook
alarm_datecastr   r&   r'   r(   r)   r   r*   r%   )	r,   rE   rP   rS   r   rT   
cost_deltar   r0   s	            r1   timetracker_task_change_timez+CmfTimeTracker.timetracker_task_change_time   sA    	/*+++ 	I88Xj8kkk I&6688:E
"<<ZHHH>>  F "_11*==
%	*(E(E(EE#,001B1FGG%	*(E(E(EE
55%!% #5# 6 
 
J OO1 >r2   c           
      P   t           j                             t           j        j                  }|t	          |          z
  }|j                                         |j        }|st          j        }t          
                    |||dd|d |          }|                                 d S )NrQ   r9   uR   Изменение фактических трудозатрат по задаче)r   r   rE   r   rS   r   r   
cmf_author)r&   r'   r(   r)   r   r   r#   gcurrent_userr   r*   r%   )rF   r,   
work_deltar'   r   history_authorr0   s          r1   "_op_gantt_actual_work_changed_hookz1CmfTimeTracker._op_gantt_actual_work_changed_hook   s     ##H$5$9::9Z8888
) 	,^N11!!e% 2 	
 	

 	r2   c                     t           j                            dd|gdg dg dgg          }|D ]}|                                 d S )Nr,   ==OR)r   rc   r   )r   rc   r>   r7   )r   r	   rC   r   )rF   r,   tracker_listtrackers       r1   timetracker_task_change_statusz-CmfTimeTracker.timetracker_task_change_status   s     ,1164:NQUWvWvWv  yR  yR  yR  QS  :T1  U  U# 	' 	'G$$&&&&	' 	'r2   )rN   NN)__name__
__module____qualname__r   r	   api_methodsr
   r   r   classmethodr   r;   staticmethodrZ   ra   rg    r2   r1   r	   r	      s        "1= A
 A
 A
 
K#" #" #"J" " "<" " "     [ 8& & && % % % \%N   [* ' ' [' ' 'r2   r	   )cmf.includer&   r   cmfr   modules.person.fieldsr   r	   rn   r2   r1   <module>rr      s                     2 2 2 2 2 2M' M' M' M' M'%4 M' M' M' M' M'r2   