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

import java.util.List;

import com.rjconsultores.ventaboletos.entidad.Categoria;
import com.rjconsultores.ventaboletos.entidad.ClaseServicio;
import com.rjconsultores.ventaboletos.entidad.Empresa;
import com.rjconsultores.ventaboletos.entidad.Marca;
import com.rjconsultores.ventaboletos.entidad.Moneda;
import com.rjconsultores.ventaboletos.entidad.OrgaoConcedente;
import com.rjconsultores.ventaboletos.entidad.Parada;
import com.rjconsultores.ventaboletos.entidad.Ruta;
import com.rjconsultores.ventaboletos.entidad.Tarifa;
import com.rjconsultores.ventaboletos.entidad.TipoPuntoVenta;
import com.rjconsultores.ventaboletos.entidad.Tramo;
import com.rjconsultores.ventaboletos.entidad.Via;
import com.rjconsultores.ventaboletos.entidad.VigenciaTarifa;
import com.rjconsultores.ventaboletos.exception.BusinessException;
import com.rjconsultores.ventaboletos.service.TarifaService;
import com.rjconsultores.ventaboletos.vo.comissao.TarifaVO;

/**
 * 
 * @author rodrigo
 */
public interface TarifaDAO extends GenericDAO<Tarifa, Integer> {

	public List<Tarifa> pesquisar(Marca marca, Parada origem, Parada destino, Moneda moneda,ClaseServicio claseServicio, VigenciaTarifa vigenciaTarifa,Categoria categoria, TipoPuntoVenta tipoPuntoVenta);

	/**
	 * {@link TarifaService#existe(Marca, Tramo, Moneda, ClaseServicio, VigenciaTarifa, Ruta, OrgaoConcedente)}
	 * 
	 * @param marca
	 * @param tramo
	 * @param moneda
	 * @param claseServicio
	 * @param vigenciaTarifa
	 * @param ruta
	 * @param orgaoConcedente
	 * @return
	 */
	public boolean existe(Marca marca, Tramo tramo, Moneda moneda, ClaseServicio claseServicio, VigenciaTarifa vigenciaTarifa, Ruta ruta, OrgaoConcedente orgaoConcedente);
	
	public Tarifa buscar(Tramo tramo, Marca marca, ClaseServicio claseServicio,VigenciaTarifa vigenciaTarifa, Moneda moneda, Ruta ruta);

	/**
	 * Lista as tarifas que tem a vigencia informada.<br/>
	 * 
	 * As tarifas listadas podem estar ativas ou inativas<br/>
	 * 
	 * @param vigencia
	 * @return
	 */
	public List<Tarifa> buscarTarifasAtivasInativasPorVigencia(VigenciaTarifa vigencia,Empresa empresa);

	/**
	 * 	Lista as tarifas que tem a vigencia informada.<br/>
	 * 
	 *  Só é listado as tarifas ativas<br/>
	 *  
	 * @param vigenciaTarifa
	 * @return
	 */
	public List<Tarifa> buscarTarifasAtivasPorVigencia(VigenciaTarifa vigenciaTarifa);
	
	public boolean buscarTarifaExisteTramo(Tramo tramo) ;
	
	public void copiarTarifas(VigenciaTarifa vigenciaTarifaOrigem, VigenciaTarifa vigenciaTarifaDestino, Empresa empresa, boolean excluirTarifasDestino) throws BusinessException;
	
	public boolean existeTarifas(VigenciaTarifa vigenciaTarifa);
	
	public void excluirTodasTarifas(Moneda moneda, Marca marca, ClaseServicio claseServicio, VigenciaTarifa vigenciaTarifa, Parada origem, 
	Parada destino, Categoria categoria, TipoPuntoVenta tipoPuntoVenta, Ruta ruta, Via via, Boolean vende, Integer usuarioModifId);	
	
	public List<TarifaVO> obterTarifaOficialPorFiltroVO(Moneda moneda, Marca marca,List<Marca>lsMarcas, Parada origem, Parada destino, ClaseServicio claseServicio, VigenciaTarifa vigenciaTarifa,Categoria categoria,TipoPuntoVenta tipoPuntoVenta, Ruta ruta, Via via,Boolean vende);
    
	public void updateTarifa(Tarifa t);
}
