public ObterPeriodoFechamentoBimestrePorDreUeEDataQuery(ModalidadeTipoCalendario modalidadeTipoCalendario, DateTime dataInicio, int bimestre, long?dreId = null, long?ueId = null)
 {
     DataInicio = dataInicio;
     DreId      = dreId;
     UeId       = ueId;
     Bimestre   = bimestre;
     ModalidadeTipoCalendario = modalidadeTipoCalendario;
 }
Exemplo n.º 2
0
        private async Task <int> ObterDiasLetivos(ModalidadeTipoCalendario modalidade, int anoLetivo)
        {
            var parametros = await mediator.Send(new ObterParametrosSistemaPorTipoEAnoQuery(TipoParametroSistema.EjaDiasLetivos, anoLetivo));

            return(Convert.ToInt32(modalidade == ModalidadeTipoCalendario.EJA ?
                                   await ObterParametroDiasLetivosEja(parametros) :
                                   await ObterParametroDiasLetivosFundMedio(parametros)));
        }
        private async Task VerificaPeriodosFechamentoEncerrando(ModalidadeTipoCalendario modalidade, int diasParaEncerramento)
        {
            var periodosEncerrando = await mediator.Send(new ObterPeriodosFechamentoBimestrePorDataFinalQuery(modalidade, DateTime.Now.Date.AddDays(diasParaEncerramento)));

            foreach (var periodoEncerrando in periodosEncerrando)
            {
                await mediator.Send(new ExecutaNotificacaoAndamentoFechamentoCommand(periodoEncerrando, modalidade));
            }
        }
