U
    }d~%                     @   s:   d dl T d dlmZ d dl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e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   sh   d }t jj| ddgdgd}|D ]B}|js2|} qdt|jj}t jjdd|jg|gdr |} qdq |S )N	goal_timebqlZorderno)r   r   Zorder_byid=)r   )	modelsZCmfSDeskSlaGoalr   r   jsonloadsZCmfTaskgetr   )slatasksla_goalZpossible_sla_goalspossible_sla_goalr   r	   r	   r
   r       s    z"CmfSDeskSlaCycle.possible_sla_goalc                 C   s`   t jj| d ddgd}|D ]@}t j|j| }|r|j|kr|jr||_|j  |	  qd S )Nr   r   )r   	stop_timer   )
r   r   r   r    r   r   r   last_time_updateset_nowsave)r   Zcyclescycler   r	   r	   r
   update_cycle_goals'   s    
z#CmfSDeskSlaCycle.update_cycle_goalsc                 C   s   t jj|d | ddgd}|rH|jrDd|_|j  |j  |  d S t j| |}|r`|j	sdd S t  }||_
| |_||_|j  |j  |  d S )Npausedwithin_calendar_hours)r   r!   r   r   F)r   r   r   r'   pause_interval_stop_timer#   r"   r$   r    r   r   r   r   
start_time)r   r   r%   r   r	   r	   r
   start_cycle5   s(    




zCmfSDeskSlaCycle.start_cyclec                 C   s&   d| _ | j  | j  |   d S NT)r'   pause_interval_start_timer#   r"   r$   selfr	   r	   r
   pauseO   s    

zCmfSDeskSlaCycle.pausec                 C   s   | j   |   d S r   )r!   r#   r$   r.   r	   r	   r
   stopU   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
   r5   Y   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_intervalsr4   r$   )r/   r   r   r6   r	   r
   r$   f   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_changedr3   strr'   r@   valuer-   r)   rA   rB   rC   rD   r   r"   )r/   r?   r   r	   r	   r
   r=   q   s    



z&CmfSDeskSlaCycle._calc_changes_historyc                 C   s   | j r| jrd | _ d | _d S r   )r-   r)   r.   r	   r	   r
   r>      s    z'CmfSDeskSlaCycle._clear_pause_intervalsc                 C   s>   |  dg | jr:| jr:|  j| jj| jj| jj7  _d S )Nr2   )Zload_fieldsr-   r)   r@   r   calendarZcalc_work_pause_durationrF   r.   r	   r	   r
   r8      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   rG   calc_non_working_pause_durationr*   rF   r"   r   r@   datetimeZ	timedeltarA   )r/   non_working_timeZdeltar	   r	   r
   r9      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   rG   rH   r*   rF   r"   intZtotal_secondsr@   rB   Zelapsed_time__addon_startr#   )r/   rJ   r	   r	   r
   r:      s    
z#CmfSDeskSlaCycle._calc_elapsed_timec                 C   s    | j jj| j | _| j  d S r   )r   r   rF   rB   rC   Zremaining_time__addon_startr#   r.   r	   r	   r
   r;      s    z%CmfSDeskSlaCycle._calc_remaining_timec                 C   s   | j j| j  krd| _d S r,   )rA   rF   ZnowrD   r.   r	   r	   r
   r<      s    zCmfSDeskSlaCycle._calc_breached)__name__
__module____qualname__classmethodr   staticmethodr    r&   r+   r0   r1   r5   r$   r=   r>   r8   r9   r:   r;   r<   __classcell__r	   r	   r6   r
   r      s&   


			r   )Zcmf.includeZmodules.servicedesk.fieldsr   rI   r   r   r	   r	   r	   r
   <module>   s   