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

import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.commons.collections.CollectionUtils;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;
import org.zkoss.util.resource.Labels;
import org.zkoss.zhtml.Messagebox;
import org.zkoss.zk.ui.Component;
import org.zkoss.zk.ui.Executions;
import org.zkoss.zk.ui.WrongValueException;
import org.zkoss.zk.ui.event.Event;
import org.zkoss.zk.ui.event.EventListener;
import org.zkoss.zkplus.databind.BindingListModelList;
import org.zkoss.zul.Combobox;
import org.zkoss.zul.Comboitem;
import org.zkoss.zul.Datebox;
import org.zkoss.zul.Intbox;
import org.zkoss.zul.Paging;
import org.zkoss.zul.Textbox;
import org.zkoss.zul.Timebox;
import org.zkoss.zul.api.Button;
import org.zkoss.zul.api.Checkbox;

import com.rjconsultores.ventaboletos.entidad.ClaseServicio;
import com.rjconsultores.ventaboletos.entidad.EsquemaAgrupacion;
import com.rjconsultores.ventaboletos.entidad.EsquemaAsiento;
import com.rjconsultores.ventaboletos.entidad.EsquemaCorrida;
import com.rjconsultores.ventaboletos.entidad.EsquemaOperacional;
import com.rjconsultores.ventaboletos.entidad.EsquemaTramo;
import com.rjconsultores.ventaboletos.entidad.Parada;
import com.rjconsultores.ventaboletos.entidad.ParadaEsquema;
import com.rjconsultores.ventaboletos.entidad.Ruta;
import com.rjconsultores.ventaboletos.entidad.RutaSecuencia;
import com.rjconsultores.ventaboletos.entidad.Tramo;
import com.rjconsultores.ventaboletos.entidad.TramoServicio;
import com.rjconsultores.ventaboletos.service.ClaseServicioService;
import com.rjconsultores.ventaboletos.service.EsquemaAgrupacionService;
import com.rjconsultores.ventaboletos.service.EsquemaCorridaService;
import com.rjconsultores.ventaboletos.service.EsquemaTramoService;
import com.rjconsultores.ventaboletos.service.RolOperativoService;
import com.rjconsultores.ventaboletos.service.RutaCombinacionService;
import com.rjconsultores.ventaboletos.service.RutaSecuenciaService;
import com.rjconsultores.ventaboletos.service.RutaService;
import com.rjconsultores.ventaboletos.service.TramoServicioService;
import com.rjconsultores.ventaboletos.utilerias.UsuarioLogado;
import com.rjconsultores.ventaboletos.web.utilerias.MyGenericForwardComposer;
import com.rjconsultores.ventaboletos.web.utilerias.MyListbox;
import com.rjconsultores.ventaboletos.web.utilerias.paginacion.HibernateSearchObject;
import com.rjconsultores.ventaboletos.web.utilerias.paginacion.PagedListWrapper;
import com.rjconsultores.ventaboletos.web.utilerias.render.RenderConfiguracionCorridaTramo;
import com.rjconsultores.ventaboletos.web.utilerias.render.RenderConfiguracionEsquemaAgrupacion;

/**
 * 
 * @author RJ Consultores
 */
@Controller("editarEsquemaAgrupacionController")
@Scope("prototype")
public class EditarEsquemaAgrupacionController extends MyGenericForwardComposer {

	private static Logger log = LogManager.getLogger(EditarEsquemaAgrupacionController.class);

	private static final long serialVersionUID = 1L;
	private MyListbox esquemaCorridaList;
	private Intbox txtID;
	private Textbox txtDesc;
	private Intbox txtQtd;
	private Intbox txtQtdeDiasGeracao;
	private Combobox cmbRuta;
	private Combobox cmbIndGeneraFeriado;
	private MyListbox esquemaTramoList;
	private Combobox cmbTramo;
	private Textbox txtPlataforma;

	private EsquemaAgrupacion esquemaAgrupacion;
	private BusquedaEsquemaAgrupacionController busquedaEsquemaAgrupacionController;

	private EsquemaCorrida esquemaCorrida;
	private Paging pagingEsquemaCorrida;

	private Datebox fecInicio;
	private Datebox fecFinal;
	private Checkbox lun;
	private Checkbox mar;
	private Checkbox mie;
	private Checkbox jue;
	private Checkbox vie;
	private Checkbox sab;
	private Checkbox dom;
	private Timebox horasalida;
	private Combobox cmbClase;
	private Button btnApagar;

	private List<RutaSecuencia> lsTramosRutaEsquemaCorrida;
	private List<RutaSecuencia> lsRutaSecuencia;
	private List<Parada> lsTramos;
	private List<EsquemaTramo> lsEsquemaTramo;
	private List<ParadaEsquema> lsParadaEsquema;
	private List<ClaseServicio> lsClase;

	@Autowired
	private ClaseServicioService claseService;
	@Autowired
	private RutaService rutaService;
	private List<Ruta> lsRuta;
	@Autowired
	private transient PagedListWrapper<EsquemaCorrida> plwEsquemaCorrida;
	@Autowired
	private EsquemaAgrupacionService esquemaAgrupacionService;
	@Autowired
	private RutaSecuenciaService rutaSecuenciaService;
	@Autowired
	private TramoServicioService tramoServicioService;
	@Autowired
	private EsquemaTramoService esquemaTramoService;
	@Autowired
	private RutaCombinacionService rutaCombinacionService;
	@Autowired
	private EsquemaCorridaService esquemaCorridaService;
	@Autowired
	private RolOperativoService rolOperativoService;

