public bool ValidarSeEhDiaLetivo(DateTime data, long tipoCalendarioId, string dreId, string ueId)
        {
            var periodoEscolar = repositorioPeriodoEscolar.ObterPorTipoCalendarioData(tipoCalendarioId, data.Local());

            if (periodoEscolar == null)
            {
                return(false);
            }

            if (!repositorioEvento.EhEventoLetivoPorTipoDeCalendarioDataDreUe(tipoCalendarioId, data.Local(), dreId, ueId))
            {
                return(false);
            }

            return(data.DayOfWeek != DayOfWeek.Saturday && data.DayOfWeek != DayOfWeek.Sunday);
        }
        public async Task <PodeCadastrarAulaPorDataRetornoDto> Handle(ObterPodeCadastrarAulaPorDataQuery request, CancellationToken cancellationToken)
        {
            var hoje = DateTime.Today;

            // Periodo Escolar
            var periodoEscolar = await repositorioTipoCalendario.ObterPeriodoEscolarPorCalendarioEData(request.TipoCalendarioId, request.DataAula);

            if (periodoEscolar == null)
            {
                return(new PodeCadastrarAulaPorDataRetornoDto(false, "Não é possível cadastrar aula fora do periodo escolar"));
            }

            // Domingo
            if (request.DataAula.FimDeSemana())
            {
                // Evento Letivo
                var temEventoLetivoNoDia = repositorioEvento.EhEventoLetivoPorTipoDeCalendarioDataDreUe(request.TipoCalendarioId, request.DataAula, request.DreCodigo, request.UeCodigo);
                if (!temEventoLetivoNoDia)
                {
                    return(new PodeCadastrarAulaPorDataRetornoDto(false, "Não é possível cadastrar aula no domingo"));
                }
            }

            // Evento não letivo
            var temEventoNaoLetivoNoDia = repositorioEvento.EhEventoNaoLetivoPorTipoDeCalendarioDataDreUe(request.TipoCalendarioId, request.DataAula, request.DreCodigo, request.UeCodigo);

            if (temEventoNaoLetivoNoDia)
            {
                return(new PodeCadastrarAulaPorDataRetornoDto(false, "Apenas é possível consultar este registro pois existe um evento de dia não letivo"));
            }

            if (request.DataAula.Year == hoje.Year)
            {
                if (request.DataAula <= hoje)
                {
                    // Consultar fechamento só se não for data no bimestre corrente
                    var periodoEscolarAtual = await repositorioTipoCalendario.ObterPeriodoEscolarPorCalendarioEData(request.TipoCalendarioId, hoje);

                    if (periodoEscolarAtual == null || periodoEscolar.Id != periodoEscolarAtual.Id)
                    {
                        var periodoFechamento = await repositorioPeriodoFechamento.ObterPeriodoPorUeDataBimestreAsync(request.Turma.UeId, hoje, periodoEscolar.Bimestre);

                        if (periodoFechamento != null)
                        {
                            if (periodoFechamento.ExisteFechamentoEmAberto(hoje))
                            {
                                return(new PodeCadastrarAulaPorDataRetornoDto(true));
                            }
                        }
                        else
                        {
                            FechamentoReabertura periodoFechamentoReabertura = await ObterPeriodoFechamentoReabertura(request.TipoCalendarioId, request.Turma.UeId, hoje);

                            return(periodoFechamentoReabertura != null ?
                                   new PodeCadastrarAulaPorDataRetornoDto(true) :
                                   new PodeCadastrarAulaPorDataRetornoDto(false, "Apenas é possível consultar este registro pois o período deste bimestre não está aberto."));
                        }
                    }
                }
                else
                {
                    return(new PodeCadastrarAulaPorDataRetornoDto(true));
                }
            }
            else
            {
                FechamentoReabertura periodoFechamentoReabertura = await ObterPeriodoFechamentoReabertura(request.TipoCalendarioId, request.Turma.UeId, hoje);

                return(periodoFechamentoReabertura != null ?
                       new PodeCadastrarAulaPorDataRetornoDto(true) :
                       new PodeCadastrarAulaPorDataRetornoDto(false, "Apenas é possível consultar este registro pois o período deste bimestre não está aberto."));
            }

            return(new PodeCadastrarAulaPorDataRetornoDto(true));
        }
Example #3
0
 public Task <bool> Handle(ObterTemEventoLetivoPorCalendarioEDiaQuery request, CancellationToken cancellationToken)
 {
     return(Task.FromResult(repositorioEvento.EhEventoLetivoPorTipoDeCalendarioDataDreUe(request.TipoCalendarioId, request.DataParaVerificar, request.DreCodigo, request.UeCodigo)));
 }