private async Task TrataNovoNivel(WorkflowAprovacao wfAprovacao, WorkflowAprovacaoNivel nivelDoCargo, List <FuncionarioCargoDTO> funcionariosCargosDaUe) { var funcionariosDoNivel = funcionariosCargosDaUe.Where(a => a.CargoId == (int)nivelDoCargo.Cargo); var notificacaoBase = wfAprovacao.Niveis.Where(a => a.Notificacoes.Any()).SelectMany(a => a.Notificacoes).FirstOrDefault(); foreach (var funcionarioDoNivel in funcionariosDoNivel) { var notificarUsuarioCommand = new NotificarUsuarioCommand( wfAprovacao.NotifacaoTitulo, wfAprovacao.NotifacaoMensagem, funcionarioDoNivel.FuncionarioRF, (NotificacaoCategoria)wfAprovacao.NotificacaoCategoria, (NotificacaoTipo)wfAprovacao.NotificacaoTipo, wfAprovacao.DreId, wfAprovacao.UeId, wfAprovacao.TurmaId, wfAprovacao.Ano, notificacaoBase.Codigo, notificacaoBase.CriadoEm); var notificacaoId = await mediator.Send(notificarUsuarioCommand); repositorioWorkflowAprovacaoNivelNotificacao.Salvar(new WorkflowAprovacaoNivelNotificacao() { NotificacaoId = notificacaoId, WorkflowAprovacaoNivelId = nivelDoCargo.Id }); } }
private async Task <bool> VerificaSeExisteNivelEadiciona(WorkflowAprovacao wfAprovacao, WorkflowAprovacaoNivel nivelParaModificar, Cargo cargo, List <FuncionarioCargoDTO> funcionariosCargosDaUe) { var nivelDoCargo = wfAprovacao.ObterPrimeiroNivelPorCargo(cargo); var modificaNiveisPosteriores = false; if (nivelDoCargo == null) { modificaNiveisPosteriores = true; nivelDoCargo = new WorkflowAprovacaoNivel() { Cargo = cargo, Nivel = nivelParaModificar.Nivel + 1, WorkflowId = wfAprovacao.Id }; } else { if (nivelDoCargo.Notificacoes.Any()) { return(false); } } await TrataModificacaoDosNiveis(funcionariosCargosDaUe, wfAprovacao, nivelParaModificar, true, nivelDoCargo, modificaNiveisPosteriores); return(true); }
private async Task <WorkflowAprovacao> MapearDtoParaEntidade(WorkflowAprovacaoDto workflowAprovacaoNiveisDto) { WorkflowAprovacao workflowAprovacao = new WorkflowAprovacao(); workflowAprovacao.Ano = workflowAprovacaoNiveisDto.Ano; workflowAprovacao.DreId = workflowAprovacaoNiveisDto.DreId; workflowAprovacao.UeId = workflowAprovacaoNiveisDto.UeId; workflowAprovacao.TurmaId = workflowAprovacaoNiveisDto.TurmaId; workflowAprovacao.NotifacaoMensagem = workflowAprovacaoNiveisDto.NotificacaoMensagem; workflowAprovacao.NotifacaoTitulo = workflowAprovacaoNiveisDto.NotificacaoTitulo; workflowAprovacao.NotificacaoTipo = workflowAprovacaoNiveisDto.NotificacaoTipo; workflowAprovacao.NotificacaoCategoria = workflowAprovacaoNiveisDto.NotificacaoCategoria; workflowAprovacao.Tipo = workflowAprovacaoNiveisDto.Tipo; foreach (var nivel in workflowAprovacaoNiveisDto.Niveis) { var workflowNivel = new WorkflowAprovacaoNivel() { Cargo = nivel.Cargo, Nivel = nivel.Nivel }; if (nivel.UsuariosRf != null && nivel.UsuariosRf.Length > 0) { foreach (var usuarioRf in nivel.UsuariosRf) { workflowNivel.Adicionar(await ObterUsuarioPorRf(usuarioRf)); } } workflowAprovacao.Adicionar(workflowNivel); } return(workflowAprovacao); }
private async Task AprovarNivel(WorkflowAprovacaoNivel nivel, WorkflowAprovacao workflow, long codigoDaNotificacao) { var niveis = workflow.ObtemNiveisParaEnvioPosAprovacao(); if (niveis != null && niveis.Any()) { EnviaNotificacaoParaNiveis(niveis.ToList(), codigoDaNotificacao); } else { if (workflow.Tipo == WorkflowAprovacaoTipo.Evento_Liberacao_Excepcional) { await AprovarUltimoNivelEventoLiberacaoExcepcional(codigoDaNotificacao, workflow.Id); } else if (workflow.Tipo == WorkflowAprovacaoTipo.ReposicaoAula) { await AprovarUltimoNivelDaReposicaoAula(codigoDaNotificacao, workflow.Id); } else if (workflow.Tipo == WorkflowAprovacaoTipo.Evento_Data_Passada) { AprovarUltimoNivelDeEventoDataPassada(codigoDaNotificacao, workflow.Id); } else if (workflow.Tipo == WorkflowAprovacaoTipo.Fechamento_Reabertura) { AprovarUltimoNivelDeEventoFechamentoReabertura(codigoDaNotificacao, workflow.Id, nivel.Id); } else if (workflow.Tipo == WorkflowAprovacaoTipo.AlteracaoNotaFechamento) { await AprovarAlteracaoNotaFechamento(codigoDaNotificacao, workflow.Id, workflow.TurmaId, workflow.CriadoRF, workflow.CriadoPor); } } }
public async Task Aprovar(WorkflowAprovacao workflow, bool aprovar, string observacao, long notificacaoId) { WorkflowAprovacaoNivel nivel = workflow.ObterNivelPorNotificacaoId(notificacaoId); var codigoDaNotificacao = nivel.Notificacoes.FirstOrDefault(a => a.Id == notificacaoId)?.Codigo; if (codigoDaNotificacao == null) { throw new NegocioException("Não foi possível localizar a notificação."); } nivel.PodeAprovar(); var niveisParaPersistir = workflow.ModificarStatusPorNivel(aprovar ? WorkflowAprovacaoNivelStatus.Aprovado : WorkflowAprovacaoNivelStatus.Reprovado, nivel.Nivel, observacao); AtualizaNiveis(niveisParaPersistir); if (aprovar) { await AprovarNivel(nivel, workflow, (long)codigoDaNotificacao); } else { await ReprovarNivel(workflow, (long)codigoDaNotificacao, observacao, nivel.Cargo, nivel); } }
private void AprovarNivel(WorkflowAprovacaoNivel nivel, long notificacaoId, WorkflowAprovacao workflow, long codigoDaNotificacao) { var niveis = workflow.ObtemNiveisParaEnvioPosAprovacao(); if (niveis != null) { EnviaNotificacaoParaNiveis(niveis.ToList(), codigoDaNotificacao); } else { if (workflow.Tipo == WorkflowAprovacaoTipo.Evento_Liberacao_Excepcional) { AprovarUltimoNivelEventoLiberacaoExcepcional(codigoDaNotificacao, workflow.Id); } else if (workflow.Tipo == WorkflowAprovacaoTipo.ReposicaoAula) { AprovarUltimoNivelDaReposicaoAula(codigoDaNotificacao, workflow.Id); } else if (workflow.Tipo == WorkflowAprovacaoTipo.Evento_Data_Passada) { AprovarUltimoNivelDeEventoDataPassada(codigoDaNotificacao, workflow.Id); } else if (workflow.Tipo == WorkflowAprovacaoTipo.Fechamento_Reabertura) { AprovarUltimoNivelDeEventoFechamentoReabertura(codigoDaNotificacao, workflow.Id, nivel.Id); } } }
private async Task TrataNovoFuncionarioNivel(WorkflowAprovacao wfAprovacao, WorkflowAprovacaoNivel nivelDoCargo, string funcionarioRF) { var notificacaoBase = wfAprovacao.Niveis.Where(a => a.Notificacoes.Any()).SelectMany(a => a.Notificacoes).FirstOrDefault(); var notificarUsuarioCommand = new NotificarUsuarioCommand( wfAprovacao.NotifacaoTitulo, wfAprovacao.NotifacaoMensagem, funcionarioRF, (NotificacaoCategoria)wfAprovacao.NotificacaoCategoria, (NotificacaoTipo)wfAprovacao.NotificacaoTipo, wfAprovacao.DreId, wfAprovacao.UeId, wfAprovacao.TurmaId, wfAprovacao.Ano, notificacaoBase.Codigo, notificacaoBase.CriadoEm); var notificacaoId = await mediator.Send(notificarUsuarioCommand); repositorioWorkflowAprovacaoNivelNotificacao.Salvar(new WorkflowAprovacaoNivelNotificacao() { NotificacaoId = notificacaoId, WorkflowAprovacaoNivelId = nivelDoCargo.Id }); }
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); }
public async Task <string> ValidarWorkflowAprovacao(long notificacaoId) { var workflow = ObterWorkflow(notificacaoId); if (workflow.Tipo == WorkflowAprovacaoTipo.ReposicaoAula) { WorkflowAprovacaoNivel nivel = workflow.ObterNivelPorNotificacaoId(notificacaoId); var codigoDaNotificacao = nivel.Notificacoes.FirstOrDefault(a => a.Id == notificacaoId).Codigo; return(await servicoWorkflowAprovacao.VerificaAulaReposicao(workflow.Id, codigoDaNotificacao)); } return(null); }
public void Aprovar(WorkflowAprovacao workflow, bool aprovar, string observacao, long notificacaoId) { WorkflowAprovacaoNivel nivel = workflow.ObterNivelPorNotificacaoId(notificacaoId); nivel.PodeAprovar(); var niveisParaPersistir = workflow.ModificarStatusPorNivel(aprovar ? WorkflowAprovacaoNivelStatus.Aprovado : WorkflowAprovacaoNivelStatus.Reprovado, nivel.Nivel, observacao); AtualizaNiveis(niveisParaPersistir); var codigoDaNotificacao = nivel.Notificacoes .FirstOrDefault(a => a.Id == notificacaoId).Codigo; if (aprovar) { AprovarNivel(nivel, notificacaoId, workflow, codigoDaNotificacao); } else { ReprovarNivel(workflow, codigoDaNotificacao, observacao, nivel.Cargo, nivel); } }
public void Aprovar(WorkflowAprovacao workflow, bool aprovar, string observacao, long notificacaoId) { WorkflowAprovacaoNivel nivel = workflow.ObterNivelPorNotificacaoId(notificacaoId); nivel.PodeAprovar(); var niveisParaPersistir = workflow.ModificarStatusPorNivel(aprovar ? WorkflowAprovacaoNivelStatus.Aprovado : WorkflowAprovacaoNivelStatus.Reprovado, nivel.Nivel, observacao); AtualizaNiveis(niveisParaPersistir); if (aprovar) { var codigoDaNotificacao = nivel.Notificacoes .FirstOrDefault(a => a.Id == notificacaoId).Codigo; var niveis = workflow.ObtemNiveisParaEnvioPosAprovacao(); if (niveis != null) { EnviaNotificacaoParaNiveis(niveis.ToList(), codigoDaNotificacao); } } }
private async Task TrataCargoDiretor(List <FuncionarioCargoDTO> funcionariosCargosDaUe, WorkflowAprovacao wfAprovacao, WorkflowAprovacaoNivel nivelParaModificar) { var ad = funcionariosCargosDaUe.FirstOrDefault(a => a.CargoId == (int)Cargo.AD); if (ad != null) { var adicionouNivelAd = await VerificaSeExisteNivelEadiciona(wfAprovacao, nivelParaModificar, Cargo.AD, funcionariosCargosDaUe); if (!adicionouNivelAd) { await TrataSupervisoresDiretor(funcionariosCargosDaUe, wfAprovacao, nivelParaModificar); } } else { await TrataSupervisoresDiretor(funcionariosCargosDaUe, wfAprovacao, nivelParaModificar); } }
private async Task ReprovarNivel(WorkflowAprovacao workflow, long codigoDaNotificacao, string motivo, Cargo?cargoDoNivelQueRecusou, WorkflowAprovacaoNivel nivel) { if (workflow.Tipo == WorkflowAprovacaoTipo.Evento_Liberacao_Excepcional) { TrataReprovacaoEventoLiberacaoExcepcional(workflow, codigoDaNotificacao, motivo, cargoDoNivelQueRecusou); } else if (workflow.Tipo == WorkflowAprovacaoTipo.ReposicaoAula) { await TrataReprovacaoReposicaoAula(workflow, codigoDaNotificacao, motivo); } else if (workflow.Tipo == WorkflowAprovacaoTipo.Evento_Data_Passada) { TrataReprovacaoEventoDataPassada(workflow, codigoDaNotificacao, motivo); } else if (workflow.Tipo == WorkflowAprovacaoTipo.Fechamento_Reabertura) { TrataReprovacaoFechamentoReabertura(workflow, codigoDaNotificacao, motivo, nivel.Id); } else if (workflow.Tipo == WorkflowAprovacaoTipo.AlteracaoNotaFechamento) { await TrataReprovacaoAlteracaoNotaFechamento(workflow, codigoDaNotificacao, motivo); } }
private async Task TrataCargoSupervisor(List <FuncionarioCargoDTO> funcionariosCargosDaUe, WorkflowAprovacao wfAprovacao, WorkflowAprovacaoNivel nivelParaModificar) { var supervisorTecnico = funcionariosCargosDaUe.FirstOrDefault(a => a.CargoId == (int)Cargo.SupervisorTecnico); if (supervisorTecnico != null) { await VerificaSeExisteNivelEadiciona(wfAprovacao, nivelParaModificar, Cargo.SupervisorTecnico, funcionariosCargosDaUe); } }
private async Task TrataCargoCP(List <FuncionarioCargoDTO> funcionariosCargosDaUe, WorkflowAprovacao wfAprovacao, WorkflowAprovacaoNivel nivelParaModificar) { var ad = funcionariosCargosDaUe.FirstOrDefault(a => a.CargoId == (int)Cargo.AD); if (ad != null) { await VerificaSeExisteNivelEadiciona(wfAprovacao, nivelParaModificar, Cargo.AD, funcionariosCargosDaUe); } else { var diretor = funcionariosCargosDaUe.FirstOrDefault(a => a.CargoId == (int)Cargo.Diretor); if (diretor != null) { await VerificaSeExisteNivelEadiciona(wfAprovacao, nivelParaModificar, Cargo.Diretor, funcionariosCargosDaUe); } else { var supervisor = funcionariosCargosDaUe.FirstOrDefault(a => a.CargoId == (int)Cargo.Supervisor); if (supervisor != null) { await VerificaSeExisteNivelEadiciona(wfAprovacao, nivelParaModificar, Cargo.Supervisor, funcionariosCargosDaUe); } else { await VerificaSeExisteNivelEadiciona(wfAprovacao, nivelParaModificar, Cargo.SupervisorTecnico, funcionariosCargosDaUe); } } } }
private void EnviaNotificacaoParaNivel(WorkflowAprovacaoNivel nivel, long codigoNotificacao) { Notificacao notificacao; List <Usuario> usuarios = nivel.Usuarios.ToList(); if (nivel.Cargo.HasValue) { if (nivel.Cargo == Cargo.Supervisor) { var supervisoresEscola = repositorioSupervisorEscolaDre.ObtemSupervisoresPorUe(nivel.Workflow.UeId); if (supervisoresEscola == null || supervisoresEscola.Count() == 0) { throw new NegocioException($"Não foram encontrados supervisores atribuídos para a escola de código {nivel.Workflow.UeId} para enviar para o nível {nivel.Nivel}."); } foreach (var supervisorEscola in supervisoresEscola) { usuarios.Add(servicoUsuario.ObterUsuarioPorCodigoRfLoginOuAdiciona(supervisorEscola.SupervisorId)); } } else { var funcionariosRetornoEol = servicoEOL.ObterFuncionariosPorCargoUe(nivel.Workflow.UeId, (int)nivel.Cargo.Value); if (funcionariosRetornoEol == null || funcionariosRetornoEol.Count() == 0) { throw new NegocioException($"Não foram encontrados funcionários de cargo {nivel.Cargo.GetAttribute<DisplayAttribute>().Name} para a escola de código {nivel.Workflow.UeId} para enviar para o nível {nivel.Nivel}."); } foreach (var usuario in funcionariosRetornoEol) { usuarios.Add(servicoUsuario.ObterUsuarioPorCodigoRfLoginOuAdiciona(usuario.CodigoRf)); } } } 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); } } }
private async Task TrataModificacaoDosNiveis(List <FuncionarioCargoDTO> funcionariosCargosDaUe, WorkflowAprovacao wfAprovacao, WorkflowAprovacaoNivel nivelParaModificar, bool modificarNivelAtual, WorkflowAprovacaoNivel nivelDoCargo, bool modificaNiveisPosteriores) { if (modificarNivelAtual) { if (modificaNiveisPosteriores) { var niveisParaModificar = wfAprovacao.Niveis.Where(a => a.Nivel > nivelParaModificar.Nivel); foreach (var nivel in niveisParaModificar) { nivel.Nivel += 1; await repositorioWorkflowAprovacaoNivel.SalvarAsync(nivel); } } await repositorioNotificacao.ExcluirLogicamentePorIdsAsync(nivelParaModificar.Notificacoes.Select(a => a.Id).ToArray()); nivelParaModificar.Status = WorkflowAprovacaoNivelStatus.Substituido; nivelDoCargo.Status = WorkflowAprovacaoNivelStatus.AguardandoAprovacao; await repositorioWorkflowAprovacaoNivel.SalvarAsync(nivelParaModificar); nivelDoCargo.Id = await repositorioWorkflowAprovacaoNivel.SalvarAsync(nivelDoCargo); await TrataNovoNivel(wfAprovacao, nivelDoCargo, funcionariosCargosDaUe); } }