U
    nef                     @   s2   d dl Zd dlT d dlmZ G dd dejZdS )    N)*)cmf_calendar_exclude_intervalc                       sH   e Zd Zdd Zdd Zdd Zdd Z fd	d
Z 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   sR   | j js| jjsdS | j r | js&d| _| j js6| jjrNtj| j j| jj| _dS )ua   
        Вычисляет интервал рабочих часов в минутах
        Nr   )r   
is_changedr   Zinterval_minutesr   r   Zget_interval_minutesr   r
   r   r   r   _calc_interval_minutesG   s    z1CmfCalendarExcludeInterval._calc_interval_minutesc                    sV   |    |   |   |   t j||}| jrR| j}|  |	  |  |S N)
r   r   r   r   supersaver   r   Z_calc_intervals_total_minutesZ_calc_exclude_type)r   argskwargsself_objZexclude	__class__r   r   r    U   s    zCmfCalendarExcludeInterval.savec                    s   t  j||}|   |S r   )r   deleteZ_do_exclude_total_minutes)r   r!   r"   r#   r$   r   r   r&   f   s    z!CmfCalendarExcludeInterval.delete)
__name__
__module____qualname__r   r   r   r   r    r&   __classcell__r   r   r$   r   r      s   
 r   )ZdatetimeZdtZcmf.includeZcommon.fieldsr   r   r   r   r   r   <module>   s   