public async Task <long> Handle(EnviarNotificacaoCommand request, CancellationToken cancellationToken)
        {
            var wf = new WorkflowAprovacaoDto()
            {
                Ano = DateTime.Today.Year,
                NotificacaoCategoria = request.CategoriaNotificacao,
                Tipo                = WorkflowAprovacaoTipo.Basica,
                DreId               = request.DreCodigo,
                UeId                = request.UeCodigo,
                TurmaId             = request.TurmaCodigo,
                NotificacaoTitulo   = request.Titulo,
                NotificacaoTipo     = request.TipoNotificacao,
                NotificacaoMensagem = request.Mensagem
            };

            foreach (var cargo in request.Cargos)
            {
                if (request.CategoriaNotificacao == NotificacaoCategoria.Workflow_Aprovacao)
                {
                    wf.AdicionarNivel(cargo);
                }
                else
                {
                    wf.AdicionarCargo(cargo);
                }
            }

            return(await mediator.Send(new SalvarWorkflowAprovacaoCommand(wf)));
        }
Ejemplo n.º 2
0
        private long CriarWorkflowParaEventoExcepcionais(Evento evento, Dto.AbrangenciaUeRetorno escola, string linkParaEvento)
        {
            var wfAprovacaoEvento = new WorkflowAprovacaoDto()
            {
                Ano = evento.DataInicio.Year,
                NotificacaoCategoria  = NotificacaoCategoria.Workflow_Aprovacao,
                EntidadeParaAprovarId = evento.Id,
                Tipo                = WorkflowAprovacaoTipo.Evento_Liberacao_Excepcional,
                UeId                = evento.UeId,
                DreId               = evento.DreId,
                NotificacaoTitulo   = "Criação de Eventos Excepcionais",
                NotificacaoTipo     = NotificacaoTipo.Calendario,
                NotificacaoMensagem = $"O evento {evento.Nome} - {evento.DataInicio.Day}/{evento.DataInicio.Month}/{evento.DataInicio.Year} foi criado no calendário {evento.TipoCalendario.Nome} da {escola.Nome}. Para que este evento seja considerado válido, você precisa aceitar esta notificação. Para visualizar o evento clique <a href='{linkParaEvento}'>aqui</a>."
            };

            wfAprovacaoEvento.Niveis.Add(new WorkflowAprovacaoNivelDto()
            {
                Cargo = Cargo.Diretor,
                Nivel = 1
            });
            wfAprovacaoEvento.Niveis.Add(new WorkflowAprovacaoNivelDto()
            {
                Cargo = Cargo.Supervisor,
                Nivel = 2
            });

            return(comandosWorkflowAprovacao.Salvar(wfAprovacaoEvento));
        }
Ejemplo n.º 3
0
        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);
        }
Ejemplo n.º 4
0
        public void Salvar(WorkflowAprovacaoDto workflowAprovacaoNiveisDto)
        {
            WorkflowAprovacao workflowAprovacao = MapearDtoParaEntidade(workflowAprovacaoNiveisDto);

            unitOfWork.IniciarTransacao();

            repositorioWorkflowAprovacao.Salvar(workflowAprovacao);

            foreach (var workflowAprovacaoNivel in workflowAprovacao.Niveis)
            {
                workflowAprovacaoNivel.WorkflowId = workflowAprovacao.Id;
                repositorioWorkflowAprovacaoNivel.Salvar(workflowAprovacaoNivel);

                foreach (var usuario in workflowAprovacaoNivel.Usuarios)
                {
                    repositorioWorkflowAprovacaoNivelUsuario.Salvar(new WorkflowAprovacaoNivelUsuario()
                    {
                        UsuarioId = usuario.Id,
                        WorkflowAprovacaoNivelId = workflowAprovacaoNivel.Id
                    });
                }
            }

            servicoWorkflowAprovacao.ConfiguracaoInicial(workflowAprovacao);
        }
        public async Task <long> Salvar(WorkflowAprovacaoDto workflowAprovacaoNiveisDto)
        {
            if (workflowAprovacaoNiveisDto.Tipo != WorkflowAprovacaoTipo.Basica && workflowAprovacaoNiveisDto.EntidadeParaAprovarId == 0)
            {
                throw new NegocioException("Para um workflow diferente de básico, é necessário informar o Id da entidade para Aprovar.");
            }

            WorkflowAprovacao workflowAprovacao = MapearDtoParaEntidade(workflowAprovacaoNiveisDto);

            await repositorioWorkflowAprovacao.SalvarAsync(workflowAprovacao);

            foreach (var workflowAprovacaoNivel in workflowAprovacao.Niveis)
            {
                workflowAprovacaoNivel.WorkflowId = workflowAprovacao.Id;
                await repositorioWorkflowAprovacaoNivel.SalvarAsync(workflowAprovacaoNivel);

                foreach (var usuario in workflowAprovacaoNivel.Usuarios)
                {
                    repositorioWorkflowAprovacaoNivelUsuario.Salvar(new WorkflowAprovacaoNivelUsuario()
                    {
                        UsuarioId = usuario.Id,
                        WorkflowAprovacaoNivelId = workflowAprovacaoNivel.Id
                    });
                }
            }
            servicoWorkflowAprovacao.ConfiguracaoInicial(workflowAprovacao, workflowAprovacaoNiveisDto.EntidadeParaAprovarId);

            return(workflowAprovacao.Id);
        }
