/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.rjconsultores.ventaboletos.dao.hibernate;

import java.util.Date;
import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.SessionFactory;
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.VigenciaTarifaDAO;
import com.rjconsultores.ventaboletos.entidad.VigenciaTarifa;

/**
 * 
 * @author rodrigo
 */
@Repository("vigenciaTarifaDAO")
public class VigenciaTarifaHibernateDAO extends
		GenericHibernateDAO<VigenciaTarifa, Integer> implements
		VigenciaTarifaDAO {

	@Autowired
	public VigenciaTarifaHibernateDAO(
			@Qualifier("sessionFactory") SessionFactory factory) {
		setSessionFactory(factory);
	}

	@Override
	public List<VigenciaTarifa> obtenerTodos() {
		Criteria c = getSession().createCriteria(getPersistentClass());
		c.add(Restrictions.eq(ACTIVO, Boolean.TRUE));

		c.addOrder(Order.asc("feciniciovigencia"));

		return c.list();
	}

	@Override
	public List<VigenciaTarifa> pesquisar(Date inicio, Date fim) {
		Criteria c = getSession().createCriteria(getPersistentClass());
		c.add(Restrictions.eq(ACTIVO, Boolean.TRUE));

		if (inicio != null) {
			c.add(Restrictions.eq("feciniciovigencia", inicio));
		}

		if (fim != null) {
			c.add(Restrictions.eq("fecfinvigencia", fim));
		}
		return c.list();
	}

	@Override
	public List<VigenciaTarifa> buscarVigenciasIntervalo(VigenciaTarifa vt) {
		Criteria c = this.getSession().createCriteria(VigenciaTarifa.class);
		c.add(Restrictions.eq(ACTIVO, Boolean.TRUE));
		c.add(Restrictions.ge("fecfinvigencia", vt.getFeciniciovigencia()));
		c.add(Restrictions.le("feciniciovigencia", vt.getFecfinvigencia()));
		
		if (vt.getVigenciatarifaId() != null) {
			c.add(Restrictions.ne("vigenciatarifaId", vt.getVigenciatarifaId()));
		}

		c.addOrder(Order.asc("feciniciovigencia"));
		return c.list();
	}

}
