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

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.RutaCombinacion;
import com.rjconsultores.ventaboletos.entidad.TipoPuntoVenta;
import com.rjconsultores.ventaboletos.entidad.Tramo;
import com.rjconsultores.ventaboletos.entidad.VigenciaTarifa;

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

import org.apache.poi.hssf.usermodel.HSSFWorkbook;

/**
 *
 * @author Rafius
 */
public interface RutaCombinacionService extends GenericService<RutaCombinacion, Integer> {

    public void ativar(RutaCombinacion rcExiste);

    public boolean busquedaRutaTramo(Ruta ruta, Tramo trBuscaOrigemDestino, Boolean b);

    public RutaCombinacion busquedaTramoRutaTramo(Ruta ruta, Tramo trBuscaOrigemDestino);

    public RutaCombinacion busquedaTramoRutaOrigemDestino(Ruta ruta, Parada origem, Parada destino);
    
    public RutaCombinacion busquedaTramoRutaOrigemDestino(Integer rutaId, Integer  origemId, Integer  destinoId);

    /**
     * Regreso el tramo de la entidade RutaCobinacion donde el tramo tines el origen-destino igual y la Rua sea la misma de RutaCombinacion
     * 
     * @param ruta
     * @param origen
     * @param destino
     * @return 
     */
    public Tramo busqueda(Ruta ruta, Parada origen, Parada destino);

    public List<RutaCombinacion> obtenerPorRuta(Ruta ruta);

    public boolean buscarRutaCombinacionExisteTramo(Tramo tramo);

    public int borrarCombinaciones(Ruta ruta);

    public void activar(Ruta ruta, Tramo trBuscaOrigemDestino);

    public List<Object> pesquisaTarifaObj(List<Moneda> lsAddRmvMonedas, List<Marca> lsAddRmvMarcas, List<ClaseServicio> lsAddRmvClaseServico, List<Categoria> lsAddRmvCategoria, List<Empresa> lsAddRmvEmpresas, List<Ruta> lsAddRmvRutas, List<TipoPuntoVenta> lsAddRmvTipoPuntoVenta, List<VigenciaTarifa> lsAddRmvVigenciaTarifa, List<OrgaoConcedente> lsAddRmvOrgaoConcedente);

    public List<Object> pesquisaTarifaEmbObj(List<Moneda> lsAddRmvMonedas, List<Marca> lsAddRmvMarcas, List<ClaseServicio> lsAddRmvClaseServico, List<Categoria> lsAddRmvCategoria, List<Empresa> lsAddRmvEmpresas, List<Ruta> lsAddRmvRutas, List<TipoPuntoVenta> lsAddRmvTipoPuntoVenta, List<VigenciaTarifa> lsAddRmvVigenciaTarifa, List<OrgaoConcedente> lsAddRmvOrgaoConcedente);
    
    public HSSFWorkbook gerarTarifaEscala(List<Moneda> lsAddRmvMonedas, List<Marca> lsAddRmvMarcas, List<ClaseServicio> lsAddRmvClaseServico, List<Categoria> lsAddRmvCategoria, List<Empresa> lsAddRmvEmpresas, List<Ruta> lsAddRmvRutas, List<TipoPuntoVenta> lsAddRmvTipoPuntoVenta, List<VigenciaTarifa> lsAddRmvVigenciaTarifa);

    public HSSFWorkbook gerarTarifaOficialEscala(List<Moneda> lsAddRmvMonedas, List<Marca> lsAddRmvMarcas, List<ClaseServicio> lsAddRmvClaseServico, ArrayList<Categoria> arrayList, List<Empresa> lsAddRmvEmpresas, List<Ruta> lsAddRmvRutas, ArrayList<TipoPuntoVenta> arrayList0, List<VigenciaTarifa> lsAddRmvVigenciaTarifa);

    public List<Object> pesquisaTarifaOficialObj(List<Moneda> lsAddRmvMonedas, List<Marca> lsAddRmvMarcas, List<ClaseServicio> lsAddRmvClaseServico, ArrayList<Categoria> arrayList, List<Empresa> lsAddRmvEmpresas, List<Ruta> lsAddRmvRutas, ArrayList<TipoPuntoVenta> arrayList0, List<VigenciaTarifa> lsAddRmvVigenciaTarifa);
    
    /**
     * Indica se existe alguma combinação ativa com o tramo informado
     * @param tramo
     * @return
     */
    public boolean existeTramo(Tramo tramo);
    
    public boolean isRutaCombinacionVenda(Integer rutaId, Integer origenId, Integer destinoId);

	Set<String> rutasCombinacionVenda(List<Ruta> rutas);
}
