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

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.Plaza;
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;

/**
 *
 * @author rodrigo
 */
public interface TarifaService extends GenericService<Tarifa, Integer> {

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

    /**
     * método usado para checar se uma tarifa já está cadastrada no sistema.
     * 
     * Uma tarifa é considerada única de acordo a marca, tramo, moneda, claseServicio, vigenciaTarifa, ruta e 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);

    public List<Tarifa> buscarPorVigencia(VigenciaTarifa vigencia,Empresa empresa);

    public Boolean podeAlterarTarifaMinima(Tarifa tarifa, Marca marca, Parada origem,Parada destino, ClaseServicio claseServicio, Plaza plaza, Moneda moneda, VigenciaTarifa vigenciaTarifa);

    public List<Tarifa> buscarExisteVigencia(VigenciaTarifa vigenciaTarifa);

    public Boolean generarTarifas(VigenciaTarifa vigencia, Marca marca);

    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);
	
	public List<Tarifa> obterTarifaOficialPorFiltro(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);
    
}
