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

import java.util.ArrayList;
import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.Query;
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.ClasseServicoDAO;
import com.rjconsultores.ventaboletos.entidad.ClaseServicio;

/**
 * 
 * @author Administrador
 */
@SuppressWarnings("unchecked")
@Repository("claseServicioDAO")
public class ClasseServicoHibernateDAO extends GenericHibernateDAO<ClaseServicio, Integer> implements ClasseServicoDAO {

	@Autowired
	public ClasseServicoHibernateDAO(@Qualifier("sessionFactory") SessionFactory factory) {
		setSessionFactory(factory);
	}
	
	@Override
	public List<ClaseServicio> obtenerTodos() {
		Criteria c = getSession().createCriteria(getPersistentClass());
		c.add(Restrictions.eq(ACTIVO, Boolean.TRUE));
		c.addOrder(Order.asc("descclase"));

		return c.list();
	}
	
	public List<ClaseServicio> buscarPorEmpresasDoUsuario(String empresasUsuario) {

		String consulta = "SELECT DISTINCT mcs.marcaClaseservicioPK.claseservicio "
				+ "FROM MarcaClaseServicio mcs "
				+ "WHERE mcs.marcaClaseservicioPK.marca.empresa.empresaId IN (:empresas) and mcs.activo = 1 ";

		List<Integer> ids = new ArrayList<Integer>();
		for (String empresa : empresasUsuario.split(",")) {
			ids.add(new Integer(empresa));
		}
		Query query = getSession().createQuery(consulta);
		query.setParameterList("empresas", ids);

		List<ClaseServicio> result = (List<ClaseServicio>) query.list();
		return result;
	}

	public List<ClaseServicio> buscarPorNome(Integer idClaseServicio, String nomeClaseServicio) {
		Criteria c = getSession().createCriteria(getPersistentClass());
		c.add(Restrictions.eq(ACTIVO, Boolean.TRUE));
		c.add(Restrictions.eq("descclase", nomeClaseServicio));

		if (idClaseServicio != null) {
			c.add(Restrictions.ne("claseservicioId", idClaseServicio));
		}
		
		return c.list();
	}

	public List<ClaseServicio> buscarTodosExceto(Integer... idClase) {
		Criteria c = this.makeCriteria();
		for (Integer id : idClase) {
			c.add(Restrictions.ne("claseservicioId", id));
		}
		c.add(Restrictions.eq(ACTIVO, Boolean.TRUE));
		c.addOrder(Order.asc("descclase"));

		return c.list();
	}
	
	public List<ClaseServicio> buscarListaPorIds(List<Integer> claseIds) {
		Criteria c = this.makeCriteria();
		c.add(Restrictions.in("claseservicioId", claseIds));
		c.add(Restrictions.eq(ACTIVO, Boolean.TRUE));

		return c.list();
	}
}
