
    ~-eI                     D    d dl  d dlmZ  G d dej                        Zy)    )*)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       y| j                   s| j                  rt        dd       yyy)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   sK    
 >>$,,  HL  MDLLy  BF  G %1    c                 8   | j                   r| j                  syt        j                  j	                  | j                   j
                  | j                  j
                        \  }}t        j                  j                  | j                  dd| j                  gddg      }|D ]v  }t        j                  j	                  |j                   j
                  |j                  j
                        \  }}||cxk  r|k  sn ||cxk  r|k  sgn jt        dd	       x y)
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\\-3-?-?-W-WNN  $,,"4"4.6*? 55::$++CGtwwBWCNPYBZ ; \	 " 	vH!'!3!3!K!K""(((*:*:*@*@"BIw -88I<c\c<c iptv	vr   c                 b   d}| j                   r| j                  rd}t        j                  j	                  | j
                  dd| j                  gddg      }|rVd}|j                   r|j                  rd}||k7  r!|dk(  rt        dd	
       yt        dd	
       y|dk(  rt        dd	
       yyy)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     #>>dll"M!<<@@IMtUYU\U\H]ITV_H` A b $.!)).>.F.F(.%$5(J6 n vz{
  Q Y]^
 )J6 T[_a 7# r   c                     | j                   }|j                          |j                          |j                  d       |j	                          y)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                 R   | j                   j                  s| j                  j                  sy| j                   j                  s| j                  j                  rNt        j                  j                  | j                   j                  | j                  j                        | _        yy)ua   
        Вычисляет интервал рабочих часов в минутах
        N)r
   
is_changedr   r   r   get_interval_minutesr   interval_minutesr   s    r   _calc_interval_minutesz1CmfCalendarExcludeInterval._calc_interval_minutesP   sr     ))T\\-D-D>>$$(?(?$*$6$6$K$KDNNL`L`LPLLL^L^%`D! )@r   c                     | j                          | j                          | j                          | j                          t	        |   |i |}| j                  r| j                          |S )N)r   r7   r"   r*   superr/   r4   r2   )r   argskwargsself_obj	__class__s       r   r/   zCmfCalendarExcludeInterval.save[   s^      "##%!!#  "7<00??**,r   F)forcec                N    t        |   |d|i|}|s| j                          |S )Nr>   )r9   deleter2   )r   r>   r:   r;   r<   r=   s        r   r@   z!CmfCalendarExcludeInterval.deletei   s/    7>4?u??**,r   )__name__
__module____qualname__r   r"   r*   r2   r7   r/   r@   __classcell__)r=   s   @r   r   r      s5    Gv*a@	%	` #(  r   r   N)cmf.includecommon.fieldsr   r    r   r   <module>rH      s      7j!>!Y!Y jr   