/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package com.rjconsultores.ventaboletos.dao.hibernate; import java.sql.Connection; import java.sql.SQLException; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import javax.sql.DataSource; import org.hibernate.Criteria; import org.hibernate.Query; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.criterion.MatchMode; import org.hibernate.criterion.Order; import org.hibernate.criterion.Restrictions; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.stereotype.Repository; import com.rjconsultores.ventaboletos.dao.EmpresaDAO; import com.rjconsultores.ventaboletos.entidad.Empresa; import com.rjconsultores.ventaboletos.entidad.InscricaoEstadual; import com.rjconsultores.ventaboletos.entidad.PuntoVenta; /** * * @author Administrador */ @Repository("empresaDAO") public class EmpresaHibernateDAO extends GenericHibernateDAO implements EmpresaDAO { @Autowired private DataSource dataSource; @Autowired public EmpresaHibernateDAO(@Qualifier("sessionFactory") SessionFactory factory) { setSessionFactory(factory); } @Override public List obtenerTodos() { Criteria c = getSession().createCriteria(getPersistentClass()); c.add(Restrictions.eq("activo", Boolean.TRUE)); c.add(Restrictions.ne("empresaId", -1)); c.addOrder(Order.asc("nombempresa")); return c.list(); } public List buscar(String nombempresa, Boolean indExterna, Short indTipo) { Criteria c = getSession().createCriteria(getPersistentClass()); c.add(Restrictions.eq("activo", Boolean.TRUE)); c.add(Restrictions.eq("nombempresa", nombempresa)); c.add(Restrictions.eq("indExterna", indExterna)); c.add(Restrictions.eq("indTipo", indTipo)); c.add(Restrictions.ne("empresaId", -1)); return c.list(); } public List buscarTodosExceto(List empresa, Integer... idEmpresa) { if(idEmpresa == null || idEmpresa.length == 0) { return empresa; } List empresaList = new ArrayList(); List lsEmpresa = Arrays.asList(idEmpresa); for (Empresa e : empresa) { if(!lsEmpresa.contains(e.getEmpresaId())) { empresaList.add(e); } } return empresaList; } public List obtenerIndExternoFalse() { Criteria c = getSession().createCriteria(getPersistentClass()); c.add(Restrictions.eq("activo", Boolean.TRUE)); c.add(Restrictions.eq("indExterna", Boolean.FALSE)); c.add(Restrictions.ne("empresaId", -1)); c.addOrder(Order.asc("nombempresa")); return c.list(); } public List obtenerIndTipo2() { Criteria c = getSession().createCriteria(getPersistentClass()); c.add(Restrictions.eq("activo", Boolean.TRUE)); c.add(Restrictions.eq("indTipo", new Short("2"))); // Nao Buscar Empresa todas c.add(Restrictions.ne("empresaId", -1)); c.addOrder(Order.asc("nombempresa")); return c.list(); } public List buscarNotInPuntoVtaComissao(PuntoVenta puntoVenta) { StringBuilder sb = new StringBuilder(); sb.append(" select em "); sb.append(" from Empresa em "); sb.append(" where em.activo = 1 "); sb.append(" and em.empresaId not in ( "); sb.append(" select pc.empresaId.empresaId from PtovtaComissao pc "); sb.append(" where pc.activo = 1 and pc.puntoventaId.puntoventaId = :puntoventaId "); sb.append(" )"); sb.append(" and em.empresaId != -1 "); sb.append(" order by em.nombempresa"); Query query = getSession().createQuery(sb.toString()); query.setParameter("puntoventaId", puntoVenta.getPuntoventaId()); List lsEmpresa = query.list(); return lsEmpresa; } @Override public List buscaInscricoesEstaduais(Empresa empresa) { Criteria c = getSession().createCriteria(InscricaoEstadual.class); c.add(Restrictions.eq("empresa", empresa)); c.add(Restrictions.eq("activo", Boolean.TRUE)); return c.list(); } @Override public void actualizaInscEstadual(InscricaoEstadual inscricaoEstadual) { Session session = getSessionFactory().getCurrentSession(); session.saveOrUpdate(inscricaoEstadual); session.flush(); } @Override public List buscaLike(String nombempresa) { Criteria c = getSession().createCriteria(getPersistentClass()); c.add(Restrictions.eq("activo", Boolean.TRUE)); c.add(Restrictions.like("nombempresa", nombempresa, MatchMode.START)); c.add(Restrictions.ne("empresaId", -1)); c.addOrder(Order.asc("nombempresa")); return c.list(); } @Override public Empresa suscribir(Empresa entity) throws RuntimeException { entity = super.suscribir(entity); getSession().flush(); gerarSeqNumFolioSistema(entity.getEmpresaId()); return entity; } private void gerarSeqNumFolioSistema(Integer idEmpresa) throws RuntimeException { try { Connection conn = dataSource.getConnection(); if (!conn.createStatement().executeQuery("select SEQUENCE_NAME from DBA_SEQUENCES where SEQUENCE_NAME like 'FOLIO_SISTEMA_" + idEmpresa + "_SEQ%'").next()) { String[] sequences = {"AC", "AL", "AM", "AP", "BA", "CE", "DF", "ES", "GO", "MA", "MG", "MS", "MT", "PA", "PB", "PE", "PI", "PR", "RJ", "RN", "RO", "RR", "RS", "SC", "SE", "SP", "TO" }; for (String sequence : sequences) { conn.createStatement().execute("CREATE SEQUENCE VTABOL.FOLIO_SISTEMA_" + (sequence == "" ? sequence : (sequence + "_") + idEmpresa + "_SEQ INCREMENT BY 1 START WITH 1 NOCACHE ORDER NOCYCLE")); } } } catch (SQLException e) { throw new RuntimeException(e); } } @Override @SuppressWarnings("unchecked") public List obtenerTodosIncluindoEmpresaTodas() { Criteria c = getSession().createCriteria(getPersistentClass()); c.add(Restrictions.eq("activo", Boolean.TRUE)); c.addOrder(Order.asc("nombempresa")); return c.list(); } }