
    bEfI                     @    d dl T d dlmZ  G d dej                  ZdS )    )*)cmf_calendar_exclude_intervalc                   L     e Zd Zd Zd Zd Zd Zd Z fdZdd fd	
Z	 xZ
S )
CmfCalendarExcludeIntervalc                     | j         r| j        st          dd           dS | j         s| j        rt          dd           dS dS dS )u   
        Проверяет настройку рабочих часов.
        Время начала и окончания должны быть либо оба установлены, либо оба None
        ug   Не установлено время окончания интервала рабочих часов.Tabortua   Не установлено время начала интервала рабочих часов.N)	from_timeto_time	cmf_alertselfs    0./common/models/cmf_calendar_exclude_interval.py_check_time_settingz.CmfCalendarExcludeInterval._check_time_setting   s    
 > 	G$, 	G  HL  M  M  M  M  M  M 	GDL 	Gy  BF  G  G  G  G  G  G	G 	G 	G 	G    c                    | j         r| j        sdS t          j                            | j         j        | j        j                  \  }}t          j                            | j        dd| j	        gddg          }|D ]i}t          j                            |j         j        |j        j                  \  }}||cxk    r|k    sn ||cxk    r|k    rn Xt          dd	           jdS )
u   
        Проверяет пересечение интервала с другими существующими интервалами
        Nid!=r
   r   parentfilterfieldsu   Время начала интервала должно быть позже времени окончания предыдущего интервалаTr   )r
   r   modelsCmfCalendarnormalize_time_intervalvaluer   listr   r   r   )r   current_from_timecurrent_to_time	intervalsintervalr
   r   s          r   _check_time_intervalz/CmfCalendarExcludeInterval._check_time_interval   s;    ~ 	T\ 	F-3-?-W-WN $,"4.6 .6*? 5::$+CGtwBWCNPYBZ ; \ \	 " 	v 	vH!'!3!K!K"((*:*@"B "BIw -88888888I<c<c<c<c\c<c<c<c<c<c iptv v v v	v 	vr   c                 N   d}| j         r	| j        rd}t          j                            | j        dd| j        gddg          }|r]d}|j         r	|j        rd}||k    r,|dk    rt          dd	
           dS t          dd	
           dS |dk    rt          dd	
           dS dS dS )u   
        Проверяет тип исключения на основе интервалов рабочих часов
        not_workworkr   r   r
   r   r   u  Нельзя добавить дополнительный интервал с рабочими часами для этого исключения, так как в нем установлено нерабочее время. Сначала установите время начала и окончания рабочих часов в существующем интервале или удалите его.Tr   u_  Нельзя добавить дополнительный интервал без рабочих часов для этого исключения, так как в нем используются рабочие часы. Сначала удалите все существующие интервалы рабочих часов исключения.u   В этом исключении уже установлен интервал нерабочего времени. Удалите один из интервалов.N)r
   r   r   r   getr   r   r   )r   interval_typecurrent_intervalcurrent_interval_types       r   _check_exclude_typez.CmfCalendarExcludeInterval._check_exclude_type%   s[    #> 	#dl 	#"M!<@@IMtUYU\H]ITV_H` A b b  	a$.!) /.>.F /(.%$55(J66 n vz{ { { { { {
  Q Y]^ ^ ^ ^ ^ ^
 )J66 T[_a a a a a a%	a 	a" 76r   c                     | j         }|                                 |                                 |                    d           |                                 dS )u   
        Делает пересчет типа исключения и суммы минут интервалов рабочих часов
        T)	only_dataN)r   _calc_intervals_total_minutes_calc_exclude_typesave_do_calendar_dirty)r   excludes     r   _do_exclude_total_minutesz4CmfCalendarExcludeInterval._do_exclude_total_minutesE   s[     +--///""$$$t$$$""$$$$$r   c                     | j         j        s| j        j        sdS | j         j        s| j        j        r;t          j                            | j         j        | j        j                  | _        dS dS )ua   
        Вычисляет интервал рабочих часов в минутах
        N)r
   
is_changedr   r   r   get_interval_minutesr   interval_minutesr   s    r   _calc_interval_minutesz1CmfCalendarExcludeInterval._calc_interval_minutesP   s{     ) 	T\-D 	F>$ 	`(? 	`$*$6$K$KDNL`LPLL^%` %`D!!!	` 	`r   c                    |                                   |                                  |                                  |                                   t	                      j        |i |}| j        r|                                  |S )N)r   r7   r"   r*   superr/   r4   r2   )r   argskwargsself_obj	__class__s       r   r/   zCmfCalendarExcludeInterval.save[   s      """##%%%!!###  """577<000? 	-**,,,r   F)forcec                j     t                      j        |d|i|}|s|                                  |S )Nr>   )r9   deleter2   )r   r>   r:   r;   r<   r=   s        r   r@   z!CmfCalendarExcludeInterval.deletei   sA    !577>4?u??? 	-**,,,r   )__name__
__module____qualname__r   r"   r*   r2   r7   r/   r@   __classcell__)r=   s   @r   r   r      s        G G Gv v v*a a a@	% 	% 	%	` 	` 	`     #(           r   r   N)cmf.includecommon.fieldsr   r    r   r   <module>rH      se        7 7 7 7 7 7j j j j j!>!Y j j j j jr   