Ejemplo n.º 6
0
        private async Task EnviarNotasWfAprovacao(long fechamentoTurmaDisciplinaId, PeriodoEscolar periodoEscolar, Usuario usuarioLogado)
        {
            if (notasEnvioWfAprovacao.Any())
            {
                var lancaNota            = !notasEnvioWfAprovacao.First().ConceitoId.HasValue;
                var notaConceitoMensagem = lancaNota ? "nota" : "conceito";

                var mensagem = await MontaMensagemWfAprovacao(notaConceitoMensagem, periodoEscolar, usuarioLogado);

                var wfAprovacaoNota = new WorkflowAprovacaoDto()
                {
                    Ano = DateTime.Today.Year,
                    NotificacaoCategoria  = NotificacaoCategoria.Workflow_Aprovacao,
                    EntidadeParaAprovarId = fechamentoTurmaDisciplinaId,
                    Tipo                = WorkflowAprovacaoTipo.AlteracaoNotaFechamento,
                    TurmaId             = turmaFechamento.CodigoTurma,
                    UeId                = turmaFechamento.Ue.CodigoUe,
                    DreId               = turmaFechamento.Ue.Dre.CodigoDre,
                    NotificacaoTitulo   = $"Alteração em {notaConceitoMensagem} final - Turma {turmaFechamento.Nome} ({turmaFechamento.AnoLetivo})",
                    NotificacaoTipo     = NotificacaoTipo.Notas,
                    NotificacaoMensagem = mensagem
                };

                wfAprovacaoNota.AdicionarNivel(Cargo.CP);
                wfAprovacaoNota.AdicionarNivel(Cargo.Diretor);
                wfAprovacaoNota.AdicionarNivel(Cargo.Supervisor);

                var idWorkflow = await comandosWorkflowAprovacao.Salvar(wfAprovacaoNota);

                foreach (var notaFechamento in notasEnvioWfAprovacao)
                {
                    await repositorioWfAprovacaoNotaFechamento.SalvarAsync(new WfAprovacaoNotaFechamento()
                    {
                        WfAprovacaoId    = idWorkflow,
                        FechamentoNotaId = notaFechamento.Id,
                        Nota             = notaFechamento.Nota,
                        ConceitoId       = notaFechamento.ConceitoId
                    });
                }
            }
        }
        public async Task <long> Handle(InserirWorkflowReposicaoAulaCommand request, CancellationToken cancellationToken)
        {
            var linkParaReposicaoAula = $"{configuration["UrlFrontEnd"]}calendario-escolar/calendario-professor/cadastro-aula/editar/:{request.AulaId}/";

            var wfAprovacaoAula = new WorkflowAprovacaoDto()
            {
                Ano = request.Ano,
                NotificacaoCategoria  = NotificacaoCategoria.Workflow_Aprovacao,
                EntidadeParaAprovarId = request.AulaId,
                Tipo                = WorkflowAprovacaoTipo.ReposicaoAula,
                UeId                = request.UeCodigo,
                DreId               = request.DreCodigo,
                NotificacaoTitulo   = $"Criação de Aula de Reposição na turma {request.TurmaNome}",
                NotificacaoTipo     = NotificacaoTipo.Calendario,
                NotificacaoMensagem = $"Foram criadas {request.Quantidade} aula(s) de reposição de {request.ComponenteCurricularNome} na turma {request.TurmaNome} da {request.UeNome} ({request.DreNome}). Para que esta aula seja considerada válida você precisa aceitar esta notificação. Para visualizar a aula clique  <a href='{linkParaReposicaoAula}'>aqui</a>."
            };

            wfAprovacaoAula.AdicionarNivel(Cargo.CP);
            wfAprovacaoAula.AdicionarNivel(Cargo.Diretor);

            return(await comandosWorkflowAprovacao.Salvar(wfAprovacaoAula));
        }
