Source code for src.cardapio.base.api.validators

"""Validadores de negocio da API base de cardapio."""

import datetime

from rest_framework import serializers

from src.cardapio.base.models import (
    HorarioDoComboDoTipoDeAlimentacaoPorUnidadeEscolar,
    TipoAlimentacao,
)
from src.escola.models import Escola, PeriodoEscolar


[docs] def hora_inicio_nao_pode_ser_maior_que_hora_final( hora_inicial: datetime.time, hora_final: datetime.time ): """Valida se o horario inicial e anterior ao horario final. Args: hora_inicial (datetime.time): Horario inicial informado. hora_final (datetime.time): Horario final informado. Returns: bool: ``True`` quando a faixa de horario e valida. Raises: ValidationError: Quando ``hora_inicial`` e maior ou igual a ``hora_final``. """ if hora_inicial >= hora_final: raise serializers.ValidationError( "Hora Inicio não pode ser maior do que hora final" ) return True
[docs] def escola_nao_pode_cadastrar_dois_combos_iguais( escola: Escola, tipo_alimentacao: TipoAlimentacao, periodo_escolar: PeriodoEscolar ): """Impede a criacao de horarios duplicados para a mesma combinacao. Garante que cada escola tenha no maximo um horario cadastrado para um determinado tipo de alimentacao em um mesmo periodo escolar. Args: escola (Escola): Escola dona da configuracao. tipo_alimentacao (TipoAlimentacao): Tipo de alimentacao configurado. periodo_escolar (PeriodoEscolar): Periodo escolar da configuracao. Returns: bool: ``True`` quando nao existe duplicidade para a combinacao. Raises: ValidationError: Quando ja existe um horario com a mesma escola, tipo de alimentacao e periodo escolar. """ horario_alimento_por_escola_e_periodo = ( HorarioDoComboDoTipoDeAlimentacaoPorUnidadeEscolar.objects.filter( escola=escola, tipo_alimentacao=tipo_alimentacao, periodo_escolar=periodo_escolar, ).exists() ) if horario_alimento_por_escola_e_periodo: raise serializers.ValidationError( "Já existe um horário registrado para esse tipo de alimentacao neste período e escola" ) return True