コード例 #1
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());
        }