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

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 com.rjconsultores.ventaboletos.vo.tarifa.TarifaEscalaGroupVO;
import com.rjconsultores.ventaboletos.vo.tarifa.TarifaEscalaVO;
import com.rjconsultores.ventaboletos.vo.tarifa.TarifaOficialEscalaGroupVO;
import com.rjconsultores.ventaboletos.vo.tarifa.TarifaOficialEscalaVO;

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

/**
 *
 * @author Rafius
 */
public interface RutaCombinacionDAO extends GenericDAO<RutaCombinacion, Integer> {

    public boolean busquedaRutaTramo(Ruta ruta, Tramo tramo, Boolean ativo);

    public RutaCombinacion busquedaTramoRutaTramo(Ruta ruta, Tramo trBuscaOrigemDestino);

    /**
     * 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 RutaCombinacion busquedaTramoRutaOrigemDestino(Ruta ruta, Parada origem, Parada destino);
    
    public RutaCombinacion busquedaTramoRutaOrigemDestino(Integer ruta, Integer origem, Integer destino);

    public List<RutaCombinacion> obtenerPorRuta(Ruta ruta);

    public boolean buscarRutaCombinacionExisteTramo(Tramo tramo);

    /**
     * Hace una busquena en los tramos faltantes en la combinacion de la ruta informada
     * @param rutaId
     * @return
     */
    List<Tramo> tramosFaltantes(Integer rutaId);

    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 List<TarifaEscalaVO> pesquisaTarifaEscalaObj(String rutaId, String monedaId, String vigenciaId, String marcaId);

    public List<TarifaEscalaGroupVO> pesquisaTarifaGroupObj(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 List<TarifaOficialEscalaVO> pesquisaTarifaOficialEscalaObj(String rutaId, String monedaId, String vigenciaId, String marcaId);

    public List<TarifaOficialEscalaGroupVO> pesquisaTarifaOficialGroupObj(List<Moneda> lsAddRmvMonedas, List<Marca> lsAddRmvMarcas, List<ClaseServicio> lsAddRmvClaseServico, List<Empresa> lsAddRmvEmpresas, List<Ruta> lsAddRmvRutas, List<VigenciaTarifa> lsAddRmvVigenciaTarifa);

    public List<Object> pesquisaTarifaOficialObj(List<Moneda> lsAddRmvMonedas, List<Marca> lsAddRmvMarcas, List<ClaseServicio> lsAddRmvClaseServico, List<Empresa> lsAddRmvEmpresas, List<Ruta> lsAddRmvRutas, List<VigenciaTarifa> lsAddRmvVigenciaTarifa);
    
    /**
     * Indica se existe alguma combinação ativa com o tramo informado
     * @param tramo
     * @return
     */
    public boolean existeTramo(Tramo tramo);
    
    public boolean existeTramo(Tramo tramo, ClaseServicio claseServicio);

	boolean isRutaCombinacionVenda(Integer rutaId, Integer origenId, Integer destinoId);

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