private CompensacaoAusencia MapearEntidade(long id, CompensacaoAusenciaDto compensacaoDto) { CompensacaoAusencia compensacao = new CompensacaoAusencia(); if (id > 0) { compensacao = repositorioCompensacaoAusencia.ObterPorId(id); } compensacao.DisciplinaId = compensacaoDto.DisciplinaId; compensacao.Bimestre = compensacaoDto.Bimestre; compensacao.Nome = compensacaoDto.Atividade; compensacao.Descricao = compensacaoDto.Descricao; return(compensacao); }
public void NotificarCompensacaoAusencia(long compensacaoId) { // Verifica se compensação possui alunos vinculados var alunos = repositorioCompensacaoAusenciaAluno.ObterPorCompensacao(compensacaoId).Result; if (alunos == null || !alunos.Any()) { return; } // Verifica se possui aluno não notificado na compensação alunos = alunos.Where(a => !a.Notificado); if (!alunos.Any()) { return; } // Carrega dados da compensacao a notificar var compensacao = repositorioCompensacaoAusencia.ObterPorId(compensacaoId); var turma = repositorioTurma.ObterPorId(compensacao.TurmaId); var ue = repositorioUe.ObterUEPorTurma(turma.CodigoTurma); var dre = repositorioDre.ObterPorId(ue.DreId); var disciplinaEOL = ObterNomeDisciplina(compensacao.DisciplinaId); MeusDadosDto professor = servicoEOL.ObterMeusDados(compensacao.CriadoRF).Result; // Carrega dados dos alunos não notificados var alunosTurma = servicoEOL.ObterAlunosPorTurma(turma.CodigoTurma).Result; var alunosDto = new List <CompensacaoAusenciaAlunoQtdDto>(); foreach (var aluno in alunos) { var alunoEol = alunosTurma.FirstOrDefault(a => a.CodigoAluno == aluno.CodigoAluno); alunosDto.Add(new CompensacaoAusenciaAlunoQtdDto() { NumeroAluno = alunoEol.NumeroAlunoChamada, CodigoAluno = aluno.CodigoAluno, NomeAluno = alunoEol.NomeAluno, QuantidadeCompensacoes = aluno.QuantidadeFaltasCompensadas }); } var gestores = BuscaGestoresUe(ue.CodigoUe); if (gestores != null && gestores.Any()) { foreach (var gestor in gestores) { var notificacaoId = NotificarCompensacaoAusencia(compensacaoId , gestor.Usuario , professor.Nome , professor.CodigoRf , disciplinaEOL , turma.CodigoTurma , turma.Nome , turma.ModalidadeCodigo.GetAttribute <DisplayAttribute>().ShortName , ue.CodigoUe , ue.Nome , ue.TipoEscola.GetAttribute <DisplayAttribute>().ShortName , dre.CodigoDre , dre.Nome , compensacao.Bimestre , compensacao.Nome , alunosDto); // Grava vinculo de notificação x compensação repositorioNotificacaoCompensacaoAusencia.Inserir(notificacaoId, compensacaoId); } // Marca aluno como notificado alunosDto.ForEach(alunoDto => { var aluno = alunos.FirstOrDefault(a => a.CodigoAluno == alunoDto.CodigoAluno); aluno.Notificado = true; repositorioCompensacaoAusenciaAluno.Salvar(aluno); }); } }
public async Task <CompensacaoAusenciaCompletoDto> ObterPorId(long id) { var compensacao = repositorioCompensacaoAusencia.ObterPorId(id); if (compensacao == null) { throw new NegocioException("Compensação de ausencia não localizada."); } var compensacaoDto = MapearParaDtoCompleto(compensacao); compensacao.Alunos = await consultasCompensacaoAusenciaAluno.ObterPorCompensacao(compensacao.Id); // Busca os nomes de alunos do EOL por turma var turma = await repositorioTurma.ObterPorId(compensacao.TurmaId); compensacaoDto.TurmaId = turma.CodigoTurma; var alunos = await servicoEOL.ObterAlunosPorTurma(turma.CodigoTurma); if (alunos == null) { throw new NegocioException("Alunos não localizados para a turma."); } var disciplinasEOL = await repositorioComponenteCurricular.ObterDisciplinasPorIds(new long[] { long.Parse(compensacao.DisciplinaId) }); if (disciplinasEOL == null || !disciplinasEOL.Any()) { throw new NegocioException("Disciplina informada na compensação não localizada no EOL."); } var quantidadeMaximaCompensacoes = int.Parse(await mediator.Send(new ObterValorParametroSistemaTipoEAnoQuery(TipoParametroSistema.QuantidadeMaximaCompensacaoAusencia, DateTime.Today.Year))); var percentualFrequenciaAlerta = int.Parse(await mediator.Send(new ObterValorParametroSistemaTipoEAnoQuery(disciplinasEOL.First().Regencia ? TipoParametroSistema.CompensacaoAusenciaPercentualRegenciaClasse : TipoParametroSistema.CompensacaoAusenciaPercentualFund2, DateTime.Today.Year))); foreach (var aluno in compensacao.Alunos) { // Adiciona nome do aluno no Dto de retorno var alunoEol = alunos.FirstOrDefault(a => a.CodigoAluno == aluno.CodigoAluno); if (alunoEol != null) { var alunoDto = MapearParaDtoAlunos(aluno); alunoDto.Nome = alunoEol.NomeAluno; var frequenciaAluno = consultasFrequencia.ObterPorAlunoDisciplinaData(aluno.CodigoAluno, compensacao.DisciplinaId, DateTime.Now); if (frequenciaAluno != null) { alunoDto.QuantidadeFaltasTotais = int.Parse((frequenciaAluno.NumeroFaltasNaoCompensadas + alunoDto.QuantidadeFaltasCompensadas).ToString()); alunoDto.PercentualFrequencia = frequenciaAluno.PercentualFrequencia; alunoDto.MaximoCompensacoesPermitidas = quantidadeMaximaCompensacoes > alunoDto.QuantidadeFaltasTotais ? alunoDto.QuantidadeFaltasTotais : quantidadeMaximaCompensacoes; alunoDto.Alerta = frequenciaAluno.PercentualFrequencia <= percentualFrequenciaAlerta; } else { alunoDto.PercentualFrequencia = 100; } compensacaoDto.Alunos.Add(alunoDto); } } if (disciplinasEOL.First().Regencia) { var disciplinasRegencia = await consultasCompensacaoAusenciaDisciplinaRegencia.ObterPorCompensacao(compensacao.Id); var disciplinasIds = disciplinasRegencia.Select(x => long.Parse(x.DisciplinaId)); if (!disciplinasIds.Any()) { return(compensacaoDto); } disciplinasEOL = await repositorioComponenteCurricular.ObterDisciplinasPorIds(disciplinasIds.ToArray()); foreach (var disciplinaEOL in disciplinasEOL) { compensacaoDto.DisciplinasRegencia.Add(new DisciplinaNomeDto() { Codigo = disciplinaEOL.CodigoComponenteCurricular.ToString(), Nome = disciplinaEOL.Nome }); } } return(compensacaoDto); }
public async Task Salvar(long id, CompensacaoAusenciaDto compensacaoDto) { // Busca dados da turma var turma = await BuscaTurma(compensacaoDto.TurmaId); // Consiste periodo var periodo = await BuscaPeriodo(turma, compensacaoDto.Bimestre); var usuario = await servicoUsuario.ObterUsuarioLogado(); await ValidaProfessorPodePersistirTurma(compensacaoDto.TurmaId, usuario.CodigoRf, periodo.PeriodoFim); // Valida mesma compensação no ano var compensacaoExistente = await repositorioCompensacaoAusencia.ObterPorAnoTurmaENome(turma.AnoLetivo, turma.Id, compensacaoDto.Atividade, id); if (compensacaoExistente != null) { throw new NegocioException($"Já existe essa compensação cadastrada para turma no ano letivo."); } CompensacaoAusencia compensacaoBanco = new CompensacaoAusencia(); if (id > 0) { compensacaoBanco = repositorioCompensacaoAusencia.ObterPorId(id); } // Carrega dasdos da disciplina no EOL await ConsisteDisciplina(long.Parse(compensacaoDto.DisciplinaId), compensacaoDto.DisciplinasRegenciaIds, compensacaoBanco.Migrado); // Persiste os dados var compensacao = MapearEntidade(compensacaoDto, compensacaoBanco); compensacao.TurmaId = turma.Id; compensacao.AnoLetivo = turma.AnoLetivo; List <string> codigosAlunosCompensacao = new List <string>(); unitOfWork.IniciarTransacao(); try { await repositorioCompensacaoAusencia.SalvarAsync(compensacao); await GravarDisciplinasRegencia(id > 0, compensacao.Id, compensacaoDto.DisciplinasRegenciaIds); codigosAlunosCompensacao = await GravarCompensacaoAlunos(id > 0, compensacao.Id, compensacaoDto.TurmaId, compensacaoDto.DisciplinaId, compensacaoDto.Alunos, periodo); unitOfWork.PersistirTransacao(); } catch (Exception) { unitOfWork.Rollback(); throw; } if (codigosAlunosCompensacao.Any()) { await mediator.Send(new IncluirFilaCalcularFrequenciaPorTurmaCommand(codigosAlunosCompensacao, periodo.PeriodoFim, compensacaoDto.TurmaId, compensacaoDto.DisciplinaId, periodo.Bimestre)); } Cliente.Executar <IServicoNotificacaoFrequencia>(c => c.NotificarCompensacaoAusencia(compensacao.Id)); }