Skip to content

Commit

Permalink
Merge pull request #14766 from prefeiturasp/pre-prod
Browse files Browse the repository at this point in the history
Pre prod
  • Loading branch information
Jailsvs authored Jul 23, 2024
2 parents ac0c3db + 93328fd commit 84d0857
Show file tree
Hide file tree
Showing 15 changed files with 297 additions and 194 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -117,115 +117,8 @@ private async Task<IEnumerable<ConselhoClasseParecerConclusivo>> ObterPareceresD
}

public async Task<bool> VerificaNotasTodosComponentesCurriculares(string alunoCodigo, Turma turma, long? periodoEscolarId)
{
int bimestre;
long[] conselhosClassesIds;
string[] turmasCodigos;
var turmasItinerarioEnsinoMedio = (await mediator.Send(ObterTurmaItinerarioEnsinoMedioQuery.Instance)).ToList();

if ((turma.DeveVerificarRegraRegulares() || turmasItinerarioEnsinoMedio.Any(a => a.Id == (int)turma.TipoTurma)) && !(periodoEscolarId.EhNulo() && turma.EhEJA()))
{
var tiposTurmasParaConsulta = new List<int> { (int)turma.TipoTurma };

tiposTurmasParaConsulta.AddRange(turma.ObterTiposRegularesDiferentes());
tiposTurmasParaConsulta.AddRange(turmasItinerarioEnsinoMedio.Select(s => s.Id));

var periodoEscolar = periodoEscolarId.HasValue ?
await mediator.Send(new ObterPeriodoEscolarePorIdQuery(periodoEscolarId.Value)) :
(await mediator.Send(new ObterPeriodosEscolaresPorAnoEModalidadeTurmaQuery(turma.ModalidadeCodigo, turma.AnoLetivo, turma.Semestre))).OrderBy(p => p.Bimestre).LastOrDefault();

if(periodoEscolar.NaoEhNulo())
{
var turmasCodigosEOL = await mediator
.Send(new ObterTurmaCodigosAlunoPorAnoLetivoAlunoTipoTurmaQuery(turma.AnoLetivo, alunoCodigo, tiposTurmasParaConsulta, dataReferencia: periodoEscolar.PeriodoFim, ueCodigo: turma.Ue.CodigoUe, semestre: turma.Semestre != 0 ? turma.Semestre : null));

if (turmasCodigosEOL.NaoEhNulo() && turmasCodigosEOL.Any())
{
var turmasComMatriculasValidas = await mediator.Send(new ObterTurmasComMatriculasValidasQuery(alunoCodigo, turmasCodigosEOL, DateTimeExtension.HorarioBrasilia().Date, DateTimeExtension.HorarioBrasilia().Date));
if (turmasComMatriculasValidas.Any())
turmasCodigosEOL = turmasComMatriculasValidas.ToArray();
}

var turmasEOL = turmasCodigosEOL.NaoEhNulo() && turmasCodigosEOL.Any() ? await mediator.Send(new ObterTurmasPorCodigosQuery(turmasCodigosEOL)) : null;

turmasCodigosEOL = turmasEOL.NaoEhNulo() && turmasEOL.Any() ? turmasEOL.Where(x => x.Ano == turma.Ano).Select(x => x.CodigoTurma).ToArray() : null;

if (turma.Historica == true && turmasCodigosEOL.NaoEhNulo() && turmasCodigosEOL.Any())
{
var turmasCodigosHistorico = await mediator.Send(new ObterTurmasPorCodigosQuery(turmasCodigosEOL));

if (turmasCodigosHistorico.NaoEhNulo() && turmasCodigosHistorico.Any(x => x.EhTurmaHistorica))
{
turmasCodigos = turmasCodigosEOL;
turmasCodigos = turmasCodigos
.Concat(new string[] { turma.CodigoTurma }).ToArray();
}
else
turmasCodigos = new string[] { turma.CodigoTurma };
}
else
turmasCodigos = turmasCodigosEOL.NaoEhNulo() && turmasCodigosEOL.Any() ? turmasCodigosEOL
.Concat(new string[] { turma.CodigoTurma }).ToArray() : new string[] { turma.CodigoTurma };
}
else turmasCodigos = new string[] { turma.CodigoTurma };
}
else turmasCodigos = new string[] { turma.CodigoTurma };

turmasCodigos = turmasCodigos.Distinct().ToArray();
=> await mediator.Send(new VerificaNotasTodosComponentesCurricularesQuery(alunoCodigo, turma));

if (periodoEscolarId.HasValue)
{
var periodoEscolar = await mediator
.Send(new ObterPeriodoEscolarePorIdQuery(periodoEscolarId.Value));

if (periodoEscolar.EhNulo())
throw new NegocioException("Não foi possível localizar o período escolar");

bimestre = periodoEscolar.Bimestre;

conselhosClassesIds = await mediator
.Send(new ObterConselhoClasseIdsPorTurmaEPeriodoQuery(turmasCodigos, periodoEscolar?.Id));
}
else
{
bimestre = 0;
conselhosClassesIds = Enumerable.Empty<long>().ToArray();
}

var notasParaVerificar = new List<NotaConceitoBimestreComponenteDto>();
if (conselhosClassesIds.NaoEhNulo())
{
foreach (var conselhosClassesId in conselhosClassesIds)
{
var notasParaAdicionar = await mediator.Send(new ObterConselhoClasseNotasAlunoQuery(conselhosClassesId, alunoCodigo, bimestre));
notasParaVerificar.AddRange(notasParaAdicionar);
}
}

if (periodoEscolarId.HasValue)
notasParaVerificar.AddRange(await mediator.Send(new ObterNotasFechamentosPorTurmasCodigosBimestreQuery(turmasCodigos, alunoCodigo, bimestre)));
else
{
var todasAsNotas = await mediator.Send(new ObterNotasFinaisBimestresAlunoQuery(turmasCodigos, alunoCodigo));

if (todasAsNotas.NaoEhNulo() && todasAsNotas.Any())
notasParaVerificar.AddRange(todasAsNotas.Where(a => a.Bimestre.EhNulo()));
}

var componentesCurriculares = await ObterComponentesTurmas(turmasCodigos, turma.EnsinoEspecial, turma.TurnoParaComponentesCurriculares);
var disciplinasDaTurma = await mediator
.Send(new ObterComponentesCurricularesPorIdsQuery(componentesCurriculares.Select(x => x.CodigoComponenteCurricular).Distinct().ToArray()));

// Checa se todas as disciplinas da turma receberam nota
var disciplinasLancamNota = disciplinasDaTurma.Where(c => c.LancaNota && c.GrupoMatrizNome.NaoEhNulo());
foreach (var componenteCurricular in disciplinasLancamNota)
{
if (!notasParaVerificar.Any(c => c.ComponenteCurricularCodigo == componenteCurricular.CodigoComponenteCurricular))
return false;
}

return true;
}

