/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package com.rjconsultores.ventaboletos.dao.hibernate; import com.rjconsultores.ventaboletos.dao.RutaSecuenciaDAO; import com.rjconsultores.ventaboletos.entidad.Parada; import com.rjconsultores.ventaboletos.entidad.Ruta; import com.rjconsultores.ventaboletos.entidad.RutaSecuencia; import com.rjconsultores.ventaboletos.utilerias.UsuarioLogado; import java.util.List; import org.hibernate.Criteria; import org.hibernate.Query; 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.hibernate.criterion.Order; /** * * @author Rafius */ @Repository("rutaSecuenciaDAO") public class RutaSecuenciaHibernateDAO extends GenericHibernateDAO implements RutaSecuenciaDAO { @Autowired public RutaSecuenciaHibernateDAO(@Qualifier("sessionFactory") SessionFactory factory) { setSessionFactory(factory); } public List buscarSecuenciaOrdenado(Ruta ruta) { Criteria c = getSession().createCriteria(getPersistentClass()); c.add(Restrictions.eq("activo", Boolean.TRUE)); c.add(Restrictions.eq("ruta", ruta)); c.addOrder(Order.asc("numsecuencia")); return c.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY).list(); } public int borrarSecuencias(Ruta ruta) { Query query = this.getSession().createQuery("UPDATE RutaSecuencia SET activo = 0, fecmodif = current_timestamp(), usuarioId= :usuario where ruta = :ruta"); query.setParameter("usuario", UsuarioLogado.getUsuarioLogado().getUsuarioId()); query.setParameter("ruta", ruta); return query.executeUpdate(); } @Override public boolean paradaSecuenciaValida(Ruta ruta, Parada origen, Parada destino) { Criteria cOrigen = makeCriteria(); cOrigen.add(Restrictions.eq("activo", Boolean.TRUE)); cOrigen.add(Restrictions.eq("ruta", ruta)); cOrigen.setProjection(Projections.property("numsecuencia")); Criteria cOrigenTramo = cOrigen.createCriteria("tramo"); cOrigenTramo.add(Restrictions.eq("origem", origen)); Short numSecOrigen = (Short) cOrigen.uniqueResult(); Criteria cDestino = makeCriteria(); cDestino.add(Restrictions.eq("activo", Boolean.TRUE)); cDestino.add(Restrictions.eq("ruta", ruta)); cDestino.setProjection(Projections.property("numsecuencia")); Criteria cDestinoTramo = cDestino.createCriteria("tramo"); cDestinoTramo.add(Restrictions.eq("origem", destino)); Short numSecDestino = (Short) cDestino.uniqueResult(); boolean destinoFinal = false; // destino final da ruta if (numSecDestino == null) { cDestino = makeCriteria(); cDestino.add(Restrictions.eq("activo", Boolean.TRUE)); cDestino.add(Restrictions.eq("ruta", ruta)); cDestino.setProjection(Projections.property("numsecuencia")); cDestinoTramo = cDestino.createCriteria("tramo"); cDestinoTramo.add(Restrictions.eq("destino", destino)); numSecDestino = (Short) cDestino.uniqueResult(); destinoFinal = true;//quando é o destino final (ultima parada da secuencia), o numero da secOrigem pode ser igual ao secDestino } if ((numSecOrigen != null) && (numSecDestino != null)) { return (destinoFinal)?(numSecOrigen.compareTo(numSecDestino) <= 0):(numSecOrigen.compareTo(numSecDestino) < 0); } return false; } }