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()); }
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()); }