Package ecar.permissao

Source Code of ecar.permissao.ValidaPermissao

/*
* Created on 14/06/2005
*
*/
package ecar.permissao;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Set;

import org.apache.log4j.Logger;
import org.hibernate.HibernateException;
import org.hibernate.Query;

import comum.util.Pagina;

import ecar.api.facade.Funcao;
import ecar.api.facade.ItemEstrutura;
import ecar.dao.EstruturaAcessoDao;
import ecar.dao.EstruturaDao;
import ecar.dao.FuncaoDao;
import ecar.dao.ItemEstrutUsuarioDao;
import ecar.dao.ItemEstruturaDao;
import ecar.dao.OrgaoDao;
import ecar.dao.TipoAcompGrpAcessoDao;
import ecar.dao.TipoAcompTipofuncacompSisatributoTaTpfaSatbDao;
import ecar.dao.TipoAcompanhamentoDao;
import ecar.dao.TipoFuncAcompDao;
import ecar.exception.ECARException;
import ecar.login.SegurancaECAR;
import ecar.pojo.AcompReferenciaItemAri;
import ecar.pojo.EstruturaAcessoEtta;
import ecar.pojo.EstruturaEtt;
import ecar.pojo.EstruturaFuncaoEttf;
import ecar.pojo.ItemEstrutUsuarioIettus;
import ecar.pojo.ItemEstruturaIett;
import ecar.pojo.SisAtributoSatb;
import ecar.pojo.TipoAcompanhamentoTa;
import ecar.pojo.TipoFuncAcompTpfa;
import ecar.pojo.UsuarioUsu;

/**
* @author garten
*/
public class ValidaPermissao {
   
  private Logger logger = null;

  public static final String SIM = "S";
    public static final String NAO = "N";
 
  public static final String EM_MONITORAMENTO = "M";
  public static final String PROPRIA_SECRETARIA = "P";   
  public static final String OUTRAS_SECRETARIAS = "O";
 
  public static final String LEITURA_ACOMP_MONITORADO_SUA_SECRETARIA = "LEITURA_ACOMP_MONITORADO_SUA_SECRETARIA";
  public static final String LEITURA_ACOMP_MONITORADO_OUTRA_SECRETARIA = "LEITURA_ACOMP_MONITORADO_OUTRA_SECRETARIA";
  public static final String LEITURA_ACOMP_SUA_SECRETARIA = "LEITURA_ACOMP_SUA_SECRETARIA";
  public static final String LEITURA_ACOMP_OUTRA_SECRETARIA = "LEITURA_ACOMP_OUTRA_SECRETARIA";
 
  /* VARI�VEIS UTILIZADAS PARA VERIFICAR PERMISS�ES - UTILIZADAS COMO VALORES BIN�RIOS */
  public static final short PERMISSAO_EXCLUIR = 1;
  public static final short PERMISSAO_CONSULTAR = 2// se continuar, utilizar, 4, 8, 16, 32, 64, ...
  public static final short PERMISSAO_CONSULTAR_PARECER = 4;

  /* VARI�VEIS UTILIZADAS PARA VERIFICAR PERMISS�ES DE INCLUIR REGISTRO DE ACOMPANHAMENTO  */
  public static final int PERMISSAO_TODOS_ORGAOS = 1;
  public static final int PERMISSAO_SEUS_ORGAOS = 2
  public static final int PERMISSAO_SUA_RESPONSABILIDADE = 3;
   
  private short PERMISSOES = 0;
 
  private boolean ignorarPermissoes = false;

  /**
   * Construtor Valida Permissao.<br>
   *
   * @author N/C
     * @since N/C
     * @version N/C
   */
  public ValidaPermissao() {
    setIgnorarPermissoes(false);

    logger = Logger.getLogger(this.getClass());
   
    try {
      Object ignorarPermissoesContext = String.valueOf("");//Connector.getInstance().getResource("ignorarPermissoes");
     
      if(ignorarPermissoesContext != null) {
        if("true".equals(ignorarPermissoesContext.toString())) {
          setIgnorarPermissoes(true);
        }
      }
    }
    catch(Exception e) {
      // n�o precisa logar exce��o
      org.apache.log4j.Logger.getLogger(this.getClass()).error(e);
    }
  }
 
    /**
     * Verificar, para um item, se o usuario tem permissao para exclui-lo.<br>
     * Pode excluir se usuario x grupo x item x iettus tem ind_exclusao = 'S'.<br>
     *
     * @author N/C
     * @since N/C
     * @version N/C
     * @param ItemEstruturaIett item
     * @param UsuarioUsu usuario
     * @param Set gruposUsuario
     * @return boolean
     */
    public boolean permissaoExcluirItem(ItemEstruturaIett item, UsuarioUsu usuario, Set gruposUsuario) {
      try {
        if(getIgnorarPermissoes()) {
          return true;
        }
       
      Set itemUsuarios = item.getItemEstrutUsuarioIettusesByCodIett();
      Iterator it = itemUsuarios.iterator();
      while(it.hasNext()){
        ItemEstrutUsuarioIettus ieUsuario = (ItemEstrutUsuarioIettus) it.next();
        if(ieUsuario.getCodTpPermIettus().equals(ControlePermissao.PERMISSAO_GRUPO) && gruposUsuario.contains(ieUsuario.getSisAtributoSatb())){
          if(SIM.equals(ieUsuario.getIndExcluirIettus()))
            return true;
        }
        if((ieUsuario.getCodTpPermIettus().equals(ControlePermissao.PERMISSAO_USUARIO)
          || ieUsuario.getCodTpPermIettus().equals(ControlePermissao.PERMISSAO_FUNCAO_ACOMPANHAMENTO))
          &&
          ((ieUsuario.getUsuarioUsu() != null && ieUsuario.getUsuarioUsu().equals(usuario)) || (ieUsuario.getSisAtributoSatb() != null && gruposUsuario.contains(ieUsuario.getSisAtributoSatb())))){
          if(SIM.equals(ieUsuario.getIndExcluirIettus()))
            return true;       
        }
      }
     
          return false;
    }
    catch(Exception e) {
      this.logger.error(e);
          return false;
    }
    }

    /**
     * Verificar, para uma estrutura, se o usuario pode adicionar um item.<br>
     * Pode adicionar se grupo x etta tem ind_incl_item = 'S'.<br>
     *
     * @author N/C
     * @since N/C
     * @version N/C
     * @param EstruturaEtt estrutura
     * @param Set gruposUsuario
     * @return boolean
     */
    public boolean permissaoAdicionarItem(EstruturaEtt estrutura, Set gruposUsuario) {
      try {
        if( ignorarPermissoes ) {
          return true;
        }
       
        for (Iterator it = estrutura.getEstruturaAcessoEttas().iterator(); it.hasNext();) {
        EstruturaAcessoEtta estruturaAcesso = (EstruturaAcessoEtta) it.next();
        if(gruposUsuario.contains(estruturaAcesso.getSisAtributoSatb())){
           if(estruturaAcesso.getIndIncItemEtta() != null && SIM.equals(estruturaAcesso.getIndIncItemEtta())){
              return true;       
           }
        }
       }
       return false;   
    }
    catch(Exception e) {
      this.logger.error(e);
          return false;
    }
    }
   
    /**
     * Verificar, para uma estrutura, se o usuario pode imprimir uma listagem.<br>
     * Pode imprimir se grupo x etta tem getIndExibirImprimirEtta = 'S'.<br>
     *
     * @author N/C
     * @since N/C
     * @version N/C
     * @param EstruturaEtt estrutura
     * @param Set gruposUsuario
     * @return boolean
     */
    public boolean permissaoImprimirListagem(EstruturaEtt estrutura, Set gruposUsuario) {
      try {
        if( ignorarPermissoes ) {
          return true;
        }
       
        for (Iterator it = estrutura.getEstruturaAcessoEttas().iterator(); it.hasNext();) {
        EstruturaAcessoEtta estruturaAcesso = (EstruturaAcessoEtta) it.next();
        if(gruposUsuario.contains(estruturaAcesso.getSisAtributoSatb())){
           if(estruturaAcesso.getIndExibirImprimirEtta() != null && SIM.equals(estruturaAcesso.getIndExibirImprimirEtta())){
              return true;       
           }
        }
       }
       return false;   
    }
    catch(Exception e) {
      this.logger.error(e);
          return false;
    }
    }
   
    /**
     * Verificar, para uma estrutura, se o usuario pode gerar arquivos.<br>
     * Pode gerar arquivos se grupo x etta tem getIndExibirGerarArquivosEtta = 'S'.<br>
     *
     * @author N/C
     * @since N/C
     * @version N/C
     * @param EstruturaEtt estrutura
     * @param Set gruposUsuario
     * @return boolean
     */
    public boolean permissaoGerarArquivos(EstruturaEtt estrutura, Set gruposUsuario) {
      try {
        if( ignorarPermissoes ) {
          return true;
        }
       
        for (Iterator it = estrutura.getEstruturaAcessoEttas().iterator(); it.hasNext();) {
        EstruturaAcessoEtta estruturaAcesso = (EstruturaAcessoEtta) it.next();
        if(gruposUsuario.contains(estruturaAcesso.getSisAtributoSatb())){
           if(estruturaAcesso.getIndExibirGerarArquivosEtta() != null && SIM.equals(estruturaAcesso.getIndExibirGerarArquivosEtta())){
              return true;       
           }
        }
       }
       return false;   
    }
    catch(Exception e) {
      this.logger.error(e);
          return false;
    }
    }
   

