/*
 * 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.CortesiaDireccionDAO;
import com.rjconsultores.ventaboletos.entidad.ClaseServicio;
import com.rjconsultores.ventaboletos.entidad.CortesiaDireccion;
import com.rjconsultores.ventaboletos.entidad.Marca;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import org.hibernate.Query;
import org.hibernate.Criteria;
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;

/**
 *
 * @author Shiro
 */
@Repository("cortesiaDireccionDAO")
public class CortesiaDireccionHibernateDAO extends GenericHibernateDAO<CortesiaDireccion, Integer>
        implements CortesiaDireccionDAO {

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

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

        return c.list();
    }

    public List<CortesiaDireccion> pesquisar(Marca marca, ClaseServicio claseServicio,
            Date fecInicio, Date fecFinal) {
        Criteria c = getSession().createCriteria(getPersistentClass());
        c.add(Restrictions.eq(ACTIVO, Boolean.TRUE));

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

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

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

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

        return c.list();
    }

    public List<CortesiaDireccion> buscar(CortesiaDireccion cortesiaDireccion) {
        Criteria c = getSession().createCriteria(getPersistentClass());
        c.add(Restrictions.eq(ACTIVO, Boolean.TRUE));

//        if (cortesiaDireccion.getFecInicioV() != null) {
//            c.add(Restrictions.eq("fecInicioV", cortesiaDireccion.getFecInicioV()));
//        }
//
//        if (cortesiaDireccion.getFecFinV() != null) {
//            c.add(Restrictions.eq("fecFinV", cortesiaDireccion.getFecFinV()));
//        }

        if (cortesiaDireccion.getClaseServicio() != null) {
            c.add(Restrictions.eq("claseServicio", cortesiaDireccion.getClaseServicio()));
        }

        if (cortesiaDireccion.getMarca() != null) {
            c.add(Restrictions.eq("marca", cortesiaDireccion.getMarca()));
        }

        if (cortesiaDireccion.getTipocortesiaDescuento() != null) {
            c.add(Restrictions.eq("tipocortesiaDescuento",
                    cortesiaDireccion.getTipocortesiaDescuento()));
        }

        return c.list();
    }

    public List<CortesiaDireccion> buscarFolio(CortesiaDireccion cortesiaDireccion) {

        Integer folioInicio = cortesiaDireccion.getNumFolioInicio();
        Integer folioFim = cortesiaDireccion.getNumFolioFin();

        String hql = "select pv from CortesiaDireccion pv "
                + " where pv.activo = 1 "
                + " and tipocortesiaDescuento = " + cortesiaDireccion.getTipocortesiaDescuento().getTipocortesiadescuentoId()
                + " and marca = " + cortesiaDireccion.getMarca().getMarcaId()
                + " and claseServicio = " + cortesiaDireccion.getClaseServicio().getClaseservicioId()
                + " and (((( " + folioInicio + " BETWEEN numFolioInicio AND numFolioFin ) "
                + " OR " + folioFim + " BETWEEN numFolioInicio AND numFolioFin)) "
                + " OR ((numFolioInicio BETWEEN " + folioInicio + " AND " + folioFim + ") "
                + " OR (numFolioFin BETWEEN " + folioInicio + " AND " + folioFim + "))) ";

        Query sq = getSession().createQuery(hql);

        return sq.list();
    }
}
