U
    TFd)!                     @   s2   d dl T d dlmZ d dlZG dd dejZdS )    )*)cmf_sdesk_sla_cycleNc                       s   e Zd ZeddddZedd Zdd Zd	d
 Z fddZ	 fddZ
dd Zdd Zdd Zdd Zdd Zdd Zdd Z  ZS )CmfSDeskSlaCycleN)fieldsc                O   sH   |sg }d|kr| d | j|d|i|}|r@tdd |}t|S )Nparentr   c                 S   s
   | j  S N)r   Z_sdesk_check_access)c r	   3./modules/servicedesk/models/cmf_sdesk_sla_cycle.py<lambda>       z-CmfSDeskSlaCycle.sdesk_list.<locals>.<lambda>)appendlistfilter)clsr   argskwargsresr	   r	   r
   
sdesk_list   s    
zCmfSDeskSlaCycle.sdesk_listc                 C   s   t jj|d | ddgd}|rH|jrDd|_|j  |j  |  d S d }t jj	| ddgdgd}|D ]6}|j
sz|} qt jjd	d
|jg|j
gdrh|} qqh|r|jsd S t  }||_| |_||_|j  |j  |  d S )Npausedwithin_calendar_hours)r   	stop_timeslar   F	goal_timebqlZorderno)r   r   Zorder_byid=)r   )Zmodelsr   getr   pause_interval_stop_timeset_nowlast_time_updatesaveZCmfSDeskSlaGoalr   r   ZCmfTaskr   r   r   r   sla_goal
start_time)r   Ztaskcycler"   Zpossible_sla_goalsZpossible_sla_goalr	   r	   r
   start_cycle   s8    




zCmfSDeskSlaCycle.start_cyclec                 C   s&   d| _ | j  | j  |   d S NT)r   pause_interval_start_timer   r    r!   selfr	   r	   r
   pause9   s    

zCmfSDeskSlaCycle.pausec                 C   s   | j   |   d S r   )r   r   r!   r(   r	   r	   r
   stop?   s    
zCmfSDeskSlaCycle.stopc                    s"   ddddddddg}t   | S )	Nr   r   zsla_goal.goal_timesla_goal.calendarr   r'   r   changes_history)supersave_preload_fields)r)   r   	__class__r	   r
   r/   C   s    
z$CmfSDeskSlaCycle.save_preload_fieldsc                    sF   |    |   |   |   |   |   |   t j||S r   )	_calc_paused_time_calc_breach_time_calc_elapsed_time_calc_remaining_time_calc_breached_calc_changes_history_clear_pause_intervalsr.   r!   )r)   r   r   r0   r	   r
   r!   P   s    zCmfSDeskSlaCycle.savec              	   C   s   | j rdg i}| jr| j}t| jt| jjt| jjt| jjt| jj| j	j| j
jt| jdg}|d t| jj|d || _d S )Nhistory)r   paused_timer'   r   breach_timeelapsed_timeremaining_timebreached)r    r   )Z
is_changedr-   strr   r:   valuer'   r   r;   r<   r=   r>   r   r    )r)   r9   r   r	   r	   r
   r7   [   s    



z&CmfSDeskSlaCycle._calc_changes_historyc                 C   s   | j r| jrd | _ d | _d S r   )r'   r   r(   r	   r	   r
   r8   o   s    z'CmfSDeskSlaCycle._clear_pause_intervalsc                 C   s>   |  dg | jr:| jr:|  j| jj| jj| jj7  _d S )Nr,   )Zload_fieldsr'   r   r:   r"   calendarZcalc_work_pause_durationr@   r(   r	   r	   r
   r2   u   s
    z"CmfSDeskSlaCycle._calc_paused_timec                 C   sH   | j j| jj| jj}| j jj| jj | }| jjtj	|d | _
d S )N)Zminutes)r"   rA   calc_non_working_pause_durationr#   r@   r    r   r:   datetimeZ	timedeltar;   )r)   non_working_timeZdeltar	   r	   r
   r3   ~   s
    z"CmfSDeskSlaCycle._calc_breach_timec                 C   sP   | j j| jj| jj}t| jj| jj  d | jj | | _	| j
  d S )N<   )r"   rA   rB   r#   r@   r    intZtotal_secondsr:   r<   Zelapsed_time__addon_startr   )r)   rD   r	   r	   r
   r4      s    
z#CmfSDeskSlaCycle._calc_elapsed_timec                 C   s    | j jj| j | _| j  d S r   )r"   r   r@   r<   r=   Zremaining_time__addon_startr   r(   r	   r	   r
   r5      s    z%CmfSDeskSlaCycle._calc_remaining_timec                 C   s   | j j| j  krd| _d S r&   )r;   r@   Znowr>   r(   r	   r	   r
   r6      s    zCmfSDeskSlaCycle._calc_breached)__name__
__module____qualname__classmethodr   staticmethodr%   r*   r+   r/   r!   r7   r8   r2   r3   r4   r5   r6   __classcell__r	   r	   r0   r
   r      s   
"			r   )Zcmf.includeZmodules.servicedesk.fieldsr   rC   r   r	   r	   r	   r
   <module>   s   