private async Task<IEnumerable<DisciplinaDto>> ObterComponentesTurmas(string[] turmasCodigo, bool ehEnsinoEspecial, int turnoParaComponentesCurriculares)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,10 +27,13 @@ public async Task<IEnumerable<string>> Handle(ObterTurmasComMatriculasValidasQue
var matriculasAluno = await ObterMatriculasAlunoTurma(codTurma, request.AlunoCodigo, request.PeriodoInicio, cancellationToken);
if (matriculasAluno.NaoEhNulo() || matriculasAluno.Any())
{
Func<Task<Turma>> fncInstanciarTurma = async () => await mediator.Send(new ObterTurmaPorCodigoQuery(codTurma));
if (matriculasAluno.Any(m => m.CodigoTurma.ToString() == codTurma &&
((m.PossuiSituacaoAtiva() && m.DataMatricula <= request.PeriodoFim)
|| (!m.PossuiSituacaoAtiva() && m.DataSituacao >= request.PeriodoInicio && m.DataSituacao <= request.PeriodoFim)
|| (!m.PossuiSituacaoAtiva() && m.DataMatricula <= request.PeriodoFim && m.DataSituacao > request.PeriodoFim))))
|| (!m.PossuiSituacaoAtiva() && m.DataMatricula <= request.PeriodoFim && m.DataSituacao > request.PeriodoFim))
&& !(m.PossuiSituacaoDispensadoTurmaEdFisica(fncInstanciarTurma))
))
turmasCodigosComMatriculasValidas.Add(codTurma);
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,48 +23,7 @@ public VerificaNotasTodosComponentesCurricularesQueryHandler(IMediator mediator)