Exemplo n.º 4
0
        private async Task VerificaPeriodosFechamentoEncerrando(ModalidadeTipoCalendario modalidade, int diasParaEncerramento, double percentualFechamentoInsuficiente)
        {
            var periodosEncerrando = await mediator.Send(new ObterPeriodosFechamentoBimestrePorDataFinalQuery(modalidade, DateTime.Now.Date.AddDays(diasParaEncerramento)));

            var grupoPeriodosDre = periodosEncerrando.GroupBy(a => a.PeriodoFechamento.Ue.DreId);

            foreach (var periodosDre in grupoPeriodosDre)
            {
                await mediator.Send(new ExecutaNotificacaoUeFechamentoInsuficientesCommand(periodosDre, modalidade, percentualFechamentoInsuficiente));
            }
        }
        public async Task <PeriodoEscolar> ObterPorModalidadeAnoEDataFinal(ModalidadeTipoCalendario modalidade, int ano, DateTime dataFim)
        {
            var query = @"select p.* 
                    from periodo_escolar p
                   inner join tipo_calendario t on t.id = p.tipo_calendario_id
                   where not t.excluido
                     and t.modalidade = @modalidade
                     and t.ano_letivo = @ano
                     and p.periodo_fim = @dataFim";

            return(await database.Conexao.QueryFirstOrDefaultAsync <PeriodoEscolar>(query, new { modalidade = (int)modalidade, ano, dataFim }));
        }
        public async Task <long> ObterPeriodoEscolarIdPorTurmaId(long turmaId, ModalidadeTipoCalendario modalidadeTipoCalendario, DateTime dataReferencia)
        {
            var query = new StringBuilder(@"select pe.id
                                              from periodo_escolar pe
                                              left join tipo_calendario tc on pe.tipo_calendario_id = tc.id 
                                              left join turma t on t.ano_letivo = tc.ano_letivo and id = @turmaId
                                              where tc.modalidade = @modalidade
                                              and pe.periodo_inicio <= @dataReferencia and pe.periodo_fim >= @dataReferencia
                                              and not tc.excluido ");

            return(await database.Conexao.QueryFirstOrDefaultAsync <long>(query.ToString(), new { turmaId, modalidade = (int)modalidadeTipoCalendario, dataReferencia }));
        }
        public async Task <int> ObterBimestreAtualAsync(string codigoTurma, ModalidadeTipoCalendario modalidade, DateTime dataReferencia)
        {
            var query = new StringBuilder(@"select pe.bimestre
                                              from periodo_escolar pe
                                              left join tipo_calendario tc on pe.tipo_calendario_id = tc.id 
                                              left join turma t on t.ano_letivo = tc.ano_letivo and turma_id = @codigoTurma
                                              where tc.modalidade = @modalidade
                                              and pe.periodo_inicio <= @dataReferencia and pe.periodo_fim >= @dataReferencia
                                              and not tc.excluido ");

            return(await database.Conexao.QueryFirstOrDefaultAsync <int>(query.ToString(), new { codigoTurma, modalidade = (int)modalidade, dataReferencia }));
        }
Exemplo n.º 8
0
        public TipoCalendario BuscarPorAnoLetivoEModalidade(int anoLetivo, ModalidadeTipoCalendario modalidade)
        {
            StringBuilder query = new StringBuilder();

            query.AppendLine("select *");
            query.AppendLine("from tipo_calendario");
            query.AppendLine("where excluido = false");
            query.AppendLine("and ano_letivo = @anoLetivo");
            query.AppendLine("and modalidade = @modalidade");

            return(database.Conexao.QueryFirstOrDefault <TipoCalendario>(query.ToString(), new { anoLetivo, modalidade = (int)modalidade }));
        }
Exemplo n.º 9
0
        private async Task NotificarUe(Ue ue, ModalidadeTipoCalendario modalidadeTipoCalendario)
        {
            var anoAtual    = DateTime.Now.Year;
            var descricaoUe = $"{ue.TipoEscola.ShortName()} {ue.Nome} ({ue.Dre.Abreviacao})";
            var titulo      = $"Cadastro de período de fechamento pendente {descricaoUe}";
            var mensagem    = $"O período de fechamento da <b>{descricaoUe}</b> ainda não foi cadastrado para o tipo de calendário <b>{modalidadeTipoCalendario.Name()} {anoAtual}</b>.";

            await mediator.Send(new EnviarNotificacaoCommand(titulo, mensagem, NotificacaoCategoria.Aviso, NotificacaoTipo.Calendario, ObterCargosGestaoEscola(), ue.Dre.CodigoDre, ue.CodigoUe));

            var admins = await ObterUsuariosAdms(ue);

            if (admins != null && admins.Any())
            {
                await mediator.Send(new EnviarNotificacaoUsuariosCommand(titulo, mensagem, NotificacaoCategoria.Aviso, NotificacaoTipo.Calendario, admins, ue.Dre.CodigoDre, ue.CodigoUe));
            }
        }
Exemplo n.º 10
0
        public static Modalidade[] ObterModalidadesTurma(this ModalidadeTipoCalendario modalidadeTipoCalendario)
        {
            switch (modalidadeTipoCalendario)
            {
            case ModalidadeTipoCalendario.FundamentalMedio:
                return(new[] { Modalidade.Fundamental, Modalidade.Medio });

            case ModalidadeTipoCalendario.EJA:
                return(new[] { Modalidade.EJA });

            case ModalidadeTipoCalendario.Infantil:
                return(new[] { Modalidade.Infantil });

            default:
                throw new NegocioException("ModalidadeTipoCalendario não implementada.");
            }
        }
Exemplo n.º 11
0
        public static string ObterPorAnoLetivoEModalidade(ModalidadeTipoCalendario modalidade, int semestre = 0)
        {
            StringBuilder query = new StringBuilder();

            query.AppendLine("select *");
            query.AppendLine("from tipo_calendario t");
            query.AppendLine("where t.excluido = false");
            query.AppendLine("and t.ano_letivo = @anoLetivo");
            query.AppendLine("and t.modalidade = @modalidade");

            if (modalidade == ModalidadeTipoCalendario.EJA)
            {
                var periodoReferencia = semestre == 1 ? "periodo_inicio < @dataReferencia" : "periodo_fim > @dataReferencia";
                query.AppendLine($"and exists(select 0 from periodo_escolar p where tipo_calendario_id = t.id and {periodoReferencia})");
            }
            return(query.ToString());
        }
        public async Task <PeriodoEscolar> ObterUltimoPeriodoAsync(int anoLetivo, ModalidadeTipoCalendario modalidadeTipoCalendario, int semestre)
        {
            var query = PeriodoEscolarConsultas.ObterUltimoPeriodo(modalidadeTipoCalendario, semestre);

            DateTime dataReferencia = DateTime.MinValue;

            if (modalidadeTipoCalendario == ModalidadeTipoCalendario.EJA)
            {
                dataReferencia = new DateTime(anoLetivo, semestre == 1 ? 6 : 7, 1);
            }

            var parametros = new { AnoLetivo = anoLetivo, Modalidade = (int)modalidadeTipoCalendario, DataReferencia = dataReferencia };

            using (var conexao = new NpgsqlConnection(variaveisAmbiente.ConnectionStringSgp))
            {
                return(await conexao.QueryFirstOrDefaultAsync <PeriodoEscolar>(query, parametros));
            }
        }
Exemplo n.º 13
0
        public bool UsuarioPodeCriarAulaNaUeTurmaEModalidade(Aula aula, ModalidadeTipoCalendario modalidade)
        {
            var query = new StringBuilder("select 1 from v_abrangencia where turma_id = @turmaId and ue_codigo = @ueId ");

            if (modalidade == ModalidadeTipoCalendario.EJA)
            {
                query.AppendLine($"and modalidade_codigo = {(int)Modalidade.EJA} ");
            }
            else
            {
                query.AppendLine($"and (modalidade_codigo = {(int)Modalidade.Fundamental} or modalidade_codigo = {(int)Modalidade.Medio}) ");
            }

            return(database.Conexao.QueryFirstOrDefault <bool>(query.ToString(), new
            {
                aula.TurmaId,
                aula.UeId
            }));
        }
        internal static string ObterUltimoPeriodo(ModalidadeTipoCalendario modalidade, int semestre = 0)
        {
            var query = new StringBuilder(@"select p.bimestre, 
                        p.periodo_fim PeriodoFim, p.periodo_inicio PeriodoInicio
                            from tipo_calendario t
                         inner join periodo_escolar p on p.tipo_calendario_id = t.id
                          where t.excluido = false and t.situacao
                            and t.ano_letivo = @anoLetivo
                            and t.modalidade = @modalidade ");

            if (modalidade == ModalidadeTipoCalendario.EJA)
            {
                var periodoReferencia = semestre == 1 ? "periodo_inicio < @dataReferencia" : "periodo_fim > @dataReferencia";
                query.AppendLine($"and exists(select 0 from periodo_escolar p where tipo_calendario_id = t.id and {periodoReferencia})");
            }
            query.AppendLine("order by bimestre desc ");
            query.AppendLine("limit 1");

            return(query.ToString());
        }
        private async Task NotificarDre(IGrouping <long, Ue> grupoDre, ModalidadeTipoCalendario modalidadeTipoCalendario, int ano)
        {
            var dre      = grupoDre.First().Dre;
            var titulo   = $"UEs que não cadastraram o período de fechamento - {modalidadeTipoCalendario.Name()} {ano} ({dre.Abreviacao})";
            var mensagem = new StringBuilder($"As UEs abaixo ainda não cadastraram o período de fechamento para o tipo de calendário <b>{modalidadeTipoCalendario.Name()} {ano} ({dre.Abreviacao})</b>.<br/>");

            mensagem.Append("<ul>");
            foreach (var ue in grupoDre)
            {
                mensagem.Append($"<li>{ue.TipoEscola.ShortName()} {ue.Nome}</li>");
            }
            mensagem.Append("</ul>");

            var adminsDre = await ObterUsuariosDre(dre.CodigoDre);

            if (adminsDre != null && adminsDre.Any())
            {
                await mediator.Send(new EnviarNotificacaoUsuariosCommand(titulo, mensagem.ToString(), NotificacaoCategoria.Aviso, NotificacaoTipo.Calendario, adminsDre, dre.CodigoDre));
            }
        }
        public IEnumerable <AlunoFaltosoBimestreDto> ObterAlunosFaltososBimestre(ModalidadeTipoCalendario modalidade, double percentualFrequenciaMinimo, int bimestre, int?anoLetivo)
        {
            var query = new StringBuilder();

            query.AppendLine("select dre.dre_id as DreCodigo, dre.Abreviacao as DreAbreviacao, dre.Nome as DreNome, ue.tipo_escola as TipoEscola, ue.ue_id as UeCodigo, ue.nome as UeNome");
            query.AppendLine(", t.turma_id as TurmaCodigo, t.nome as TurmaNome, t.modalidade_codigo as TurmaModalidade, fa.codigo_aluno as AlunoCodigo");
            query.AppendLine(", ((fa.total_ausencias::numeric - fa.total_compensacoes::numeric ) / fa.total_aulas::numeric)*100 PercentualFaltas");
            query.AppendLine("from frequencia_aluno fa");
            query.AppendLine("inner join turma t on t.turma_id = fa.turma_id");
            query.AppendLine("inner join ue on ue.id = t.ue_id ");
            query.AppendLine("inner join dre on dre.id = ue.dre_id");
            query.AppendLine("inner join (select codigo_aluno, max(id) as maiorId from frequencia_aluno where not excluido group by codigo_aluno ) m on m.codigo_aluno = fa.codigo_aluno and m.maiorId = fa.id");
            query.AppendLine("where fa.tipo = 2");
            query.AppendLine("and fa.bimestre = @bimestre");

            if (anoLetivo.HasValue)
            {
                query.AppendLine("and extract(year from fa.periodo_inicio) = @anoLetivo");
            }

            query.AppendLine("and ((fa.total_ausencias::numeric - fa.total_compensacoes::numeric ) / fa.total_aulas::numeric) > (1 -(@percentualFrequenciaMinimo::numeric / 100::numeric)) ");

            if (modalidade == ModalidadeTipoCalendario.EJA)
            {
                query.AppendLine("and t.modalidade_codigo = 3");
            }
            else if (modalidade == ModalidadeTipoCalendario.Infantil)
            {
                query.AppendLine("and t.modalidade_codigo = 1");
            }
            else
            {
                query.AppendLine("and t.modalidade_codigo in (5,6)");
            }


            return(database.Conexao.Query <AlunoFaltosoBimestreDto>(query.ToString(), new { bimestre, anoLetivo, percentualFrequenciaMinimo }));
        }
        public TipoCalendario BuscarPorAnoLetivoEModalidade(int anoLetivo, ModalidadeTipoCalendario modalidade, int semestre = 0)
        {
            StringBuilder query = new StringBuilder();

            query.AppendLine("select *");
            query.AppendLine("from tipo_calendario t");
            query.AppendLine("where t.excluido = false");
            query.AppendLine("and t.ano_letivo = @anoLetivo");
            query.AppendLine("and t.modalidade = @modalidade");

            DateTime dataReferencia = DateTime.MinValue;

            if (modalidade == ModalidadeTipoCalendario.EJA)
            {
                var periodoReferencia = semestre == 1 ? "periodo_inicio < @dataReferencia" : "periodo_fim > @dataReferencia";
                query.AppendLine($"and exists(select 0 from periodo_escolar p where tipo_calendario_id = t.id and {periodoReferencia})");

                // 1/6/ano ou 1/7/ano dependendo do semestre
                dataReferencia = new DateTime(anoLetivo, semestre == 1 ? 6 : 7, 1);
            }

            return(database.Conexao.QueryFirstOrDefault <TipoCalendario>(query.ToString(), new { anoLetivo, modalidade = (int)modalidade, dataReferencia }));
        }
        public async Task <PeriodoEscolar> ObterUltimoBimestreAsync(int anoLetivo, ModalidadeTipoCalendario modalidade, int semestre = 0)
        {
            var query = new StringBuilder(@"select p.* 
                            from tipo_calendario t
                         inner join periodo_escolar p on p.tipo_calendario_id = t.id
                          where t.excluido = false and t.situacao
                            and t.ano_letivo = @anoLetivo
                            and t.modalidade = @modalidade ");

            DateTime dataReferencia = DateTime.MinValue;

            if (modalidade == ModalidadeTipoCalendario.EJA)
            {
                var periodoReferencia = semestre == 1 ? "periodo_inicio < @dataReferencia" : "periodo_fim > @dataReferencia";
                query.AppendLine($"and exists(select 0 from periodo_escolar p where tipo_calendario_id = t.id and {periodoReferencia})");

                // 1/6/ano ou 1/7/ano dependendo do semestre
                dataReferencia = new DateTime(anoLetivo, semestre == 1 ? 6 : 7, 1);
            }
            query.AppendLine("order by bimestre desc ");
            query.AppendLine("limit 1");

            return(await database.Conexao.QueryFirstOrDefaultAsync <PeriodoEscolar>(query.ToString(), new { anoLetivo, modalidade = (int)modalidade, dataReferencia }));
        }
 private async Task <long> ObterIdTipoCalendario(ModalidadeTipoCalendario modalidade, int anoLetivo, int semestre)
 => await mediator.Send(new ObterIdTipoCalendarioPorAnoLetivoEModalidadeQuery(anoLetivo, modalidade, semestre));
Exemplo n.º 20
0
 public ObterPeriodosFechamentoBimestrePorDataInicioQuery(ModalidadeTipoCalendario modalidade, DateTime dataAbertura)
 {
     Modalidade   = modalidade;
     DataAbertura = dataAbertura;
 }
Exemplo n.º 21
0
 public ExecutaNotificacaoUeFechamentoInsuficientesCommand(IGrouping <long, PeriodoFechamentoBimestre> periodosEncerrando, ModalidadeTipoCalendario modalidade, double percentualFechamentoInsuficiente)
 {
     PeriodosEncerrando = periodosEncerrando;
     Modalidade         = modalidade;
     PercentualFechamentoInsuficiente = percentualFechamentoInsuficiente;
 }
Exemplo n.º 22
0
 public ExecutaNotificacaoPeriodoFechamentoEncerrandoCommand(PeriodoFechamentoBimestre periodoFechamentoBimestre, ModalidadeTipoCalendario modalidadeTipoCalendario)
 {
     PeriodoFechamentoBimestre = periodoFechamentoBimestre;
     ModalidadeTipoCalendario  = modalidadeTipoCalendario;
 }
Exemplo n.º 23
0
 private bool EhBimestreFinal(ModalidadeTipoCalendario modalidadeTipoCalendario, int bimestre)
 {
     return((bimestre == 2 && modalidadeTipoCalendario == ModalidadeTipoCalendario.EJA) || bimestre == 4);
 }
Exemplo n.º 24
0
        public async Task <IEnumerable <TipoCalendario> > BuscarPorAnoLetivoEModalidade(int anoLetivo, ModalidadeTipoCalendario modalidade, DateTime dataReferencia)
        {
            StringBuilder query = new StringBuilder();

            query.AppendLine("select *");
            query.AppendLine("from tipo_calendario t");
            query.AppendLine("where t.excluido = false");
            query.AppendLine("and t.ano_letivo = @anoLetivo");
            query.AppendLine("and t.modalidade = @modalidade");

            if (modalidade == ModalidadeTipoCalendario.EJA)
            {
                query.AppendLine($"and exists(select 0 from periodo_escolar p where tipo_calendario_id = t.id and @dataReferencia BETWEEN p.periodo_inicio and p.periodo_fim)");
            }

            return(await database.Conexao.QueryAsync <TipoCalendario>(query.ToString(), new { anoLetivo, modalidade = (int)modalidade, dataReferencia }));
        }
        public async Task <PeriodoFechamentoBimestre> ObterPeridoFechamentoBimestrePorDreUeEData(ModalidadeTipoCalendario modalidadeTipoCalendario, DateTime dataInicio, int bimestre, long?dreId, long?ueId)
        {
            var filtroDre = dreId.HasValue ? "p.dre_id = @dreId" : "p.dre_id is null";
            var filtroUe  = ueId.HasValue ? "p.ue_id = @ueId" : "p.ue_id is null";

            var query = $@"select b.*, p.*, e.*
                      from periodo_fechamento p 
                     inner join periodo_fechamento_bimestre b on b.periodo_fechamento_id = p.Id
                     inner join periodo_escolar e on e.id = b.periodo_escolar_id
                     inner join tipo_calendario t on t.id = e.tipo_calendario_id
                     where not t.excluido
                       and e.bimestre = @bimestre
                       and t.modalidade = @modalidade
                       and b.inicio_fechamento = @dataInicio 
                       and {filtroDre} 
                       and {filtroUe}";

            return((await database.Conexao.QueryAsync <PeriodoFechamentoBimestre, PeriodoFechamento, PeriodoEscolar, PeriodoFechamentoBimestre>(query,
                                                                                                                                                (periodoFechamentoBimestre, periodoFechamento, periodoEscolar) =>
            {
                periodoFechamentoBimestre.PeriodoFechamento = periodoFechamento;
                periodoFechamentoBimestre.PeriodoEscolar = periodoEscolar;

                return periodoFechamentoBimestre;
            }, new { modalidade = (int)modalidadeTipoCalendario, dataInicio, bimestre, dreId, ueId })).FirstOrDefault());
        }
        private async Task NotificarResultadoInsatisfatorio(IEnumerable <ParametrosSistema> parametro, ModalidadeTipoCalendario modalidadeTipoCalendario)
        {
            var parametroPendenciaAusencia = parametro.FirstOrDefault(c => c.Ativo && c.Nome == "DiasNotificacaoResultadoInsatisfatorio");

            if (parametroPendenciaAusencia != null)
            {
                await mediator.Send(new NotificarResultadoInsatisfatorioCommand(int.Parse(parametroPendenciaAusencia.Valor), (long)modalidadeTipoCalendario));
            }
        }
Exemplo n.º 27
0
 public ObterUEsSemPeriodoFechamentoQuery(long periodoEscolarId, int ano, ModalidadeTipoCalendario modalidadeTipoCalendario)
 {
     PeriodoEscolarId = periodoEscolarId;
     Ano = ano;
     ModalidadeTipoCalendario = modalidadeTipoCalendario;
 }
Exemplo n.º 28
0
 public ObterPeriodoEscolarPorModalidadeAnoEDataFinalQuery(ModalidadeTipoCalendario modalidadeTipoCalendario, int ano, DateTime dataFim)
 {
     Modalidade = modalidadeTipoCalendario;
     Ano        = ano;
     DataFim    = dataFim;
 }
Exemplo n.º 29
0
 public ObterPeriodosFechamentoBimestrePorDataFinalQuery(ModalidadeTipoCalendario modalidade, DateTime dataEncerramento)
 {
     Modalidade       = modalidade;
     DataEncerramento = dataEncerramento;
 }
 public ObterUEsPorModalidadeCalendarioQuery(ModalidadeTipoCalendario modalidadeTipoCalendario)
 {
     ModalidadeTipoCalendario = modalidadeTipoCalendario;
 }