U
    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}|D ]X}tj|j j|jj\}}||  kr|ksn ||  kr|krNn qNt
ddd	 qNdS )
u   
        Проверяет пересечение интервала с другими существующими интервалами
        Nid!=r   r   parentfilterZfieldsu   Время начала интервала должно быть позже времени окончания предыдущего интервалаTr   )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   r   r   r   r   u  Нельзя добавить дополнительный интервал с рабочими часами для этого исключения, так как в нем установлено нерабочее время. Сначала установите время начала и окончания рабочих часов в существующем интервале или удалите его.Tr   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_minutesr
   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   