U
    ~-e                     @   s*   d dl T d dlmZ G dd dejZdS )    )*)cmf_calendar_workweek_intervalc                       s^   e Zd Zd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 )CmfCalendarWorkWeekIntervalc                 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   1./common/models/cmf_calendar_workweek_interval.py_check_time_setting   s    z/CmfCalendarWorkWeekInterval._check_time_settingc                 C   s   | j js| jjr$| j r$| jr$| jjr(dS tj| j j| jj\}}tj	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rjn qjtddd	 qjdS )
u   
        Проверяет пересечение интервала с другими существующими интервалами
        Nid!=r   r   parentday_weekfilterZfieldsu   Время начала интервала должно быть позже времени окончания предыдущего интервала.Tr   )r   
is_changedr   r   is_null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   s4     

 .z0CmfCalendarWorkWeekInterval._check_time_intervalc                 C   s   | j jrdS tjj| j| j dd| jgdgd}|r|jj}|| jjkrp|dkrZt	ddd	 |d
krt	ddd	 n|dkrt	ddd	 dS )uz   
        Проверяет совпадение типов интервалов одного дня недели
        Nr   r   interval_typer   not_worku  Нельзя добавить дополнительный интервал с рабочими часами в этот день недели, так как он является нерабочим днем. Сначала установите время начала и окончания рабочих часов в существующем интервале дня недели или удалите его.Tr   use_set_hoursu  Нельзя добавить дополнительный интервал без рабочих часов в этот день недели, так как он является рабочим днем и в нем используются рабочие часы. Сначала удалите все существующие интервалы рабочих часов дня недели.u   Этот день недели является нерабочим днем и может использовать только один интервал без рабочих часов. Удалите один из интервалов.)
r   r   r   r   getr   r   r   r   r	   )r   r   r   r   r   r   _check_interval_type'   s,    

z0CmfCalendarWorkWeekInterval._check_interval_typec                 C   s&   | j }|  |jdd |  dS )u   
        Делает пересчет дней рабочей недели (пересчет типа дня и суммы минут рабочих интервалов)
        T)Z	only_dataN)r   Z_calc_workweek_dayssaveZ_do_calendar_dirty)r   Zworkweekr   r   r   _do_workweek_daysE   s    z-CmfCalendarWorkWeekInterval._do_workweek_daysc                 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   r   r   r   r   Zget_interval_minutesr   interval_minutesr
   r   r   r   _calc_interval_minutesO   s    z2CmfCalendarWorkWeekInterval._calc_interval_minutesc                 C   s<   | j jrd| _dS | jr&| jr&d| _n| js8| js8d| _dS )u   
        Высисляет тип интервала в зависимости от настроек времени рабочих часов
        defaultNr   r   )r   r   r   r   r   r
   r   r   r   _calc_interval_typeZ   s    z/CmfCalendarWorkWeekInterval._calc_interval_typec                    sZ   |    |   |   |   |   t j||}| jjsN| j	jsN| j
jrV|   |S )N)r   r%   r'   r   r!   superr"   r$   r   r   r   r#   )r   argskwargsself_obj	__class__r   r   r"   g   s    z CmfCalendarWorkWeekInterval.saveF)forcec                   s&   t  j|d|i|}|s"|   |S )Nr.   )r(   deleter#   )r   r.   r)   r*   r+   r,   r   r   r/   x   s    z"CmfCalendarWorkWeekInterval.delete)__name__
__module____qualname__r   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   