	@Override
	public void doAfterCompose(Component comp) throws Exception {
		super.doAfterCompose(comp);

		esquemaAgrupacion = (EsquemaAgrupacion) Executions.getCurrent().getArg().get("esquemaAgrupacion");
		busquedaEsquemaAgrupacionController = (BusquedaEsquemaAgrupacionController) Executions.getCurrent().getArg().get("busquedaEsquemaAgrupacionController");

		lsParadaEsquema = new ArrayList<ParadaEsquema>();

		if (esquemaCorrida == null) {
			esquemaCorrida = new EsquemaCorrida();
		}

		if (esquemaAgrupacion == null || esquemaAgrupacion.getEsquemaagrupacionId() == null) {
			esquemaAgrupacion = new EsquemaAgrupacion();
			btnApagar.setVisible(Boolean.FALSE);
			txtID.setDisabled(Boolean.FALSE);

		} else {
			txtID.setDisabled(Boolean.TRUE);
			preencheLista();
		}

		if (esquemaAgrupacion.getEsquemaagrupacionId() != null) {

			@SuppressWarnings("unchecked")
			List<EsquemaCorrida> lEsquemacorrida = (List<EsquemaCorrida>) esquemaCorridaList.getListData();

			if (!lEsquemacorrida.isEmpty()) {
				esquemaCorrida = lEsquemacorrida.iterator().next();

				lsEsquemaTramo = esquemaTramoService.obtenerPorEsquemaCorridaOrderNumSec(esquemaCorrida);
				carregarParadaSecuencia(lsEsquemaTramo);
				selecionarRutaSequenciaForaEsqCorrida();
			}

		}

		if (esquemaCorrida.getEsquemacorridaId() == null) {
			EsquemaOperacional eo = new EsquemaOperacional();
			eo.setActivo(Boolean.TRUE);
			eo.setFecmodif(Calendar.getInstance().getTime());
			eo.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId());
			esquemaCorrida.setEsquemaOperacional(eo);
		}

		popularCombobox(cmbIndGeneraFeriado);

		if (esquemaCorrida.getIndGeneraFeriado() != null) {
			if (esquemaCorrida.getIndGeneraFeriado().equals("S")) {
				cmbIndGeneraFeriado.setSelectedIndex(0);
			} else if (esquemaCorrida.getIndGeneraFeriado().equals("F")) {
				cmbIndGeneraFeriado.setSelectedIndex(1);
			} else if (esquemaCorrida.getIndGeneraFeriado().equals("N")) {
				cmbIndGeneraFeriado.setSelectedIndex(2);
			}
		}

		lsClase = claseService.buscarTodosExceto(-1);

		esquemaCorridaList.setItemRenderer(new RenderConfiguracionEsquemaAgrupacion());
		esquemaCorridaList.addEventListener("onDoubleClick", new EventListener() {

			@Override
			public void onEvent(Event event) throws Exception {
				EsquemaCorrida rc = (EsquemaCorrida) esquemaCorridaList.getSelected();

				if (rc.getRuta() == null) {
					Messagebox.show(Labels.getLabel("editarConfiguracionCorridaController.MSG.editarServicio"),
							Labels.getLabel("editarConfiguracionCorridaController.window.title"),
							Messagebox.OK,
							Messagebox.EXCLAMATION);
					return;
				}

				verPeriodo(rc);
			}
		});

		esquemaTramoList.setItemRenderer(new RenderConfiguracionCorridaTramo());
		esquemaTramoList.addEventListener("onDoubleClick", new EventListener() {

			@Override
			public void onEvent(Event event) throws Exception {
				ParadaEsquema pe = (ParadaEsquema) esquemaTramoList.getSelected();
				EsquemaTramo esquemaTramo = null;

				for (EsquemaTramo et : lsEsquemaTramo) {
					Short numSec = et.getNumsecuencia();

					if (numSec.equals(pe.getNumsecuencia())) {
						esquemaTramo = et;
						esquemaTramo.setPlataforma(pe.getPlataforma());
					}
				}

				verTempoEstanciaTramo(esquemaTramo, pe, (short) esquemaTramoList.getItemCount());
			}
		});

