/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package com.rjconsultores.ventaboletos.dao.hibernate; import java.util.List; import org.apache.commons.lang.Validate; import org.apache.log4j.Logger; import org.hibernate.Criteria; import org.hibernate.SQLQuery; import org.hibernate.SessionFactory; import org.hibernate.criterion.Projections; 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 org.springframework.transaction.annotation.Transactional; import com.rjconsultores.ventaboletos.dao.RutaDAO; import com.rjconsultores.ventaboletos.dao.TarifaDAO; import com.rjconsultores.ventaboletos.entidad.Categoria; import com.rjconsultores.ventaboletos.entidad.ClaseServicio; import com.rjconsultores.ventaboletos.entidad.Marca; import com.rjconsultores.ventaboletos.entidad.Moneda; import com.rjconsultores.ventaboletos.entidad.OrgaoConcedente; import com.rjconsultores.ventaboletos.entidad.Parada; import com.rjconsultores.ventaboletos.entidad.Ruta; import com.rjconsultores.ventaboletos.entidad.Tarifa; import com.rjconsultores.ventaboletos.entidad.TipoPuntoVenta; import com.rjconsultores.ventaboletos.entidad.Tramo; import com.rjconsultores.ventaboletos.entidad.VigenciaTarifa; import com.rjconsultores.ventaboletos.exception.BusinessException; import com.rjconsultores.ventaboletos.utilerias.UsuarioLogado; /** * * @author rodrigo */ @Repository("tarifaDAO") public class TarifaHibernateDAO extends GenericHibernateDAO implements TarifaDAO { @Autowired private RutaDAO rutaDAO; private static Logger log = Logger.getLogger(TarifaHibernateDAO.class); @Autowired public TarifaHibernateDAO(@Qualifier("sessionFactory") SessionFactory factory) { setSessionFactory(factory); } @Override public List obtenerTodos() { Criteria c = getSession().createCriteria(getPersistentClass()); c.add(Restrictions.eq("activo", Boolean.TRUE)); return c.list(); } public boolean existe(Marca marca, Tramo tramo, Moneda moneda, ClaseServicio claseServicio, VigenciaTarifa vigenciaTarifa, Ruta ruta, OrgaoConcedente orgaoConcedente) { Validate.notNull(marca); Validate.notNull(tramo); Validate.notNull(moneda); Validate.notNull(claseServicio); Validate.notNull(vigenciaTarifa); Validate.notNull(ruta); Validate.notNull(orgaoConcedente); Criteria c = getSession().createCriteria(getPersistentClass()); c.add(Restrictions.eq("marca", marca)); c.add(Restrictions.eq("tramo", tramo)); c.add(Restrictions.eq("moneda", moneda)); c.add(Restrictions.eq("claseServicio", claseServicio)); c.add(Restrictions.eq("vigenciaTarifa", vigenciaTarifa)); c.add(Restrictions.eq("ruta", ruta)); c.add(Restrictions.eq("orgaoConcedente", orgaoConcedente)); c.setProjection(Projections.rowCount()); return (HibernateFix.count(c.list()) > 0); } public List pesquisar(Marca marca, Parada origem, Parada destino, Moneda moneda,ClaseServicio claseServicio, VigenciaTarifa vigenciaTarifa,Categoria categoria, TipoPuntoVenta tipoPuntoVenta) { Criteria c = getSession().createCriteria(getPersistentClass()); c.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY); Criteria cCategoria = null; if (categoria != null) { cCategoria = c.createCriteria("lsTarifaCategoria"); cCategoria.add(Restrictions.eq("categoria", categoria)); cCategoria.add(Restrictions.eq("activo", Boolean.TRUE)); } Criteria cTipoPuntoVenta = null; if (tipoPuntoVenta != null) { cTipoPuntoVenta = c.createCriteria("lsTarifaTipoptovta"); cTipoPuntoVenta.add(Restrictions.eq("tipoPuntoVenta", tipoPuntoVenta)); cTipoPuntoVenta.add(Restrictions.eq("activo", Boolean.TRUE)); } if (marca != null) { c.add(Restrictions.eq("marca", marca)); } Criteria cTramo = c.createCriteria("tramo"); if (origem != null) { cTramo.add(Restrictions.eq("origem", origem)); } if (destino != null) { cTramo.add(Restrictions.eq("destino", destino)); } if (moneda != null) { c.add(Restrictions.eq("moneda", moneda)); } if (claseServicio != null) { c.add(Restrictions.eq("claseServicio", claseServicio)); } if (vigenciaTarifa != null) { c.add(Restrictions.eq("vigenciaTarifa", vigenciaTarifa)); } return c.list(); } public Tarifa buscar(Tramo tramo, Marca marca, ClaseServicio claseServicio,VigenciaTarifa vigenciaTarifa, Moneda moneda, Ruta ruta) { Criteria c = getSession().createCriteria(getPersistentClass()); c.add(Restrictions.eq("marca", marca)); Criteria cTramo = c.createCriteria("tramo"); cTramo.add(Restrictions.eq("activo", true)); c.add(Restrictions.eq("tramo", tramo)); c.add(Restrictions.eq("claseServicio", claseServicio)); c.add(Restrictions.eq("vigenciaTarifa", vigenciaTarifa)); c.add(Restrictions.eq("moneda", moneda)); c.add(Restrictions.eq("ruta", ruta)); c.add(Restrictions.eq("activo", Boolean.TRUE)); return (Tarifa) c.uniqueResult(); } public List buscarTarifasAtivasInativasPorVigencia(VigenciaTarifa vigencia) { Criteria c = getSession().createCriteria(getPersistentClass()); if (vigencia != null) { c.add(Restrictions.eq("vigenciaTarifa", vigencia)); } return c.list(); } public List buscarTarifasAtivasPorVigencia(VigenciaTarifa vigenciaTarifa) { Criteria c = getSession().createCriteria(getPersistentClass()); c.add(Restrictions.eq("activo", Boolean.TRUE)); c.add(Restrictions.eq("vigenciaTarifa", vigenciaTarifa)); return c.list(); } public boolean buscarTarifaExisteTramo(Tramo tramo) { Criteria c = this.makeCriteria(); c.add(Restrictions.eq("tramo", tramo)); c.add(Restrictions.eq("activo", Boolean.TRUE)); c.setProjection(Projections.rowCount()); return (HibernateFix.count(c.list()) > 0); } @Override @Transactional(rollbackFor = BusinessException.class) public void copiarTarifas(VigenciaTarifa vigenciaTarifaOrigem, VigenciaTarifa vigenciaTarifaDestino, boolean excluirTarifasDestino) throws BusinessException { try { StringBuilder sQuery = null; if(excluirTarifasDestino) { sQuery = new StringBuilder("DELETE FROM TARIFA WHERE VIGENCIATARIFA_ID = :VIGENCIATARIFAID "); SQLQuery qrUpdate = getSession().createSQLQuery(sQuery.toString()); qrUpdate.setParameter("VIGENCIATARIFAID", vigenciaTarifaDestino.getVigenciatarifaId()); qrUpdate.executeUpdate(); } sQuery = new StringBuilder("INSERT INTO TARIFA( "); sQuery.append("TARIFA_ID,PRECIO,PRECIOREDABIERTO,TRAMO_ID,MARCA_ID,CLASESERVICIO_ID,PRECIOORIGINAL,MONEDA_ID,VIGENCIATARIFA_ID,STATUSTARIFA,ACTIVO,FECMODIF,") .append("USUARIO_ID,IMPORTETAXAEMBARQUE,IMPORTEPEDAGIO,IMPORTEOUTROS,IMPORTESEGURO,ORGAOCONCEDENTE_ID,RUTA_ID,ORIGEN_ID,DESTINO_ID) ") .append("SELECT ") .append("TARIFA_SEQ.NEXTVAL,PRECIO,PRECIOREDABIERTO,TRAMO_ID,MARCA_ID,CLASESERVICIO_ID,PRECIOORIGINAL,MONEDA_ID,:VIGENCIATARIFAIDDESTINO,STATUSTARIFA,1,sysdate,") .append(":USUARIOID,IMPORTETAXAEMBARQUE,IMPORTEPEDAGIO,IMPORTEOUTROS,IMPORTESEGURO,ORGAOCONCEDENTE_ID,RUTA_ID,ORIGEN_ID,DESTINO_ID ") .append("FROM TARIFA ") .append("WHERE ACTIVO = 1 ") .append("AND VIGENCIATARIFA_ID = :VIGENCIATARIFAIDORIGEM "); SQLQuery qrInsert = getSession().createSQLQuery(sQuery.toString()); qrInsert.setParameter("VIGENCIATARIFAIDORIGEM", vigenciaTarifaOrigem.getVigenciatarifaId()); qrInsert.setParameter("VIGENCIATARIFAIDDESTINO", vigenciaTarifaDestino.getVigenciatarifaId()); qrInsert.setParameter("USUARIOID", UsuarioLogado.getUsuarioLogado().getUsuarioId()); qrInsert.executeUpdate(); } catch (Exception e) { log.error(e.getMessage()); throw new BusinessException(e.getMessage(), e.getCause()); } } @Override public boolean existeTarifas(VigenciaTarifa vigenciaTarifa) { Criteria c = getSession().createCriteria(getPersistentClass()); c.add(Restrictions.eq("activo", Boolean.TRUE)); c.add(Restrictions.eq("vigenciaTarifa", vigenciaTarifa)); c.setProjection(Projections.rowCount()); return (HibernateFix.count(c.list()) > 0); } }