public async Task<bool> Handle(VerificaNotasTodosComponentesCurricularesQuery request, CancellationToken cancellationToken)
{
string[] turmasCodigos;

var turmasItinerarioEnsinoMedio = (await mediator.Send(ObterTurmaItinerarioEnsinoMedioQuery.Instance, cancellationToken)).ToList();

if (request.Turma.DeveVerificarRegraRegulares() || turmasItinerarioEnsinoMedio.Any(a => a.Id == (int)request.Turma.TipoTurma))
{
var tiposTurmas = new List<int> { (int)request.Turma.TipoTurma };

tiposTurmas.AddRange(request.Turma.ObterTiposRegularesDiferentes());
tiposTurmas.AddRange(turmasItinerarioEnsinoMedio.Select(s => s.Id).Where(c => tiposTurmas.All(x => x != c)));

var turmasCodigosEol = await mediator.Send(new ObterTurmaCodigosAlunoPorAnoLetivoAlunoTipoTurmaQuery(request.Turma.AnoLetivo, request.AlunoCodigo, tiposTurmas,
dataReferencia: request.PeriodoEscolar?.PeriodoFim, semestre: request.Turma.EhEJA() ? request.Turma.Semestre : null), cancellationToken);

if (request.Historico.HasValue && request.Historico.Value)
{
var turmasCodigosHistorico = await mediator.Send(new ObterTurmasPorCodigosQuery(turmasCodigosEol), cancellationToken);

if (turmasCodigosHistorico.Any(x => x.EhTurmaHistorica))
{
turmasCodigos = turmasCodigosEol;
turmasCodigos = !turmasCodigosEol.Contains(request.Turma.CodigoTurma) ? turmasCodigos.Concat(new[] { request.Turma.CodigoTurma }).ToArray() : turmasCodigosEol;
}
else
turmasCodigos = new[] { request.Turma.CodigoTurma };
}
else
turmasCodigos = !turmasCodigosEol.Contains(request.Turma.CodigoTurma) ? turmasCodigosEol.Concat(new[] { request.Turma.CodigoTurma }).ToArray() : turmasCodigosEol;

if (turmasCodigos.Length > 0)
{
var turmas = await mediator.Send(new ObterTurmasPorCodigosQuery(turmasCodigos.ToArray()));

if (turmas.Select(t => t.TipoTurma).Distinct().Count() == 1 && request.Turma.ModalidadeCodigo != Modalidade.Medio)
turmasCodigos = new string[] { request.Turma.CodigoTurma };
else if (ValidaPossibilidadeMatricula2TurmasRegularesNovoEM(turmas, request.Turma))
turmasCodigos = new string[] { request.Turma.CodigoTurma };
}
}
else
turmasCodigos = new[] { request.Turma.CodigoTurma };

string[] turmasCodigos = await ObterTurmasAluno(request, cancellationToken);
var conselhosClassesIds = await mediator.Send(new ObterConselhoClasseIdsPorTurmaEBimestreQuery(turmasCodigos, request.Bimestre), cancellationToken);

var notasParaVerificar = new List<NotaConceitoBimestreComponenteDto>();
Expand Down Expand Up @@ -98,6 +57,45 @@ public async Task<bool> Handle(VerificaNotasTodosComponentesCurricularesQuery re
return disciplinasLancamNota.All(componenteCurricular => notasParaVerificar.Any(c => c.ComponenteCurricularCodigo == componenteCurricular.CodigoComponenteCurricular));
}

private async Task<string[]> ObterTurmasAluno(VerificaNotasTodosComponentesCurricularesQuery request, CancellationToken cancellationToken)
{
string[] turmasCodigos = new[] { request.Turma.CodigoTurma };
var turmasItinerarioEnsinoMedio = (await mediator.Send(ObterTurmaItinerarioEnsinoMedioQuery.Instance, cancellationToken)).ToList();
if (request.Turma.DeveVerificarRegraRegulares()
|| turmasItinerarioEnsinoMedio.Any(a => a.Id == (int)request.Turma.TipoTurma))
{
var tiposTurmas = new List<int> { (int)request.Turma.TipoTurma };
tiposTurmas.AddRange(request.Turma.ObterTiposRegularesDiferentes());
tiposTurmas.AddRange(turmasItinerarioEnsinoMedio.Select(s => s.Id).Where(c => tiposTurmas.All(x => x != c)));

var turmasCodigosEol = await mediator.Send(new ObterTurmaCodigosAlunoPorAnoLetivoAlunoTipoTurmaQuery(request.Turma.AnoLetivo, request.AlunoCodigo, tiposTurmas,
dataReferencia: request.PeriodoEscolar?.PeriodoFim, semestre: request.Turma.EhEJA() ? request.Turma.Semestre : null), cancellationToken);

if (request.Historico.HasValue && request.Historico.Value)
{
var turmasCodigosHistorico = await mediator.Send(new ObterTurmasPorCodigosQuery(turmasCodigosEol), cancellationToken);
if (turmasCodigosHistorico.Any(x => x.EhTurmaHistorica))
{
turmasCodigos = turmasCodigosEol;
turmasCodigos = !turmasCodigosEol.Contains(request.Turma.CodigoTurma) ? turmasCodigos.Concat(new[] { request.Turma.CodigoTurma }).ToArray() : turmasCodigosEol;
}
}
else
turmasCodigos = !turmasCodigosEol.Contains(request.Turma.CodigoTurma) ? turmasCodigosEol.Concat(new[] { request.Turma.CodigoTurma }).ToArray() : turmasCodigosEol;

if (turmasCodigos.Any())
{
var turmas = await mediator.Send(new ObterTurmasPorCodigosQuery(turmasCodigos.ToArray()));
if (turmas.Select(t => t.TipoTurma).Distinct().Count() == 1
&& request.Turma.ModalidadeCodigo != Modalidade.Medio)
turmasCodigos = new string[] { request.Turma.CodigoTurma };
else if (ValidaPossibilidadeMatricula2TurmasRegularesNovoEM(turmas, request.Turma))
turmasCodigos = new string[] { request.Turma.CodigoTurma };
}
};
return turmasCodigos;
}

private static string[] DefinirTurmasConsideradasDeAcordoComMatricula(IEnumerable<AlunoPorTurmaResposta> matriculasDoAluno, Dominio.PeriodoEscolar periodoEscolar, string[] turmasCodigos)
{
if (periodoEscolar.NaoEhNulo())
Expand All @@ -106,7 +104,10 @@ private static string[] DefinirTurmasConsideradasDeAcordoComMatricula(IEnumerabl
where ((m.Ativo && m.DataMatricula.Date < periodoEscolar.PeriodoFim) ||
(m.Inativo && m.DataMatricula.Date < periodoEscolar.PeriodoFim && m.DataSituacao.Date >= periodoEscolar.PeriodoInicio)) &&
m.CodigoSituacaoMatricula != SituacaoMatriculaAluno.VinculoIndevido
select m.CodigoTurma).Distinct();
&& turmasCodigos.Contains(m.CodigoTurma.ToString())
select m.CodigoTurma.ToString()).Distinct();
if (turmasConsideradas.Any())
return turmasConsideradas.ToArray();
}
else
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -84,9 +84,12 @@ where componentesCurricularesDoDia.Contains(disciplina.DisciplinaId.ToString())
}

