private Cargo?EnviaNotificacaoParaNivel(WorkflowAprovacaoNivel nivel, long codigoNotificacao) { Notificacao notificacao; List <Usuario> usuarios = nivel.Usuarios.ToList(); if (nivel.Cargo.HasValue) { var funcionariosRetorno = servicoNotificacao.ObterFuncionariosPorNivel(nivel.Workflow.UeId, nivel.Cargo); foreach (var funcionario in funcionariosRetorno) { try { usuarios.Add(servicoUsuario.ObterUsuarioPorCodigoRfLoginOuAdiciona(string.Empty, funcionario.Id, buscaLogin: true)); } catch (Exception e) { SentrySdk.CaptureException(e); } } } foreach (var usuario in usuarios) { notificacao = new Notificacao() { Ano = nivel.Workflow.Ano, Categoria = nivel.Workflow.NotificacaoCategoria, DreId = nivel.Workflow.DreId, UeId = nivel.Workflow.UeId, Mensagem = nivel.Workflow.NotifacaoMensagem, Tipo = nivel.Workflow.NotificacaoTipo, Titulo = nivel.Workflow.NotifacaoTitulo, TurmaId = nivel.Workflow.TurmaId, UsuarioId = usuario.Id, Codigo = codigoNotificacao }; nivel.Adicionar(notificacao); repositorioNotificacao.Salvar(notificacao); repositorioWorkflowAprovacaoNivelNotificacao.Salvar(new WorkflowAprovacaoNivelNotificacao() { NotificacaoId = notificacao.Id, WorkflowAprovacaoNivelId = nivel.Id }); if (notificacao.Categoria == NotificacaoCategoria.Workflow_Aprovacao) { nivel.Status = WorkflowAprovacaoNivelStatus.AguardandoAprovacao; workflowAprovacaoNivel.Salvar(nivel); } } return(nivel.Cargo); }
private async Task NotificarEscolaAlunosFaltososBimestre(string dreCodigo, string dreNome, string dreAbreviacao, TipoEscola tipoEscola, string ueCodigo, string ueNome, double percentualCritico, int bimestre, int ano, IEnumerable <IGrouping <string, AlunoFaltosoBimestreDto> > turmasAgrupadas, ModalidadeTipoCalendario modalidadeTipoCalendario) { var titulo = $"Alunos com baixa frequência da {tipoEscola.ShortName()} {ueNome} - {modalidadeTipoCalendario.Name()}"; StringBuilder mensagem = new StringBuilder(); mensagem.AppendLine($"<p>Abaixo segue a lista de turmas com alunos que tiveram frequência geral abaixo de <b>{percentualCritico}%</b> no <b>{bimestre}º bimestre</b> de <b>{ano}</b> da <b>{tipoEscola.ShortName()} {ueNome} (DRE {dreAbreviacao})</b>.</p>"); foreach (var turmaAgrupada in turmasAgrupadas) { var alunosDaTurma = await servicoEOL.ObterAlunosPorTurma(turmaAgrupada.Key); var alunosFaltososTurma = alunosDaTurma.Where(c => turmaAgrupada.Any(a => a.AlunoCodigo == c.CodigoAluno)); mensagem.AppendLine($"<p>Turma <b>{turmaAgrupada.First().TurmaModalidade.ShortName()} - {turmaAgrupada.First().TurmaNome}</b></p>"); mensagem.AppendLine("<table style='margin-left: auto; margin-right: auto;' border='2' cellpadding='5'>"); mensagem.AppendLine("<tr>"); mensagem.AppendLine("<td style='padding: 5px;'>Nº</td>"); mensagem.AppendLine("<td style='padding: 5px;'>Nome do aluno</td>"); mensagem.AppendLine("<td style='padding: 5px;'>Percentual de Frequência</td>"); mensagem.AppendLine("</tr>"); foreach (var aluno in alunosFaltososTurma.OrderBy(a => a.NomeAluno)) { var percentualFrequenciaAluno = 100 - turmaAgrupada.FirstOrDefault(c => c.AlunoCodigo == aluno.CodigoAluno).PercentualFaltas; mensagem.AppendLine("<tr>"); mensagem.Append($"<td style='padding: 5px;'>{aluno.NumeroAlunoChamada}</td>"); mensagem.Append($"<td style='padding: 5px;'>{aluno.NomeAluno}</td>"); mensagem.Append($"<td style='text-align: center;'>{percentualFrequenciaAluno:0.00} %</td>"); mensagem.AppendLine("</tr>"); } } var funcionariosEol = servicoNotificacao.ObterFuncionariosPorNivel(ueCodigo, Cargo.Supervisor); var functionariosEolCP = servicoNotificacao.ObterFuncionariosPorNivel(ueCodigo, Cargo.CP); var functionariosEolAD = servicoNotificacao.ObterFuncionariosPorNivel(ueCodigo, Cargo.AD); var functionariosEolDiretor = servicoNotificacao.ObterFuncionariosPorNivel(ueCodigo, Cargo.Diretor); NotficarFuncionariosAlunosFaltososBimestre(funcionariosEol, titulo, mensagem.ToString(), ueCodigo, dreCodigo); NotficarFuncionariosAlunosFaltososBimestre(functionariosEolCP, titulo, mensagem.ToString(), ueCodigo, dreCodigo); NotficarFuncionariosAlunosFaltososBimestre(functionariosEolAD, titulo, mensagem.ToString(), ueCodigo, dreCodigo); NotficarFuncionariosAlunosFaltososBimestre(functionariosEolDiretor, titulo, mensagem.ToString(), ueCodigo, dreCodigo); }
private IEnumerable <(Cargo?Cargo, Usuario Usuario)> BuscaGestoresUe(string codigoUe) { // Buscar gestor da Ue var funcionariosRetornoEol = servicoNotificacao.ObterFuncionariosPorNivel(codigoUe, Cargo.CP); if (funcionariosRetornoEol == null) { return(null); } var cargoNotificacao = funcionariosRetornoEol.GroupBy(f => f.Cargo).Select(f => f.Key).First(); Cargo?proximoNivel = null; if (cargoNotificacao == Cargo.CP || cargoNotificacao == Cargo.AD) { proximoNivel = Cargo.Diretor; } else { proximoNivel = servicoNotificacao.ObterProximoNivel(cargoNotificacao, false); } if (proximoNivel != null) { funcionariosRetornoEol = funcionariosRetornoEol.Concat(servicoNotificacao.ObterFuncionariosPorNivel(codigoUe, proximoNivel)); } else { return(null); } var usuarios = new List <(Cargo?, Usuario)>(); foreach (var usuarioEol in funcionariosRetornoEol) { usuarios.Add((usuarioEol.Cargo, servicoUsuario.ObterUsuarioPorCodigoRfLoginOuAdiciona(usuarioEol.Id))); } return(usuarios); }
public async Task <IEnumerable <long> > Handle(ObterFuncionariosIdPorCodigoUeECargoQuery request, CancellationToken cancellationToken) { var codigosRf = servicoNotificacao.ObterFuncionariosPorNivel(request.CodigoUe, request.Cargo).Select(x => x.Id).ToList(); return(await mediator.Send(new ObterUsuariosIdPorCodigosRfQuery(codigosRf))); }