		llenarRutasPorClase();

	}

	public void onClick$btnNovoVagon(Event ev) {
		editarServicio(new EsquemaCorrida());
	}

	private void editarServicio(EsquemaCorrida rc) {
		if (rc == null) {
			return;
		}

		rc.setActivo(Boolean.TRUE);
		rc.setFecmodif(Calendar.getInstance().getTime());
		rc.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId());

		Map args = new HashMap();
		args.put("esquemaCorrida", rc);
		args.put("editarEsquemaAgrupacionController", this);
		args.put("esquemaCorridaList", esquemaCorridaList);
		args.put("esquemaAgrupacion", esquemaAgrupacion);

		openWindow("/gui/esquema_operacional/editarServicio.zul",
				Labels.getLabel("busquedaConfiguracionEsquemaAgrupacion.window.title"), args, MODAL);
	}

	private void verPeriodo(EsquemaCorrida rc) {
		if (rc == null) {
			return;
		}

		Map args = new HashMap();
		args.put("esquemaCorrida", rc);
		args.put("busquedaCorridaController", new BusquedaCorridaController());
		args.put("esquemaCorridaList", esquemaCorridaList);
		args.put("ehEsquemaAgrupacion", Boolean.TRUE);

		openWindow("/gui/esquema_operacional/editarCorrida.zul",
				Labels.getLabel("editarConfiguracionCorridaController.window.title"), args, MODAL);
	}

	@SuppressWarnings({ "rawtypes", "unchecked" })
	private void verTempoEstanciaTramo(EsquemaTramo et, ParadaEsquema pe, Short sequenciaSize) {
		if (et == null) {
			return;
		}

		Map args = new HashMap();
		args.put("esquemaTramo", et);
		args.put("paradaEsquema", pe);
		args.put("esquemaTramoList", esquemaTramoList);
		args.put("sequenciaSize", sequenciaSize);

		openWindow("/gui/esquema_operacional/tiempoEstanciaTramo.zul",
				Labels.getLabel("editarCatalogoDeRutaController.lhTiempoEstancia"), args, MODAL);
	}

	private void carregarParadaSecuencia(List<EsquemaTramo> lsEsquemaTramo) {

		ClaseServicio clase = esquemaCorrida.getClaseServicio();
		lsParadaEsquema.clear();
		if (!lsEsquemaTramo.isEmpty()) {
			List<EsquemaTramo> lsEsquemaTramoTodos = new ArrayList<EsquemaTramo>();

			if (esquemaCorrida.getEsquemacorridaId() != null) {
				lsEsquemaTramoTodos = esquemaTramoService.obtenerAtivosDesativosPorEsquemaCorrida(esquemaCorrida);
			}

			Short numsecuencia = 0;
			for (int i = 0; i < lsEsquemaTramo.size(); i++) {

				EsquemaTramo rs = lsEsquemaTramo.get(i);

				Tramo tramo = rs.getTramo();
				numsecuencia = rs.getNumsecuencia();
				Date tiempoEstancia = null;
				if ((i != 0) && (i != (lsEsquemaTramo.size()))) {
					tiempoEstancia = lsEsquemaTramo.get(i).getTiempoEstancia();
				}

				Date excepcionRecorrido = null;
				if (i != (lsEsquemaTramo.size())) {
					excepcionRecorrido = lsEsquemaTramo.get(i).getExcepcionRecorrido();
				}

				Date defautRecorrido = null;
				if (clase != null) {
					List<TramoServicio> lsTramoServicio = tramoServicioService.buscarPorTramoServico(tramo, clase);

					if (i != (lsEsquemaTramo.size())) {
						if (!lsTramoServicio.isEmpty()) {
							// soh eh permitido gravar um por classe, get(0):
							defautRecorrido = lsTramoServicio.get(0).getTiemporecorrido();
						}
					}
				}

				Parada paradaOrigem = tramo.getOrigem();
				// So adicionar a parada se o EsquemaTramo estiver ativo.
				if (rs.getActivo()) {
					String plataforma = rs.getPlataforma();
					addTramoPardaEsquema(paradaOrigem, numsecuencia, tiempoEstancia, plataforma, excepcionRecorrido, defautRecorrido);
				}
			}

			EsquemaTramo esquemaTramoFinal = lsEsquemaTramo.get(lsEsquemaTramo.size() - 1);

			Parada paradaDestino = esquemaTramoFinal.getTramo().getDestino();
			Integer num = numsecuencia.intValue() + 1;

			addTramoPardaEsquema(paradaDestino, num.shortValue(), null, null, null, null);
		}

		esquemaTramoList.setData(lsParadaEsquema);
	}

	private void addTramoPardaEsquema(Parada parada, Short numsecuencia, Date tiempoEstancia, String plataforma, Date excepcionRecorrido, Date defautRecorrido) {
		ParadaEsquema ps = new ParadaEsquema();
		ps.setParada(parada);
		ps.setNumsecuencia(numsecuencia);
		ps.setTiempoEstancia(tiempoEstancia);
		ps.setPlataforma(plataforma);
		ps.setExcepcionRecorrido(excepcionRecorrido);
		ps.setPadraoRecorrido(defautRecorrido);

		lsParadaEsquema.add(ps);
	}

	/**
	 * Selecciona las paradas que no estan en la secuencia de la ruta
	 */
	private void selecionarRutaSequenciaForaEsqCorrida() {
		if (lsTramosRutaEsquemaCorrida == null) {
			lsTramosRutaEsquemaCorrida = new ArrayList<RutaSecuencia>();
		}
		lsTramosRutaEsquemaCorrida.clear();

		// Ruta Secuencia

		Ruta ruta = esquemaCorrida.getRuta();
		ruta = rutaService.obtenerID(ruta.getRutaId());
		lsRutaSecuencia = rutaSecuenciaService.buscarSecuenciaOrdenado(ruta);

		// Selecciona solamente la secuencia de paradas de los tramos de la
		// secuencia de la ruta
		List<Parada> lstPardasRuta = new ArrayList<Parada>();
		for (RutaSecuencia rs : lsRutaSecuencia) {
			Tramo tramoRS = rs.getTramo();
			lstPardasRuta.add(tramoRS.getOrigem());
		}
		if (!lsRutaSecuencia.isEmpty()) {
			lstPardasRuta.add(lsRutaSecuencia.get(lsRutaSecuencia.size() - 1).getTramo().getDestino());
		}

		// Selecciona solamente la secuencia de paradas de lo esquemTramo
		List<Parada> lstPardasTramos = new ArrayList<Parada>();
		for (EsquemaTramo et : lsEsquemaTramo) {
			if (et.getTramo() != null) {
				Tramo tramoET = et.getTramo();
				lstPardasTramos.add(tramoET.getOrigem());
			}
		}

		if (!lsEsquemaTramo.isEmpty()) {
			lstPardasTramos.add(lsEsquemaTramo.get(lsEsquemaTramo.size() - 1).getTramo().getDestino());
		}

		if (lsTramos == null) {
			lsTramos = new ArrayList<Parada>();
		}
		lsTramos.clear();

		lsTramos.addAll(CollectionUtils.subtract(lstPardasRuta, lstPardasTramos));
		BindingListModelList listModelTramo = new BindingListModelList(
				lsTramos, true);
		cmbTramo.setModel(listModelTramo);
	}

	private List<EsquemaTramo> adicionarParadaEsquemaTramo(
			List<ParadaEsquema> listParadaEsquema, Parada novaParada,
			EsquemaCorrida ec, Ruta ruta, String plataforma) {
		List<EsquemaTramo> result = new ArrayList<EsquemaTramo>();

		lsRutaSecuencia = rutaSecuenciaService.buscarSecuenciaOrdenado(ruta);

		List<ParadaEsquema> listParadaEsquemaComNovaParada = new ArrayList<ParadaEsquema>();

		Short secuencia = 0;
		boolean nuevoAgregado = false;
		boolean noExisteTramoAsociado = listParadaEsquema.isEmpty();// es la
		// primera
		// vez
		Integer indiceSecuencia = null;
		for (int i = 0; i < lsRutaSecuencia.size(); i++) {
			RutaSecuencia rutaSecuencia = lsRutaSecuencia.get(i);
			if (rutaSecuencia.getTramo().getOrigem().equals(novaParada)) {
				ParadaEsquema paradaEsquema = new ParadaEsquema();
				paradaEsquema.setActivo(Boolean.TRUE);
				secuencia++;
				paradaEsquema.setNumsecuencia(secuencia);
				paradaEsquema.setParada(novaParada);
				paradaEsquema.setPlataforma(plataforma);

				listParadaEsquemaComNovaParada.add(paradaEsquema);
				nuevoAgregado = true;
				indiceSecuencia = i;
			} else {
				if (!listParadaEsquema.isEmpty()) {
					if (rutaSecuencia.getTramo().getOrigem().equals(listParadaEsquema.get(0).getParada())) {
						secuencia++;
						listParadaEsquema.get(0).setNumsecuencia(secuencia);
						listParadaEsquemaComNovaParada.add(listParadaEsquema.get(0));
						listParadaEsquema.remove(0);

					}
				}
			}
		}
		if (noExisteTramoAsociado) {
			if (indiceSecuencia != null) {
				if ((lsRutaSecuencia.size() - 1) > indiceSecuencia) {
					RutaSecuencia rutaSecuencia = lsRutaSecuencia.get(indiceSecuencia);
					ParadaEsquema paradaEsquema = new ParadaEsquema();
					paradaEsquema.setActivo(Boolean.TRUE);
					secuencia++;
					paradaEsquema.setNumsecuencia(secuencia);
					paradaEsquema.setParada(rutaSecuencia.getTramo().getDestino());
					paradaEsquema.setPlataforma(plataforma);

					listParadaEsquemaComNovaParada.add(paradaEsquema);
				}
			}
		}
		if (!nuevoAgregado) {
			ParadaEsquema paradaEsquema = new ParadaEsquema();
			paradaEsquema.setActivo(Boolean.TRUE);
			secuencia++;
			paradaEsquema.setNumsecuencia(secuencia);
			paradaEsquema.setParada(novaParada);
			paradaEsquema.setPlataforma(plataforma);

			listParadaEsquemaComNovaParada.add(paradaEsquema);
		}
		if (!listParadaEsquema.isEmpty()) {
			secuencia++;
			listParadaEsquema.get(0).setNumsecuencia(secuencia);
			listParadaEsquemaComNovaParada.add(listParadaEsquema.get(0));
			listParadaEsquema.remove(0);
		}

		for (int i = 0; (i < listParadaEsquemaComNovaParada.size() - 1); i++) {
			Parada paradaOrigen = listParadaEsquemaComNovaParada.get(i).getParada();
			Parada paradaDestino = listParadaEsquemaComNovaParada.get(i + 1).getParada();

			Tramo t = rutaCombinacionService.busqueda((Ruta) cmbRuta.getSelectedItem().getValue(), paradaOrigen, paradaDestino);

			EsquemaTramo et = new EsquemaTramo();
			et.setActivo(Boolean.TRUE);
			et.setEsquemaCorrida(ec);
			et.setFecmodif(Calendar.getInstance().getTime());
			et.setNumsecuencia((short) (i + 1));
			et.setTiempoEstancia(listParadaEsquemaComNovaParada.get(i + 1).getTiempoEstancia());
			et.setTramo(t);
			et.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId());
			et.setPlataforma(plataforma);

			result.add(et);
		}

		return result;
	}

	public void onChange$cmbRuta(Event ev) {
		selecionarRuta();
	}

	private void selecionarRuta() {
		// Ruta Secuencia
		Comboitem ciRuta = cmbRuta.getSelectedItem();
		Ruta ruta = null;
		if (ciRuta != null) {
			ruta = (Ruta) ciRuta.getValue();
		}

		try {
			if (ruta != null) {
				ruta = rutaService.obtenerID(ruta.getRutaId());
				lsRutaSecuencia = rutaSecuenciaService.buscarSecuenciaOrdenado(ruta);

				lsEsquemaTramo = new ArrayList<EsquemaTramo>();
				esquemaTramoList.setData(lsParadaEsquema);

				for (RutaSecuencia rs : lsRutaSecuencia) {
					EsquemaTramo et = new EsquemaTramo();
					et.setActivo(Boolean.TRUE);
					et.setFecmodif(Calendar.getInstance().getTime());
					et.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId());
					et.setNumsecuencia(rs.getNumsecuencia());
					et.setTramo(rs.getTramo());
					et.setEsquemaCorrida(esquemaCorrida);

					// Somente quando muda a seleção da Ruta.
					lsEsquemaTramo.add(et);
				}

				esquemaCorrida.setEsquemaTramoList(lsEsquemaTramo);
				carregarParadaSecuencia(lsEsquemaTramo);
				selecionarRutaSequenciaForaEsqCorrida();
				esquemaTramoList.setData(lsParadaEsquema);
			} else {
				Messagebox.show(Labels.getLabel("editarConfiguracionCorridaController.MSG.RutaVazia"),
						Labels.getLabel("editarConfiguracionCorridaController.window.title"),
						Messagebox.OK, Messagebox.EXCLAMATION);
			}
		} catch (Exception ex) {
			log.error(ex);
		}
	}

	public void onClick$btnAdicionarTramo(Event ev) {
		try {
			if (cmbTramo.getSelectedItem() != null) {
				String plataforma = txtPlataforma.getValue();
				// Ruta Secuencia
				lsEsquemaTramo = adicionarParadaEsquemaTramo(lsParadaEsquema, (Parada) cmbTramo.getSelectedItem().getValue(), esquemaCorrida, (Ruta) cmbRuta.getSelectedItem().getValue(), plataforma);
				esquemaCorrida.setEsquemaTramoList(lsEsquemaTramo);
				carregarParadaSecuencia(lsEsquemaTramo);
				cmbTramo.setSelectedItem(null);
				selecionarRutaSequenciaForaEsqCorrida();

				txtPlataforma.setValue("");
			}
		} catch (Exception e) {
			log.error("ESQ CORRIDA - Erro ao adicionar tramo: " + e);
			onClick$btnAdicionarTramo(null);
		}
	}

	public void onClick$btnRemoverTramo(Event ev) {
		try {
			ParadaEsquema pe = new ParadaEsquema();
			try {
				pe = (ParadaEsquema) esquemaTramoList.getSelected();
			} catch (Exception e) {
				log.error("Erro ao aliminar ruta do esquemaTramo: " + e);
				Messagebox.show(Labels.getLabel("editarConfiguracionCorridaController.MSG.selectItem"),
						Labels.getLabel("editarConfiguracionCorridaController.window.title"),
						Messagebox.OK, Messagebox.EXCLAMATION);
			}
			if (pe != null) {
				boolean podeExcluir = false;
				for (int i = 0; i < lsParadaEsquema.size(); i++) {
					if (lsParadaEsquema.get(i).getParada().equals(pe.getParada())) {
						if (i > 0 && i < lsParadaEsquema.size() - 1) {
							// condicao para não poder remover o, inicial nem o final
							ParadaEsquema paradaEsquema = lsParadaEsquema.get(i);
							lsParadaEsquema.remove(paradaEsquema);

							log.debug("Esquema Tramo Removida: " + lsParadaEsquema.get(i).getNumsecuencia() + " - " + lsParadaEsquema.get(i).getParada().getCveparada());

							esquemaTramoList.setData(lsParadaEsquema);

							podeExcluir = true;

							break;
						} else if (i == 0 || i == lsParadaEsquema.size() - 1) {
							Messagebox.show(Labels.getLabel("editarCatalogoDeRutaController.MSG.removerSecuencia"),
									Labels.getLabel("editarConfiguracionCorridaController.window.title"),
									Messagebox.OK,
									Messagebox.EXCLAMATION);
						}
					}
				}

				if (podeExcluir) {
					String ok = esquemaTramoCorrecto(lsParadaEsquema);
					if (ok != null) {
						Messagebox.show(ok,
								Labels.getLabel("editarConfiguracionCorridaController.window.title"),
								Messagebox.OK, Messagebox.EXCLAMATION);
						return;
					}
				}
			} else {
				Messagebox.show(Labels.getLabel("editarConfiguracionCorridaController.MSG.selectItem"),
						Labels.getLabel("editarConfiguracionCorridaController.window.title"),
						Messagebox.OK, Messagebox.EXCLAMATION);
			}
			lsEsquemaTramo = generaEsquemaTramoCorrecto(lsParadaEsquema, esquemaCorrida);
			selecionarRutaSequenciaForaEsqCorrida();

		} catch (Exception e) {
			log.error("Erro ao remover secuencia da ruta " + e.getMessage());
		}
	}

	/**
	 * Checo se el nuevo reajuste de secuencia quedo valido. O sea, checo se existe en tramo en la tabla ruta_combinacion
	 * 
	 * @param lsParadaEsquema
	 *            - La nueva lista de secuecia (ya con el cambio hecho)
	 * @return - True se esta correcto False se no esta correcto
	 */
	private String esquemaTramoCorrecto(List<ParadaEsquema> lsParadaEsquema) {
		boolean hayTramo = true;

		Parada paradaOrigen = null;
		Parada paradaDestino = null;

		for (int i = 0; (i < lsParadaEsquema.size() - 1) && hayTramo; i++) {
			paradaOrigen = lsParadaEsquema.get(i).getParada();
			paradaDestino = lsParadaEsquema.get(i + 1).getParada();

			Tramo t = rutaCombinacionService.busqueda((Ruta) cmbRuta.getSelectedItem().getValue(), paradaOrigen, paradaDestino);

			hayTramo = (t == null) ? false : true;
		}

		return (hayTramo) ? null : "No existe el tramo: "
				+ paradaOrigen.getDescparada() + " - "
				+ paradaDestino.getDescparada();
	}

	/**
	 * Hago la combinacion correcta en esquemacorrida asi como esta en la lista de parada
	 * 
	 * @param listParadaEsquema
	 * @param ec
	 */
	private List<EsquemaTramo> generaEsquemaTramoCorrecto(
			List<ParadaEsquema> listParadaEsquema, EsquemaCorrida ec) {
		List<EsquemaTramo> result = new ArrayList<EsquemaTramo>();

		for (int i = 0; (i < listParadaEsquema.size() - 1); i++) {
			Parada paradaOrigen = listParadaEsquema.get(i).getParada();
			Parada paradaDestino = listParadaEsquema.get(i + 1).getParada();

			Tramo t = rutaCombinacionService.busqueda((Ruta) cmbRuta.getSelectedItem().getValue(), paradaOrigen, paradaDestino);

			EsquemaTramo et = new EsquemaTramo();
			et.setActivo(Boolean.TRUE);
			et.setEsquemaCorrida(ec);
			et.setFecmodif(Calendar.getInstance().getTime());
			et.setNumsecuencia((short) (i + 1));
			et.setTiempoEstancia(listParadaEsquema.get(i + 1).getTiempoEstancia());
			et.setTramo(t);
			et.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId());

			result.add(et);
		}

		return result;
	}

	public void onClick$btnApagar(Event ev) {
		try {

			int resp = Messagebox.show(Labels.getLabel("editarEsquemaAgrupacionController.MSG.borrarPergunta"),
						Labels.getLabel("editarConfiguracionCorridaController.window.title"),
						Messagebox.YES | Messagebox.NO, Messagebox.QUESTION);

			if (resp == Messagebox.YES) {

				for (int i = 0; (i < esquemaCorridaList.getListData().size()); i++) {

					EsquemaCorrida ec = (EsquemaCorrida) esquemaCorridaList.getListData().get(i);

					if (ec.getEsquemacorridaId() != null) {
						esquemaCorridaService.borrar(ec);
					}

				}

				if (esquemaAgrupacion.getEsquemaagrupacionId() == null) {
					esquemaAgrupacionService.suscribir(esquemaAgrupacion);
				}

				esquemaAgrupacionService.borrar(esquemaAgrupacion);
				busquedaEsquemaAgrupacionController.refreshLista();

				Messagebox.show(Labels.getLabel("editarEsquemaAgrupacionController.MSG.borrarOK"),
							Labels.getLabel("editarConfiguracionCorridaController.window.title"),
							Messagebox.OK, Messagebox.INFORMATION);
				closeWindow();
			}
		} catch (Exception ex) {
			log.error(ex);
		}
	}

	private void excluiTrem() {

		if (esquemaCorridaList.getData().length == 0) {

			if (esquemaAgrupacion.getEsquemaagrupacionId() == null) {
				esquemaAgrupacionService.suscribir(esquemaAgrupacion);
			}
			esquemaAgrupacionService.borrar(esquemaAgrupacion);
			busquedaEsquemaAgrupacionController.refreshLista();

		}
	}

	public void onClick$btnSalvar(Event ev) throws InterruptedException {

		if (esquemaCorridaList.getData().length != 0) {

			try {

				if (esquemaCorrida.getRuta() == null) {
					Messagebox.show(Labels.getLabel("editarConfiguracionCorridaController.MSG.Ruta"),
							Labels.getLabel("editarConfiguracionCorridaController.window.title"),
							Messagebox.OK,
							Messagebox.EXCLAMATION);

				} else if (fecInicio.getValue() == null || fecFinal.getValue() == null) {
					Messagebox.show(Labels.getLabel("editarConfiguracionCorridaController.MSG.Vigencia"),
							Labels.getLabel("editarConfiguracionCorridaController.window.title"),
							Messagebox.OK,
							Messagebox.EXCLAMATION);

				} else if (esquemaAgrupacion.getNumagrupacion() == null) {
					Messagebox.show(Labels.getLabel("editarConfiguracionCorridaController.MSG.NumeroAgrupacion"),
							Labels.getLabel("editarConfiguracionCorridaController.window.title"),
							Messagebox.OK,
							Messagebox.EXCLAMATION);

				} else if (esquemaAgrupacion.getDescagrupacion() == null) {
					Messagebox.show(Labels.getLabel("editarConfiguracionCorridaController.MSG.DescricaoAgrupacion"),
							Labels.getLabel("editarConfiguracionCorridaController.window.title"),
							Messagebox.OK,
							Messagebox.EXCLAMATION);

				} else {

					Boolean existeNumAgrupacion = true;
					existeNumAgrupacion = esquemaAgrupacionService.buscarNumAgrupacion(txtID.getValue());

					if (!existeNumAgrupacion || esquemaAgrupacion.getEsquemaagrupacionId() != null ) {
						esquemaAgrupacion.setNumagrupacion(txtID.getValue());
						esquemaAgrupacion.setDescagrupacion(txtDesc.getValue());

						if (esquemaAgrupacion.getEsquemaagrupacionId() == null) {
							esquemaAgrupacionService.suscribir(esquemaAgrupacion);
						}

						List<EsquemaCorrida> esquemaList = new ArrayList<EsquemaCorrida>();

						for (int i = 0; (i < esquemaCorridaList.getListData().size()); i++) {

							Date dataDe = fecInicio.getValue();
							Date dataAte = fecFinal.getValue();

							EsquemaCorrida ec = (EsquemaCorrida) esquemaCorridaList.getListData().get(i);

							Comboitem ciRuta = cmbRuta.getSelectedItem();
							Ruta ruta = null;
							if (ciRuta != null) {
								ruta = (Ruta) ciRuta.getValue();
								ec.setRuta(ruta);
							}

							if (cmbIndGeneraFeriado.getSelectedItem() != null) {
								ec.setIndGeneraFeriado((String) cmbIndGeneraFeriado.getSelectedItem().getValue());
							}

							ec.setIndlunes(lun.isChecked());
							ec.setIndmartes(mar.isChecked());
							ec.setIndmiercoles(mie.isChecked());
							ec.setIndjueves(jue.isChecked());
							ec.setIndviernes(vie.isChecked());
							ec.setIndsabado(sab.isChecked());
							ec.setInddomingo(dom.isChecked());

							// nao gravar segundos:
							GregorianCalendar gHoraSalida = new GregorianCalendar();
							if (horasalida.getValue() != null) {
								gHoraSalida.setTime(horasalida.getValue());
								gHoraSalida.set(Calendar.SECOND, 0);
								gHoraSalida.set(Calendar.MILLISECOND, 0);
								gHoraSalida.set(Calendar.MONTH, 01);
								gHoraSalida.set(Calendar.DAY_OF_MONTH, 01);
								gHoraSalida.set(Calendar.YEAR, 1970);
								ec.setHorasalida(gHoraSalida.getTime());
							}
							EsquemaOperacional eo;

							if (ec.getEsquemaOperacional() != null) {
								eo = ec.getEsquemaOperacional();
							} else {
								eo = new EsquemaOperacional();
							}
							eo.setFecniciovigencia(fecInicio.getValue());
							eo.setFecfinvigencia(fecFinal.getValue());

							eo.setActivo(Boolean.TRUE);
							eo.setFecmodif(Calendar.getInstance().getTime());
							eo.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId());

							ec.setEsquemaOperacional(eo);

							ec.setCantDiasGeneracion(txtQtdeDiasGeracao.getValue());
							
							ec.setRolOperativo(rolOperativoService.obtenerID(ec.getRolOperativo().getRoloperativoId()));	

							ec.setEsquemaAgrupacionId(esquemaAgrupacion.getEsquemaagrupacionId());
							
							if(ec.getEsquemacorridaId() == null){
								ec = esquemaCorridaService.suscribir(ec);
							}else{
								ec =  esquemaCorridaService.actualizacion(ec);
							}
							
							esquemaCorridaService.actualizaEsquemaTramo(lsParadaEsquema, ec);
							
							esquemaList.add(i, ec);
							
							ec = new EsquemaCorrida();
						}

						esquemaAgrupacion.setEsquemaCorridaList(esquemaList);

						esquemaAgrupacionService.actualizacion(esquemaAgrupacion);
						
						txtID.setDisabled(Boolean.TRUE);

						Messagebox.show(Labels.getLabel("editarConfiguracionCorridaController.MSG.suscribirOK"),
								Labels.getLabel("editarConfiguracionCorridaController.window.title"),
								Messagebox.OK,
								Messagebox.INFORMATION);
						refreshLista();
						busquedaEsquemaAgrupacionController.refreshLista();

					} else {
						Messagebox.show(Labels.getLabel("editarConfiguracionCorridaController.MSG.NumAgrupacion"),
								Labels.getLabel("editarConfiguracionCorridaController.window.title"),
								Messagebox.OK,
								Messagebox.EXCLAMATION);
						return;
					}

				}

			} catch (WrongValueException ex) {
				Messagebox.show(Labels.getLabel("editarConfiguracionCorridaController.MSG.Clase"),
						Labels.getLabel("editarConfiguracionCorridaController.window.title"),
						Messagebox.OK,
						Messagebox.EXCLAMATION);
				throw (WrongValueException) ex;

			} catch (Exception ex) {
				log.error(ex);
				Messagebox.show(Labels.getLabel("MSG.Error").concat(" - ").concat(ex.toString()),
						Labels.getLabel("editarConfiguracionCorridaController.window.title"),
						Messagebox.OK, Messagebox.ERROR);
			}
		} else {
			Messagebox.show(Labels.getLabel("editarEsquemaAgrupacionController.listCorrida.vazio"),
					Labels.getLabel("editarConfiguracionCorridaController.window.title"),
					Messagebox.OK,
					Messagebox.EXCLAMATION);
		}
	}

	public void onClick$btnCerrar(Event ev) throws Exception {
		excluiTrem();

	}

	public void onClose$winEditarEsquemaAgrupacion(Event e) {
		excluiTrem();
	}

	public void onClick$btnApagarVagon(Event ev) {

		if (esquemaCorridaList.getSelectedIndex() != -1) {

			try {
				int resp = Messagebox.show(Labels.getLabel("editarConfiguracionCorridaController.MSG.borrarPergunta"),
							Labels.getLabel("editarConfiguracionCorridaController.window.title"),
							Messagebox.YES | Messagebox.NO, Messagebox.QUESTION);

				if (resp == Messagebox.YES) {

					EsquemaCorrida ec = (EsquemaCorrida) esquemaCorridaList.getSelected();
					ec.setEsquemaAsientoList(new ArrayList<EsquemaAsiento>());
					ec.setEsquemaTramoList(new ArrayList<EsquemaTramo>());

					Boolean existeNumCorrida = true;
					existeNumCorrida = esquemaCorridaService.buscarNumCorrida(ec.getNumCorrida(), null, false);

					if (!existeNumCorrida) {
						ec = esquemaCorridaService.suscribir(ec);

					} else {
						ec = esquemaCorridaService.actualizacion(ec);
					}

					esquemaCorridaService.borrar(ec);

					esquemaCorridaList.removeItem((EsquemaCorrida) esquemaCorridaList.getSelected());

					Messagebox.show(Labels.getLabel("editarConfiguracionCorridaController.MSG.borrarOK"),
								Labels.getLabel("editarConfiguracionCorridaController.window.title"),
								Messagebox.OK, Messagebox.INFORMATION);

					if (esquemaCorridaList.getData().length == 0) {

						Messagebox.show(Labels.getLabel("editarEsquemaAgrupacionController.listCorrida.vazio"),
								Labels.getLabel("editarConfiguracionCorridaController.window.title"),
								Messagebox.OK,
								Messagebox.EXCLAMATION);
					}
				}
			} catch (Exception ex) {
				log.error(ex);
			}
		}
	}

	public void refreshLista() {
		HibernateSearchObject<EsquemaCorrida> busquedaCorrita =
				new HibernateSearchObject<EsquemaCorrida>(EsquemaCorrida.class,
						pagingEsquemaCorrida.getPageSize());

		busquedaCorrita.addFilterEqual("activo", Boolean.TRUE);

		Integer esquemaagrupacionId = esquemaAgrupacion.getEsquemaagrupacionId().equals(null) ? 0 : esquemaAgrupacion.getEsquemaagrupacionId();
		busquedaCorrita.addFilterEqual("esquemaAgrupacionId", esquemaagrupacionId);

		busquedaCorrita.addSortDesc("esquemacorridaId");

		plwEsquemaCorrida.init(busquedaCorrita, esquemaCorridaList, pagingEsquemaCorrida);

		if (esquemaCorridaList.getData().length == 0) {
			try {
				Messagebox.show(Labels.getLabel("MSG.ningunRegistro"),
						Labels.getLabel("busquedaConfiguracionCorridaController.window.title"),
						Messagebox.OK, Messagebox.INFORMATION);
			} catch (InterruptedException ex) {
			}
		}
	}

	public void preencheLista() {
		HibernateSearchObject<EsquemaCorrida> busquedaCorrita =
				new HibernateSearchObject<EsquemaCorrida>(EsquemaCorrida.class,
						pagingEsquemaCorrida.getPageSize());

		busquedaCorrita.addFilterEqual("activo", Boolean.TRUE);

		Integer esquemaagrupacionId = esquemaAgrupacion.getEsquemaagrupacionId().equals(null) ? 0 : esquemaAgrupacion.getEsquemaagrupacionId();
		busquedaCorrita.addFilterEqual("esquemaAgrupacionId", esquemaagrupacionId);

		busquedaCorrita.addSortDesc("esquemacorridaId");

		plwEsquemaCorrida.init(busquedaCorrita, esquemaCorridaList, pagingEsquemaCorrida);

	}

	private void llenarRutasPorClase() {

		lsRuta = rutaService.obtenerTodos();
		BindingListModelList l = new BindingListModelList(lsRuta, true);
		cmbRuta.setModel(l);
	}

	public void clearCombobox(Combobox combobox) {

		int size = combobox.getItemCount();

		for (int i = size - 1; i >= 0; i--) {
			combobox.removeItemAt(i);
		}
	}

	public void popularCombobox(Combobox cmb) throws Exception {

		clearCombobox(cmb);
		for (EsquemaCorrida.GerarFeriado p : EsquemaCorrida.GerarFeriado.values()) {
			Comboitem comboItem = new Comboitem(p.descricao());
			comboItem.setValue(p.valor());
			comboItem.setParent(cmb);
		}

		cmb.setSelectedIndex(0);

	}

	public MyListbox getEsquemaCorridaList() {
		return esquemaCorridaList;
	}

	public void setEsquemaCorridaList(MyListbox esquemaCorridaList) {
		this.esquemaCorridaList = esquemaCorridaList;
	}

	public EsquemaAgrupacion getEsquemaAgrupacion() {
		return esquemaAgrupacion;
	}

	public void setEsquemaAgrupacion(EsquemaAgrupacion esquemaAgrupacion) {
		this.esquemaAgrupacion = esquemaAgrupacion;
	}

	public Intbox getTxtID() {
		return txtID;
	}

	public void setTxtID(Intbox txtID) {
		this.txtID = txtID;
	}

	public Textbox getTxtDesc() {
		return txtDesc;
	}

	public void setTxtDesc(Textbox txtDesc) {
		this.txtDesc = txtDesc;
	}

	public Intbox getTxtQtd() {
		return txtQtd;
	}

	public void setTxtQtd(Intbox txtQtd) {
		this.txtQtd = txtQtd;
	}

	public EsquemaAgrupacionService getEsquemaAgrupacionService() {
		return esquemaAgrupacionService;
	}

	public void setEsquemaAgrupacionService(EsquemaAgrupacionService esquemaAgrupacionService) {
		this.esquemaAgrupacionService = esquemaAgrupacionService;
	}

	public Paging getPagingEsquemaCorrida() {
		return pagingEsquemaCorrida;
	}

	public void setPagingEsquemaCorrida(Paging pagingEsquemaCorrida) {
		this.pagingEsquemaCorrida = pagingEsquemaCorrida;
	}

	public PagedListWrapper<EsquemaCorrida> getPlwEsquemaCorrida() {
		return plwEsquemaCorrida;
	}

	public void setPlwEsquemaCorrida(PagedListWrapper<EsquemaCorrida> plwEsquemaCorrida) {
		this.plwEsquemaCorrida = plwEsquemaCorrida;
	}

	public Combobox getCmbRuta() {
		return cmbRuta;
	}

	public void setCmbRuta(Combobox cmbRuta) {
		this.cmbRuta = cmbRuta;
	}

	public Combobox getCmbIndGeneraFeriado() {
		return cmbIndGeneraFeriado;
	}

	public void setCmbIndGeneraFeriado(Combobox cmbIndGeneraFeriado) {
		this.cmbIndGeneraFeriado = cmbIndGeneraFeriado;
	}

	public RutaService getRutaService() {
		return rutaService;
	}

	public void setRutaService(RutaService rutaService) {
		this.rutaService = rutaService;
	}

	public List<Ruta> getLsRuta() {
		return lsRuta;
	}

	public void setLsRuta(List<Ruta> lsRuta) {
		this.lsRuta = lsRuta;
	}

	public Datebox getFecniciovigencia() {
		return fecInicio;
	}

	public void setFecniciovigencia(Datebox fecniciovigencia) {
		this.fecInicio = fecniciovigencia;
	}

	public Datebox getFecInicio() {
		return fecInicio;
	}

	public void setFecInicio(Datebox fecInicio) {
		this.fecInicio = fecInicio;
	}

	public Datebox getFecFinal() {
		return fecFinal;
	}

	public void setFecFinal(Datebox fecFinal) {
		this.fecFinal = fecFinal;
	}

	public MyListbox getEsquemaTramoList() {
		return esquemaTramoList;
	}

	public void setEsquemaTramoList(MyListbox esquemaTramoList) {
		this.esquemaTramoList = esquemaTramoList;
	}

	public Combobox getCmbTramo() {
		return cmbTramo;
	}

	public void setCmbTramo(Combobox cmbTramo) {
		this.cmbTramo = cmbTramo;
	}

	public Textbox getTxtPlataforma() {
		return txtPlataforma;
	}

	public void setTxtPlataforma(Textbox txtPlataforma) {
		this.txtPlataforma = txtPlataforma;
	}

	public List<EsquemaTramo> getLsEsquemaTramo() {
		return lsEsquemaTramo;
	}

	public void setLsEsquemaTramo(List<EsquemaTramo> lsEsquemaTramo) {
		this.lsEsquemaTramo = lsEsquemaTramo;
	}

	public List<ParadaEsquema> getLsParadaEsquema() {
		return lsParadaEsquema;
	}

	public void setLsParadaEsquema(List<ParadaEsquema> lsParadaEsquema) {
		this.lsParadaEsquema = lsParadaEsquema;
	}

	public List<RutaSecuencia> getLsTramosRutaEsquemaCorrida() {
		return lsTramosRutaEsquemaCorrida;
	}

	public void setLsTramosRutaEsquemaCorrida(List<RutaSecuencia> lsTramosRutaEsquemaCorrida) {
		this.lsTramosRutaEsquemaCorrida = lsTramosRutaEsquemaCorrida;
	}

	public List<RutaSecuencia> getLsRutaSecuencia() {
		return lsRutaSecuencia;
	}

	public void setLsRutaSecuencia(List<RutaSecuencia> lsRutaSecuencia) {
		this.lsRutaSecuencia = lsRutaSecuencia;
	}

	public List<Parada> getLsTramos() {
		return lsTramos;
	}

	public void setLsTramos(List<Parada> lsTramos) {
		this.lsTramos = lsTramos;
	}

	public RutaSecuenciaService getRutaSecuenciaService() {
		return rutaSecuenciaService;
	}

	public void setRutaSecuenciaService(RutaSecuenciaService rutaSecuenciaService) {
		this.rutaSecuenciaService = rutaSecuenciaService;
	}

	public TramoServicioService getTramoServicioService() {
		return tramoServicioService;
	}

	public void setTramoServicioService(TramoServicioService tramoServicioService) {
		this.tramoServicioService = tramoServicioService;
	}

	public EsquemaTramoService getEsquemaTramoService() {
		return esquemaTramoService;
	}

	public void setEsquemaTramoService(EsquemaTramoService esquemaTramoService) {
		this.esquemaTramoService = esquemaTramoService;
	}

	public RutaCombinacionService getRutaCombinacionService() {
		return rutaCombinacionService;
	}

	public void setRutaCombinacionService(RutaCombinacionService rutaCombinacionService) {
		this.rutaCombinacionService = rutaCombinacionService;
	}

	public EsquemaCorridaService getEsquemaCorridaService() {
		return esquemaCorridaService;
	}

	public void setEsquemaCorridaService(EsquemaCorridaService esquemaCorridaService) {
		this.esquemaCorridaService = esquemaCorridaService;
	}

	public Checkbox getLun() {
		return lun;
	}

	public void setLun(Checkbox lun) {
		this.lun = lun;
	}

	public Checkbox getMar() {
		return mar;
	}

	public void setMar(Checkbox mar) {
		this.mar = mar;
	}

	public Checkbox getMie() {
		return mie;
	}

	public void setMie(Checkbox mie) {
		this.mie = mie;
	}

	public Checkbox getJue() {
		return jue;
	}

	public void setJue(Checkbox jue) {
		this.jue = jue;
	}

	public Checkbox getVie() {
		return vie;
	}

	public void setVie(Checkbox vie) {
		this.vie = vie;
	}

	public Checkbox getSab() {
		return sab;
	}

	public void setSab(Checkbox sab) {
		this.sab = sab;
	}

	public Checkbox getDom() {
		return dom;
	}

	public void setDom(Checkbox dom) {
		this.dom = dom;
	}

	public List<ClaseServicio> getLsClase() {
		return lsClase;
	}

	public void setLsClase(List<ClaseServicio> lsClase) {
		this.lsClase = lsClase;
	}

	public Combobox getCmbClase() {
		return cmbClase;
	}

	public void setCmbClase(Combobox cmbClase) {
		this.cmbClase = cmbClase;
	}

	public ClaseServicioService getClaseService() {
		return claseService;
	}

	public void setClaseService(ClaseServicioService claseService) {
		this.claseService = claseService;
	}

	public Intbox getTxtQtdeDiasGeracao() {
		return txtQtdeDiasGeracao;
	}

	public void setTxtQtdeDiasGeracao(Intbox txtQtdeDiasGeracao) {
		this.txtQtdeDiasGeracao = txtQtdeDiasGeracao;
	}

	public Timebox getHorasalida() {
		return horasalida;
	}

	public void setHorasalida(Timebox horasalida) {
		this.horasalida = horasalida;
	}

	public EsquemaCorrida getEsquemaCorrida() {
		return esquemaCorrida;
	}

	public void setEsquemaCorrida(EsquemaCorrida esquemaCorrida) {
		this.esquemaCorrida = esquemaCorrida;
	}

	public BusquedaEsquemaAgrupacionController getBusquedaEsquemaAgrupacionController() {
		return busquedaEsquemaAgrupacionController;
	}

	public void setBusquedaEsquemaAgrupacionController(BusquedaEsquemaAgrupacionController busquedaEsquemaAgrupacionController) {
		this.busquedaEsquemaAgrupacionController = busquedaEsquemaAgrupacionController;
	}

	public Button getBtnApagar() {
		return btnApagar;
	}

	public void setBtnApagar(Button btnApagar) {
		this.btnApagar = btnApagar;
	}

}
