private async Task <PeriodoEscolarDto> BuscaPeriodo(Turma turma, int bimestre) { var tipoCalendario = await repositorioTipoCalendario.BuscarPorAnoLetivoEModalidade(turma.AnoLetivo, turma.ModalidadeCodigo == Modalidade.EJA?ModalidadeTipoCalendario.EJA : ModalidadeTipoCalendario.FundamentalMedio); PeriodoEscolarDto periodo = null; // Eja possui 2 calendarios por ano if (turma.ModalidadeCodigo == Modalidade.EJA) { if (turma.Semestre == 1) { periodo = (await consultasPeriodoEscolar.ObterPorTipoCalendario(tipoCalendario.Id)).Periodos .FirstOrDefault(p => p.Bimestre == bimestre && p.PeriodoInicio < new DateTime(turma.AnoLetivo, 6, 1)); } else { periodo = (await consultasPeriodoEscolar.ObterPorTipoCalendario(tipoCalendario.Id)).Periodos .FirstOrDefault(p => p.Bimestre == bimestre && p.PeriodoFim > new DateTime(turma.AnoLetivo, 6, 1)); } } else { periodo = (await consultasPeriodoEscolar.ObterPorTipoCalendario(tipoCalendario.Id)).Periodos .FirstOrDefault(p => p.Bimestre == bimestre); } if (!await consultasTurma.TurmaEmPeriodoAberto(turma, DateTime.Today, bimestre, tipoCalendario: tipoCalendario)) { throw new NegocioException($"Período do {bimestre}º Bimestre não está aberto."); } return(periodo); }
private PeriodoEscolarDto BuscaPeriodo(int anoLetivo, Modalidade modalidadeCodigo, int bimestre, int semestre) { var tipoCalendario = repositorioTipoCalendario.BuscarPorAnoLetivoEModalidade(anoLetivo, modalidadeCodigo == Modalidade.EJA ? ModalidadeTipoCalendario.EJA : ModalidadeTipoCalendario.FundamentalMedio); PeriodoEscolarDto periodo = null; // Eja possui 2 calendarios por ano if (modalidadeCodigo == Modalidade.EJA) { if (semestre == 1) { periodo = consultasPeriodoEscolar.ObterPorTipoCalendario(tipoCalendario.Id).Periodos .FirstOrDefault(p => p.Bimestre == bimestre && p.PeriodoInicio < new DateTime(anoLetivo, 6, 1)); } else { periodo = consultasPeriodoEscolar.ObterPorTipoCalendario(tipoCalendario.Id).Periodos .FirstOrDefault(p => p.Bimestre == bimestre && p.PeriodoFim > new DateTime(anoLetivo, 6, 1)); } } else { periodo = consultasPeriodoEscolar.ObterPorTipoCalendario(tipoCalendario.Id).Periodos .FirstOrDefault(p => p.Bimestre == bimestre); } // TODO alterar verificação para checagem de periodo de fechamento e reabertura do fechamento depois de implementado if (DateTime.Now < periodo.PeriodoInicio || DateTime.Now > periodo.PeriodoFim) { throw new NegocioException($"Período do {bimestre}º Bimestre não está aberto."); } return(periodo); }
private PeriodoEscolar ObterPeriodo(long Id, PeriodoEscolarDto periodo) { var periodoSalvar = repositorioPeriodo.ObterPorId(Id); periodoSalvar.PeriodoInicio = periodo.PeriodoInicio.Date; periodoSalvar.PeriodoFim = periodo.PeriodoFim.Date; return(periodoSalvar); }
private PeriodoEscolar MapearParaDominio(PeriodoEscolarDto periodoDto, long tipoCalendario) { return(new PeriodoEscolar { Bimestre = periodoDto.Bimestre, PeriodoInicio = periodoDto.PeriodoInicio.Date, PeriodoFim = periodoDto.PeriodoFim.Date, TipoCalendarioId = tipoCalendario, Migrado = false, }); }
private IndicativoFrequenciaDto ObterIndicativoFrequencia(AlunoPorTurmaResposta aluno, string disciplinaId, PeriodoEscolarDto bimestre, int percentualAlerta, int percentualCritico) { var frequenciaAluno = repositorioFrequenciaAlunoDisciplinaPeriodo.Obter(aluno.CodigoAluno, disciplinaId, bimestre.PeriodoInicio, bimestre.PeriodoFim, TipoFrequenciaAluno.PorDisciplina); // Frequencia não calculada if (frequenciaAluno == null) { return(null); } int percentualFrequencia = (int)Math.Round(frequenciaAluno.PercentualFrequencia, 0); // Critico if (percentualFrequencia <= percentualCritico) { return new IndicativoFrequenciaDto() { Tipo = TipoIndicativoFrequencia.Critico, Percentual = percentualFrequencia } } ; // Alerta if (percentualFrequencia <= percentualAlerta) { return new IndicativoFrequenciaDto() { Tipo = TipoIndicativoFrequencia.Alerta, Percentual = percentualFrequencia } } ; return(null); }
public MarcadorFrequenciaDto ObterMarcadorAluno(AlunoPorTurmaResposta aluno, PeriodoEscolarDto bimestre) { MarcadorFrequenciaDto marcador = null; string dataSituacao = $"{aluno.DataSituacao.Day}/{aluno.DataSituacao.Month}/{aluno.DataSituacao.Year}"; switch (aluno.CodigoSituacaoMatricula) { case SituacaoMatriculaAluno.Ativo: // Macador "Novo" durante 15 dias se iniciou depois do inicio do bimestre if ((aluno.DataSituacao > bimestre.PeriodoInicio) && (aluno.DataSituacao.AddDays(15) <= DateTime.Now.Date)) { marcador = new MarcadorFrequenciaDto() { Tipo = TipoMarcadorFrequencia.Novo, Descricao = $"Estudante Novo: Data da matrícula {dataSituacao}" } } ; break; case SituacaoMatriculaAluno.Transferido: var detalheEscola = aluno.Transferencia_Interna ? $"para escola {aluno.EscolaTransferencia} e turma {aluno.TurmaTransferencia}" : "para outras redes"; marcador = new MarcadorFrequenciaDto() { Tipo = TipoMarcadorFrequencia.Transferido, Descricao = $"Estudante transferido: {detalheEscola} em {dataSituacao}" }; break; case SituacaoMatriculaAluno.RemanejadoSaida: marcador = new MarcadorFrequenciaDto() { Tipo = TipoMarcadorFrequencia.Remanejado, Descricao = $"Estudante remanejado: turma {aluno.TurmaRemanejamento} em {dataSituacao}" }; break; case SituacaoMatriculaAluno.Desistente: case SituacaoMatriculaAluno.VinculoIndevido: case SituacaoMatriculaAluno.Falecido: case SituacaoMatriculaAluno.NaoCompareceu: case SituacaoMatriculaAluno.Deslocamento: case SituacaoMatriculaAluno.Cessado: case SituacaoMatriculaAluno.ReclassificadoSaida: marcador = new MarcadorFrequenciaDto() { Tipo = TipoMarcadorFrequencia.Inativo, Descricao = $"Aluno inativo em {dataSituacao}" }; break; default: break; } return(marcador); }
private async Task <List <string> > GravarCompensacaoAlunos(bool alteracao, long compensacaoId, string turmaId, string disciplinaId, IEnumerable <CompensacaoAusenciaAlunoDto> alunosDto, PeriodoEscolarDto periodo) { var mensagensExcessao = new StringBuilder(); List <CompensacaoAusenciaAluno> listaPersistencia = new List <CompensacaoAusenciaAluno>(); IEnumerable <CompensacaoAusenciaAluno> alunos = new List <CompensacaoAusenciaAluno>(); if (alteracao) { alunos = await repositorioCompensacaoAusenciaAluno.ObterPorCompensacao(compensacaoId); } // excluir os removidos da lista foreach (var alunoRemovido in alunos.Where(a => !alunosDto.Any(d => d.Id == a.CodigoAluno))) { alunoRemovido.Excluir(); listaPersistencia.Add(alunoRemovido); } // altera as faltas compensadas foreach (var aluno in alunos.Where(a => !a.Excluido)) { var frequenciaAluno = repositorioFrequencia.ObterPorAlunoDisciplinaData(aluno.CodigoAluno, disciplinaId, periodo.PeriodoFim); if (frequenciaAluno == null) { mensagensExcessao.Append($"O aluno(a) [{aluno.CodigoAluno}] não possui ausência para compensar. "); continue; } var faltasNaoCompensadas = frequenciaAluno.NumeroFaltasNaoCompensadas + aluno.QuantidadeFaltasCompensadas; var alunoDto = alunosDto.FirstOrDefault(a => a.Id == aluno.CodigoAluno); if (alunoDto.QtdFaltasCompensadas > faltasNaoCompensadas) { mensagensExcessao.Append($"O aluno(a) [{alunoDto.Id}] possui apenas {frequenciaAluno.NumeroFaltasNaoCompensadas} faltas não compensadas. "); continue; } aluno.QuantidadeFaltasCompensadas = alunoDto.QtdFaltasCompensadas; listaPersistencia.Add(aluno); } // adiciona os alunos novos foreach (var alunoDto in alunosDto.Where(d => !alunos.Any(a => a.CodigoAluno == d.Id))) { var frequenciaAluno = repositorioFrequencia.ObterPorAlunoDisciplinaData(alunoDto.Id, disciplinaId, periodo.PeriodoFim); if (frequenciaAluno == null) { mensagensExcessao.Append($"O aluno(a) [{alunoDto.Id}] não possui ausência para compensar. "); continue; } if (alunoDto.QtdFaltasCompensadas > frequenciaAluno.NumeroFaltasNaoCompensadas) { mensagensExcessao.Append($"O aluno(a) [{alunoDto.Id}] possui apenas {frequenciaAluno.NumeroFaltasNaoCompensadas} faltas não compensadas. "); continue; } listaPersistencia.Add(MapearCompensacaoAlunoEntidade(compensacaoId, alunoDto)); } if (!string.IsNullOrEmpty(mensagensExcessao.ToString())) { throw new NegocioException(mensagensExcessao.ToString()); } listaPersistencia.ForEach(aluno => repositorioCompensacaoAusenciaAluno.Salvar(aluno)); // Recalcula Frequencia dos alunos envolvidos na Persistencia return(listaPersistencia.Select(a => a.CodigoAluno).ToList()); }