B
    bEfI                 @   s*   d dl T d dlmZ G dd dejZdS )    )*)cmf_calendar_exclude_intervalc                   sV   e Zd Zdd Zdd Zdd Zdd Zd	d
 Z fddZdd fdd
Z	  Z
S )CmfCalendarExcludeIntervalc             C   s6   | j r| jstddd n| j s2| jr2tddd dS )u   
        Проверяет настройку рабочих часов.
        Время начала и окончания должны быть либо оба установлены, либо оба None
        ug   Не установлено время окончания интервала рабочих часов.T)abortua   Не установлено время начала интервала рабочих часов.N)	from_timeto_time	cmf_alert)self r
   0./common/models/cmf_calendar_exclude_interval.py_check_time_setting   s    z.CmfCalendarExcludeInterval._check_time_settingc             C   s   | j r| jsdS tj| j j| jj\}}tjj| jdd| j	gddgd}x`|D ]X}tj|j j|jj\}}||  kr|ksn ||  kr|krPn qPt
ddd	 qPW dS )
u   
        Проверяет пересечение интервала с другими существующими интервалами
        Nidz!=r   r   )parentfilterfieldsu   Время начала интервала должно быть позже времени окончания предыдущего интервалаT)r   )r   r   modelsCmfCalendarZnormalize_time_intervalvaluer   listr   r   r   )r	   Zcurrent_from_timeZcurrent_to_timeZ	intervalsintervalr   r   r
   r
   r   _check_time_interval   s    


.z/CmfCalendarExcludeInterval._check_time_intervalc             C   s   d}| j r| jrd}tjj| jdd| jgddgd}|rd}|j rL|jrLd}||krx|dkrjtdd	d
 qtdd	d
 n|dkrtdd	d
 dS )u   
        Проверяет тип исключения на основе интервалов рабочих часов
        Znot_workZworkr   z!=r   r   )r   r   r   u  Нельзя добавить дополнительный интервал с рабочими часами для этого исключения, так как в нем установлено нерабочее время. Сначала установите время начала и окончания рабочих часов в существующем интервале или удалите его.T)r   u_  Нельзя добавить дополнительный интервал без рабочих часов для этого исключения, так как в нем используются рабочие часы. Сначала удалите все существующие интервалы рабочих часов исключения.u   В этом исключении уже установлен интервал нерабочего времени. Удалите один из интервалов.N)r   r   r   r   getr   r   r   )r	   Zinterval_typeZcurrent_intervalZcurrent_interval_typer
   r
   r   _check_exclude_type%   s&    



z.CmfCalendarExcludeInterval._check_exclude_typec             C   s.   | j }|  |  |jdd |  dS )u   
        Делает пересчет типа исключения и суммы минут интервалов рабочих часов
        T)Z	only_dataN)r   Z_calc_intervals_total_minutesZ_calc_exclude_typesaveZ_do_calendar_dirty)r	   Zexcluder
   r
   r   _do_exclude_total_minutesE   s
    z4CmfCalendarExcludeInterval._do_exclude_total_minutesc             C   s@   | j js| jjsdS | j js$| jjr<tj| j j| jj| _dS )ua   
        Вычисляет интервал рабочих часов в минутах
        N)r   
is_changedr   r   r   Zget_interval_minutesr   Zinterval_minutes)r	   r
   r
   r   _calc_interval_minutesP   s
    z1CmfCalendarExcludeInterval._calc_interval_minutesc                s@   |    |   |   |   t j||}| jr<|   |S )N)r   r   r   r   superr   r   r   )r	   argskwargsself_obj)	__class__r
   r   r   [   s    zCmfCalendarExcludeInterval.saveF)forcec               s&   t  j|d|i|}|s"|   |S )Nr"   )r   deleter   )r	   r"   r   r   r    )r!   r
   r   r#   i   s    z!CmfCalendarExcludeInterval.delete)__name__
__module____qualname__r   r   r   r   r   r   r#   __classcell__r
   r
   )r!   r   r      s   
 r   N)Zcmf.includeZcommon.fieldsr   r   r
   r
   r
   r   <module>   s   