public void Deve_Incluir_Calendario_Fundamental_E_Retornar_Acima_200_dias_letivos()
        {
            MontarCabecalho();
            TipoCalendarioDto tipoCalendario = AdicionarTipoCalendario(ano);

            var jsonParaPost = new StringContent(JsonConvert.SerializeObject(tipoCalendario), Encoding.UTF8, "application/json");
            var postResult   = _fixture._clientApi.PostAsync("api/v1/calendarios/tipos", jsonParaPost).Result;

            Assert.True(postResult.IsSuccessStatusCode);

            if (postResult.IsSuccessStatusCode)
            {
                PeriodoEscolarListaDto periodoEscolar = AdicionarPerioEscolar(ano);

                var jsonParaPost2 = new StringContent(JsonConvert.SerializeObject(periodoEscolar), Encoding.UTF8, "application/json");
                var postResult2   = _fixture._clientApi.PostAsync("api/v1/periodo-escolar", jsonParaPost2).Result;
                Assert.True(postResult2.IsSuccessStatusCode);

                var filtro = new FiltroDiasLetivosDTO()
                {
                    TipoCalendarioId = 1
                };

                var filtroPeriodoEscolar = new StringContent(JsonConvert.SerializeObject(filtro), Encoding.UTF8, "application/json");
                var diasLetivosResponse  = _fixture._clientApi.PostAsync("api/v1/calendarios/dias-letivos", filtroPeriodoEscolar).Result;
                if (diasLetivosResponse.IsSuccessStatusCode)
                {
                    var diasLetivos = JsonConvert.DeserializeObject <DiasLetivosDto>(diasLetivosResponse.Content.ReadAsStringAsync().Result);
                    Assert.True(diasLetivos.Dias > 0);
                }
            }
        }
        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 async Task <IActionResult> CalcularDiasLetivos(FiltroDiasLetivosDTO filtro, [FromServices] IObterDiasLetivosPorCalendarioUseCase useCase)
 {
     return(Ok(await useCase.Executar(filtro)));
 }
 public IActionResult CalcularDiasLetivos(FiltroDiasLetivosDTO filtro)
 {
     return(Ok(comandosDiasLetivos.CalcularDiasLetivos(filtro)));
 }
Exemple #5
0
 public async Task <DiasLetivosDto> Executar(FiltroDiasLetivosDTO param)
 {
     return(await mediator.Send(new ObterQuantidadeDiasLetivosPorCalendarioQuery(param.TipoCalendarioId, param.DreId, param.UeId)));
 }