public async Task <bool> ValidarSeEhDiaLetivo(DateTime data, long tipoCalendarioId, string dreId, string ueId) { var periodoEscolar = await repositorioPeriodoEscolar.ObterPorTipoCalendarioData(tipoCalendarioId, data.Local()); if (periodoEscolar == null) { return(false); } if (repositorioEvento.EhEventoNaoLetivoPorTipoDeCalendarioDataDreUe(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)); }
public Task <bool> Handle(ObterTemEventoNaoLetivoPorCalendarioEDiaQuery request, CancellationToken cancellationToken) { return(Task.FromResult(repositorioEvento.EhEventoNaoLetivoPorTipoDeCalendarioDataDreUe(request.TipoCalendarioId, request.DataParaVerificar.Date, request.DreCodigo, request.UeCodigo))); }