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

import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

import org.apache.commons.lang.math.NumberUtils;
import org.apache.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.zk.ui.Component;
import org.zkoss.zk.ui.Executions;
import org.zkoss.zk.ui.event.Event;
import org.zkoss.zk.ui.util.Clients;
import org.zkoss.zul.Button;
import org.zkoss.zul.Combobox;
import org.zkoss.zul.Datebox;
import org.zkoss.zul.Intbox;
import org.zkoss.zul.Messagebox;
import org.zkoss.zul.Spinner;
import org.zkoss.zul.Tab;
import org.zkoss.zul.Textbox;
import org.zkoss.zul.api.Radio;

import com.rjconsultores.ventaboletos.entidad.Categoria;
import com.rjconsultores.ventaboletos.entidad.ClaseServicio;
import com.rjconsultores.ventaboletos.entidad.Marca;
import com.rjconsultores.ventaboletos.entidad.Parada;
import com.rjconsultores.ventaboletos.entidad.PuntoVenta;
import com.rjconsultores.ventaboletos.entidad.ReservacionCategoria;
import com.rjconsultores.ventaboletos.entidad.ReservacionClase;
import com.rjconsultores.ventaboletos.entidad.ReservacionCtrl;
import com.rjconsultores.ventaboletos.entidad.ReservacionMarca;
import com.rjconsultores.ventaboletos.entidad.ReservacionMercado;
import com.rjconsultores.ventaboletos.entidad.ReservacionPuntoVenta;
import com.rjconsultores.ventaboletos.service.CategoriaService;
import com.rjconsultores.ventaboletos.service.ClaseServicioService;
import com.rjconsultores.ventaboletos.service.MarcaService;
import com.rjconsultores.ventaboletos.service.ParadaService;
import com.rjconsultores.ventaboletos.service.PuntoVentaService;
import com.rjconsultores.ventaboletos.service.ReservacionCtrlService;
import com.rjconsultores.ventaboletos.utilerias.DateUtil;
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.render.RenderConfiguracionReservacionCategoria;
import com.rjconsultores.ventaboletos.web.utilerias.render.RenderConfiguracionReservacionClase;
import com.rjconsultores.ventaboletos.web.utilerias.render.RenderConfiguracionReservacionMarca;
import com.rjconsultores.ventaboletos.web.utilerias.render.RenderConfiguracionReservacionMercado;
import com.rjconsultores.ventaboletos.web.utilerias.render.RenderConfiguracionReservacionPuntoVenta;

/**
 * 
 * @author Rafius
 */
@Controller("editarConfiguracionReservacionController")
@Scope("prototype")
public class EditarConfiguracionReservacionController extends MyGenericForwardComposer {

	private static final long serialVersionUID = 1L;
	@Autowired
	private ReservacionCtrlService reservacionCtrlService;
	@Autowired
	private CategoriaService categoriaService;
	@Autowired
	private PuntoVentaService puntoVentaService;
	@Autowired
	private ClaseServicioService claseService;
	@Autowired
	private MarcaService marcaService;
	@Autowired
	private ParadaService paradaService;
	private ReservacionCtrl reservacionCtrl;
	private static Logger log = Logger.getLogger(EditarConfiguracionReservacionController.class);
	private Datebox fecInicio;
	private Datebox fecFinal;
	private Textbox txtDescripcion;
	private List<Categoria> lsCategoria;
	private List<ClaseServicio> lsClase;
	private List<Marca> lsMarca;
	private MyListbox reservacionCtrlList;
	private MyListbox reservacionCategoriaList;
	private MyListbox reservacionClaseList;
	private MyListbox reservacionMarcaList;
	private MyListbox reservacionMercadoList;
	private MyListbox reservacionPuntoVentaList;
	private List<ReservacionCategoria> lsReservacionCategoria;
	private List<ReservacionClase> lsReservacionClase;
	private List<ReservacionMarca> lsReservacionMarca;
	private List<ReservacionMercado> lsReservacionMercado;
	private List<ReservacionPuntoVenta> lsReservacionPuntoVenta;
	private Combobox cmbCategoria;
	private Combobox cmbClase;
	private Combobox cmbMarca;
	private Combobox cmbPuntoVenta;
	private Combobox cmbParadaOrigem;
	private Combobox cmbParadaDestino;
	private Intbox NumAsientosCorrida;
	private Button btnApagar;
	private Tab tabControl;
	private Tab tabCategoria;
	private Tab tabPunto;
	private Tab tabClase;
	private Tab tabMercado;
	private Tab tabMarca;
	private Spinner spTiempoLiberacionHora;
	private Spinner spTiempoLiberacionMinuto;
	private Spinner spTiempoLiberacionInternetHora;
	private Spinner spTiempoLiberacionInternetMinuto;
	private Spinner spTiempoPrevioHora;
	private Spinner spTiempoPrevioMinuto;
	private Spinner spTiempoPrevioInternetHora;
	private Spinner spTiempoPrevioInternetMinuto;
	
	private Spinner spTiempoLiberacionHoraCaduc;
	private Spinner spTiempoLiberacionMinutoCaduc;
	private Spinner spTiempoLiberacionInternetHoraCaduc;
	private Spinner spTiempoLiberacionInternetMinutoCaduc;
	
	private Radio ra1;
	private Radio ra2;

