private async Task <bool> PodeCriarAulaNoPeriodo(DateTime dataAula, long tipoCalendarioId, string ueCodigo, string dreCodigo)
        {
            if (dataAula.Year != DateTime.Now.Year)
            {
                var periodoEscolarDaAula = await repositorioPeriodoEscolar.ObterPorTipoCalendarioData(tipoCalendarioId, dataAula);

                if (periodoEscolarDaAula == null)
                {
                    throw new NegocioException("Não foi possível localizar o período escolar da aula.");
                }


                var hoje = DateTime.Today;

                var tipodeEventoReabertura = ObterTipoEventoFechamentoBimestre();

                if (await repositorioEvento.TemEventoNosDiasETipo(hoje, hoje, (TipoEvento)tipodeEventoReabertura.Codigo, tipoCalendarioId, ueCodigo, dreCodigo))
                {
                    var fechamentoReabertura = await repositorioFechamentoReabertura.ObterReaberturaFechamentoBimestrePorDataReferencia(periodoEscolarDaAula.Bimestre, hoje, tipoCalendarioId, dreCodigo, ueCodigo);

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

            return(true);
        }
Example #2
0
        private async Task <PeriodoEscolar> ObterPeriodoEscolarFechamentoReabertura(long tipoCalendarioId, Ue ue, int bimestre)
        {
            var periodoFechamento = await servicoPeriodoFechamento.ObterPorTipoCalendarioDreEUe(tipoCalendarioId, ue.Dre, ue);

            var periodoFechamentoBimestre = periodoFechamento?.FechamentosBimestres.FirstOrDefault(x => x.Bimestre == bimestre);

            if (periodoFechamento == null || periodoFechamentoBimestre == null)
            {
                var hoje = DateTime.Today;
                var tipodeEventoReabertura = ObterTipoEventoFechamentoBimestre();

                if (await repositorioEvento.TemEventoNosDiasETipo(hoje, hoje, (TipoEvento)tipodeEventoReabertura.Codigo, tipoCalendarioId, ue.CodigoUe, ue.Dre.CodigoDre))
                {
                    var fechamentoReabertura = await repositorioFechamentoReabertura.ObterReaberturaFechamentoBimestrePorDataReferencia(bimestre, hoje, tipoCalendarioId, ue.Dre.CodigoDre, ue.CodigoUe);

                    if (fechamentoReabertura == null)
                    {
                        throw new NegocioException($"Não localizado período de fechamento em aberto para turma informada no {bimestre}º Bimestre");
                    }

                    return((await repositorioPeriodoEscolar.ObterPorTipoCalendario(tipoCalendarioId)).FirstOrDefault(a => a.Bimestre == bimestre));
                }
            }

            return(periodoFechamentoBimestre?.PeriodoEscolar);
        }
Example #3
0
        private async Task <bool> ValidaDatasETiposDeEventos(Evento evento, bool dataConfirmada, Usuario usuario, IEnumerable <PeriodoEscolar> periodos)
        {
            var devePassarPorWorkflow = false;

            if (evento.TipoEvento.Codigo == (int)TipoEvento.FechamentoBimestre)
            {
                return(false);
            }

            if (evento.TipoEvento.Codigo == (int)TipoEvento.LiberacaoExcepcional)
            {
                evento.PodeCriarEventoLiberacaoExcepcional(usuario, dataConfirmada, periodos);
            }
            else
            {
                if (evento.EhTipoEventoFechamento())
                {
                    throw new NegocioException("Não é possível criar eventos do tipo selecionado.");
                }

                if (evento.TipoEvento.Codigo == (long)TipoEvento.Recesso || evento.TipoEvento.Codigo == (long)TipoEvento.ReposicaoNoRecesso)
                {
                    return(devePassarPorWorkflow);
                }
                else
                {
                    var temEventoLiberacaoExcepcional = await repositorioEvento.TemEventoNosDiasETipo(evento.DataInicio.Date, evento.DataFim.Date, TipoEvento.LiberacaoExcepcional, evento.TipoCalendarioId, evento.UeId, evento.DreId);

                    if (await repositorioEvento.TemEventoNosDiasETipo(evento.DataInicio.Date, evento.DataFim.Date, TipoEvento.ReposicaoNoRecesso, evento.TipoCalendarioId, string.Empty, string.Empty))
                    {
                        if (evento.TipoEvento.LocalOcorrencia == EventoLocalOcorrencia.UE)
                        {
                            if (temEventoLiberacaoExcepcional)
                            {
                                return(true);
                            }

                            if (evento.TipoEvento.Codigo == (long)TipoEvento.ReposicaoDoDia || evento.TipoEvento.Codigo == (long)TipoEvento.ReposicaoDeAula)
                            {
                                return(devePassarPorWorkflow);
                            }
                            else
                            {
                                throw new NegocioException($"O tipo de evento '{((TipoEvento)evento.TipoEvento.Codigo).GetAttribute<DisplayAttribute>().Name}' não pode ser cadastrado no recesso.");
                            }
                        }
                        else
                        {
                            return(devePassarPorWorkflow);
                        }
                    }
                    else
                    {
                        var estaNoPeriodoEscolar = periodos.Any(c => c.PeriodoInicio.Date <= evento.DataInicio.Date && c.PeriodoFim.Date >= evento.DataFim.Date);

                        if (estaNoPeriodoEscolar)
                        {
                            var temEventoSuspensaoAtividades = await repositorioEvento.TemEventoNosDiasETipo(evento.DataInicio.Date, evento.DataFim.Date, TipoEvento.SuspensaoAtividades, evento.TipoCalendarioId, evento.UeId, evento.DreId, escopoRetroativo : true);

                            var temEventoFeriado = await repositorioEvento.TemEventoNosDiasETipo(evento.DataInicio.Date, evento.DataFim.Date, TipoEvento.Feriado, evento.TipoCalendarioId, string.Empty, string.Empty);

                            if ((temEventoFeriado || temEventoSuspensaoAtividades || evento.DataInicio.FimDeSemana() || evento.DataFim.FimDeSemana()) && evento.Letivo == EventoLetivo.Sim)
                            {
                                if (temEventoLiberacaoExcepcional)
                                {
                                    return(true);
                                }
                                else
                                {
                                    if (temEventoFeriado)
                                    {
                                        throw new NegocioException("Não é possível cadastrar o evento pois há feriado na data selecionada.");
                                    }
                                    else if (temEventoSuspensaoAtividades)
                                    {
                                        throw new NegocioException("Não é possível cadastrar o evento pois há evento de suspensão de atividades na data informada.");
                                    }
                                    else if (evento.DataInicio.DayOfWeek == DayOfWeek.Sunday)
                                    {
                                        throw new NegocioException("Não é possível cadastrar o evento letivo no domingo.");
                                    }
                                }
                            }
                        }
                        else
                        {
                            if (evento.TipoEvento.Codigo == (long)TipoEvento.OrganizacaoEscolar || evento.TipoEvento.Codigo == (long)TipoEvento.RecreioNasFerias)
                            {
                                return(devePassarPorWorkflow);
                            }
                            else
                            {
                                if (temEventoLiberacaoExcepcional)
                                {
                                    return(true);
                                }
                                else if (evento.TipoEvento.Codigo == (long)TipoEvento.Outros)
                                {
                                    return(devePassarPorWorkflow);
                                }
                                else
                                {
                                    throw new NegocioException($"O tipo de evento '{((TipoEvento)evento.TipoEvento.Codigo).GetAttribute<DisplayAttribute>().Name}' não pode ser cadastrado fora do período escolar.");
                                }
                            }
                        }
                    }
                }
            }

            return(devePassarPorWorkflow);
        }