U
    deB'                     @   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   s   |sg }dD ]}||kr| | q| j|d|i|}|rtdd |}g }t|D ]6}t|d t|jd t|jd | | qV|S t|S )N)parentslasla_goalr   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>read)appendlistfiltercmfutilacl_set_policyr   r   )clsr   argskwargsZfieldresitemsobjr   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   )r   taskr   Z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_goals2   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  t|d |  d S )Npausedwithin_calendar_hours)r   r&   r   r   Fwrite)r    r   r#   r,   pause_interval_stop_timer(   r'   r)   r%   r   r   r   r   
start_timer   r   )r   r$   r*   r   r   r   r   start_cycle@   s*    




zCmfSDeskSlaCycle.start_cyclec                 C   s&   d| _ | j  | j  |   d S NT)r,   pause_interval_start_timer(   r'   r)   selfr   r   r   pause[   s    

zCmfSDeskSlaCycle.pausec                 C   s   | j   |   d S r	   )r&   r(   r)   r4   r   r   r   stopa   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-   r3   r/   Zchanges_history)supersave_preload_fields)r5   r   	__class__r   r   r:   e   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_intervalsr9   r)   )r5   r   r   r;   r   r   r)   r   s    zCmfSDeskSlaCycle.savec                 C   s   d S r	   r   r4   r   r   r   rB   }   s    z&CmfSDeskSlaCycle._calc_changes_historyc                 C   s   | j r| jrd | _ d | _d S r	   )r3   r/   r4   r   r   r   rC      s    z'CmfSDeskSlaCycle._clear_pause_intervalsc                 C   s>   |  dg | jr:| jr:|  j| jj| jj| jj7  _d S )Nr8   )Zload_fieldsr3   r/   paused_timer   calendarZcalc_work_pause_durationvaluer4   r   r   r   r=      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   rE   calc_non_working_pause_durationr0   rF   r'   r   rD   datetimeZ	timedeltabreach_time)r5   non_working_timeZdeltar   r   r   r>      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   rE   rG   r0   rF   r'   intZtotal_secondsrD   elapsed_timeZelapsed_time__addon_startr(   )r5   rJ   r   r   r   r?      s    
z#CmfSDeskSlaCycle._calc_elapsed_timec                 C   s    | j jj| j | _| j  d S r	   )r   r   rF   rM   Zremaining_timeZremaining_time__addon_startr(   r4   r   r   r   r@      s    z%CmfSDeskSlaCycle._calc_remaining_timec                 C   s   | j j| j  krd| _d S r2   )rI   rF   ZnowZbreachedr4   r   r   r   rA      s    zCmfSDeskSlaCycle._calc_breached)__name__
__module____qualname__classmethodr   staticmethodr%   r+   r1   r6   r7   r:   r)   rB   rC   r=   r>   r?   r@   rA   __classcell__r   r   r;   r   r      s&   


			r   )Zcmf.includeZmodules.servicedesk.fieldsr   rH   r!   r   r   r   r   r   <module>   s   