AdmMono/src/com/rjconsultores/ventaboletos/dao/hibernate/VoucherHibernateDAO.java

166 lines
4.4 KiB
Java

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<Voucher, Long> implements VoucherDAO {
@Autowired
public VoucherHibernateDAO(@Qualifier("sessionFactory") SessionFactory factory) {
setSessionFactory(factory);
}
@Override
public List<Voucher> obtenerTodos() {
Criteria c = getSession().createCriteria(getPersistentClass());
c.add(Restrictions.eq(ACTIVO, Boolean.TRUE));
return c.list();
}
@Override
public List<Voucher> 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);
}
}
}