package com.rjconsultores.ventaboletos.dao.hibernate; import java.util.Date; import java.util.List; import org.hibernate.Criteria; import org.hibernate.Query; import org.hibernate.SessionFactory; 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.VoucherDAO; import com.rjconsultores.ventaboletos.entidad.Voucher; @SuppressWarnings("unchecked") @Repository("voucherDAO") public class VoucherHibernateDAO extends GenericHibernateDAO implements VoucherDAO { @Autowired public VoucherHibernateDAO(@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(); } @Override public List buscarConsulta(Long voucherId, String numContrato, String nit, String nomeTransportadora, Date dataInicial, Date dataFinal, Integer origemId, Integer destinoId) { StringBuilder hql = new StringBuilder(); hql.append("SELECT v, ori.descParada AS descOrigem , des.descParada AS descDestino "); hql.append("FROM Voucher v "); setJoins( numContrato, nit, nomeTransportadora, hql); hql.append("WHERE v.activo = 1 "); setClausulas(voucherId, numContrato, nit, nomeTransportadora, dataInicial, dataFinal, origemId, destinoId, hql); hql.append("ORDER BY voucherId "); Query query = getSession().createQuery(hql.toString()); setParametros(voucherId, numContrato, nit, nomeTransportadora, dataInicial, dataFinal, origemId, destinoId, query); return query.list(); } private void setJoins(String numContrato, String nit, String nomeTransportadora, StringBuilder hql) { hql.append("LEFT JOIN Parada ori ON v.origenId = ori.origenId "); hql.append("LEFT JOIN Parada des ON v.origenId = des.origenId "); } private void setClausulas(Long voucherId, String numContrato, String nit, String nomeTransportadora, Date dataInicial, Date dataFinal, Integer origemId, Integer destinoId, StringBuilder hql) { if(voucherId != null ){ hql.append(" AND v.voucherId = :voucherId "); } if(numContrato != null ){ hql.append(" AND v.voucherId = :voucherId "); } if(nit != null ){ hql.append(" AND v.voucherId = :voucherId "); } if(nomeTransportadora != null ){ hql.append(" AND v.voucherId = :voucherId "); } if(dataInicial != null ){ hql.append(" AND v.dataValidade >= :dataInicial "); } if(dataFinal != null ){ hql.append(" AND v.dataValidade <= :dataFinal "); } if(origemId != null ){ hql.append(" AND v.origenId = :origemId "); } if(destinoId != null ){ hql.append(" AND v.destinoId = :destinoId "); } } private void setParametros(Long voucherId, String numContrato, String nit, String nomeTransportadora, Date dataInicial, Date dataFinal, Integer origemId, Integer destinoId, Query query) { if(voucherId != null ){ query.setLong("voucherId", voucherId); } if(numContrato != null ){ query.setString("numContrato", numContrato); } if(nit != null ){ query.setString("nit", nit); } if(nomeTransportadora != null ){ query.setString("nomeTransportadora", nomeTransportadora); } if(dataInicial != null ){ query.setDate("dataInicial", dataInicial); } if(dataFinal != null ){ query.setDate("dataFinal", dataFinal); } if(origemId != null ){ query.setInteger("origemId", origemId); } if(destinoId != null ){ query.setInteger("destinoId", destinoId); } } }