    /**
     * Verificar, para um item, se o usuario pode altera-lo.<br>
     * Pode alterar se usuario x grupo x item x iettus tem ind_edicao = 'S'.<br>
     *
     * @author N/C
     * @since N/C
     * @version N/C
     * @param ItemEstruturaIett item
     * @param UsuarioUsu usuario
     * @param Set gruposUsuario
     * @return boolean
     */
    public Boolean permissaoAlterarItem(ItemEstruturaIett item, UsuarioUsu usuario, Set gruposUsuario, EstruturaFuncaoEttf estruturaFuncaoEttf) {
      try {
        if(getIgnorarPermissoes()) {
          return true;
        }
       
        Set itemUsuarios = item.getItemEstrutUsuarioIettusesByCodIett();
        Iterator it = itemUsuarios.iterator();

        while(it.hasNext()){
          ItemEstrutUsuarioIettus ieUsuario = (ItemEstrutUsuarioIettus) it.next();
         
          /* Procurar saber que informa��o � essa para documentar*/
          if(ieUsuario.getCodTpPermIettus().equals(ControlePermissao.PERMISSAO_GRUPO) &&
              gruposUsuario.contains(ieUsuario.getSisAtributoSatb())) {
           
            /* Se o usu�rio tem permiss�o para editar o item */
            if(SIM.equals(ieUsuario.getIndEdicaoIettus())) {
             
              /*Verfica se o planejamento do item est� bloqueado */
              if (item.getIndBloqPlanejamentoIett() == null || item.getIndBloqPlanejamentoIett().equals(NAO)) {
                return true;
              } else {
                //Para o item bloqueado:
                //incluindo teste para pontos criticos (mantis 0011072)
                //se item estiver bloqueado e a fun��o pode ser bloqueada, ent�o
                //n�o � permitido alterar
                Funcao funcao = new Funcao(estruturaFuncaoEttf);
                if (estruturaFuncaoEttf == null || estruturaFuncaoEttf.getIndPodeBloquearEttf().equals(NAO) ||
                    (funcao.getNome().equals(FuncaoDao.NOME_FUNCAO_PONTOS_CRITICOS) && funcao.podeSerBloqueada() == false)){
                  return true;
                }
              }
            }
          }
         
          if((ieUsuario.getCodTpPermIettus().equals(ControlePermissao.PERMISSAO_USUARIO)
              || ieUsuario.getCodTpPermIettus().equals(ControlePermissao.PERMISSAO_FUNCAO_ACOMPANHAMENTO))
              && ( (ieUsuario.getUsuarioUsu() != null && ieUsuario.getUsuarioUsu().equals(usuario))
                || (ieUsuario.getSisAtributoSatb() != null && gruposUsuario.contains(ieUsuario.getSisAtributoSatb())))){
           
            /*Verifica se o usu�rio pode editar o item*/
            if(SIM.equals(ieUsuario.getIndEdicaoIettus())) {
              if (item.getIndBloqPlanejamentoIett() == null ||
                  NAO.equals(item.getIndBloqPlanejamentoIett())) {
                return true;
              } else {
                Funcao funcao = new Funcao(estruturaFuncaoEttf);
                if (estruturaFuncaoEttf == null || estruturaFuncaoEttf.getIndPodeBloquearEttf() == null ||
                    estruturaFuncaoEttf.getIndPodeBloquearEttf().equals(NAO)||
                    (funcao.getNome().equals(FuncaoDao.NOME_FUNCAO_PONTOS_CRITICOS) && funcao.podeSerBloqueada() == false)){
                  return true;
                }
              }
            }
          }
        }
       
        /*Corre��o homologacao v7.0 */
        /* Caso o item esteja bloqueado verificar se o usu�rio (ou os grupos) � fun��o de acompanhamento com permiss�o de alterar */
        if (estruturaFuncaoEttf!=null &&  ( item.getIndBloqPlanejamentoIett() != null || SIM.equals(item.getIndBloqPlanejamentoIett()  ) ) ) {
         
          // Lista com as fun��es de acompanhamento para as quais o item n�o est� bloqueado 
        Iterator itLiberadoParaTpfa =  estruturaFuncaoEttf.getLibTipoFuncAcompTpfas().iterator();
     
        // Lista com as funcoes de acompanhamento do usu�rio
        List listTipoFuncaoUsuario = (new TipoFuncAcompDao(null)).getFuncoesAcompNaEstruturaDoUsuario(item, usuario, gruposUsuario);
   
        while (itLiberadoParaTpfa.hasNext()){
          TipoFuncAcompTpfa liberadoParaTpfa = (TipoFuncAcompTpfa) itLiberadoParaTpfa.next();

          if (listTipoFuncaoUsuario!= null &&  listTipoFuncaoUsuario.contains(liberadoParaTpfa)){
            return true;
          }
        }
        }
       
        return false;
      }
      catch(Exception e) {
        this.logger.error(e);
        return false;
      }
    }
   
    /**
     * Verificar, para um item, se o usuario pode ler seus dados e funcoes.<br>
     * Pode consultar se usuario x grupo x item x iettus tem<br>
     * ind_leitura = 'S'.<br>
     *
     * @author N/C
     * @since N/C
     * @version N/C
     * @param ItemEstruturaIett item
     * @param UsuarioUsu usuario
     * @param Set gruposUsuario
     * @return boolean
     */
    public boolean permissaoConsultarItem(ItemEstruturaIett item, UsuarioUsu usuario, Set gruposUsuario) {
      try {
        if(getIgnorarPermissoes()) {
          return true;
        }
       
      Set itemUsuarios = item.getItemEstrutUsuarioIettusesByCodIett();
       
        if(itemUsuarios == null) {
          return true;
        }
 
        Iterator it = itemUsuarios.iterator();
      while(it.hasNext()){
        ItemEstrutUsuarioIettus ieUsuario = (ItemEstrutUsuarioIettus) it.next();
        if(ieUsuario.getCodTpPermIettus().equals(ControlePermissao.PERMISSAO_GRUPO) && gruposUsuario.contains(ieUsuario.getSisAtributoSatb())){
          if(ieUsuario.getIndLeituraIettus().equals(SIM))
            return true;
        }
        if((ieUsuario.getCodTpPermIettus().equals(ControlePermissao.PERMISSAO_USUARIO)
            || ieUsuario.getCodTpPermIettus().equals(ControlePermissao.PERMISSAO_FUNCAO_ACOMPANHAMENTO))       
            &&
            ((ieUsuario.getUsuarioUsu() != null && ieUsuario.getUsuarioUsu().equals(usuario)) || (ieUsuario.getSisAtributoSatb() != null && gruposUsuario.contains(ieUsuario.getSisAtributoSatb())))){
          if(ieUsuario.getIndLeituraIettus().equals(SIM))
            return true;       
        }
      }
          return false;
      }
      catch(Exception e) {
      this.logger.error(e);
          return false;
      }
    }
   
    /**
     * Verificar, para um item, se o usuario pode ativar o monitoramento.<br>
     * Pode ativar o monitoramento se<br>
     * usuario x grupo x item x iettus tem ind_ativ_monit = 'S' e<br>
     * item.ind_monitoramento = 'N'.<br>
     *
     * @author N/C
     * @since N/C
     * @version N/C
     * @param ItemEstruturaIett item
     * @param UsuarioUsu usuario
     * @param Set gruposUsuario
     * @return boolean
     */
    public boolean permissaoAtivarMonitoramentoItem(ItemEstruturaIett item, UsuarioUsu usuario, Set gruposUsuario) {
      try {
        if(getIgnorarPermissoes()) {
          return true;
        }
       
      Set itemUsuarios = item.getItemEstrutUsuarioIettusesByCodIett();
      if(itemUsuarios != null){
        Iterator it = itemUsuarios.iterator();
        while(it.hasNext()){
          ItemEstrutUsuarioIettus ieUsuario = (ItemEstrutUsuarioIettus) it.next();
          if(ieUsuario.getCodTpPermIettus().equals(ControlePermissao.PERMISSAO_GRUPO) && gruposUsuario.contains(ieUsuario.getSisAtributoSatb())){
            if(ieUsuario.getIndAtivMonitIettus().equals(SIM) && (item.getIndMonitoramentoIett() == null || item.getIndMonitoramentoIett().equals(NAO)))
              return true;
          }
          if((ieUsuario.getCodTpPermIettus().equals(ControlePermissao.PERMISSAO_USUARIO)
              || ieUsuario.getCodTpPermIettus().equals(ControlePermissao.PERMISSAO_FUNCAO_ACOMPANHAMENTO))
              &&
              ((ieUsuario.getUsuarioUsu() != null && ieUsuario.getUsuarioUsu().equals(usuario)) || (ieUsuario.getSisAtributoSatb() != null && gruposUsuario.contains(ieUsuario.getSisAtributoSatb())))){
            if(ieUsuario.getIndAtivMonitIettus().equals(SIM) && (item.getIndMonitoramentoIett() == null || item.getIndMonitoramentoIett().equals(NAO)))
              return true;       
          }
        }     
      }
          return false;                      
      }
      catch(Exception e) {
      this.logger.error(e);
          return false;
      }
    }
   