Ejemplo n.º 8
0
        public void Deve_Inserir_Consultar_LinhaTempo_Aprovar_E_Reprovar()
        {
            _fixture._clientApi.DefaultRequestHeaders.Clear();

            _fixture._clientApi.DefaultRequestHeaders.Authorization =
                new AuthenticationHeaderValue("Bearer", _fixture.GerarToken(new Permissao[] { Permissao.N_C }));

            var tituloParaLocalizarRegistro = Guid.NewGuid().ToString();

            var wfAprovacao = new WorkflowAprovacaoDto
            {
                NotificacaoCategoria = Dominio.NotificacaoCategoria.Workflow_Aprovacao,
                NotificacaoMensagem  = "Mensagem de teste",
                NotificacaoTipo      = Dominio.NotificacaoTipo.Fechamento,
                NotificacaoTitulo    = tituloParaLocalizarRegistro,
                UeId = "000892"
            };

            wfAprovacao.Niveis.Add(new WorkflowAprovacaoNivelDto()
            {
                Cargo = Dominio.Cargo.Diretor,
                Nivel = 1
            });
            wfAprovacao.Niveis.Add(new WorkflowAprovacaoNivelDto()
            {
                Cargo = Dominio.Cargo.Diretor,
                Nivel = 2
            });
            wfAprovacao.Niveis.Add(new WorkflowAprovacaoNivelDto()
            {
                Cargo = Dominio.Cargo.Diretor,
                Nivel = 3
            });

            var post = JsonConvert.SerializeObject(wfAprovacao);

            var jsonParaPost = new StringContent(post, UnicodeEncoding.UTF8, "application/json");

            var postResult = _fixture._clientApi.PostAsync("api/v1/workflows/aprovacoes", jsonParaPost).Result;

            Assert.True(postResult.IsSuccessStatusCode);

            if (postResult.IsSuccessStatusCode)
            {
                var getResult = _fixture._clientApi.GetAsync($"api/v1/notificacoes?titulo={tituloParaLocalizarRegistro}").Result;

                Assert.True(getResult.IsSuccessStatusCode);

                if (getResult.IsSuccessStatusCode)
                {
                    var notificacoes = JsonConvert.DeserializeObject <PaginacaoResultadoDto <NotificacaoBasicaDto> >(getResult.Content.ReadAsStringAsync().Result);
                    Assert.True(notificacoes.Items.Count() > 0);
                    if (notificacoes.Items.Count() > 0)
                    {
                        var notificacao = notificacoes.Items.FirstOrDefault();

                        var getResultTimeline = _fixture._clientApi.GetAsync($"api/v1/workflows/aprovacoes/notificacoes/{notificacao.Id}/linha-tempo").Result;
                        Assert.True(getResultTimeline.IsSuccessStatusCode);
                        if (getResultTimeline.IsSuccessStatusCode)
                        {
                            var timeline = JsonConvert.DeserializeObject <List <WorkflowAprovacaoTimeRespostaDto> >(getResultTimeline.Content.ReadAsStringAsync().Result);
                            if (timeline != null)
                            {
                                Assert.True(timeline.Count() == 3);
                                Assert.True(timeline.FirstOrDefault(a => a.Nivel == 1).StatusId == (int)WorkflowAprovacaoNivelStatus.AguardandoAprovacao);
                                Assert.True(timeline.FirstOrDefault(a => a.Nivel == 2).StatusId == (int)WorkflowAprovacaoNivelStatus.SemStatus);
                                Assert.True(timeline.FirstOrDefault(a => a.Nivel == 3).StatusId == (int)WorkflowAprovacaoNivelStatus.SemStatus);

                                //Aprovar 1 nível;
                                var aprovacaoNivel = new WorkflowAprovacaoAprovacaoDto();
                                aprovacaoNivel.Aprova = true;

                                var postAprovacaoNivel = JsonConvert.SerializeObject(aprovacaoNivel);

                                var jsonParaPostAprovacaoNivel = new StringContent(postAprovacaoNivel, UnicodeEncoding.UTF8, "application/json");

                                var postResultAprovacaoNivel = _fixture._clientApi.PutAsync($"api/v1/workflows/aprovacoes/notificacoes/{notificacao.Id}/aprova", jsonParaPostAprovacaoNivel).Result;

                                Assert.True(postResultAprovacaoNivel.IsSuccessStatusCode);

                                if (postResultAprovacaoNivel.IsSuccessStatusCode)
                                {
                                    var getResultMensagemNivel2 = _fixture._clientApi.GetAsync($"api/v1/notificacoes?titulo={tituloParaLocalizarRegistro}&status=1").Result;

                                    Assert.True(getResultMensagemNivel2.IsSuccessStatusCode);

                                    if (getResultMensagemNivel2.IsSuccessStatusCode)
                                    {
                                        var notificacoesNivel2 = JsonConvert.DeserializeObject <PaginacaoResultadoDto <NotificacaoBasicaDto> >(getResultMensagemNivel2.Content.ReadAsStringAsync().Result);
                                        Assert.True(notificacoesNivel2.Items.Count() == 1);
                                        if (notificacoesNivel2.Items.Count() == 1)
                                        {
                                            var notificacaoNivel2 = notificacoesNivel2.Items.FirstOrDefault();

                                            var getResultTimelineNivel2 = _fixture._clientApi.GetAsync($"api/v1/workflows/aprovacoes/notificacoes/{notificacaoNivel2.Id}/linha-tempo").Result;
                                            Assert.True(getResultTimeline.IsSuccessStatusCode);
                                            if (getResultTimelineNivel2.IsSuccessStatusCode)
                                            {
                                                var timelineNivel2 = JsonConvert.DeserializeObject <List <WorkflowAprovacaoTimeRespostaDto> >(getResultTimelineNivel2.Content.ReadAsStringAsync().Result);
                                                if (timelineNivel2 != null)
                                                {
                                                    Assert.True(timelineNivel2.Count() == 3);
                                                    Assert.True(timelineNivel2.FirstOrDefault(a => a.Nivel == 1).StatusId == (int)WorkflowAprovacaoNivelStatus.Aprovado);
                                                    Assert.True(timelineNivel2.FirstOrDefault(a => a.Nivel == 2).StatusId == (int)WorkflowAprovacaoNivelStatus.AguardandoAprovacao);
                                                    Assert.True(timelineNivel2.FirstOrDefault(a => a.Nivel == 3).StatusId == (int)WorkflowAprovacaoNivelStatus.SemStatus);
                                                    Assert.True(notificacoes.Items.FirstOrDefault().Codigo == notificacoesNivel2.Items.FirstOrDefault().Codigo);

                                                    //Reprovacao 2 nivel
                                                    var reprovacaoNivel = new WorkflowAprovacaoAprovacaoDto();
                                                    reprovacaoNivel.Aprova     = false;
                                                    reprovacaoNivel.Observacao = "Observação de teste!";

                                                    var postReprovacaoNivel = JsonConvert.SerializeObject(reprovacaoNivel);

                                                    var jsonParaPutReprovacaoNivel = new StringContent(postReprovacaoNivel, UnicodeEncoding.UTF8, "application/json");

                                                    var putResultReprovacaoNivel = _fixture._clientApi.PutAsync($"api/v1/workflows/aprovacoes/notificacoes/{notificacaoNivel2.Id}/aprova", jsonParaPutReprovacaoNivel).Result;

                                                    Assert.True(putResultReprovacaoNivel.IsSuccessStatusCode);
                                                    if (putResultReprovacaoNivel.IsSuccessStatusCode)
                                                    {
                                                        getResultTimelineNivel2 = _fixture._clientApi.GetAsync($"api/v1/workflows/aprovacoes/notificacoes/{notificacaoNivel2.Id}/linha-tempo").Result;
                                                        timelineNivel2          = JsonConvert.DeserializeObject <List <WorkflowAprovacaoTimeRespostaDto> >(getResultTimelineNivel2.Content.ReadAsStringAsync().Result);
                                                        Assert.True(timelineNivel2.Count() == 3);
                                                        Assert.True(timelineNivel2.FirstOrDefault(a => a.Nivel == 1).StatusId == (int)WorkflowAprovacaoNivelStatus.Aprovado);
                                                        Assert.True(timelineNivel2.FirstOrDefault(a => a.Nivel == 2).StatusId == (int)WorkflowAprovacaoNivelStatus.Reprovado);
                                                        Assert.True(timelineNivel2.FirstOrDefault(a => a.Nivel == 3).StatusId == (int)WorkflowAprovacaoNivelStatus.SemStatus);
                                                    }
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
 public SalvarWorkflowAprovacaoCommand(WorkflowAprovacaoDto workflowAprovacao)
 {
     WorkflowAprovacao = workflowAprovacao;
 }
Ejemplo n.º 10
0
        public async Task <IActionResult> Post(WorkflowAprovacaoDto workflowAprovaNivelDto)
        {
            await comandosWorkflowAprovacao.Salvar(workflowAprovaNivelDto);

            return(Ok());
        }
 public IActionResult Post(WorkflowAprovacaoDto workflowAprovaNivelDto)
 {
     comandosWorkflowAprovacao.Salvar(workflowAprovaNivelDto);
     return(Ok());
 }