
    oi$                     d    d dl  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y)    )*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y)CmfTimeTracker)timetracker_starttimetracker_stoptimetracker_pausetimetracker_recalcc                    t         j                  j                  |g d      }|st        dd       |j                  st        dd       | j
                  j                         dk(  r| j                          d|_        |j                  dk7  r#|j                  d	       |j                          n|j                  d
       t        j                  j                  t        j                  j                        }t         j!                  ||d||       }|j                  d
       d| _        || _        || _        | j                  d
       y)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   s"    nn((G<z({8E&&nvz{ ;;.""$-1*((M9**}*Et,&&**8+<+<+@+@A
11! 2 

 	$'#)			D	!    c                    | j                  g d       | j                  dk(  r| j                          | j                  rrd}t        j
                  j                  dd| j                  gg ddd	| j                  gg
      sd| j                  _        d}|r| j                  j                  d       d| _        d| _        d| _
        | j                  d       y)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T;;-'++-99 L((,,dD$''5J5S6<c4995M5O, P 49		0#		. 	#		D	!r2   c                 l   | j                          | j                  dg       | j                  rlt        j                  j                  dd| j                  gg ddd| j                  gg      s-d| j                  _        | j                  j                  d	
       d| _	        | j                  d	
       y)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     	''))99V2266dDGG?T1O28#tyy1I?K6 L 05DII,IINNTN*		D	!r2   c                 ^   t         j                  j                  dd|ddg      }d}|D ]  }t        j                  j	                  t        j
                  j                        |_        |j                  |j                  z
  j                         dz  |_
        |j                  d	       d} y
)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8==VZ`im  xB  DP  wQ=  R- 	 L$,$5$5$9$9(:K:K:O:O$PL!'3'<'<|?V?V'V&e&e&gkm&mL#-L		 r2   c                    | j                  dg       | j                  r%t        j                  j	                  d| j                  | ddg      }|st        d       y d|_        t        j                  j                  t        j                  j                        |_        |j                  |j                  z
  j                         d	z  |_        |j                  rY|j                  d
       | j                  j                   r0| j                  j                   j#                  |j                         y y |j%                          y y )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   s    )99!77;;6RVR[R[im  xD  FP  wQ;  RL C D"*L$,$5$5$9$9(:K:K:O:O$PL!'3'<'<|?V?V'V&e&e&gkm&mL#&&!!D!199**II++EElF]F]^ + ##% r2   Nc                 x   | j                  dg       |dkD  r|r+| j                  j                  |      }|t        |      z   }nFt        j                  j                  t        j                  j                        }|t        |      z
  }t        j                  |||d|| d||	      }|j                          |S y)u   
        Вызываем из внутренних методов и с фронтенда для изменения списанного и оставшегося времени
        start_date - строка
        rK   r   minutesr9   N)	r   r   rE   r   textr   r   remaining_estimate	cmf_owner)r:   
alarm_datecastr   r&   r'   r(   r)   r   r*   r%   )r,   rE   rR   rQ   r   rS   r   r0   s           r1   timetracker_task_change_timez+CmfTimeTracker.timetracker_task_change_time   s     	/*+>  "__11*=
%	*(EE#,,001B1B1F1FG%	*(EE
55%!% #5# 6 
J OO1 r2   c           
      Z   t         j                   j                  t         j                  j                        }|t	        |      z
  }|j
                  j                          |j
                  }|st        j                  }t        j                  |||dd|d |      }|j                          y )NrO   r9   uR   Изменение фактических трудозатрат по задаче)r   r   rE   r   rQ   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$5$9$9:9Z88
))^^N11!!e% 2 	

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