    /**
     * Verificar, para um item, se o usuario pode desativar o monitoramento.<br>
     * Pode desativar o monitoramento se<br>
     * usuario x grupo x item x iettus tem ind_desat_monit = 'S' e<br>
     * item.ind_monitoramento = 'S'<br>
     *
     * @author N/C
     * @since N/C
     * @version N/C
     * @param ItemEstruturaIett item
     * @param UsuarioUsu usuario
     * @param Set gruposUsuario
     * @return boolean
     */
    public boolean permissaoDesativarMonitoramentoItem(ItemEstruturaIett item, UsuarioUsu usuario, Set gruposUsuario) {
      try {
        if(getIgnorarPermissoes()) {
          return true;
        }
       
      Set itemUsuarios = item.getItemEstrutUsuarioIettusesByCodIett();
      Iterator it = itemUsuarios.iterator();
      while(it.hasNext()){
        ItemEstrutUsuarioIettus ieUsuario = (ItemEstrutUsuarioIettus) it.next();
        if(ieUsuario.getCodTpPermIettus().equals(ControlePermissao.PERMISSAO_GRUPO) && gruposUsuario.contains(ieUsuario.getSisAtributoSatb())){
          if(ieUsuario.getIndDesatMonitIettus().equals(SIM) && (item.getIndMonitoramentoIett() != null && item.getIndMonitoramentoIett().equals(SIM)))
            return true;
        }
        if((ieUsuario.getCodTpPermIettus().equals(ControlePermissao.PERMISSAO_USUARIO)
            || ieUsuario.getCodTpPermIettus().equals(ControlePermissao.PERMISSAO_FUNCAO_ACOMPANHAMENTO))
            &&
            ((ieUsuario.getUsuarioUsu() != null && ieUsuario.getUsuarioUsu().equals(usuario)) || (ieUsuario.getSisAtributoSatb() != null && gruposUsuario.contains(ieUsuario.getSisAtributoSatb())))){
          if(ieUsuario.getIndDesatMonitIettus().equals(SIM) && (item.getIndMonitoramentoIett() != null && item.getIndMonitoramentoIett().equals(SIM)))
            return true;       
        }
      }          
          return false;
      }
      catch(Exception e) {
      this.logger.error(e);
          return false;
      }
    }


    /**
     * Verificar, para um item, se o usuario pode bloquear planejamento.<br>
     * Pode bloquear o planejamento se<br>
     * usuario x grupo x item x iettus tem ind_bloq_plan = 'S' e<br>
     * item.ind_bloq_planejamento = 'N'<br>
     *
     * @author N/C
     * @since N/C
     * @version N/C
     * @param ItemEstruturaIett item
     * @param UsuarioUsu usuario
     * @param Set gruposUsuario
     * @return boolean
     */
    public boolean permissaoBloquearPlanejamentoItem(ItemEstruturaIett item, UsuarioUsu usuario, Set gruposUsuario) {
      try {
        if(getIgnorarPermissoes()) {
          return true;
        }
       
      Set itemUsuarios = item.getItemEstrutUsuarioIettusesByCodIett();
      if(itemUsuarios != null){
        Iterator it = itemUsuarios.iterator();
        while(it.hasNext()){
          ItemEstrutUsuarioIettus ieUsuario = (ItemEstrutUsuarioIettus) it.next();
          if(ieUsuario.getCodTpPermIettus().equals(ControlePermissao.PERMISSAO_GRUPO) && gruposUsuario.contains(ieUsuario.getSisAtributoSatb())){
            if(ieUsuario.getIndBloqPlanIettus().equals(SIM) && (item.getIndBloqPlanejamentoIett() == null || item.getIndBloqPlanejamentoIett().equals(NAO)))
              return true;
          }
          if((ieUsuario.getCodTpPermIettus().equals(ControlePermissao.PERMISSAO_USUARIO)
              || ieUsuario.getCodTpPermIettus().equals(ControlePermissao.PERMISSAO_FUNCAO_ACOMPANHAMENTO))
              &&
              ((ieUsuario.getUsuarioUsu() != null && ieUsuario.getUsuarioUsu().equals(usuario)) || (ieUsuario.getSisAtributoSatb() != null && gruposUsuario.contains(ieUsuario.getSisAtributoSatb())))){
            if(ieUsuario.getIndBloqPlanIettus().equals(SIM) && (item.getIndBloqPlanejamentoIett() == null || item.getIndBloqPlanejamentoIett().equals(NAO)))
              return true;       
          }
        } 
      }                              
          return false;
      }
      catch(Exception e) {
      this.logger.error(e);
          return false;
      }
    }

    /**
     * Verificar, para um item, se o usuario pode liberar o planejamento.<br>
     * Pode liberar o planejamento se<br>
     * usuario x grupo x item x iettus tem ind_desbl_plan = 'S' e<br>
     * item.ind_bloq_plan = 'S'<br>
     *
     * @author N/C
     * @since N/C
     * @version N/C
     * @param ItemEstruturaIett item
     * @param UsuarioUsu usuario
     * @param Set gruposUsuario
     * @return boolean
     */
    public boolean permissaoLiberarPlanejamentoItem(ItemEstruturaIett item, UsuarioUsu usuario, Set gruposUsuario) {
      try {
        if(getIgnorarPermissoes()) {
          return true;
        }
       
      Set itemUsuarios = item.getItemEstrutUsuarioIettusesByCodIett();
      Iterator it = itemUsuarios.iterator();
      while(it.hasNext()){
        ItemEstrutUsuarioIettus ieUsuario = (ItemEstrutUsuarioIettus) it.next();
        if(ieUsuario.getCodTpPermIettus().equals(ControlePermissao.PERMISSAO_GRUPO) && gruposUsuario.contains(ieUsuario.getSisAtributoSatb())){
          if(ieUsuario.getIndDesblPlanIettus().equals(SIM) && (item.getIndBloqPlanejamentoIett() != null && item.getIndBloqPlanejamentoIett().equals(SIM)))
            return true;
        }
        if((ieUsuario.getCodTpPermIettus().equals(ControlePermissao.PERMISSAO_USUARIO)
            || ieUsuario.getCodTpPermIettus().equals(ControlePermissao.PERMISSAO_FUNCAO_ACOMPANHAMENTO))
            &&
            ((ieUsuario.getUsuarioUsu() != null && ieUsuario.getUsuarioUsu().equals(usuario)) || (ieUsuario.getSisAtributoSatb() != null && gruposUsuario.contains(ieUsuario.getSisAtributoSatb())))){
          if(ieUsuario.getIndDesblPlanIettus().equals(SIM) && (item.getIndBloqPlanejamentoIett() != null && item.getIndBloqPlanejamentoIett().equals(SIM)))
            return true;       
        }
      }                              
          return false;
      }
      catch(Exception e) {
      this.logger.error(e);
          return false;
      }
    }
   
      
    /**
     * Devolve true quando o usuario faz parte de algum grupo em estrutura_acesso que tem permissao de incluir
     * referencia em monitoramento.<br>
     *
     * @author N/C
     * @since N/C
     * @version N/C
     * @param Set gruposUsuario
     * @return boolean
     * @throws ECARException
     */
//    public boolean permissaoAcessoReferenciaMonitoramento(Set gruposUsuario) throws ECARException {
//      if(getIgnorarPermissoes()) {
//        return true;
//      }
//     
//        return new EstruturaAcessoDao(null).temPermissoesAcessoAcompMonitorado(gruposUsuario);
//    }

    /**
     * Devolve true quando o usuario faz parte de algum grupo em estrutura_acesso que tem permissao de incluir
     * referencia para sua pr�pria secretaria.<br>
     *
     * @author N/C
     * @since N/C
     * @version N/C
     * @param Set gruposUsuario
     * @return boolean
     * @throws ECARException
     */
//  public boolean permissaoAcessoReferenciaSecretaria (Set gruposUsuario) throws ECARException {
//      if(getIgnorarPermissoes()) {
//        return true;
//      }
//     
//        return new EstruturaAcessoDao(null).temPermissoesAcessoSecretaria(gruposUsuario);   
//    }

  /**
     * Devolve true quando o usuario faz parte de algum grupo em estrutura_acesso que tem permissao de incluir
     * referencia para qualquer secretaria que n�o seja sua propria.<br>
     *
     * @author N/C
     * @since N/C
     * @version N/C
     * @param Set gruposUsuario
     * @return boolean
     * @throws ECARException
     */
//  public boolean permissaoAcessoReferenciaOutraSecretaria (Set gruposUsuario) throws ECARException {
//      if(getIgnorarPermissoes()) {
//        return true;
//      }
//     
//        return new EstruturaAcessoDao(null).temPermissoesAcessoOutraSecretaria(gruposUsuario);
//    }

    /**
     * Devolve true quando o usuario faz parte de algum grupo em estrutura_acesso que tem permissao de incluir
     * referencia em monitoramento para itens de uma estrutura.<br>
     *
     * @author N/C
     * @since N/C
     * @version N/C
     * @param Set gruposUsuario
     * @param EstruturaEtt estrutura
     * @return boolean
     * @throws ECARException
     */
//  public boolean permissaoAcessoReferenciaMonitoramento (Set gruposUsuario, EstruturaEtt estrutura) throws ECARException {
//      if(getIgnorarPermissoes()) {
//        return true;
//      }
//     
//  return new EstruturaAcessoDao(null).temPermissoesAcessoAcompMonitorado(gruposUsuario, estrutura);
//    }