	public Button getBtnApagar() {
		return btnApagar;
	}

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

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

		lsCategoria = categoriaService.obtenerTodos();
		lsClase = claseService.obtenerTodos();
		lsMarca = marcaService.buscarMarcaPorEmpresa(UsuarioLogado.getUsuarioLogado().getEmpresa());

		super.doAfterCompose(comp);

		reservacionCtrl = (ReservacionCtrl) Executions.getCurrent().getArg().get("reservacionCtrl");
		reservacionCtrlList = (MyListbox) Executions.getCurrent().getArg().get("reservacionCtrlList");

		// Categoria
		reservacionCategoriaList.setItemRenderer(new RenderConfiguracionReservacionCategoria());
		lsReservacionCategoria = new ArrayList<ReservacionCategoria>();
		// Clase
		reservacionClaseList.setItemRenderer(new RenderConfiguracionReservacionClase());
		lsReservacionClase = new ArrayList<ReservacionClase>();
		// Marca
		reservacionMarcaList.setItemRenderer(new RenderConfiguracionReservacionMarca());
		lsReservacionMarca = new ArrayList<ReservacionMarca>();
		// PuntoVenta
		reservacionPuntoVentaList.setItemRenderer(new RenderConfiguracionReservacionPuntoVenta());
		lsReservacionPuntoVenta = new ArrayList<ReservacionPuntoVenta>();
		// Mercado
		reservacionMercadoList.setItemRenderer(new RenderConfiguracionReservacionMercado());
		lsReservacionMercado = new ArrayList<ReservacionMercado>();

		// Recarrega Listas
		if (reservacionCtrl.getReservacionctrlId() != null) {
			reservacionCtrl = reservacionCtrlService.obtenerID(reservacionCtrl.getReservacionctrlId());

			lsReservacionCategoria = reservacionCtrl.getReservacionCategoriaList();
			reservacionCategoriaList.setData(lsReservacionCategoria);

			lsReservacionClase = reservacionCtrl.getReservacionClaseList();
			reservacionClaseList.setData(lsReservacionClase);

			lsReservacionMarca = reservacionCtrl.getReservacionMarcaList();
			reservacionMarcaList.setData(lsReservacionMarca);

			lsReservacionPuntoVenta = reservacionCtrl.getReservacionPuntoVentaList();
			reservacionPuntoVentaList.setData(lsReservacionPuntoVenta);

			lsReservacionMercado = reservacionCtrl.getReservacionMercadoList();
			reservacionMercadoList.setData(lsReservacionMercado);

			// Tiempos
			String[] horaMinutoTiempoliberacion = capturarHoraMinuto(reservacionCtrl.getTiempoliberacion());
			String[] horaMinutoTiempoliberacioninternet = capturarHoraMinuto(reservacionCtrl.getTiempoliberacioninternet());
			String[] horaMinutoTiempoprevio = capturarHoraMinuto(reservacionCtrl.getTiempoprevio());
			String[] horaMinutoTiempopreviointernet = capturarHoraMinuto(reservacionCtrl.getTiempopreviointernet());		
			String[] horaMinutoTiempoliberacionCaduc = capturarHoraMinuto(reservacionCtrl.getTiempoliberacionCaduc());
			String[] horaMinutoTiempoliberacioninternetCaduc = capturarHoraMinuto(reservacionCtrl.getTiempoliberacioninternetCaduc());

			spTiempoLiberacionHora.setText(horaMinutoTiempoliberacion[0]);
			spTiempoLiberacionMinuto.setText(horaMinutoTiempoliberacion[1]);
			spTiempoLiberacionInternetHora.setText(horaMinutoTiempoliberacioninternet[0]);
			spTiempoLiberacionInternetMinuto.setText(horaMinutoTiempoliberacioninternet[1]);
			spTiempoPrevioHora.setText(horaMinutoTiempoprevio[0]);
			spTiempoPrevioMinuto.setText(horaMinutoTiempoprevio[1]);
			spTiempoPrevioInternetHora.setText(horaMinutoTiempopreviointernet[0]);
			spTiempoPrevioInternetMinuto.setText(horaMinutoTiempopreviointernet[1]);
			
			spTiempoLiberacionHoraCaduc.setText(horaMinutoTiempoliberacionCaduc[0]);
			spTiempoLiberacionMinutoCaduc.setText(horaMinutoTiempoliberacionCaduc[1]);
			spTiempoLiberacionInternetHoraCaduc.setText(horaMinutoTiempoliberacioninternetCaduc[0]);
			spTiempoLiberacionInternetMinutoCaduc.setText(horaMinutoTiempoliberacioninternetCaduc[1]);
			

			validaIsChecked();		
			desabilitaTempos();

		}

		if (reservacionCtrl.getReservacionctrlId() == null) {
			btnApagar.setVisible(Boolean.FALSE);
		}

