/*
 * 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.ClaseServicio;
import com.rjconsultores.ventaboletos.entidad.OrgaoTramo;
import com.rjconsultores.ventaboletos.entidad.Parada;
import com.rjconsultores.ventaboletos.entidad.Tramo;
import com.rjconsultores.ventaboletos.entidad.Via;
import com.rjconsultores.ventaboletos.exception.BusinessException;

/**
 *
 * @author Administrador
 */
public interface TramoService {

    public Tramo obtenerID(Integer id);

    public void borrar(Tramo entidad) throws BusinessException;

    public Tramo obtenerPorOrigemDestino(Parada origem, Parada destino);

    public List<Tramo> obtenerListPorOrigemDestino(Parada origem, Parada destino);

    public Tramo obtenerTramotPorOrigemDestinoVia(Parada origem, Parada destino, Via v);

    /**
     * Hace la búsqueda del tramo que tiene origen - destino - via - clase servicio.
     * 
     * @param origem
     * @param destino
     * @param via
     * @param claseServicio
     * @return 
     */
    public Tramo obtenerTramoUnicoRuta(Parada origem, Parada destino, Via via, ClaseServicio claseServicio);

    public Tramo buscar(Parada origem, Parada destino, Via via);

    /**
     * Regreso los tramos con las paradas en secuencia. Ej.: Paradas A,B,C. Tramos A-B; B-C
     */
    public List<Tramo> buscar(List<Parada> lsParadas, Via via);

    public List<Tramo> buscarCveParada(String origen, String destino, String via);
    
    /**
     * Grava los tramos en la lista con los km real y km del conductor en la via especificada.
     * 
     * Se el tramo ya existie, cambia los valores, sino, graba un nuebo
     * @param lsTramos
     * @param via 
     */
    public void guardarTramosKm(List<Tramo> lsTramos,Via via);
    
    public List<Via> obtenerViasOrigemDestino(Parada origem, Parada destino);
    
    public List<Tramo> obtenerPorOrigemDestinoFetchLazy(Parada origem, Parada destino) ;
    
    public Tramo suscribirActualizar(Tramo tramo) throws BusinessException ;
    
    public List<OrgaoTramo> getLsOrgaoTramoByTramo(Tramo tramo);

    /**
     * Gerar a descrição automática do tramo
     * 
     * @param origen
     * @param destino
     * @param via
     * @return
     */
	public String gerarDescripcionTramo(Parada origen, Parada destino, Via via);

	public Boolean existe(Parada origem, Parada destino);
}