    /**
     * Devolve true quando o usuario faz parte de algum grupo em estrutura_acesso que tem permissao de incluir
     * referencia para a secretaria do usu�rio para itens de uma estrutura.<br>
     *
     * @author N/C
     * @since N/C
     * @version N/C
     * @param Set gruposUsuario
     * @param EstruturaEtt estrutura
     * @return boolean
     * @throws ECARException
     */
//  public boolean permissaoAcessoReferenciaSecretaria (Set gruposUsuario, EstruturaEtt estrutura) throws ECARException {
//      if(getIgnorarPermissoes()) {
//        return true;
//      }
//     
//        return new EstruturaAcessoDao(null).temPermissoesAcessoSecretaria(gruposUsuario, estrutura);   
//    }
 
  /**
     * Devolve true quando o usuario faz parte de algum grupo em <br>
     * estrutura_acesso que tem permissao de incluir  referencia <br>
     * para a qualquer secreataria que n�o seja a prorpria secretaria<br>
     * do usu�rio para itens de uma estrutura.<br>
     *
     * @author N/C
     * @since N/C
     * @version N/C
     * @param Set gruposUsuario
     * @param EstruturaEtt estrutura
     * @return boolean
     * @throws ECARException
     */
//  public boolean permissaoAcessoReferenciaOutraSecretaria (Set gruposUsuario, EstruturaEtt estrutura) throws ECARException {
//      if(getIgnorarPermissoes()) {
//        return true;
//      }
//     
//        return new EstruturaAcessoDao(null).temPermissoesAcessoOutraSecretaria(gruposUsuario, estrutura);
//    }
 
  /**
     * Verifica se um usu�rio tem permiss�o para acesso � elabora��o de acompanhamento de um item.<br>
     * As condi��es para isso s�o:<br>
     * (TODO Cade as condicoes?)
     *
     * @author N/C
     * @since N/C
     * @version N/C
     * @param ItemEstruturaIett item
     * @param UsuarioUsu usuario
     * @param Set gruposUsuario
     * @return boolean
     * @throws ECARException
     */
//  public boolean permissaoAcessoItemElaboracaoAcompEmMonitoramento(ItemEstruturaIett item, UsuarioUsu usuario, Set gruposUsuario) throws ECARException{
//      if(getIgnorarPermissoes()) {
//        return true;
//      }
//     
//    return permissaoAcessoItemElaboracaoAcomp(item, usuario, gruposUsuario, EM_MONITORAMENTO);
//  }

//  /**
//    * Verifica se usuario tem permissao de acesso ao item da propria da secretaria.<br>
//   *
//   * @author N/C
//     * @since N/C
//     * @version N/C
//   * @param ItemEstruturaIett item
//   * @param UsuarioUsu usuario
//   * @param Set gruposUsuario
//   * @return boolean
//   * @throws ECARException
//   */
//  public boolean permissaoAcessoItemElaboracaoAcompPropriaSecretaria(ItemEstruturaIett item, UsuarioUsu usuario, Set gruposUsuario) throws ECARException{
//      if(getIgnorarPermissoes()) {
//        return true;
//      }
//     
//    return permissaoAcessoItemElaboracaoAcomp(item, usuario, gruposUsuario, PROPRIA_SECRETARIA);
//  }

  /**
   * Verifica se usuario tem permissao de acesso ao item.<br>
   *
   * @author N/C
     * @since N/C
     * @version N/C
   * @param ItemEstruturaIett item
   * @param UsuarioUsu usuario
   * @param Set gruposUsuario
   * @return boolean
   * @throws ECARException
   */
//  public boolean permissaoAcessoItemElaboracaoAcompOutraSecretaria(ItemEstruturaIett item, UsuarioUsu usuario, Set gruposUsuario) throws ECARException{
//      if(getIgnorarPermissoes()) {
//        return true;
//      }
//     
//    return permissaoAcessoItemElaboracaoAcomp(item, usuario, gruposUsuario, OUTRAS_SECRETARIAS);
//  }

  /**
   * Verifica se usuario tem permissao de acesso ao item.<br>
   *
   * @author N/C
     * @since N/C
     * @version N/C
   * @param ItemEstruturaIett item
   * @param UsuarioUsu usuario
   * @param Set gruposUsuario
   * @param String tipoAcesso
   * @return boolean
   * @throws ECARException
   */
  public boolean permissaoAcessoItemElaboracaoAcomp(ItemEstruturaIett item, UsuarioUsu usuario, Set gruposUsuario, String tipoAcesso, TipoAcompanhamentoTa tipoAcompanhamentoTa) throws ECARException{
      if(getIgnorarPermissoes()) {
        return true;
      }
     
      List itensUsuario = new ItemEstrutUsuarioDao(null).getItemEstrutUsuarioItemOrigemAndEmitePosicaoAndInfAndamento(item.getCodIett());
    Iterator it = itensUsuario.iterator();
    while(it.hasNext()){
      ItemEstrutUsuarioIettus ieUsuario = (ItemEstrutUsuarioIettus) it.next();
      if(ieUsuario.getCodTpPermIettus().equals(ControlePermissao.PERMISSAO_GRUPO) && gruposUsuario.contains(ieUsuario.getSisAtributoSatb())){
        return true;
      }
      if(((ieUsuario.getCodTpPermIettus().equals(ControlePermissao.PERMISSAO_USUARIO)
          || ieUsuario.getCodTpPermIettus().equals(ControlePermissao.PERMISSAO_FUNCAO_ACOMPANHAMENTO))
          &&
          (ieUsuario.getUsuarioUsu() != null && ieUsuario.getUsuarioUsu().equals(usuario)) || (ieUsuario.getSisAtributoSatb() != null && gruposUsuario.contains(ieUsuario.getSisAtributoSatb())))){
        return true;       
      }
    }
   
    if (permissaoAcessoReferencia(tipoAcompanhamentoTa, gruposUsuario)) {
      return true;
    }
   
//    if(tipoAcesso.equals(EM_MONITORAMENTO)){
//      if(permissaoAcessoReferenciaMonitoramento(gruposUsuario, item.getEstruturaEtt()))
//        return true;     
//    }   
//    if(tipoAcesso.equals(PROPRIA_SECRETARIA)){
//      if(permissaoAcessoReferenciaSecretaria(gruposUsuario, item.getEstruturaEtt()))
//        return true;     
//    }
//    if(tipoAcesso.equals(OUTRAS_SECRETARIAS)){
//      if(permissaoAcessoReferenciaOutraSecretaria(gruposUsuario, item.getEstruturaEtt()))
//        return true;     
//    }
   
    return false;
  }
 
 
 
  /**
   * Remove da lista os itens em que o usu�rio(ou seus grupos) n�o tenha permissao
   * de acesso na Estrutura do item.<br>
   *
   * @author N/C
     * @since N/C
     * @version N/C
   * @param List lista
   * @param Set gruposUsuario
   * @param String tipoAcesso
   * @return List
   * @throws ECARException
   */
  /*public List removeItensSemAcessoElaboracaoAcomp(List lista, Set gruposUsuario, String tipoAcesso, TipoAcompanhamentoTa tipoAcompanhamentoTa) throws ECARException{
    Iterator it = lista.iterator();
   
    while(it.hasNext()){
      ItemEstruturaIett itemEstrutura = (ItemEstruturaIett) it.next();
     
     

     
      if (!permissaoAcessoReferencia(tipoAcompanhamentoTa, gruposUsuario)
     
      if(tipoAcesso.equals(EM_MONITORAMENTO)) {
        if(!permissaoAcessoReferenciaMonitoramento(gruposUsuario, itemEstrutura.getEstruturaEtt())) {
          it.remove();
        }
      } else if(tipoAcesso.equals(PROPRIA_SECRETARIA)) {
        if(!permissaoAcessoReferenciaSecretaria(gruposUsuario, itemEstrutura.getEstruturaEtt())) {
          it.remove();
        }
      } else if(tipoAcesso.equals(OUTRAS_SECRETARIAS)) {
        if(!permissaoAcessoReferenciaOutraSecretaria(gruposUsuario, itemEstrutura.getEstruturaEtt())) {
          it.remove();
        }
      }
    }
   
    return lista;
  }*/

