Пример #1
0
        public async Task <IEnumerable <EventosAulasCalendarioDto> > ObterEventosAulasMensais(FiltroEventosAulasCalendarioDto filtro)
        {
            List <DateTime> diasLetivos    = new List <DateTime>();
            List <DateTime> diasNaoLetivos = new List <DateTime>();
            List <DateTime> totalDias      = new List <DateTime>();

            if (!filtro.TodasTurmas && string.IsNullOrWhiteSpace(filtro.TurmaId))
            {
                throw new NegocioException("É necessario informar uma turma para pesquisa");
            }

            var usuario = await servicoUsuario.ObterUsuarioLogado();

            string rf = usuario.TemPerfilGestaoUes() ? string.Empty : usuario.CodigoRf;

            var diasPeriodoEscolares = comandosDiasLetivos.BuscarDiasLetivos(filtro.TipoCalendarioId);
            var diasAulas            = await repositorioAula.ObterAulas(filtro.TipoCalendarioId, filtro.TurmaId, filtro.UeId, rf);

            var eventos = repositorioEvento.ObterEventosPorTipoDeCalendarioDreUe(filtro.TipoCalendarioId, filtro.DreId, filtro.UeId, filtro.EhEventoSme);

            var diasEventosNaoLetivos = comandosDiasLetivos.ObterDias(eventos, diasNaoLetivos, EventoLetivo.Nao);
            var diasEventosLetivos    = comandosDiasLetivos.ObterDias(eventos, diasLetivos, EventoLetivo.Sim);
            var aulas = ObterDias(diasAulas);

            diasEventosNaoLetivos.RemoveAll(x => !diasPeriodoEscolares.Contains(x));
            aulas.RemoveAll(x => !diasPeriodoEscolares.Contains(x));

            totalDias.AddRange(aulas);
            totalDias.AddRange(diasEventosLetivos);
            totalDias.AddRange(diasEventosNaoLetivos);

            return(MapearParaDto(totalDias));
        }
        public DiasLetivosDto CalcularDiasLetivos(FiltroDiasLetivosDTO filtro)
        {
            //se for letivo em um fds que esteja no calendário somar
            bool estaAbaixo = false;

            //buscar os dados
            var periodoEscolar        = repositorioPeriodoEscolar.ObterPorTipoCalendario(filtro.TipoCalendarioId);
            var diasLetivosCalendario = BuscarDiasLetivos(periodoEscolar);
            var eventos        = repositorioEvento.ObterEventosPorTipoDeCalendarioDreUe(filtro.TipoCalendarioId, filtro.DreId, filtro.UeId, false, false);
            var tipoCalendario = repositorioTipoCalendario.ObterPorId(filtro.TipoCalendarioId);

            if (tipoCalendario == null)
            {
                throw new NegocioException("Tipo de calendario não encontrado");
            }

            var anoLetivo = tipoCalendario.AnoLetivo;

            List <DateTime> diasEventosNaoLetivos = new List <DateTime>();
            List <DateTime> diasEventosLetivos    = new List <DateTime>();

            //transforma em dias
            diasEventosNaoLetivos = ObterDias(eventos, diasEventosNaoLetivos, EventoLetivo.Nao);
            diasEventosLetivos    = ObterDias(eventos, diasEventosLetivos, EventoLetivo.Sim);

            //adicionar os finais de semana letivos se houver
            //se não houver dia letivo em fds não precisa adicionar
            foreach (var dia in diasEventosLetivos.Where(x => !EhDiaUtil(x)))
            {
                if (periodoEscolar.Any(w => w.PeriodoInicio <= dia && dia <= w.PeriodoFim))
                {
                    diasLetivosCalendario.Add(dia);
                }
            }

            //retirar eventos não letivos que não estão no calendário
            diasEventosNaoLetivos = diasEventosNaoLetivos.Where(w => diasLetivosCalendario.Contains(w)).ToList();
            //retirar eventos não letivos que não contenha letivo
            diasEventosNaoLetivos = diasEventosNaoLetivos.Where(w => !diasEventosLetivos.Contains(w)).ToList();

            //subtrai os dias nao letivos
            var diasLetivos = diasLetivosCalendario.Distinct().Count() - diasEventosNaoLetivos.Distinct().Count();

            //verificar se eh eja ou nao
            var diasLetivosPermitidos = Convert.ToInt32(tipoCalendario.Modalidade == ModalidadeTipoCalendario.EJA ?
                                                        repositorioParametrosSistema.ObterValorPorTipoEAno(TipoParametroSistema.EjaDiasLetivos, anoLetivo) :
                                                        repositorioParametrosSistema.ObterValorPorTipoEAno(TipoParametroSistema.FundamentalMedioDiasLetivos, anoLetivo));

            estaAbaixo = diasLetivos < diasLetivosPermitidos;

            return(new DiasLetivosDto
            {
                Dias = diasLetivos,
                EstaAbaixoPermitido = estaAbaixo
            });
        }
 public Task <IEnumerable <Evento> > Handle(ObterEventosPorTipoDeCalendarioDreUeQuery request, CancellationToken cancellationToken)
 => Task.FromResult(repositorioEvento.ObterEventosPorTipoDeCalendarioDreUe(request.TipoCalendarioId, request.DreCodigo, request.UeCodigo, request.EhEventoSME, request.FiltroDreUe));