Пример #1
0
        public async Task <IEnumerable <FuncionarioCargoDTO> > Handle(ObterFuncionariosCargosPorUeCargosQuery request, CancellationToken cancellationToken)
        {
            var cargos = String.Join("&cargos=", request.cargosIdsDaUe);

            var listaRetorno = new List <FuncionarioCargoDTO>();

            if (request.cargosIdsDaUe.Any(a => a == (int)Cargo.Supervisor))
            {
                var supervisores = repositorioSupervisorEscolaDre.ObtemSupervisoresPorUe(request.UeCodigo);
                if (supervisores.Any())
                {
                    foreach (var supervisorParaAdicionar in supervisores)
                    {
                        listaRetorno.Add(new FuncionarioCargoDTO()
                        {
                            CargoId       = (int)Cargo.Supervisor,
                            FuncionarioRF = supervisorParaAdicionar.SupervisorId
                        });
                    }
                }
            }

            using (var httpClient = httpClientFactory.CreateClient("servicoEOL"))
            {
                var resposta = await httpClient.GetAsync($"/api/escolas/{request.UeCodigo}/funcionarios/cargos?cargos={cargos}&dreCodigo={request.DreCodigo}");

                if (resposta.IsSuccessStatusCode && resposta.StatusCode != HttpStatusCode.NoContent)
                {
                    var json = await resposta.Content.ReadAsStringAsync();

                    var listaRetornoEOL = JsonConvert.DeserializeObject <IEnumerable <FuncionarioCargoDTO> >(json) as List <FuncionarioCargoDTO>;
                    if (listaRetornoEOL.Any())
                    {
                        listaRetorno.AddRange(listaRetornoEOL);
                    }
                }
            }

            if (!listaRetorno.Any())
            {
                throw new NegocioException("Não foi possível obter funcionários da UE.");
            }
            else
            {
                return(listaRetorno);
            }
        }
        public IEnumerable <(Cargo?Cargo, string Id)> ObterFuncionariosPorNivel(string codigoUe, Cargo?cargo, bool primeiroNivel = true)
        {
            IEnumerable <SupervisorEscolasDreDto> supervisoresEscola = null;
            IEnumerable <UsuarioEolRetornoDto>    funcionarios       = null;

            if (cargo == Cargo.Supervisor)
            {
                supervisoresEscola = repositorioSupervisorEscolaDre.ObtemSupervisoresPorUe(codigoUe);
            }
            else
            {
                funcionarios = servicoEOL.ObterFuncionariosPorCargoUe(codigoUe, (int)cargo);
            }

            if (cargo == Cargo.Supervisor ?
                supervisoresEscola == null || !supervisoresEscola.Any() :
                funcionarios == null || !funcionarios.Any())
            {
                Cargo?cargoProximoNivel = ObterProximoNivel(cargo, primeiroNivel);

                if (!cargoProximoNivel.HasValue)
                {
                    return(Enumerable.Empty <(Cargo?, string)>());
                }

                return(ObterFuncionariosPorNivel(codigoUe, cargoProximoNivel, false));
            }
            else
            {
                if (cargo == Cargo.Supervisor)
                {
                    return(supervisoresEscola.Select(s => (Cargo: cargo, Id: s.SupervisorId)));
                }
                else
                {
                    return(funcionarios.Select(f => (Cargo: cargo, Id: f.CodigoRf)));
                }
            }
        }
Пример #3
0
        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);
                }
            }
        }