		txtDescripcion.focus();
	}

	public String[] capturarHoraMinuto(Date data) {
		String[] horaMinuto = new String[2];
		Calendar c = Calendar.getInstance();
		c.setTime(data);
		Long tempo = DateUtil.getElapsedMinutos(DateUtil.getFecInicio().getTime(), c.getTime());
		long minutos = (tempo % 60);
		Integer horas = (tempo.intValue() / 60);
		String sMinutos = String.valueOf(minutos);
		horaMinuto[0] = horas.toString();
		horaMinuto[1] = ((sMinutos.length() < 2) ? "0" + sMinutos : sMinutos);

		return horaMinuto;
	}

	public void onClick$btnAdicionarCategoria(Event ev) throws InterruptedException {
		if (cmbCategoria.getSelectedItem() == null) {
			Messagebox.show(
					Labels.getLabel("MSG.Error.combobox"),
					Labels.getLabel("editarPricingController.windowMarca.title"),
					Messagebox.OK, Messagebox.EXCLAMATION);
			return;
		}
		cmbCategoria.getSelectedItem().getValue();
		try {
			ReservacionCategoria rCategoria = new ReservacionCategoria();
			rCategoria.setReservacionCtrl(reservacionCtrl);
			rCategoria.setActivo(Boolean.TRUE);
			rCategoria.setCategoria((Categoria) cmbCategoria.getSelectedItem().getValue());
			rCategoria.setFecmodif(Calendar.getInstance().getTime());
			rCategoria.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId());
			boolean existe = false;
			for (ReservacionCategoria rc : lsReservacionCategoria) {
				if (rc.getCategoria().equals(rCategoria.getCategoria()) && rc.getActivo()) {
					existe = true;
				}
			}
			if (!existe) {
				lsReservacionCategoria.add(rCategoria);

				reservacionCtrl.setReservacionCategoriaList(lsReservacionCategoria);
			}
			List<ReservacionCategoria> lsReservacionCategoriaAtivo = new ArrayList<ReservacionCategoria>();
			for (ReservacionCategoria rc : lsReservacionCategoria) {
				if (rc.getActivo()) {
					lsReservacionCategoriaAtivo.add(rc);
				}
			}
			reservacionCategoriaList.setData(lsReservacionCategoriaAtivo);
		} catch (Exception ex) {
			log.error(ex);
		}
	}

	public void onClick$btnAdicionarClase(Event ev) throws InterruptedException {
		if (cmbClase.getSelectedItem() == null) {
			Messagebox.show(
					Labels.getLabel("MSG.Error.combobox"),
					Labels.getLabel("editarPricingController.windowMarca.title"),
					Messagebox.OK, Messagebox.EXCLAMATION);
			return;
		}
		cmbClase.getSelectedItem().getValue();
		try {
			ReservacionClase rClase = new ReservacionClase();
			rClase.setReservacionCtrl(reservacionCtrl);
			rClase.setActivo(Boolean.TRUE);
			rClase.setClaseServicio((ClaseServicio) cmbClase.getSelectedItem().getValue());
			rClase.setFecmodif(Calendar.getInstance().getTime());
			rClase.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId());
			boolean existe = false;
			for (ReservacionClase rc : lsReservacionClase) {
				if (rc.getClaseServicio().equals(rClase.getClaseServicio()) && rc.getActivo()) {
					existe = true;
				}
			}
			if (!existe) {
				lsReservacionClase.add(rClase);
				// reservacionClaseList.addItem(rClase);
				reservacionCtrl.setReservacionClaseList(lsReservacionClase);
			}
			List<ReservacionClase> lsReservacionCategoriaAtivo = new ArrayList<ReservacionClase>();
			for (ReservacionClase rc : lsReservacionClase) {
				if (rc.getActivo()) {
					lsReservacionCategoriaAtivo.add(rc);
				}
			}
			reservacionClaseList.setData(lsReservacionCategoriaAtivo);
		} catch (Exception ex) {
			log.error(ex);
		}
	}

	public void onClick$btnAdicionarMarca(Event ev) throws InterruptedException {
		if (cmbMarca.getSelectedItem() == null) {
			Messagebox.show(
					Labels.getLabel("MSG.Error.combobox"),
					Labels.getLabel("editarPricingController.windowMarca.title"),
					Messagebox.OK, Messagebox.EXCLAMATION);
			return;
		}
		cmbMarca.getSelectedItem().getValue();
		try {
			ReservacionMarca rMarca = new ReservacionMarca();
			rMarca.setReservacionCtrl(reservacionCtrl);
			rMarca.setActivo(Boolean.TRUE);
			rMarca.setMarca((Marca) cmbMarca.getSelectedItem().getValue());
			rMarca.setFecmodif(Calendar.getInstance().getTime());
			rMarca.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId());
			boolean existe = false;
			for (ReservacionMarca rm : lsReservacionMarca) {
				if (rm.getMarca().equals(rMarca.getMarca()) && rm.getActivo()) {
					existe = true;
				}
			}
			if (!existe) {
				lsReservacionMarca.add(rMarca);
				// reservacionMarcaList.addItem(rMarca);
				reservacionCtrl.setReservacionMarcaList(lsReservacionMarca);
			}
			List<ReservacionMarca> lsReservacionMarcaAtivo = new ArrayList<ReservacionMarca>();
			for (ReservacionMarca rc : lsReservacionMarca) {
				if (rc.getActivo()) {
					lsReservacionMarcaAtivo.add(rc);
				}
			}
			reservacionMarcaList.setData(lsReservacionMarcaAtivo);
		} catch (Exception ex) {
			log.error(ex);
		}
	}

	public void onClick$btnAdicionarPuntoVenta(Event ev) throws InterruptedException {
		if (cmbPuntoVenta.getSelectedItem() == null) {
			Messagebox.show(
					Labels.getLabel("MSG.Error.combobox"),
					Labels.getLabel("editarPricingController.windowMarca.title"),
					Messagebox.OK, Messagebox.EXCLAMATION);
			return;
		}
		cmbPuntoVenta.getSelectedItem().getValue();
		try {
			ReservacionPuntoVenta rPuntoVenta = new ReservacionPuntoVenta();
			rPuntoVenta.setReservacionCtrl(reservacionCtrl);
			rPuntoVenta.setActivo(Boolean.TRUE);
			rPuntoVenta.setPuntoVenta((PuntoVenta) cmbPuntoVenta.getSelectedItem().getValue());
			rPuntoVenta.setFecmodif(Calendar.getInstance().getTime());
			rPuntoVenta.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId());
			boolean existe = false;
			for (ReservacionPuntoVenta rpv : lsReservacionPuntoVenta) {
				if (rpv.getPuntoVenta().equals(rPuntoVenta.getPuntoVenta()) && rpv.getActivo()) {
					existe = true;
				}
			}
			if (!existe) {
				lsReservacionPuntoVenta.add(rPuntoVenta);
				// reservacionPuntoVentaList.addItem(rPuntoVenta);
				reservacionCtrl.setReservacionPuntoVentaList(lsReservacionPuntoVenta);
			}
			List<ReservacionPuntoVenta> lsReservacionPuntoVentaAtivo = new ArrayList<ReservacionPuntoVenta>();
			for (ReservacionPuntoVenta rc : lsReservacionPuntoVenta) {
				if (rc.getActivo()) {
					lsReservacionPuntoVentaAtivo.add(rc);
				}
			}
			reservacionPuntoVentaList.setData(lsReservacionPuntoVentaAtivo);
		} catch (Exception ex) {
			log.error(ex);
		}
	}

	public void onClick$btnAdicionarMercado(Event ev) throws InterruptedException {
		if (cmbParadaOrigem.getSelectedItem() == null || cmbParadaDestino.getSelectedItem() == null) {
			Messagebox.show(
					Labels.getLabel("MSG.Error.combobox"),
					Labels.getLabel("editarPricingController.windowMarca.title"),
					Messagebox.OK, Messagebox.EXCLAMATION);
			return;
		}
		Parada origem = (Parada) cmbParadaOrigem.getSelectedItem().getValue();
		Parada destino = (Parada) cmbParadaDestino.getSelectedItem().getValue();

		try {
			if (origem.equals(destino)
					&& (origem.getParadaId() != -1 && destino.getParadaId() != -1)) {
				Messagebox.show(
						Labels.getLabel("editarConfiguracionReservacionController.MSG.selectItemDiferente"),
						Labels.getLabel("editarConfiguracionReservacionController.window.title"),
						Messagebox.OK, Messagebox.EXCLAMATION);
				return;
			}
			ReservacionMercado rMercado = new ReservacionMercado();
			rMercado.setReservacionCtrl(reservacionCtrl);
			rMercado.setActivo(Boolean.TRUE);
			rMercado.setParadaOrigem(origem);
			rMercado.setParadaDestino(destino);
			rMercado.setFecmodif(Calendar.getInstance().getTime());
			rMercado.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId());
			boolean existe = false;
			for (ReservacionMercado rpv : lsReservacionMercado) {
				if (rpv.getParadaOrigem().equals(rMercado.getParadaOrigem()) && rpv.getParadaDestino().equals(rMercado.getParadaDestino()) && rpv.getActivo()) {
					existe = true;
				}
			}
			if (!existe) {
				lsReservacionMercado.add(rMercado);
				// reservacionMercadoList.addItem(rMercado);
				reservacionCtrl.setReservacionMercadoList(lsReservacionMercado);
			}
			List<ReservacionMercado> lsReservacionMercadoAtivo = new ArrayList<ReservacionMercado>();
			for (ReservacionMercado rc : lsReservacionMercado) {
				if (rc.getActivo()) {
					lsReservacionMercadoAtivo.add(rc);
				}
			}
			reservacionMercadoList.setData(lsReservacionMercadoAtivo);

		} catch (Exception ex) {
			log.error(ex);
			Clients.alert(
					Labels.getLabel("MSG.Error"),
					Labels.getLabel("editarConfiguracionReservacionController.window.title"),
					Messagebox.EXCLAMATION);
		}
	}

	public void onClick$btnRemoverPuntoVenta(Event ev) throws InterruptedException {
		ReservacionPuntoVenta reservacioPuntoVenta = (ReservacionPuntoVenta) reservacionPuntoVentaList.getSelected();
		if (reservacioPuntoVenta != null) {
			lsReservacionPuntoVenta.remove(reservacioPuntoVenta);
			reservacioPuntoVenta.setFecmodif(Calendar.getInstance().getTime());
			reservacioPuntoVenta.setActivo(Boolean.FALSE);
			reservacioPuntoVenta.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId());
			lsReservacionPuntoVenta.add(reservacioPuntoVenta);
			reservacionPuntoVentaList.updateItem(reservacioPuntoVenta);
			reservacionPuntoVentaList.removeItem(reservacioPuntoVenta);
			reservacionCtrl.setReservacionPuntoVentaList(lsReservacionPuntoVenta);
		} else {
			Messagebox.show(
					Labels.getLabel("editarConfiguracionReservacionController.MSG.selectItem"),
					Labels.getLabel("editarConfiguracionReservacionController.window.title"),
					Messagebox.OK, Messagebox.EXCLAMATION);
		}
	}

	public void onClick$btnRemoverCategoria(Event ev) {
		try {
			ReservacionCategoria reservacionCategoria = (ReservacionCategoria) reservacionCategoriaList.getSelected();
			if (reservacionCategoria != null) {
				lsReservacionCategoria.remove(reservacionCategoria);
				reservacionCategoria.setFecmodif(Calendar.getInstance().getTime());
				reservacionCategoria.setActivo(Boolean.FALSE);
				reservacionCategoria.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId());
				lsReservacionCategoria.add(reservacionCategoria);
				reservacionCategoriaList.updateItem(reservacionCategoria);
				reservacionCategoriaList.removeItem(reservacionCategoria);
				reservacionCtrl.setReservacionCategoriaList(lsReservacionCategoria);
			} else {
				Messagebox.show(
						Labels.getLabel("editarConfiguracionReservacionController.MSG.selectItem"),
						Labels.getLabel("editarConfiguracionReservacionController.window.title"),
						Messagebox.OK, Messagebox.EXCLAMATION);
			}
		} catch (Exception ex) {
			log.error(ex);
		}
	}

	public void onClick$btnRemoverClase(Event ev) throws InterruptedException {
		ReservacionClase reservacioClase = (ReservacionClase) reservacionClaseList.getSelected();
		if (reservacioClase != null) {
			lsReservacionClase.remove(reservacioClase);
			reservacioClase.setFecmodif(Calendar.getInstance().getTime());
			reservacioClase.setActivo(Boolean.FALSE);
			reservacioClase.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId());
			lsReservacionClase.add(reservacioClase);
			reservacionClaseList.updateItem(reservacioClase);
			reservacionClaseList.removeItem(reservacioClase);
			reservacionCtrl.setReservacionClaseList(lsReservacionClase);
		} else {
			Messagebox.show(
					Labels.getLabel("editarConfiguracionReservacionController.MSG.selectItem"),
					Labels.getLabel("editarConfiguracionReservacionController.window.title"),
					Messagebox.OK, Messagebox.EXCLAMATION);
		}
	}

	public void onClick$btnRemoverMarca(Event ev) throws InterruptedException {
		ReservacionMarca rMarca = (ReservacionMarca) reservacionMarcaList.getSelected();
		if (rMarca != null) {
			lsReservacionMarca.remove(rMarca);
			rMarca.setFecmodif(Calendar.getInstance().getTime());
			rMarca.setActivo(Boolean.FALSE);
			rMarca.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId());
			lsReservacionMarca.add(rMarca);
			reservacionMarcaList.updateItem(rMarca);
			reservacionMarcaList.removeItem(rMarca);
			reservacionCtrl.setReservacionMarcaList(lsReservacionMarca);
		} else {
			Messagebox.show(
					Labels.getLabel("editarConfiguracionReservacionController.MSG.selectItem"),
					Labels.getLabel("editarConfiguracionReservacionController.window.title"),
					Messagebox.OK, Messagebox.EXCLAMATION);
		}
	}

	public void onClick$btnRemoverMercado(Event ev) {
		try {
			ReservacionMercado rMercado = (ReservacionMercado) reservacionMercadoList.getSelected();
			if (rMercado != null) {
				lsReservacionMercado.remove(rMercado);
				rMercado.setFecmodif(Calendar.getInstance().getTime());
				rMercado.setActivo(Boolean.FALSE);
				rMercado.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId());
				lsReservacionMercado.add(rMercado);
				reservacionMercadoList.updateItem(rMercado);
				reservacionMercadoList.removeItem(rMercado);
				reservacionCtrl.setReservacionMercadoList(lsReservacionMercado);
			} else {
				Messagebox.show(
						Labels.getLabel("editarConfiguracionReservacionController.MSG.selectItem"),
						Labels.getLabel("editarConfiguracionReservacionController.window.title"),
						Messagebox.OK, Messagebox.EXCLAMATION);
			}
		} catch (Exception ex) {
			log.error(ex);
		}
	}

	public void onClick$btnSalvar(Event ev) throws InterruptedException {
		tabControl.setSelected(Boolean.TRUE);
		txtDescripcion.getValue();
		fecInicio.getValue();
		fecFinal.getValue();

		spTiempoLiberacionHora.getValue();
		spTiempoLiberacionMinuto.getValue();
		spTiempoLiberacionInternetHora.getValue();
		spTiempoLiberacionInternetMinuto.getValue();
		spTiempoPrevioHora.getValue();
		spTiempoPrevioMinuto.getValue();
		spTiempoPrevioInternetHora.getValue();
		spTiempoPrevioInternetMinuto.getValue();
		
		spTiempoLiberacionHoraCaduc.getValue();
		spTiempoLiberacionMinutoCaduc.getValue();
		spTiempoLiberacionInternetHoraCaduc.getValue();
		spTiempoLiberacionInternetMinutoCaduc.getValue();

		NumAsientosCorrida.getValue();

		if (fecInicio.getValue().after(fecFinal.getValue())) {
			Messagebox.show(Labels.getLabel("editarPeriodoVacacionalController.MSG.busquedaPeriodo"),
					Labels.getLabel("editarConfiguracionReservacionController.window.title"), Messagebox.OK, Messagebox.INFORMATION);
		} else {
			try {

				List<ReservacionCtrl> lsTraslapa = reservacionCtrlService.buscarFechaTraslapa(reservacionCtrl);
				Boolean podeSalvarTraslapa = lsTraslapa.isEmpty() ? true : false;
				if (lsTraslapa.size() == 1) {
					// Somente edição
					if (reservacionCtrl.getReservacionctrlId() != null) {
						if (reservacionCtrl.getReservacionctrlId().equals(lsTraslapa.get(0).getReservacionctrlId())) {
							podeSalvarTraslapa = true;
						}
					}
				}

				// Se não pode salvar pq translapa
				if (!podeSalvarTraslapa) {
					Messagebox.show(
							Labels.getLabel("editarConfiguracionReservacionController.MSG.conflitoVigencias"),
							Labels.getLabel("editarConfiguracionReservacionController.window.title"),
							Messagebox.OK, Messagebox.EXCLAMATION);
					return;
				}
				if (reservacionCategoriaList.getData().length == 0) {
					Messagebox.show(
							Labels.getLabel("editarConfiguracionReservacionController.MSG.necesitaCategoria"),
							Labels.getLabel("editarConfiguracionReservacionController.window.title"),
							Messagebox.OK, Messagebox.EXCLAMATION);
					tabCategoria.setSelected(Boolean.TRUE);
					return;
				}
				if (reservacionPuntoVentaList.getData().length == 0) {
					Messagebox.show(
							Labels.getLabel("editarConfiguracionReservacionController.MSG.necesitaPunto"),
							Labels.getLabel("editarConfiguracionReservacionController.window.title"),
							Messagebox.OK, Messagebox.EXCLAMATION);
					tabPunto.setSelected(Boolean.TRUE);
					return;
				}
				if (reservacionClaseList.getData().length == 0) {
					Messagebox.show(
							Labels.getLabel("editarConfiguracionReservacionController.MSG.necesitaClase"),
							Labels.getLabel("editarConfiguracionReservacionController.window.title"),
							Messagebox.OK, Messagebox.EXCLAMATION);
					tabClase.setSelected(Boolean.TRUE);
					return;
				}
				if (reservacionMercadoList.getData().length == 0) {
					Messagebox.show(
							Labels.getLabel("editarConfiguracionReservacionController.MSG.necesitaMercado"),
							Labels.getLabel("editarConfiguracionReservacionController.window.title"),
							Messagebox.OK, Messagebox.EXCLAMATION);
					tabMercado.setSelected(Boolean.TRUE);
					return;
				}
				if (reservacionMarcaList.getData().length == 0) {
					Messagebox.show(
							Labels.getLabel("editarConfiguracionReservacionController.MSG.necesitaMarca"),
							Labels.getLabel("editarConfiguracionReservacionController.window.title"),
							Messagebox.OK, Messagebox.EXCLAMATION);
					tabMarca.setSelected(Boolean.TRUE);
					return;
				}

				List<ReservacionCtrl> lsReservacion = reservacionCtrlService.buscar(reservacionCtrl);

				boolean podeSalvar = false;
				if (lsReservacion.isEmpty()) {
					podeSalvar = true;
				} else {
					for (ReservacionCtrl rc : lsReservacion) {
						if (rc.getReservacionctrlId().equals(reservacionCtrl.getReservacionctrlId())) {
							podeSalvar = true;
						}
					}
				}

				if (podeSalvar) {
					reservacionCtrl.setActivo(true);
					reservacionCtrl.setFecmodif(Calendar.getInstance().getTime());
					reservacionCtrl.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId());

					Date inicio = DateUtil.inicioFecha(fecInicio.getValue());
					Date fin = DateUtil.fimFecha(fecFinal.getValue());
					reservacionCtrl.setFecinicio(inicio);
					reservacionCtrl.setFecfinal(fin);

					reservacionCtrl.setTiempoliberacion(spTiempoLiberacionHora.getValue(), spTiempoLiberacionMinuto.getValue());
					reservacionCtrl.setTiempoliberacioninternet(spTiempoLiberacionInternetHora.getValue(), spTiempoLiberacionInternetMinuto.getValue());
					reservacionCtrl.setTiempoprevio(spTiempoPrevioHora.getValue(), spTiempoPrevioMinuto.getValue());
					reservacionCtrl.setTiempopreviointernet(spTiempoPrevioInternetHora.getValue(), spTiempoPrevioInternetMinuto.getValue());
					
					reservacionCtrl.setTiempoliberacionCaduc(spTiempoLiberacionHoraCaduc.getValue(), spTiempoLiberacionMinutoCaduc.getValue());
					reservacionCtrl.setTiempoliberacioninternetCaduc(spTiempoLiberacionInternetHoraCaduc.getValue(), spTiempoLiberacionInternetMinutoCaduc.getValue());

					if (reservacionCtrl.getReservacionctrlId() == null) {
						reservacionCtrlService.suscribir(reservacionCtrl);
						reservacionCtrlList.addItem(reservacionCtrl);
					} else {
						reservacionCtrlService.actualizacion(reservacionCtrl);
						reservacionCtrlList.updateItem(reservacionCtrl);
					}

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

					closeWindow();
				} else {
					Messagebox.show(
							Labels.getLabel("MSG.Registro.Existe"),
							Labels.getLabel("editarConfiguracionReservacionController.window.title"),
							Messagebox.OK, Messagebox.EXCLAMATION);
				}
			} catch (Exception ex) {
				log.error("Erro ao salvar Configuracion Reservacion " + ex);
				Messagebox.show(
						Labels.getLabel("MSG.Error"),
						Labels.getLabel("editarConfiguracionReservacionController.window.title"),
						Messagebox.OK, Messagebox.ERROR);
			}
		}
	}

	public void onClick$btnApagar(Event ev) throws InterruptedException {
		int resp = Messagebox.show(
				Labels.getLabel("editarConfiguracionReservacionController.MSG.borrarPergunta"),
				Labels.getLabel("editarConfiguracionReservacionController.window.title"),
				Messagebox.YES | Messagebox.NO, Messagebox.QUESTION);

		if (resp == Messagebox.YES) {

			reservacionCtrlService.borrar(reservacionCtrl);

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

			reservacionCtrlList.removeItem(reservacionCtrl);

			closeWindow();
		}
	}
	
	public void onCheck$ra1(Event ev) {
		desabilitaTempos();
	}
	public void onCheck$ra2(Event ev) {
		desabilitaTempos();
	}
	
	private void desabilitaTempos() {
		
		if(ra1.isChecked()){
			
			spTiempoLiberacionHora.setDisabled(Boolean.FALSE);
			spTiempoLiberacionMinuto.setDisabled(Boolean.FALSE);
			spTiempoLiberacionInternetHora.setDisabled(Boolean.FALSE);
			spTiempoLiberacionInternetMinuto.setDisabled(Boolean.FALSE);
			
			spTiempoLiberacionHoraCaduc.setValue(NumberUtils.INTEGER_ZERO);
			spTiempoLiberacionHoraCaduc.setDisabled(Boolean.TRUE);
			
			spTiempoLiberacionMinutoCaduc.setValue(NumberUtils.INTEGER_ZERO);
			spTiempoLiberacionMinutoCaduc.setDisabled(Boolean.TRUE);
			
			spTiempoLiberacionInternetHoraCaduc.setValue(NumberUtils.INTEGER_ZERO);
			spTiempoLiberacionInternetHoraCaduc.setDisabled(Boolean.TRUE);
			
			spTiempoLiberacionInternetMinutoCaduc.setValue(NumberUtils.INTEGER_ZERO);
			spTiempoLiberacionInternetMinutoCaduc.setDisabled(Boolean.TRUE);
			
		}
		
		if(ra2.isChecked()){
			
			spTiempoLiberacionHoraCaduc.setDisabled(Boolean.FALSE);
			spTiempoLiberacionMinutoCaduc.setDisabled(Boolean.FALSE);
			spTiempoLiberacionInternetHoraCaduc.setDisabled(Boolean.FALSE);
			spTiempoLiberacionInternetMinutoCaduc.setDisabled(Boolean.FALSE);
			
			spTiempoLiberacionHora.setValue(NumberUtils.INTEGER_ZERO);
			spTiempoLiberacionHora.setDisabled(Boolean.TRUE);
			
			spTiempoLiberacionMinuto.setValue(NumberUtils.INTEGER_ZERO);
			spTiempoLiberacionMinuto.setDisabled(Boolean.TRUE);
			
			spTiempoLiberacionInternetHora.setValue(NumberUtils.INTEGER_ZERO);
			spTiempoLiberacionInternetHora.setDisabled(Boolean.TRUE);
			
			spTiempoLiberacionInternetMinuto.setValue(NumberUtils.INTEGER_ZERO);
			spTiempoLiberacionInternetMinuto.setDisabled(Boolean.TRUE);
			
		}
		
	}
	
	private void validaIsChecked(){

		if(spTiempoLiberacionHora.getValue() > 0 || spTiempoLiberacionMinuto.getValue() > 0
				|| spTiempoLiberacionInternetHora.getValue() > 0 || spTiempoLiberacionInternetMinuto.getValue() > 0 ){
			
			ra1.setChecked(Boolean.TRUE);

		}
		
		if(spTiempoLiberacionHoraCaduc.getValue() > 0 || spTiempoLiberacionMinutoCaduc.getValue() > 0
				|| spTiempoLiberacionInternetHoraCaduc.getValue() > 0 || spTiempoLiberacionInternetMinutoCaduc.getValue() > 0 ){
			
			ra2.setChecked(Boolean.TRUE);
			
		}
	}
	
	public ReservacionCtrl getReservacionCtrl() {
		return reservacionCtrl;
	}

	public void setReservacionCtrl(ReservacionCtrl reservacionCtrl) {
		this.reservacionCtrl = reservacionCtrl;
	}

	public MyListbox getReservacionCtrlList() {
		return reservacionCtrlList;
	}

	public void setReservacionCtrlList(MyListbox reservacionCtrlList) {
		this.reservacionCtrlList = reservacionCtrlList;
	}

	public ReservacionCtrlService getReservacionCtrlService() {
		return reservacionCtrlService;
	}

	public void setReservacionCtrlService(ReservacionCtrlService reservacionCtrlService) {
		this.reservacionCtrlService = reservacionCtrlService;
	}

	public CategoriaService getCategoriaService() {
		return categoriaService;
	}

	public void setCategoriaService(CategoriaService categoriaService) {
		this.categoriaService = categoriaService;
	}

	public ClaseServicioService getClaseService() {
		return claseService;
	}

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

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

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

	public List<Marca> getLsMarca() {
		return lsMarca;
	}

	public void setLsMarca(List<Marca> lsMarca) {
		this.lsMarca = lsMarca;
	}

	public MarcaService getMarcaService() {
		return marcaService;
	}

	public void setMarcaService(MarcaService marcaService) {
		this.marcaService = marcaService;
	}

	public PuntoVentaService getPuntoVentaService() {
		return puntoVentaService;
	}

	public void setPuntoVentaService(PuntoVentaService puntoVentaService) {
		this.puntoVentaService = puntoVentaService;
	}

	public List<Categoria> getLsCategoria() {
		return lsCategoria;
	}

	public void setLsCategoria(List<Categoria> lsCategoria) {
		this.lsCategoria = lsCategoria;
	}

	public List<ReservacionCategoria> getLsReservacionCategoria() {
		return lsReservacionCategoria;
	}

	public void setLsReservacionCategoria(List<ReservacionCategoria> lsReservacionCategoria) {
		this.lsReservacionCategoria = lsReservacionCategoria;
	}

	public List<ReservacionClase> getLsReservacionClase() {
		return lsReservacionClase;
	}

	public void setLsReservacionClase(List<ReservacionClase> lsReservacionClase) {
		this.lsReservacionClase = lsReservacionClase;
	}

	public List<ReservacionMarca> getLsReservacionMarca() {
		return lsReservacionMarca;
	}

	public void setLsReservacionMarca(List<ReservacionMarca> lsReservacionMarca) {
		this.lsReservacionMarca = lsReservacionMarca;
	}

	public List<ReservacionMercado> getLsReservacionMercado() {
		return lsReservacionMercado;
	}

	public void setLsReservacionMercado(List<ReservacionMercado> lsReservacionMercado) {
		this.lsReservacionMercado = lsReservacionMercado;
	}

	public List<ReservacionPuntoVenta> getLsReservacionPuntoVenta() {
		return lsReservacionPuntoVenta;
	}

	public void setLsReservacionPuntoVenta(List<ReservacionPuntoVenta> lsReservacionPuntoVenta) {
		this.lsReservacionPuntoVenta = lsReservacionPuntoVenta;
	}

	public MyListbox getReservacionCategoriaList() {
		return reservacionCategoriaList;
	}

	public void setReservacionCategoriaList(MyListbox reservacionCategoriaList) {
		this.reservacionCategoriaList = reservacionCategoriaList;
	}

	public MyListbox getReservacionClaseList() {
		return reservacionClaseList;
	}

	public void setReservacionClaseList(MyListbox reservacionClaseList) {
		this.reservacionClaseList = reservacionClaseList;
	}

	public MyListbox getReservacionMarcaList() {
		return reservacionMarcaList;
	}

	public void setReservacionMarcaList(MyListbox reservacionMarcaList) {
		this.reservacionMarcaList = reservacionMarcaList;
	}

	public MyListbox getReservacionMercadoList() {
		return reservacionMercadoList;
	}

	public void setReservacionMercadoList(MyListbox reservacionMercadoList) {
		this.reservacionMercadoList = reservacionMercadoList;
	}

	public MyListbox getReservacionPuntoVentaList() {
		return reservacionPuntoVentaList;
	}

	public void setReservacionPuntoVentaList(MyListbox reservacionPuntoVentaList) {
		this.reservacionPuntoVentaList = reservacionPuntoVentaList;
	}

	public Combobox getCmbCategoria() {
		return cmbCategoria;
	}

	public void setCmbCategoria(Combobox cmbCategoria) {
		this.cmbCategoria = cmbCategoria;
	}

	public Datebox getFecFinal() {
		return fecFinal;
	}

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

	public Datebox getFecInicio() {
		return fecInicio;
	}

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

	public Combobox getCmbClase() {
		return cmbClase;
	}

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

	public Combobox getCmbMarca() {
		return cmbMarca;
	}

	public void setCmbMarca(Combobox cmbMarca) {
		this.cmbMarca = cmbMarca;
	}

	public Combobox getCmbParadaDestino() {
		return cmbParadaDestino;
	}

	public void setCmbParadaDestino(Combobox cmbParadaDestino) {
		this.cmbParadaDestino = cmbParadaDestino;
	}

	public Combobox getCmbParadaOrigem() {
		return cmbParadaOrigem;
	}

	public void setCmbParadaOrigem(Combobox cmbParadaOrigem) {
		this.cmbParadaOrigem = cmbParadaOrigem;
	}

	public Combobox getCmbPuntoVenta() {
		return cmbPuntoVenta;
	}

	public void setCmbPuntoVenta(Combobox cmbPuntoVenta) {
		this.cmbPuntoVenta = cmbPuntoVenta;
	}

	public ParadaService getParadaService() {
		return paradaService;
	}

	public void setParadaService(ParadaService paradaService) {
		this.paradaService = paradaService;
	}

	public Radio getRa1() {
		return ra1;
	}

	public void setRa1(Radio ra1) {
		this.ra1 = ra1;
	}

	public Radio getRa2() {
		return ra2;
	}

	public void setRa2(Radio ra2) {
		this.ra2 = ra2;
	}
}