    /**
     * Descobre se o usuario tem acesso a algum item filho, neto, ..., do item passado como param.<br>
     * <p>
     * Obs.: Pode ter performance melhorada, por exemplo instanciar uma lista na classe,
     *     executando o select somente uma vez por tela. Depois por item, em m�todo
     *     separado, realizar a verifica��o se filhos, netos do item est� na lista.
     * 
     * @author N/C
     * @since N/C
     * @version N/C
     * @param ItemEstruturaIett item
     * @param UsuarioUsu usuario
     * @param Set gruposUsuario
     * @return boolean
     * @throws ECARException
     */
    public boolean permissaoAcessoItensFilhos(ItemEstruturaIett item, UsuarioUsu usuario, Set gruposUsuario) throws ECARException {
      if( ignorarPermissoes ) {
        return true;
      }
     
      try{
        ItemEstruturaDao itemEstruturaDao = new ItemEstruturaDao(null);
        EstruturaDao estruturaDao = new EstruturaDao(null);

//        List estruturas = estruturaDao.getDescendentes(item.getEstruturaEtt());
        List estruturas = estruturaDao.getListaEstruturas(item.getEstruturaEtt());
          if(estruturas != null && estruturas.size() > 0){
            ArrayList<Long> codEtt = new ArrayList<Long>();
           
            for (Iterator itEtt = estruturas.iterator(); itEtt.hasNext();) {
          EstruturaEtt ett = (EstruturaEtt) itEtt.next();
          codEtt.add(ett.getCodEtt());
        }
           
            StringBuilder sql = new StringBuilder(
                 "select item " +
                      "from ItemEstruturaIett item " +
                      "join item.estruturaEtt as estrutura " +
              "join item.itemEstrutUsuarioIettusesByCodIett as iettus " +
                      "where estrutura.codEtt in (:estruturas) " +
                      "and ( iettus.usuarioUsu.codUsu = :usuario"           
            );
         
            ArrayList<Long> codSatb = new ArrayList<Long>();
        if(gruposUsuario != null && gruposUsuario.size() > 0) {
          sql.append( " or iettus.sisAtributoSatb.codSatb in (:grupos)" );

          for (Iterator itSatb = gruposUsuario.iterator(); itSatb.hasNext();) {
            SisAtributoSatb satb = (SisAtributoSatb) itSatb.next();
            codSatb.add(satb.getCodSatb());
          }
        }
       
        sql.append( " ) " );
 
              Query q = estruturaDao.getSession().createQuery(sql.toString());
             
              q.setParameterList("estruturas", codEtt);
              q.setLong("usuario", usuario.getCodUsu().longValue());
 
              if(gruposUsuario != null && gruposUsuario.size() > 0){
                q.setParameterList("grupos", codSatb);
        }
         
              List itensFilhos = q.list();
             
              for (Iterator it = itensFilhos.iterator(); it.hasNext();) {
                ItemEstruturaIett itemFilho = (ItemEstruturaIett) it.next();
               
                /* Verifica se item � filho, neto, bisneto do item passado como par�metro */
                if((itemEstruturaDao.getAscendentes(itemFilho)).contains(item)) {
                  return true;
                }
          }
      }
      }catch(HibernateException e){
      this.logger.error(e);
        throw new ECARException("");
      }
         
        return false;
    }
 
  /**
   * Retorna verdadeiro se um usu�rio tem permiss�o para
   * Informa��o de realizado f�sico Pode informar realizado f�sico  se
     * usuario x grupo x item x iettus tem ind_inf_andamento = 'S' e.<br>
     *
     * @author N/C
     * @since N/C
     * @version N/C
   * @param ItemEstruturaIett item
   * @param UsuarioUsu usuario
   * @param Set gruposUsuario
   * @return boolean
   * @throws ECARException
   */
  public boolean permissaoInformarRealizadoFisico(ItemEstruturaIett item, UsuarioUsu usuario, Set gruposUsuario) throws ECARException{   
      if(getIgnorarPermissoes()) {
        return true;
      }
     
    Set itensUsuario = item.getItemEstrutUsuarioIettusesByCodIett();
    if(itensUsuario != null){
      Iterator it = itensUsuario.iterator();
      while(it.hasNext()){
        ItemEstrutUsuarioIettus ieUsuario = (ItemEstrutUsuarioIettus) it.next();
        if(ieUsuario.getItemEstruturaIett().equals(item) && ieUsuario.getCodTpPermIettus().equals(ControlePermissao.PERMISSAO_GRUPO) && gruposUsuario.contains(ieUsuario.getSisAtributoSatb())){
          if(ieUsuario.getIndInfAndamentoIettus().equals(SIM) || ieUsuario.getIndInfAndamentoIettus().equals(SIM))
            return true;
        }
        if(ieUsuario.getItemEstruturaIett().equals(item)
            && ((ieUsuario.getCodTpPermIettus().equals(ControlePermissao.PERMISSAO_USUARIO)
                || ieUsuario.getCodTpPermIettus().equals(ControlePermissao.PERMISSAO_FUNCAO_ACOMPANHAMENTO))
                &&
                ((ieUsuario.getUsuarioUsu() != null && ieUsuario.getUsuarioUsu().equals(usuario)) || (ieUsuario.getSisAtributoSatb() != null && gruposUsuario.contains(ieUsuario.getSisAtributoSatb()))))){
          if(ieUsuario.getIndInfAndamentoIettus().equals(SIM) || ieUsuario.getIndInfAndamentoIettus().equals(SIM))
            return true;       
        }
      }         
    }
    return false;
  }
 
  /**
   * Verifica se usuario tem permissao para Informar parecer.<br>
   *
   * @author N/C
     * @since N/C
     * @version N/C
   * @param ItemEstruturaIett item
   * @param UsuarioUsu usuario
   * @param Set gruposUsuario
   * @return boolean
   * @throws ECARException
   */
  public boolean permissaoInformarParecer(ItemEstruturaIett item, UsuarioUsu usuario, Set gruposUsuario) throws ECARException{   
      if(getIgnorarPermissoes()) {
        return true;
      }
     
    Set itensUsuario = item.getItemEstrutUsuarioIettusesByCodIett();
    if(itensUsuario != null){
      Iterator it = itensUsuario.iterator();
      while(it.hasNext()){
        ItemEstrutUsuarioIettus ieUsuario = (ItemEstrutUsuarioIettus) it.next();
        if(ieUsuario.getItemEstruturaIett().equals(item) && ieUsuario.getCodTpPermIettus().equals(ControlePermissao.PERMISSAO_GRUPO) && gruposUsuario.contains(ieUsuario.getSisAtributoSatb())){
          if(ieUsuario.getIndEmitePosIettus().equals(SIM) || ieUsuario.getIndEmitePosIettus().equals(SIM))
            return true;
        }
        if(ieUsuario.getItemEstruturaIett().equals(item)
            && ((ieUsuario.getCodTpPermIettus().equals(ControlePermissao.PERMISSAO_USUARIO)
                || ieUsuario.getCodTpPermIettus().equals(ControlePermissao.PERMISSAO_FUNCAO_ACOMPANHAMENTO))
                &&
                ((ieUsuario.getUsuarioUsu() != null && ieUsuario.getUsuarioUsu().equals(usuario)) || (ieUsuario.getSisAtributoSatb() != null && gruposUsuario.contains(ieUsuario.getSisAtributoSatb()))))){
          if(ieUsuario.getIndEmitePosIettus().equals(SIM) || ieUsuario.getIndEmitePosIettus().equals(SIM))
            return true;       
        }
      }         
    }
    return false;
  }
 
  /**
   * M�todo alternativo aos m�todos permissaoConsultarItem e permissaoExcluirItem
   * Agrupa numa variavel binaria os valores das permissoes, utilizando a
   *    opera��o binaria OU ("|")<br>
   * ex.:<br>
   * * 0000 ****** 1010<br>
   * | 1000 ******| 0011<br>
   * **-------- ***** --------<br>
   * * 1000 ****** 1011<br>
   *
   * @author N/C
     * @since N/C
     * @version N/C
   * @param ItemEstruturaIett item
   * @param UsuarioUsu usuario
   * @param Set gruposUsuario
   * @throws ECARException
   */
  public void permissoesItem(ItemEstruturaIett item, UsuarioUsu usuario, Set gruposUsuario) throws ECARException {
    try{
      PERMISSOES = 0;
     
      StringBuilder query = new StringBuilder(
          "select distinct itemUsuario from ItemEstrutUsuarioIettus itemUsuario" +               
          " where itemUsuario.itemEstruturaIett.codIett = :codIett" +
          " and ( itemUsuario.usuarioUsu.codUsu = :codUsu");
     
      if(gruposUsuario != null && gruposUsuario.size() > 0)
        query.append( " or itemUsuario.sisAtributoSatb.codSatb in (:grupos)" ) ;
     
      query.append(" )" );
     
      Query q = new ItemEstrutUsuarioDao(null).getSession().createQuery(query.toString());  
        q.setLong("codIett", item.getCodIett().longValue());
          q.setLong("codUsu", usuario.getCodUsu().longValue());
         
          ArrayList<Long> codSatb = new ArrayList<Long>();
          if(gruposUsuario != null && gruposUsuario.size() > 0){
           
            for (Iterator itSatb = gruposUsuario.iterator(); itSatb.hasNext();) {
          codSatb.add( ((SisAtributoSatb)itSatb.next()).getCodSatb() );
        }
            q.setParameterList("grupos", codSatb);
          }
     
      List lista = q.list();
     
      for (Iterator it = lista.iterator(); it.hasNext();) {
        ItemEstrutUsuarioIettus itemUsuario = (ItemEstrutUsuarioIettus) it.next();
        if(SIM.equals(itemUsuario.getIndExcluirIettus())){
          PERMISSOES |= PERMISSAO_EXCLUIR;
        }
        if(SIM.equals(itemUsuario.getIndLeituraIettus())){
          PERMISSOES |= PERMISSAO_CONSULTAR;
        }
        if(SIM.equals(itemUsuario.getIndLeituraParecerIettus())){
          PERMISSOES |= PERMISSAO_CONSULTAR_PARECER;
        }
      }
    }catch(HibernateException e){
      this.logger.error(e);
      throw new ECARException(e);
    }
    }
 
