U
    qc5                      @   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ed	d
 Zdd Z	 fddZ
ed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ddgd | jdkr(|   | jrd}tjjd	d
| jgdddgdd| jggdshd| j_d}| jj	s| jj
| j_	d}|r| jjdd | | j d| _d| _d| _| jdd dS )uH   
        Нажатие кнопки стоп по задаче
        r!   ztask.timetracker_cache_statusztask.time_estimateztask.time_spentr   r   r   Fr   !==filterTr   closedN)load_fieldsr   _timetracker_history_closer!   r   r   r   r   r	   time_estimate
time_spentr   _timetracker_recalcr    )r"   Ztask_changedr$   r$   r%   timetracker_stop/   s2      

zCmfTimeTracker.timetracker_stopc                 C   s~   |    | 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 | 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   r0   )r"   r$   r$   r%   r   Q   s    
z CmfTimeTracker.timetracker_pausec                 C   sj   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_secondsr/   r   r0   )clsr!   Zopen_history_listZhave_changesopen_historyr$   r$   r%   timetracker_recalc`   s    z!CmfTimeTracker.timetracker_recalcc                 C   sb   d}| ddddg tjj|dgdD ]}||j7 }q(||_|jrR|j|j |_|jdd d S )	Nr   remaining_estimater.   r/   op_gantt_task)r   r   Tr   )r,   r   r   r4   r/   r.   r9   r   )r6   r!   Zsum_time_spentr#   r$   r$   r%   r0   q   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 n|  d S )Nr!   r   r   r   r   )r   r   r   r   u   DEV: WARNING. Не найден текущий активный отрезок времени при паузе timetracker. Возможно, пытались остановить уже остановленную задачу.r+   r3   Tr   )r,   r!   r   r   r   r   r   r   r   r   r   r   r   r5   r/   r   delete)r"   r7   r$   r$   r%   r-   |   s    z)CmfTimeTracker._timetracker_history_closec                    s   t  j|| d S )N)superr   )r"   argskwargs	__class__r$   r%   r      s    zCmfTimeTracker.save   Добавленоc              	   C   s   |  ddddg | jr.| j| | j  |dkrX| j| | | _|| _| jdd |dkr| j| | _| jdd tjtj	j
}|t|d }tj|||d	|| d
d}|  d
S )u   
        Вызываем из внутренних методов и с фронтенда для изменения списанного и оставшегося времени
        r/   r.   r9   r:   r   Tr   )Zminutesr+   N)r   r   r/   r   textr   r   )r,   r:   Ztimetracker_add_workr   r/   r.   r9   r   r   r   r   r   r   r   )r!   r/   r9   rB   r   r   r#   r$   r$   r%   timetracker_task_change_time   s.    
	z+CmfTimeTracker.timetracker_task_change_timec                 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   r2   r)   )r   r   r4   r1   )r6   r!   Ztracker_listZtrackerr$   r$   r%   timetracker_task_change_status   s    *z-CmfTimeTracker.timetracker_task_change_status)rA   )__name__
__module____qualname__r&   r1   r   classmethodr8   r0   r-   r   staticmethodrC   rE   __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
   