/** * */ package br.com.centralit.citcorpore.integracao; import java.util.ArrayList; import java.util.Collection; import java.util.List; import br.com.centralit.citcorpore.bean.ContratoDTO; import br.com.centralit.citcorpore.bean.ContratosGruposDTO; import br.com.centralit.citcorpore.bean.GrupoDTO; import br.com.centralit.citcorpore.bean.GrupoEmpregadoDTO; import br.com.centralit.citcorpore.bean.MenuDTO; import br.com.centralit.citcorpore.bean.PerfilAcessoGrupoDTO; import br.com.centralit.citcorpore.bean.PerfilAcessoUsuarioDTO; import br.com.centralit.citcorpore.bean.UsuarioDTO; import br.com.citframework.dto.IDto; import br.com.citframework.excecao.PersistenceException; import br.com.citframework.integracao.Condition; import br.com.citframework.integracao.CrudDaoDefaultImpl; import br.com.citframework.integracao.Field; import br.com.citframework.integracao.Order; import br.com.citframework.util.Constantes; /** * @author Centralit * */ @SuppressWarnings({ "unchecked", "rawtypes" }) public class ContratosGruposDAO extends CrudDaoDefaultImpl { public ContratosGruposDAO() { super(Constantes.getValue("DATABASE_ALIAS"), null); } @Override public Collection find(IDto obj) throws PersistenceException { return null; } @Override public Collection<Field> getFields() { Collection<Field> listFields = new ArrayList<>(); listFields.add(new Field("idGrupo", "idGrupo", true, false, false, false)); listFields.add(new Field("idContrato", "idContrato", true, false, false, false)); return listFields; } public Collection<ContratosGruposDTO> findByIdGrupo(Integer idGrupo) throws PersistenceException { List condicao = new ArrayList(); List ordenacao = new ArrayList(); condicao.add(new Condition("idGrupo", "=", idGrupo)); ordenacao.add(new Order("idContrato")); return super.findByCondition(condicao, ordenacao); } public void deleteByIdGrupo(Integer idGrupo) throws PersistenceException { List condicao = new ArrayList(); condicao.add(new Condition("idGrupo", "=", idGrupo)); super.deleteByCondition(condicao); } public Collection findByGrupos(Collection<GrupoDTO> gruposEmpregado) { if (gruposEmpregado != null && !gruposEmpregado.isEmpty()) { List result = null; StringBuilder sql = new StringBuilder(); ArrayList<Integer> parametros = new ArrayList<Integer>(); sql.append("SELECT distinct idcontrato "); sql.append("FROM contratosgrupos "); sql.append("WHERE contratosgrupos.idgrupo = ?"); boolean aux = true; for (GrupoDTO grupo : gruposEmpregado) { if (aux) { parametros.add(grupo.getIdGrupo()); aux = false; continue; } else { sql.append(" OR contratosgrupos.idgrupo = ?"); parametros.add(grupo.getIdGrupo()); } } sql.append(" ORDER BY contratosgrupos.idcontrato"); Object[] paramsFinal = parametros.size() == 0 ? null : parametros.toArray(); List lista; try { lista = this.execSQL(sql.toString(), paramsFinal); List listRetorno = new ArrayList(); listRetorno.add("idContrato"); result = this.engine.listConvertion(ContratosGruposDTO.class, lista, listRetorno); } catch (PersistenceException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } return result; } return null; } public Collection<MenuDTO> listarMenusPorPerfil(UsuarioDTO usuario, Integer idMenuPai, boolean horizontal) throws PersistenceException { List result = null; StringBuilder sql = new StringBuilder(); ArrayList<Integer> parametros = new ArrayList<Integer>(); sql.append("SELECT distinct m.idmenu, m.idmenupai, m.nome, m.datainicio, m.datafim, m.descricao, m.ordem, m.link, m.imagem "); sql.append("FROM perfilacessomenu a "); sql.append("JOIN menu m ON m.idmenu = a.idmenu "); sql.append("WHERE m.datafim IS NULL AND (a.pesquisa <> 'N' OR a.inclui <> 'N' OR a.altera <> 'N' OR a.deleta <> 'N')"); if (idMenuPai == null) { sql.append("AND m.idmenupai IS NULL "); } else { sql.append("AND m.idmenupai = ? "); parametros.add(idMenuPai); } if (usuario != null) { PerfilAcessoUsuarioDAO perfilAcessoUsuarioDao = new PerfilAcessoUsuarioDAO(); PerfilAcessoUsuarioDTO perfilAcessoEspecifico = new PerfilAcessoUsuarioDTO(); perfilAcessoEspecifico = perfilAcessoUsuarioDao.obterPerfilAcessoUsuario(usuario); if (perfilAcessoEspecifico != null) { sql.append("AND (a.idperfilacesso = ? "); parametros.add(perfilAcessoEspecifico.getIdPerfilAcesso()); GrupoDao grupoDao = new GrupoDao(); PerfilAcessoGrupoDao perfilAcessoGrupoDao = new PerfilAcessoGrupoDao(); Collection<GrupoDTO> gruposDoEmpregado = grupoDao.getGruposByIdEmpregado(usuario.getIdEmpregado()); if (gruposDoEmpregado != null && !gruposDoEmpregado.isEmpty()) { for (GrupoDTO grupo : gruposDoEmpregado) { PerfilAcessoGrupoDTO perfilAcessoGrupo = perfilAcessoGrupoDao.obterPerfilAcessoGrupo(grupo); if (perfilAcessoGrupo != null) { sql.append("OR a.idperfilacesso = ? "); parametros.add(perfilAcessoGrupo.getIdPerfilAcessoGrupo()); } } } sql.append(")"); } else { GrupoDao grupoDao = new GrupoDao(); PerfilAcessoGrupoDao perfilAcessoGrupoDao = new PerfilAcessoGrupoDao(); Collection<GrupoDTO> gruposDoEmpregado = grupoDao.getGruposByIdEmpregado(usuario.getIdEmpregado()); if (gruposDoEmpregado != null && !gruposDoEmpregado.isEmpty()) { boolean aux = true; for (GrupoDTO grupo : gruposDoEmpregado) { PerfilAcessoGrupoDTO perfilAcessoGrupo = perfilAcessoGrupoDao.obterPerfilAcessoGrupo(grupo); if (perfilAcessoGrupo != null) { if (aux) { sql.append("AND (a.idperfilacesso = ? "); parametros.add(perfilAcessoGrupo.getIdPerfilAcessoGrupo()); aux = false; } else { sql.append("OR a.idperfilacesso = ? "); parametros.add(perfilAcessoGrupo.getIdPerfilAcessoGrupo()); } } } if (!aux) { sql.append(")"); } } } } sql.append("AND m.horizontal = "); if (horizontal) { sql.append(" 'S' "); sql.append("AND m.link IS NOT NULL"); } else { sql.append(" 'N' "); } sql.append(" ORDER BY ordem, idmenupai"); Object[] paramsFinal = parametros.size() == 0 ? null : parametros.toArray(); List lista; try { lista = this.execSQL(sql.toString(), paramsFinal); List listRetorno = new ArrayList(); listRetorno.add("idMenu"); listRetorno.add("idMenuPai"); listRetorno.add("nome"); listRetorno.add("dataInicio"); listRetorno.add("dataFim"); listRetorno.add("descricao"); listRetorno.add("ordem"); listRetorno.add("link"); listRetorno.add("imagem"); result = this.engine.listConvertion(MenuDTO.class, lista, listRetorno); } catch (PersistenceException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } return result; } public Collection<ContratosGruposDTO> findByIdContrato(Integer idContrato) throws PersistenceException { List condicao = new ArrayList(); List ordenacao = new ArrayList(); condicao.add(new Condition("idContrato", "=", idContrato)); ordenacao.add(new Order("idGrupo")); return super.findByCondition(condicao, ordenacao); } public void deleteByIdContrato(Integer idContrato) throws PersistenceException { List condicao = new ArrayList(); condicao.add(new Condition("idContrato", "=", idContrato)); super.deleteByCondition(condicao); } @Override public String getTableName() { return "contratosgrupos"; } @Override public Collection list() throws PersistenceException { return null; } @Override public Class getBean() { return ContratosGruposDTO.class; } public boolean hasContrato(Collection<GrupoEmpregadoDTO> gruposEmpregado, ContratoDTO contrato) { if (gruposEmpregado != null && !gruposEmpregado.isEmpty() && contrato != null) { List result = null; StringBuilder sql = new StringBuilder(); ArrayList<Integer> parametros = new ArrayList<Integer>(); sql.append("SELECT distinct idcontrato "); sql.append("FROM contratosgrupos "); sql.append("WHERE contratosgrupos.idgrupo in ("); int i=0; for (GrupoEmpregadoDTO grupo : gruposEmpregado) { if (i > 0) sql.append(","); sql.append(grupo.getIdGrupo()); i++; } sql.append(") and idContrato = ?"); sql.append(" ORDER BY contratosgrupos.idcontrato"); parametros.add(contrato.getIdContrato()); List lista; try { lista = this.execSQL(sql.toString(), parametros.toArray()); List listRetorno = new ArrayList(); listRetorno.add("idContrato"); result = this.engine.listConvertion(ContratosGruposDTO.class, lista, listRetorno); } catch (PersistenceException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } if(result!=null && !result.isEmpty()) return true; } return false; } }