
    q[9i4                     D    d dl  d dlmZ  G d dej                        Zy)    )*)cmf_calendar_workweek_intervalc                   \     e Zd Zd Zd Zd Zd Zd Zd Z fdZ	 fdZ
d	d
 fd
Z xZS )CmfCalendarWorkWeekIntervalc                     | 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    1./common/models/cmf_calendar_workweek_interval.py_check_time_settingz/CmfCalendarWorkWeekInterval._check_time_setting   sK    
 >>$,,  HL  MDLLy  BF  G %1    c                    | j                   j                  s| j                  j                  r.| j                   r"| j                  r| j                  j                  ryt
        j                  j                  | j                   j                  | j                  j                        \  }}t
        j                  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day_weekfilterfieldsu   Время начала интервала должно быть позже времени окончания предыдущего интервала.Tr   )r
   
is_changedr   r   is_nullmodelsCmfCalendarnormalize_time_intervalvaluer   listr   r   r   )r   current_from_timecurrent_to_time	intervalsintervalr
   r   s          r   _check_time_intervalz0CmfCalendarWorkWeekInterval._check_time_interval   s.    **dll.E.E4<<DMM<Q<Q-3-?-?-W-WNN  $,,"4"4.6*? 66;;4;;EI]]DH$PTPWPWCXDOQZC[ < ]	 " 	wH!'!3!3!K!K""(((*:*:*@*@"BIw -88I<c\c<c jquw	wr   c                    | j                   j                  ryt        j                  j	                  | j
                  | j                   dd| j                  gdg      }|ri|j                  j                  }|| j                  j                  k7  r&|dk(  rt        dd	       |d
k(  rt        dd	       yy|dk(  rt        dd	       yyy)uz   
        Проверяет совпадение типов интервалов одного дня недели
        Nr   r   interval_typer   not_worku  Нельзя добавить дополнительный интервал с рабочими часами в этот день недели, так как он является нерабочим днем. Сначала установите время начала и окончания рабочих часов в существующем интервале дня недели или удалите его.Tr   use_set_hoursu  Нельзя добавить дополнительный интервал без рабочих часов в этот день недели, так как он является рабочим днем и в нем используются рабочие часы. Сначала удалите все существующие интервалы рабочих часов дня недели.u   Этот день недели является нерабочим днем и может использовать только один интервал без рабочих часов. Удалите один из интервалов.)
r   r   r   r   getr   r   r'   r   r   )r   r$   r'   s      r   _check_interval_typez0CmfCalendarWorkWeekInterval._check_interval_type'   s     ==  5599CG==BFdggAVBQAR : T $2288M 2 2 8 88 J. B JNO !O3 | DHI 4 !J. T[_a / r   c                     | j                   }|j                          |j                  d       |j                          y)u   
        Делает пересчет дней рабочей недели (пересчет типа дня и суммы минут рабочих интервалов)
        T)	only_dataN)r   _calc_workweek_dayssave_do_calendar_dirty)r   workweeks     r   _do_workweek_daysz-CmfCalendarWorkWeekInterval._do_workweek_daysE   s3     ;;$$&%##%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
   r   r   r   r   get_interval_minutesr   interval_minutesr   s    r   _calc_interval_minutesz2CmfCalendarWorkWeekInterval._calc_interval_minutesO   sr     ))T\\-D-D>>$$(?(?$*$6$6$K$KDNNL`L`LPLLL^L^%`D! )@r   c                     | j                   j                  rd| _        y| j                  r| j                  rd| _        y| j                  s| j                  sd| _        yyy)u   
        Высисляет тип интервала в зависимости от настроек времени рабочих часов
        defaultNr)   r(   )r   r   r'   r
   r   r   s    r   _calc_interval_typez/CmfCalendarWorkWeekInterval._calc_interval_typeZ   sM     ==  !*D>>dll!0D!+D )5r   c                 j   | j                          | j                          | j                          | j                          | j	                          t        |   |i |}| j                  j                  s,| j                  j                  s| j                  j                  r| j                          |S )N)r   r6   r9   r%   r+   superr/   r5   r   r   r'   r2   )r   argskwargsself_obj	__class__s       r   r/   z CmfCalendarWorkWeekInterval.saveg   s      "##%  "!!#!!#7<00!!,,==++%%00""$r   c                 *    t         |          g dz   S )N)r   r
   r   )r;   save_preload_fields)r   r?   s    r   rA   z/CmfCalendarWorkWeekInterval.save_preload_fieldsx   s    w*, 0
 
 	
r   F)forcec                N    t        |   |d|i|}|s| j                          |S )NrB   )r;   deleter2   )r   rB   r<   r=   r>   r?   s        r   rD   z"CmfCalendarWorkWeekInterval.delete   s/    7>4?u??""$r   )__name__
__module____qualname__r   r%   r+   r2   r6   r9   r/   rA   rD   __classcell__)r?   s   @r   r   r      s>    Gw.a<&	`,"
 #(  r   r   N)cmf.includecommon.fieldsr   r    r   r   <module>rL      s      8@"@"\"\ @r   