var aulasId = aulasDoDia.Select(a => a.Id).ToArray();
if (turma.ModalidadeCodigo == Modalidade.EJA)
if (turma.EhEJA()
|| turma.EhMedioNoturno())
{
var aulas = aulasDoDia.Where(a => !a.EhTecnologiaAprendizagem);
var aulas = aulasDoDia.Where(a => !(a.EhAulaCompartilhada
|| (turma.EhEJA() && a.EhTecnologiaAprendizagem)
|| (turma.EhMedioNoturno() && a.EhTecAprendizagemELeitura)));
aulasId = aulas.NaoEhNulo() && aulas.Any() ? aulas.Select(a => a.Id).ToArray() : null;
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,29 +1,29 @@
using SME.SGP.Dominio;
using SME.SGP.Dominio.Entidades;
using SME.SGP.Dominio.Enumerados;
using SME.SGP.Dominio.Interfaces;
using SME.SGP.Infra;
using SME.SGP.Infra.Interface;
using SME.SGP.Infra.Interfaces;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;

namespace SME.SGP.Dados.Repositorios
{
public class RepositorioConselhoClasseParecerConclusivoConsulta : RepositorioBase<ConselhoClasseParecerConclusivo>, IRepositorioConselhoClasseParecerConclusivo
{
private const char ANO_IDENTIFICACAO_TURMA_BILINGUE_OU_INFANTIL_LIBRAS = 'S';
private const string ANO_IDENTIFICACAO_TURMA_TECNICA_P = "P", ANO_IDENTIFICACAO_TURMA_TECNICA_Q = "Q";

public RepositorioConselhoClasseParecerConclusivoConsulta(ISgpContextConsultas database, IServicoAuditoria servicoAuditoria) : base(database, servicoAuditoria)
{
}

public async Task<IEnumerable<ConselhoClasseParecerConclusivo>> ObterListaPorTurmaIdAsync(long turmaId, DateTime dataConsulta)
{
var where = "t.id = @parametro";

return await ObterListaPorTurma(where, turmaId, dataConsulta);
}

Expand All @@ -48,19 +48,26 @@ private async Task<IEnumerable<ConselhoClasseParecerConclusivo>> ObterListaPorTu
{
var sql = string.Format(ObterSqlParecerConclusivoTurma(), where);

var param = new { parametro, dataConsulta };
var param = new
{
parametro,
dataConsulta,
modalidadeEja = (int)Modalidade.EJA,
anoBilingueOuInfantilLibras = ANO_IDENTIFICACAO_TURMA_BILINGUE_OU_INFANTIL_LIBRAS,
anosTurmasTecnicas = new string[] { ANO_IDENTIFICACAO_TURMA_TECNICA_P, ANO_IDENTIFICACAO_TURMA_TECNICA_Q }
};

return await database.Conexao.QueryAsync<ConselhoClasseParecerConclusivo>(sql, param);
}

private string ObterSqlParecerConclusivoTurma()
private static string ObterSqlParecerConclusivoTurma()
{
return @"select ccp.* from conselho_classe_parecer ccp
inner join conselho_classe_parecer_ano ccpa on ccp.id = ccpa.parecer_id
inner join turma t on ccpa.modalidade = t.modalidade_codigo
and ((t.ano = 'S' and ccpa.ano_turma = 1) OR cast(ccpa.ano_turma as varchar) = t.ano)
and ((t.modalidade_codigo = 3 and t.etapa_eja = ccpa.etapa_eja)
or (t.modalidade_codigo <> 3 and ccpa.etapa_eja is null))
and ((t.ano = @anoBilingueOuInfantilLibras and ccpa.ano_turma = 1) or (t.ano = any(@anosTurmasTecnicas) and ccpa.ano_turma = 1) or cast(ccpa.ano_turma as varchar) = t.ano)
and ((t.modalidade_codigo = @modalidadeEja and t.etapa_eja = ccpa.etapa_eja)
or (t.modalidade_codigo <> @modalidadeEja and ccpa.etapa_eja is null))
where {0} and ccpa.inicio_vigencia <= @dataConsulta and (ccpa.fim_vigencia >= @dataConsulta or ccpa.fim_vigencia is null)";
}

Expand Down
Loading

0 comments on commit 84d0857

Please sign in to comment.