  /**
   * Verifica se tem permissao para consultar - valor na vari�vel binaria<br>
   *      utilizando a opera��o E ("&")<br>
   * obs.:  ver m�todo permissoesItem, necessita da sua utiliza��o.<br>
   * ex.:<br>
   * ******** 1100<br>
   * ******& 0110<br>
   * ********______<br>
   * ******** 0100<br>
   *
   * @author N/C
     * @since N/C
     * @version N/C
   * @return boolean
   */
  public boolean permissaoConsultarItem() {
      if( ignorarPermissoes ) {
        return true;
      }
     
    if((PERMISSOES & PERMISSAO_CONSULTAR) == PERMISSAO_CONSULTAR)
      return true;
   
        return false;
    }
 
  public boolean permissaoConsultarParecerItem() {
      if( ignorarPermissoes ) {
        return true;
      }
     
    if((PERMISSOES & PERMISSAO_CONSULTAR_PARECER) == PERMISSAO_CONSULTAR_PARECER)
      return true;
   
        return false;
    }
 
 
  /**
   * Verifica se tem permissao para excluir - valor na vari�vel binaria
   *       utilizando a opera��o E ("&")<br>
   * obs.:  ver m�todo permissoesItem, necessita da sua utiliza��o.<br>
   *
   * ex.:<br>
   * ** 1100<br>
   *& 0110<br>
   * ** --------<br>
   * ** 0100<br>
   *
   * @author N/C
     * @since N/C
     * @version N/C
   * @return boolean
   */
  public boolean permissaoExcluirItem() {
      if( ignorarPermissoes ) {
        return true;
      }
     
    if((PERMISSOES & PERMISSAO_EXCLUIR) == PERMISSAO_EXCLUIR)
      return true;
   
        return false;
    }

 
    /**
     * Verificar se o usuario tem permissao de leitura de acompanhamento para um item.<br>
     *
     * @author N/C
     * @since N/C
     * @version N/C
     * @param AcompReferenciaItemAri ari
     * @param UsuarioUsu usuarioUsu
     * @param Set gruposUsuario
     * @return boolean
     * @throws ECARException
     */
  public boolean permissaoLeituraAcompanhamento(AcompReferenciaItemAri ari, UsuarioUsu usuarioUsu, Set gruposUsuario) throws ECARException{
   
   
    try {
        /*
      if(getIgnorarPermissoes()) {
          return true;
        }
        */
     
      if(1==1) {
        return true;
      }
     
      String indItemMonitoradosAri = ari.getIndItemMonitoradosAri();
     
      // Mantis: 10511
      //if(!"S".equals(indItemMonitoradosAri)
      //    && (permissaoAcessoReferenciaOutraSecretaria(gruposUsuario, ari.getItemEstruturaIett().getEstruturaEtt())
      //        || permissaoAcessoReferenciaSecretaria(gruposUsuario, ari.getItemEstruturaIett().getEstruturaEtt()))) {
       
      //  return true;
      //}

      //OrgaoOrg orgaoAri = ari.getItemEstruturaIett().getOrgaoOrgByCodOrgaoResponsavel1Iett();
     
      // monitorados de sua responsabilidade:
      // Listar registros de acompanhamento dos itens com indicador de monitorado e em que o usu�rio esta relacionado
      // com alguma fun��o de acompanhamento para o item (tipo "F" em tb_item_estrutura_usuario_iettus)
      if("S".equals(indItemMonitoradosAri)
          //&& permissaoLeituraAcompSuaResponsabilidade(gruposUsuario, ari.getItemEstruturaIett().getEstruturaEtt())) {
          ){
        Set itensUsuario = ari.getItemEstruturaIett().getItemEstrutUsuarioIettusesByCodIett();
        Iterator it = itensUsuario.iterator();
        while(it.hasNext()){
          ItemEstrutUsuarioIettus ieUsuario = (ItemEstrutUsuarioIettus) it.next();
         
          if(ieUsuario.getCodTpPermIettus().equals(ControlePermissao.PERMISSAO_FUNCAO_ACOMPANHAMENTO)
              &&
              ((ieUsuario.getUsuarioUsu() != null && ieUsuario.getUsuarioUsu().equals(usuarioUsu)) || (ieUsuario.getSisAtributoSatb() != null && gruposUsuario.contains(ieUsuario.getSisAtributoSatb())))){
             
            return true;
          }
         
          //Merge feito por Patricia da parte de Davi no Ecar TUR
          // Verifica se o usu�rio ou o grupo do usu�rio tem permiss�o de ler parecer do acompanhamento
          if ((usuarioUsu.equals(ieUsuario.getUsuarioUsu()) || gruposUsuario.contains(ieUsuario.getSisAtributoSatb()))
              && "S".equals(ieUsuario.getIndLeituraParecerIettus())){
           
            return true;
          }
        }
      }
     
     
      TipoAcompanhamentoTa tipoAcomp = ari.getAcompReferenciaAref().getTipoAcompanhamentoTa();
         TipoAcompanhamentoDao taDao = new TipoAcompanhamentoDao(null);   
   
      List orgaosUsuario = null;
      OrgaoDao orgDao = new OrgaoDao(null);
     
      //permiss�o para verificar se o grupo do usu�rio tem permiss�o de visualiza��o
      if (permissaoAcessoReferencia(ari.getAcompReferenciaAref().getTipoAcompanhamentoTa(), gruposUsuario)){
       
        //se for separado por orgao
        if(tipoAcomp != null && tipoAcomp.getIndSepararOrgaoTa() != null && tipoAcomp.getIndSepararOrgaoTa().equals("S")) {
          // se � apenas para os seus �rg�os
          if(permissaoAcessoReferenciaSeusOrgaos(ari.getAcompReferenciaAref().getTipoAcompanhamentoTa(), gruposUsuario)) {
            orgaosUsuario = orgDao.getListaOrgaosUsuario(usuarioUsu, false);
             if(orgaosUsuario != null && ari.getAcompReferenciaAref().getOrgaoOrg() != null
                 && orgaosUsuario.contains(ari.getAcompReferenciaAref().getOrgaoOrg()))
               return true;
          } else {
            // se for para gerar para todos os �rg�os
            return true;
          }
        } else {
          //se nao for separado por orgao
          return true;
       
      }

      // monitorados de sua secretaria/�rg�o:
      // Listar registros de acompanhamento dos itens com indicador de monitorado e em que o c�digo do �rg�o respons�vel 1
      // seja o mesmo c�digo do �rg�o do usu�rio autenticado (tb_usuario e tb_item_estrutura)
      //if("S".equals(indItemMonitoradosAri)
      //    && permissaoLeituraAcompMonitoradoSuaSecretaria(gruposUsuario, ari.getItemEstruturaIett().getEstruturaEtt())
      //    && (orgaoAri != null && usuarioUsu.getOrgaoOrgs().contains(orgaoAri))) {
      // 
      //  return true;
      //}
      
      // para sua secretaria/�rg�o:
      // Listar registros de acompanhamento dos itens sem indicador de monitorado e em que o c�digo do �rg�o respons�vel 1
      // seja o mesmo c�digo do �rg�o do usu�rio autenticado (tb_usuario e tb_item_estrutura)
      // Mantis: 10511: N�o � mais necess�rio, j� testa no primeiro IF
//      if(!"S".equals(indItemMonitoradosAri)
//          && permissaoAcessoReferenciaSecretaria(gruposUsuario, ari.getItemEstruturaIett().getEstruturaEtt())
//          && (orgaoAri != null && usuarioUsu.getOrgaoOrgs().contains(orgaoAri))) {
//       
//        return true;
//      }
     
      // monitorados de outras secretarias/org�os:
      // Listar registros de acompanhamento dos itens com indicador de monitorado e em que o c�digo do �rg�o respons�vel 1
      // seja diferente do c�digo do �rg�o do usu�rio autenticado (tb_usuario e tb_item_estrutura)
      //if("S".equals(indItemMonitoradosAri)
      //    && permissaoLeituraAcompMonitoradoOutraSecretaria(gruposUsuario, ari.getItemEstruturaIett().getEstruturaEtt())
      //    && (orgaoAri == null || !usuarioUsu.getOrgaoOrgs().contains(orgaoAri))) {
      // 
      //  return true;
      //}
     
      // para outras secretaria/�rg�o
      // Listar registros de acompanhamento dos itens sem indicador de monitorado e em que o c�digo do �rg�o respons�vel 1
      // seja diferente do c�digo do �rg�o do usu�rio autenticado (tb_usuario e tb_item_estrutura)
      // Mantis: 10511: N�o � mais necess�rio, j� testa no primeiro IF
//      if(!"S".equals(indItemMonitoradosAri)
//          && permissaoAcessoReferenciaOutraSecretaria(gruposUsuario, ari.getItemEstruturaIett().getEstruturaEtt())
//          && (orgaoAri == null || !usuarioUsu.getOrgaoOrgs().contains(orgaoAri))) {
//       
//        return true;
//      }
     
    }
    catch(Exception e) {
      this.logger.error(e);
      throw new ECARException(e);
    }

    return false;
  }

    /**
     * Verifica se os grupos de acesso possuem permiss�o de leitura de
     * acompanhamento para itens monitorados pr�prios.<br>
     *
     * @author N/C
     * @since N/C
     * @version N/C
     * @param Set gruposUsuario
     * @param EstruturaEtt estrutura
     * @return boolean
     * @throws ECARException
     */
    //public boolean permissaoLeituraAcompMonitoradoProprio (Set gruposUsuario, EstruturaEtt estrutura) throws ECARException {
    //  if(getIgnorarPermissoes()) {
    //    return true;
    //  }
    // 
    //    return new EstruturaAcessoDao(null).temPermissoesLeituraAcompMonitoradoProprio(gruposUsuario, estrutura);
    //}

    /**
     * Verifica se os grupos de acesso possuem permiss�o de leitura de
     * acompanhamento para itens monitorados de outras secretarias.<br>
     *
     * @author N/C
     * @since N/C
     * @version N/C
     * @param Set gruposUsuario
     * @param EstruturaEtt estrutura
     * @return boolean
     * @throws ECARException
     */
//    public boolean permissaoLeituraAcompMonitoradoOutraSecretaria (Set gruposUsuario, EstruturaEtt estrutura) throws ECARException {
//      if(getIgnorarPermissoes()) {
//        return true;
//      }
//     
//        return new EstruturaAcessoDao(null).temPermissoesLeituraAcompMonitoradoOutraSecretaria(gruposUsuario, estrutura);
//    }

    /**
     * Verifica se os grupos de acesso possuem permiss�o de leitura
     * de acompanhamento para itens monitorados de sua secretaria.<br>
     *
     * @author N/C
     * @since N/C
     * @version N/C
     * @param Set gruposUsuario
     * @param EstruturaEtt estrutura
     * @return boolean
     * @throws throws ECARException
     */
//    public boolean permissaoLeituraAcompMonitoradoSuaSecretaria (Set gruposUsuario, EstruturaEtt estrutura) throws ECARException {
//      if(getIgnorarPermissoes()) {
//        return true;
//      }
//     
//        return new EstruturaAcessoDao(null).temPermissoesLeituraAcompMonitoradoSuaSecretaria(gruposUsuario, estrutura);
//    }

    /**
     * Verifica se os grupos de acesso possuem permiss�o de leitura
     * de acompanhamento para itens monitorados de sua responsabilidade.<br>
     *
     * @author N/C
     * @since N/C
     * @version N/C
     * @param Set gruposUsuario
     * @param EstruturaEtt estrutura
     * @return boolean
     * @throws ECARException
     */
//    public boolean permissaoLeituraAcompSuaResponsabilidade (Set gruposUsuario, EstruturaEtt estrutura) throws ECARException {
//      if(getIgnorarPermissoes()) {
//        return true;
//      }
//     
//        return new EstruturaAcessoDao(null).temPermissoesLeituraAcompSuaResponsabilidade(gruposUsuario, estrutura);
//    }

    /**
     * Retorna boolean ignorarPermissoes.<br>
     *
     * @author N/C
     * @since N/C
     * @version N/C
     * @return boolean
     */
  public boolean getIgnorarPermissoes() {
    return ignorarPermissoes;
  }

  /**
   * Atribui valor especificado para boolean ignorarPermissoes.<br>
   *
   * @author N/C
     * @since N/C
     * @version N/C
   * @param boolean ignorarPermissoes
   */
  private void setIgnorarPermissoes(boolean ignorarPermissoes) {
    this.ignorarPermissoes = ignorarPermissoes;
  }
 

  /**
   * Verificar se o item tem permissao.<br>
   * @param codIett - Codigo do item
   * @param codUsu - codigo do usuario
   * @param gruposUsuario - grupos do usuario
   * @return <true> se tiver permissao
   */
  public boolean permissaoConsultaIETT(Long codIett, SegurancaECAR seguranca) throws ECARException {
   
    try{
      StringBuilder query = new StringBuilder(
          "select distinct itemUsuario from ItemEstrutUsuarioIettus itemUsuario" +               
          " where itemUsuario.itemEstruturaIett.codIett = :codIett" +
          " and ( itemUsuario.usuarioUsu.codUsu = :codUsu"
                          );
     
      if( seguranca.getGruposAcesso() != null && seguranca.getGruposAcesso().size() > 0)
        query.append( " or itemUsuario.sisAtributoSatb.codSatb in (:grupos)" ) ;
     
      query.append(" )" );
     
      Query q = new ItemEstrutUsuarioDao(null).getSession().createQuery(query.toString());  
        q.setLong("codIett", codIett);
          q.setLong("codUsu", seguranca.getCodUsu());
         
          ArrayList<Long> codSatb = new ArrayList<Long>();
          if(seguranca.getGruposAcesso() != null && seguranca.getGruposAcesso().size() > 0) {
           
            for (Iterator itSatb = seguranca.getGruposAcesso().iterator(); itSatb.hasNext();) {
          codSatb.add( ((SisAtributoSatb)itSatb.next()).getCodSatb() );
        }
            q.setParameterList("grupos", codSatb);
          }
     
      if(q.list().iterator().hasNext())
        return true;

      return false;
     
    }catch(HibernateException e){
      this.logger.error(e);
      throw new ECARException(e);
    }   
  }
  public boolean permissaoConsultaParecerIETT(Long codIett, SegurancaECAR seguranca) throws ECARException {
   
    try{
      StringBuilder query = new StringBuilder(
          "select distinct itemUsuario from ItemEstrutUsuarioIettus itemUsuario" +               
          " where itemUsuario.itemEstruturaIett.codIett = :codIett" +
          " and itemUsuario.indLeituraParecerIettus = :indLeituraParecerIettus" +
          " and ( itemUsuario.usuarioUsu.codUsu = :codUsu"
          );
     
      if( seguranca.getGruposAcesso() != null && seguranca.getGruposAcesso().size() > 0)
        query.append( " or itemUsuario.sisAtributoSatb.codSatb in (:grupos)" ) ;
     
      query.append(" )" );
     
      Query q = new ItemEstrutUsuarioDao(null).getSession().createQuery(query.toString());  
        q.setLong("codIett", codIett);
          q.setLong("codUsu", seguranca.getCodUsu());
          q.setString("indLeituraParecerIettus", Pagina.SIM);
         
          ArrayList<Long> codSatb = new ArrayList<Long>();
          if(seguranca.getGruposAcesso() != null && seguranca.getGruposAcesso().size() > 0) {
           
            for (Iterator itSatb = seguranca.getGruposAcesso().iterator(); itSatb.hasNext();) {
          codSatb.add( ((SisAtributoSatb)itSatb.next()).getCodSatb() );
        }
            q.setParameterList("grupos", codSatb);
          }
     
      return q.list().iterator().hasNext();
     
    }catch(HibernateException e){
      this.logger.error(e);
      throw new ECARException(e);
    }   
  } 
 
  public boolean permissaoConsultaParecerIETTGrupos(Long codIett, Long codTpfa, Long codTa, SegurancaECAR seguranca) throws ECARException {
    boolean permissao = false;
    try{
      StringBuilder query = new StringBuilder(
          "select distinct itemUsuario from ItemEstrutUsuarioIettus itemUsuario" +               
          " where itemUsuario.itemEstruturaIett.codIett = :codIett" +
          " and itemUsuario.indLeituraParecerIettus = :indLeituraParecerIettus" +
          " and ( itemUsuario.usuarioUsu.codUsu = :codUsu"
          );
     
      if( seguranca.getGruposAcesso() != null && seguranca.getGruposAcesso().size() > 0)
        query.append( " or itemUsuario.sisAtributoSatb.codSatb in (:grupos)" ) ;
     
      query.append(" )" );
     
      Query q = new ItemEstrutUsuarioDao(null).getSession().createQuery(query.toString());  
        q.setLong("codIett", codIett);
          q.setLong("codUsu", seguranca.getCodUsu());
          q.setString("indLeituraParecerIettus", Pagina.SIM);
         
          ArrayList<Long> codSatb = new ArrayList<Long>();
          if(seguranca.getGruposAcesso() != null && seguranca.getGruposAcesso().size() > 0) {
           
            for (Iterator itSatb = seguranca.getGruposAcesso().iterator(); itSatb.hasNext();) {
          codSatb.add( ((SisAtributoSatb)itSatb.next()).getCodSatb() );
        }
            q.setParameterList("grupos", codSatb);
          }
     
      permissao = q.list().iterator().hasNext();
     
     
      StringBuilder queryGrupos = new StringBuilder(
          "select distinct taTpfaSatb from TipoAcompTipofuncacompSisatributoTaTpfaSatb taTpfaSatb" +               
          " where taTpfaSatb.tipoFuncAcompTpfa.codTpfa = :codTpfa" +
          " and taTpfaSatb.tipoAcompanhamentoTa.codTa = :codTa" +
          " and taTpfaSatb.indLeituraParecer = :indLeituraParecer"
          );
     
      if( seguranca.getGruposAcesso() != null && seguranca.getGruposAcesso().size() > 0)
        queryGrupos.append(" and taTpfaSatb.sisAtributoSatb.codSatb in (:grupos)" ) ;
     
      Query qGrupo = new ItemEstrutUsuarioDao(null).getSession().createQuery(queryGrupos.toString());  
        qGrupo.setLong("codTpfa", codTpfa);
       
        if( seguranca.getGruposAcesso() != null && seguranca.getGruposAcesso().size() > 0)
          qGrupo.setLong("codTa", codTa);
       
        qGrupo.setString("indLeituraParecer", Pagina.SIM);
       
          qGrupo.setParameterList("grupos", codSatb);
         
     
      return permissao || qGrupo.list().iterator().hasNext();     
     
    }catch(HibernateException e){
      this.logger.error(e);
      throw new ECARException(e);
    }   
  } 
 
// M�todo criado por Robson. Otimiza��o do m�todo acima. Falta testar. 
//  public boolean permissaoConsultaParecerIETTGrupos(Long codIett, Long codTpfa, Long codTa, SegurancaECAR seguranca) throws ECARException {
//    try{
//      StringBuilder query = new StringBuilder(
//          "select distinct itemUsuario from ItemEstrutUsuarioIettus itemUsuario" +               
//          " where itemUsuario.itemEstruturaIett.codIett = :codIett" +
//          " and itemUsuario.indLeituraParecerIettus = :indLeituraParecerIettus" +
//          " and ( itemUsuario.usuarioUsu.codUsu = :codUsu");
//     
//      boolean possuiGrupo = (seguranca.getGruposAcesso() != null && seguranca.getGruposAcesso().size() > 0);
//     
//      if(possuiGrupo) query.append( " or itemUsuario.sisAtributoSatb in (:grupos)");
//     
//      query.append(" )" );
//     
//      Query q = new ItemEstrutUsuarioDao(null).getSession().createQuery(query.toString())  
//              .setMaxResults(1)
//                .setLong("codIett", codIett)
//                  .setLong("codUsu", seguranca.getCodUsu())
//                  .setString("indLeituraParecerIettus", Pagina.SIM);
//     
//      if( seguranca.getGruposAcesso() != null && seguranca.getGruposAcesso().size() > 0)
//            q.setParameterList("grupos", seguranca.getGruposAcesso());
//     
//      StringBuilder queryGrupos = new StringBuilder(
//          "select distinct taTpfaSatb from TipoAcompTipofuncacompSisatributoTaTpfaSatb taTpfaSatb" +               
//          " where taTpfaSatb.tipoFuncAcompTpfa.codTpfa = :codTpfa" +
//          " and taTpfaSatb.tipoAcompanhamentoTa.codTa = :codTa" +
//          " and taTpfaSatb.indLeituraParecer = :indLeituraParecer");
//     
//      if(possuiGrupo) queryGrupos.append(" and taTpfaSatb.sisAtributoSatb in (:grupos)" ) ;
//     
//      Query qGrupo = new ItemEstrutUsuarioDao(null).getSession().createQuery(queryGrupos.toString())
//                .setMaxResults(1)
//                .setLong("codTpfa", codTpfa)
//                .setLong("codTa", codTa)
//                .setString("indLeituraParecer", Pagina.SIM);
//       
//        if(possuiGrupo) qGrupo.setParameterList("grupos", seguranca.getGruposAcesso());
//     
//      return !q.list().isEmpty() || !qGrupo.list().isEmpty();     
//     
//    }catch(HibernateException e){
//      this.logger.error(e);
//      throw new ECARException(e);
//    }   
//  } 
 
 
  /**
   * @author Robson
   * @param gruposUsuario
   * @param TipoAcesso
   * @return boolean
   */
  public boolean permissaoAcessoSecretariasUsuario(Set gruposUsuario, int TipoAcesso){
    // XXX: novas funcoes de acesso
    if(this.getIgnorarPermissoes())
      return true;
    else
      return new TipoAcompGrpAcessoDao().permissaoAcessoSecretariasUsuario(gruposUsuario, TipoAcesso);
  }
 
  /**
   *
   * @param tipoAcompanhamentoTa
   * @param gruposUsuario
   * @return boolean
   * @throws ECARException
   */
  public boolean permissaoAcessoReferencia(TipoAcompanhamentoTa tipoAcompanhamentoTa, Set gruposUsuario) throws ECARException{
      if(getIgnorarPermissoes()) {
        return true;
      }
     
        return new EstruturaAcessoDao(null).temPermissoesAcessoAcomp(tipoAcompanhamentoTa, gruposUsuario);
    }
 
  /**
   *
   * @param gruposUsuario
   * @return boolean
   * @throws ECARException
   */
  public boolean permissaoAcessoReferencia(Set gruposUsuario) throws ECARException{
      if(getIgnorarPermissoes()) {
        return true;
      }
     
        return new EstruturaAcessoDao(null).temPermissoesAcessoAcomp(gruposUsuario);
    }
 
  //
  public boolean permissaoAcessoReferenciaTodosOrgaos(TipoAcompanhamentoTa tipoAcompanhamentoTa, Set gruposUsuario)throws ECARException{
      if(getIgnorarPermissoes()) {
        return true;
      }
     
        return new EstruturaAcessoDao(null).temPermissoesAcessoAcompTodosOrgaos(tipoAcompanhamentoTa, gruposUsuario);
  }
 
  //
  public boolean permissaoAcessoReferenciaSeusOrgaos(TipoAcompanhamentoTa tipoAcompanhamentoTa, Set gruposUsuario)throws ECARException{
      if(getIgnorarPermissoes()) {
        return true;
      }
     
        return new EstruturaAcessoDao(null).temPermissoesAcessoAcompSeusOrgaos(tipoAcompanhamentoTa, gruposUsuario);
  }
 
  //
  public boolean permissaoAcessoReferenciaOrgaosSuaResponsabilidade(TipoAcompanhamentoTa tipoAcompanhamentoTa, Set gruposUsuario)throws ECARException{
      if(getIgnorarPermissoes()) {
        return true;
      }
     
      return new EstruturaAcessoDao(null).temPermissoesAcessoAcompOrgaosSuaResponsabilidade(tipoAcompanhamentoTa, gruposUsuario);
  }
 
  /**
     * Retorna uma lista de TipoFuncAcompTpfa que representa os pareceres que um determinado Grupo pode visualizar em determinado Tipo de acompanhamento
     * @param tipoAcompanhamentoTa
     * @param grupoPermissaoAcessoSatb
     * @return
     */
    public List permissaoVisualizarPareceres(TipoAcompanhamentoTa tipoAcompanhamentoTa, Set gruposAcessoSatb){
    List retorno = new ArrayList();
     
    try {
      TipoAcompTipofuncacompSisatributoTaTpfaSatbDao taTpfaSatbDao = new TipoAcompTipofuncacompSisatributoTaTpfaSatbDao();
      retorno = taTpfaSatbDao.pesquisarPermissaoVisualizarParecerTipoFuncaoAcompTpfa(tipoAcompanhamentoTa, gruposAcessoSatb);
    } catch (ECARException e) {
      //N�o precisa lan�ar exce��o aqui. Neste caso a lista passada ser� vazia.
    }
   
    return retorno;
 
   
  /**
   * Verifica se os grupos de acesso passados como par�metro podem visualizar o hist�rico
   * @param estruturaEtt
   * @param gruposAcessoSatb
   * @return Boolean
   */
  public boolean permissaoExibirHistorico(EstruturaEtt estruturaEtt, Set gruposAcessoSatb){
   
    for (Iterator it = estruturaEtt.getEstruturaAcessoEttas().iterator(); it.hasNext();) {
      EstruturaAcessoEtta estruturaAcesso = (EstruturaAcessoEtta) it.next();
      if(gruposAcessoSatb.contains(estruturaAcesso.getSisAtributoSatb())){
        if(estruturaAcesso.getIndExibirHistoricoEtta() != null && SIM.equals(estruturaAcesso.getIndExibirHistoricoEtta())){
          return true;       
        }
      }
    }
    return false;
  }

 
  /**
   * Verifica se permite excluir um ponto cr�tico no cadastro ou no monitoramento. As regras
   * s�o as seguintes. De acordo com o retorno desse m�todo ser� renderizado o bot�o excluir
   * no cadastro e no monitoramento na aba Restri��es ou pontos cr�ticos
   *
   * Se o item estiver bloqueado e algum campo do formul�rio de restri��es est� bloqueado ou
   * a fun��o est� bloqueada ent�o o bot�o excluir n�o ser� exibido.
   *
   * @see Funcao
   * @see
   *
   * @param itemEstrutura
   * @param estruturaFuncao
   * @param seguranca
   * @return
   */
  public boolean permiteExcluirPontoCritico(ItemEstruturaIett itemEstrutura, EstruturaFuncaoEttf estruturaFuncao, SegurancaECAR seguranca){
    //verifica se o usu�rio tem permiss�o para excluir, se o item est� bloqueado e o a fun�ao estiver bloqueada OU
    //algum atributo da fun��o est� bloqueado ent�o n�o ser� exibido o bot�o excluir
    ItemEstrutura witem = new ItemEstrutura(itemEstrutura); //wrapper para facilitar a vida
    Funcao pontosCriticos = new Funcao(estruturaFuncao);
   
    boolean permiteExcluir = false;
   
    //verfica se o usu�rio pode excluir
    if(permissaoExcluirItem(itemEstrutura, seguranca.getUsuario(), seguranca.getGruposAcesso()) == true){
      if(witem.isBloqueado() == false){
        permiteExcluir = true;
      }else{//item est� bloqueado
       
        //se a fun��o pontos cr�tcos tamb�m conhecida com restri��es tem um campo bloqueado
        //ou a funcao pode ser bloqueada e, o item est� bloqueado ent�o, o bot�o excluir
        //n�o ser� mostrado.
        if(pontosCriticos.hasAtributosBloqueados() == false && pontosCriticos.podeSerBloqueada() == false){
          permiteExcluir = true;
        }
      }
    }     
    return permiteExcluir;
  }
 

}
TOP

Related Classes of ecar.permissao.ValidaPermissao

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.