U
    Rd$                     @   sJ   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 dejZdS )    )*N)	timedeltafields)cmf_time_trackerc                       sn   e Zd Zdd Zdd Zdd Zedd Zd	d
 Z fddZ	e
dddZedd Zedd Z  ZS )CmfTimeTrackerc                 C   s   t jj|dddgd}|s&tddd |js8tddd | j d	krN|   d|_|j	d
krt|j
d
d |  n|jdd tjtjj}t j||d|| d}|jdd d	| _|| _|| _| jdd dS )uH   
        Нажатие кнопки плей по задаче
        responsibletimetracker_is_runningcache_status_type)idr   u    Задача не найденаT)abortuV   У задачи нет исполнителя, нельзя начать работу!in_progressZIN_PROGRESS)Zstatus_typeZ	only_dataopen)
start_dateend_datestatusparenttimetrackerN)modelsZCmfTaskget	cmf_alertr   r   loadtimetracker_pauser	   r
   Zset_default_statussavedatetimenowtimezoneutcCmfTimeTrackerHistoryplay_start_datetask)selfZtask_idZactive_taskr   
tt_history r$   +./modules/person/models/cmf_time_tracker.pytimetracker_start
   s2    

z CmfTimeTracker.timetracker_startc                 C   s   | j dddgd | jdkr$|   | jrvd}tjjdd| jgdd	dgdd	| jggd
sdd| j_d}|rv| jj	dd d| _d| _d| _
| j	dd dS )uH   
        Нажатие кнопки стоп по задаче
        r!   ztask.timetracker_cache_statusr   r   r   Fr   !==filterTr   closedN)load_fieldsr   _timetracker_history_closer!   r   r   r   r   r	   r   r    )r"   Ztask_changedr$   r$   r%   timetracker_stop/   s"    

zCmfTimeTracker.timetracker_stopc                 C   sr   |    | jdgd | jr\tjjdd| jgdddgdd| jggds\d	| j_| jjd
d d| _	| jd
d dS )uJ   
        Нажатие кнопки пауза по задаче
        r!   r   r   r'   r   r(   r   r)   FTr   pauseN)
r-   r,   r!   r   r   r   r   r	   r   r   )r"   r$   r$   r%   r   M   s    
z CmfTimeTracker.timetracker_pausec                 C   s`   t jjd|ddgd}d}|D ]<}tjtjj|_|j|j 	 d |_
|jdd d}qd	S )
u   
        Вызываем из внутренних методов и с фронтенда периодически по активной задаче
        r   r   r   )r   r   r   F<   Tr   N)r   r   listr   r   r   r   r   r   total_seconds
time_spentr   )clsr!   Zopen_history_listZhave_changesopen_historyr$   r$   r%   timetracker_recalc\   s    z!CmfTimeTracker.timetracker_recalcc                 C   s   | j dgd | jrtjjd| j| ddgd}|s>td d S d|_tjtj	j
|_|j|j  d	 |_|jr|jd
d | jjr| jj|j n|  d S )Nr!   r   r   r   r   )r   r   r   r   u   DEV: WARNING. Не найден текущий активный отрезок времени при паузе timetracker. Возможно, пытались остановить уже остановленную задачу.r+   r0   Tr   )r,   r!   r   r   r   r   r   r   r   r   r   r   r   r2   r3   r   op_gantt_tasktimetracker_add_work_hookdelete)r"   r5   r$   r$   r%   r-   y   s    z)CmfTimeTracker._timetracker_history_closec                    s   t  j|| d S )N)superr   )r"   argskwargs	__class__r$   r%   r      s    zCmfTimeTracker.save   ДобавленоNc              
   C   s   |  dg | jr"| jj||d |dkr|rJ| j|}|t|d }ntjtjj	}|t|d }t
j|||d|| d|d}|  dS )u   
        Вызываем из внутренних методов и с фронтенда для изменения списанного и оставшегося времени
        start_date - строка
        r7   )remaining_estimater   Zminutesr+   N)r   r   r3   r   textr   r   r@   )r,   r7   r8   Z
alarm_datecastr   r   r   r   r   r   r   r   )r!   r3   r@   rB   r   r   r#   r$   r$   r%   timetracker_task_change_time   s(    
z+CmfTimeTracker.timetracker_task_change_timec              
   C   s^   t j t jj}|t|d }|j  |j}|s8tj}t	j
|||dd|d |d}|  d S )NrA   r+   uR   Изменение фактических трудозатрат по задаче)r   r   r3   r   rB   r   r   Z
cmf_author)r   r   r   r   r   r   r   gZcurrent_userr   r   r   )r4   r!   Z
work_deltar   r   Zhistory_authorr#   r$   r$   r%   "_op_gantt_actual_work_changed_hook   s"    

z1CmfTimeTracker._op_gantt_actual_work_changed_hookc                 C   s@   t jjdd|gddddgdddgggd}|D ]}|  q.d S )Nr!   z==ORr   r   r/   r)   )r   r   r1   r.   )r4   r!   Ztracker_listZtrackerr$   r$   r%   timetracker_task_change_status   s    *z-CmfTimeTracker.timetracker_task_change_status)r?   N)__name__
__module____qualname__r&   r.   r   classmethodr6   r-   r   staticmethodrD   rF   rH   __classcell__r$   r$   r=   r%   r      s   %
!
r   )Zcmf.includer   r   Zcmfr   Zmodules.person.fieldsr   r   r$   r$   r$   r%   <module>   s
   