public ObterPeriodoFechamentoBimestrePorDreUeEDataQuery(ModalidadeTipoCalendario modalidadeTipoCalendario, DateTime dataInicio, int bimestre, long?dreId = null, long?ueId = null) { DataInicio = dataInicio; DreId = dreId; UeId = ueId; Bimestre = bimestre; ModalidadeTipoCalendario = modalidadeTipoCalendario; }
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)); } }
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 })); }
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 })); }
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)); } }
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."); } }
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)); } }
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));
public ObterPeriodosFechamentoBimestrePorDataInicioQuery(ModalidadeTipoCalendario modalidade, DateTime dataAbertura) { Modalidade = modalidade; DataAbertura = dataAbertura; }
public ExecutaNotificacaoUeFechamentoInsuficientesCommand(IGrouping <long, PeriodoFechamentoBimestre> periodosEncerrando, ModalidadeTipoCalendario modalidade, double percentualFechamentoInsuficiente) { PeriodosEncerrando = periodosEncerrando; Modalidade = modalidade; PercentualFechamentoInsuficiente = percentualFechamentoInsuficiente; }
public ExecutaNotificacaoPeriodoFechamentoEncerrandoCommand(PeriodoFechamentoBimestre periodoFechamentoBimestre, ModalidadeTipoCalendario modalidadeTipoCalendario) { PeriodoFechamentoBimestre = periodoFechamentoBimestre; ModalidadeTipoCalendario = modalidadeTipoCalendario; }
private bool EhBimestreFinal(ModalidadeTipoCalendario modalidadeTipoCalendario, int bimestre) { return((bimestre == 2 && modalidadeTipoCalendario == ModalidadeTipoCalendario.EJA) || bimestre == 4); }
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)); } }
public ObterUEsSemPeriodoFechamentoQuery(long periodoEscolarId, int ano, ModalidadeTipoCalendario modalidadeTipoCalendario) { PeriodoEscolarId = periodoEscolarId; Ano = ano; ModalidadeTipoCalendario = modalidadeTipoCalendario; }
public ObterPeriodoEscolarPorModalidadeAnoEDataFinalQuery(ModalidadeTipoCalendario modalidadeTipoCalendario, int ano, DateTime dataFim) { Modalidade = modalidadeTipoCalendario; Ano = ano; DataFim = dataFim; }
public ObterPeriodosFechamentoBimestrePorDataFinalQuery(ModalidadeTipoCalendario modalidade, DateTime dataEncerramento) { Modalidade = modalidade; DataEncerramento = dataEncerramento; }
public ObterUEsPorModalidadeCalendarioQuery(ModalidadeTipoCalendario modalidadeTipoCalendario) { ModalidadeTipoCalendario = modalidadeTipoCalendario; }