コード例 #1
0
        public List <Usuario> ObterChefeImediato(string email)
        {
            var retorno = new List <Usuario>();

            if (string.IsNullOrWhiteSpace(email))
            {
                return(retorno);
            }

            var hierarquia = repositorio.session.Query <Hierarquia>().FirstOrDefault(x => x.Email == email);

            if (hierarquia != null)
            {
                // CodUnidade maior que 5 vai até o Chefe de Gabinete.
                if (hierarquia.CodUnidade.Length > 5)
                {
                    // Funcionário.
                    if (hierarquia.CargoFuncionario == null)
                    {
                        retorno.Add(ObterChefeImediatoDoFuncionario(hierarquia));
                    }
                    // Gerente adjunto.
                    else if (hierarquia.CargoFuncionario.ToLower().Contains("gerente adj") || hierarquia.CargoFuncionario.ToLower().Contains("secretário-geral"))
                    {
                        retorno.Add(ObterChefeImediatoDoGerenteAdjunto(hierarquia));
                    }
                    // Chefe imediato.
                    else if (hierarquia.CargoFuncionario.ToLower().Contains("gerente") || hierarquia.CargoFuncionario.ToLower().Contains("assessor") || hierarquia.CargoFuncionario.ToLower().Contains("secretário-geral"))
                    {
                        retorno.Add(ObterChefeImediatoDoGerente(hierarquia));

                        var bmPermissao         = new BMPermissao();
                        var diretores           = bmPermissao.ObterDiretoresCorrespondente(hierarquia.Email);
                        var assessoresAnalistas = bmPermissao.ObterAssessoresAnalistas(diretores);
                        retorno.AddRange(assessoresAnalistas);
                        assessoresAnalistas = bmPermissao.ObterAssessoresAnalistas(new List <Usuario> {
                            (new BMUsuario()).ObterPorEmail(hierarquia.Email)
                        });
                        retorno.AddRange(assessoresAnalistas);
                    }
                    else if (hierarquia.CargoFuncionario.ToLower().Contains("chefe"))
                    {
                        retorno.Add(ObterChefeImediatoDoChefeDeGabinete(hierarquia));
                    }
                }
                else
                {
                    // Caso seja diretor, obtém os outros diretores como "chefes imediatos".
                    if (hierarquia.CodUnidade.Length == 5)
                    {
                        var outrosDiretores =
                            repositorio.session.Query <Hierarquia>()
                            .Where(x => x.CodUnidade.Length == 5 && x.CodPessoa != hierarquia.CodPessoa);

                        var bmUsuario = new BMUsuario();

                        foreach (var diretor in outrosDiretores)
                        {
                            retorno.Add(bmUsuario.ObterPorEmail(diretor.Email));
                        }
                    }
                }
            }

            return(retorno.Where(x => x != null).ToList());
        }
コード例 #2
0
        private IList <Usuario> ObterUsuariosPermissoes(Usuario demandante, IQueryable <EtapaPermissao> queryPermissoes, bool possuiChefeDeGabineteAnalista, bool analisar)
        {
            var listaUsuarios = queryPermissoes.Where(p => p.Usuario != null).Select(p => p.Usuario).ToList();

            var temPermissaoChefe = queryPermissoes.Any(p => p.ChefeImediato == true);

            var bmPermissao = new BMPermissao();

            if (temPermissaoChefe)
            {
                // Adicionar chefes imediatos.
                listaUsuarios.AddRange(bmPermissao.ObterChefeImediato(demandante.Email));
            }

            var temGerenteAdjunto = queryPermissoes.Any(p => p.GerenteAdjunto == true);

            if (temGerenteAdjunto)
            {
                // Adicionar gerentes adjuntos.
                var gerentesAdjuntos = bmPermissao.ObterGerentesAdjuntos(demandante.Email);

                if (gerentesAdjuntos != null)
                {
                    listaUsuarios.AddRange(gerentesAdjuntos);
                }
            }

            var temPermissaoDiretor = queryPermissoes.Any(p => p.DiretorCorrespondente == true);

            if (temPermissaoDiretor)
            {
                List <Usuario> diretores = new List <Usuario>();

                diretores = bmPermissao.ObterDiretoresCorrespondente(demandante.Email);

                // Atenção: Diretor só deve ser notificado na análise se checado o NotificaDiretorAnalise, SE for notificação avisa sempre
                if (!analisar || (analisar && queryPermissoes.First().Etapa.NotificaDiretorAnalise))
                {
                    if (diretores.Count > 0)
                    {
                        listaUsuarios.AddRange(diretores);
                    }
                }

                // A opção de notificar acessores só é possível atualmente para os analistas
                if (analisar && possuiChefeDeGabineteAnalista && diretores.Count > 0)
                {
                    var assessoresAnalistas = bmPermissao.ObterAssessoresAnalistas(diretores);

                    listaUsuarios.AddRange(assessoresAnalistas);
                }
            }

            // Adiciona o solitante se ele deve ser notificado
            var notificaSolicitante = queryPermissoes.Any(p => p.Solicitante == true);

            if (notificaSolicitante && demandante != null)
            {
                listaUsuarios.Add(demandante);
            }

            return(listaUsuarios.Where(x => x != null).Distinct().ToList());
        }