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

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

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.zhtml.Messagebox;
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.Bandbox;
import org.zkoss.zul.Button;
import org.zkoss.zul.Checkbox;
import org.zkoss.zul.Combobox;
import org.zkoss.zul.Label;
import org.zkoss.zul.Longbox;
import org.zkoss.zul.Paging;
import org.zkoss.zul.Radio;
import org.zkoss.zul.Textbox;

import com.rjconsultores.ventaboletos.constantes.ConstantesTipoDesconto;
import com.rjconsultores.ventaboletos.entidad.Cliente;
import com.rjconsultores.ventaboletos.entidad.Convenio;
import com.rjconsultores.ventaboletos.entidad.ConvenioDet;
import com.rjconsultores.ventaboletos.entidad.ConvenioEmpresa;
import com.rjconsultores.ventaboletos.entidad.ConvenioPuntoVenta;
import com.rjconsultores.ventaboletos.entidad.ConvenioRuta;
import com.rjconsultores.ventaboletos.entidad.ConvenioTramo;
import com.rjconsultores.ventaboletos.entidad.ConvenioUsuario;
import com.rjconsultores.ventaboletos.entidad.Empresa;
import com.rjconsultores.ventaboletos.entidad.Parada;
import com.rjconsultores.ventaboletos.entidad.PuntoVenta;
import com.rjconsultores.ventaboletos.entidad.Ruta;
import com.rjconsultores.ventaboletos.entidad.Usuario;
import com.rjconsultores.ventaboletos.service.ConvenioDetService;
import com.rjconsultores.ventaboletos.service.ConvenioService;
import com.rjconsultores.ventaboletos.service.RutaService;
import com.rjconsultores.ventaboletos.utilerias.TraslaparUtil;
import com.rjconsultores.ventaboletos.utilerias.UsuarioLogado;
import com.rjconsultores.ventaboletos.web.gui.componente.esquemaoperacional.MyCustomTextboxDecimal;
import com.rjconsultores.ventaboletos.web.utilerias.MyGenericForwardComposer;
import com.rjconsultores.ventaboletos.web.utilerias.MyListbox;
import com.rjconsultores.ventaboletos.web.utilerias.MyTextbox;
import com.rjconsultores.ventaboletos.web.utilerias.paginacion.HibernateSearchObject;
import com.rjconsultores.ventaboletos.web.utilerias.paginacion.PagedListWrapper;
import com.rjconsultores.ventaboletos.web.utilerias.render.RenderClienteConvenio;
import com.rjconsultores.ventaboletos.web.utilerias.render.RenderConvenioDet;
import com.rjconsultores.ventaboletos.web.utilerias.render.RenderConvenioEmpresa;
import com.rjconsultores.ventaboletos.web.utilerias.render.RenderConvenioPuntoVenta;
import com.rjconsultores.ventaboletos.web.utilerias.render.RenderConvenioRuta;
import com.rjconsultores.ventaboletos.web.utilerias.render.RenderConvenioTramo;
import com.rjconsultores.ventaboletos.web.utilerias.render.RenderConvenioUsuario;

/**
 *
 * @author Administrador
 */
@SuppressWarnings("serial")
@Controller("editarConvenioController")
@Scope("prototype")
public class EditarConvenioController extends MyGenericForwardComposer {
	
    @Autowired
    private ConvenioService convenioService;
    private ConvenioDetService convenioDetService;
    private Convenio convenio;
    private List<ConvenioDet> lsConvenioDets;
    private MyListbox convenioList;
    private MyListbox convenioDetList;
    private Textbox txtDescConvenio;
    
    private MyCustomTextboxDecimal txtTarifa;
    private MyCustomTextboxDecimal txtTxEmbarque;
    private MyCustomTextboxDecimal txtPedagio;
    private MyCustomTextboxDecimal txtSeguro;
    private Longbox txtQuantidade;
    
    private Longbox txtNumfolioinicio;
    private Longbox txtNumfoliofinal;
    private Button btnApagar;
    private Button btnAdicionarConvenioDet;
    private Radio rdPrecioTotal;
    private Radio rdPrecioDescuento;
    private Radio rdDescuento;
   
    private Label lbQuantidade;    
    private Label lbNumDoc;
    private Label lbFolioInicio;
    private Label lbFolioFinal;
    
	@Autowired
	private transient PagedListWrapper<Cliente> plwCliente;    
    private MyTextbox txtNomeCliente;
    private Bandbox bandBoxCliente;
    private MyListbox clienteList;
    private Paging pagingCliente;
    private Cliente clienteToSave;        
    
    private Radio rdPorNumDocumento;
    private Radio rdPorQuantidade;
    private Radio rdNaoInformar;
    
    private Checkbox chkValidaFolio;
    private static Logger log = Logger.getLogger(EditarConvenioController.class);
    //Tramo
    private List<ConvenioTramo> lsConvenioTramo;
	private MyListbox convenioTramoList;
	private Combobox cmbParadaOrigem;
	private Combobox cmbParadaDestino;
	
	//Usuario
	private List<ConvenioUsuario> lsConvenioUsuario;
	private MyListbox convenioUsuarioList;
	private Combobox cmbUsuario;
	
	//Punto Venta
	private List<ConvenioPuntoVenta> lsConvenioPuntoVenta;
	private MyListbox convenioPuntoVentaList;
	private Combobox cmbPuntoVenta;
	
	//Empresa
	private Combobox cmbEmpresa;
	private MyListbox empresaList;
	private List<ConvenioEmpresa> lsConvenioEmpresa;
	
	//Ruta
	private Combobox cmbRuta;
	private MyListbox rutaList;
	private List<ConvenioRuta> lsConvenioRuta;	
	private List<Ruta> lsRutasCombo;
    @Autowired
    private RutaService rutaService;
    
    public Button getBtnApagar() {
        return btnApagar;
    }
    
    public void setBtnApagar(Button btnApagar) {
        this.btnApagar = btnApagar;
    }

    public Convenio getConvenio() {
        return convenio;
    }

    public void setConvenio(Convenio convenio) {
        this.convenio = convenio;
    }

    public MyListbox getConvenioDetList() {
        return convenioDetList;
    }

    public void setConvenioDetList(MyListbox convenioDetList) {
        this.convenioDetList = convenioDetList;
    }

    public MyListbox getConvenioList() {
        return convenioList;
    }

    public void setConvenioList(MyListbox convenioList) {
        this.convenioList = convenioList;
    }

    public List<ConvenioDet> getLsConvenioDets() {
        return lsConvenioDets;
    }

    public void setLsConvenioDets(List<ConvenioDet> lsConvenioDets) {
        this.lsConvenioDets = lsConvenioDets;
    }

    public Textbox getTxtDescConvenio() {
        return txtDescConvenio;
    }

    public void setTxtDescConvenio(Textbox txtDescConvenio) {
        this.txtDescConvenio = txtDescConvenio;
    }

    public Longbox getTxtNumfoliofinal() {
        return txtNumfoliofinal;
    }

    public void setTxtNumfoliofinal(Longbox txtNumfoliofinal) {
        this.txtNumfoliofinal = txtNumfoliofinal;
    }

    public Longbox getTxtNumfolioinicio() {
        return txtNumfolioinicio;
    }

    public void setTxtNumfolioinicio(Longbox txtNumfolioinicio) {
        this.txtNumfolioinicio = txtNumfolioinicio;
    }
    
	public Longbox getTxtQuantidade() {
		return txtQuantidade;
	}

	public void setTxtQuantidade(Longbox txtQuantidade) {
		this.txtQuantidade = txtQuantidade;
	}

	public Label getLbQuantidade() {
		return lbQuantidade;
	}

	public void setLbQuantidade(Label lbQuantidade) {
		this.lbQuantidade = lbQuantidade;
	}

	public Label getLbNumDoc() {
		return lbNumDoc;
	}

	public void setLbNumDoc(Label lbNumDoc) {
		this.lbNumDoc = lbNumDoc;
	}

	public Label getLbFolioInicio() {
		return lbFolioInicio;
	}

	public void setLbFolioInicio(Label lbFolioInicio) {
		this.lbFolioInicio = lbFolioInicio;
	}

	public Label getLbFolioFinal() {
		return lbFolioFinal;
	}

	public void setLbFolioFinal(Label lbFolioFinal) {
		this.lbFolioFinal = lbFolioFinal;
	}

	public MyCustomTextboxDecimal getTxtTarifa() {
		return txtTarifa;
	}

	public void setTxtTarifa(MyCustomTextboxDecimal txtTarifa) {
		this.txtTarifa = txtTarifa;
	}		

	public MyCustomTextboxDecimal getTxtTxEmbarque() {
		return txtTxEmbarque;
	}

	public void setTxtTxEmbarque(MyCustomTextboxDecimal txtTxEmbarque) {
		this.txtTxEmbarque = txtTxEmbarque;
	}

	public MyCustomTextboxDecimal getTxtPedagio() {
		return txtPedagio;
	}

	public void setTxtPedagio(MyCustomTextboxDecimal txtPedagio) {
		this.txtPedagio = txtPedagio;
	}

	public MyCustomTextboxDecimal getTxtSeguro() {
		return txtSeguro;
	}

	public void setTxtSeguro(MyCustomTextboxDecimal txtSeguro) {
		this.txtSeguro = txtSeguro;
	}

	public Radio getRdDescuento() {
        return rdDescuento;
    }

    public void setRdDescuento(Radio rdDescuento) {
        this.rdDescuento = rdDescuento;
    }

    public Radio getRdPrecioDescuento() {
        return rdPrecioDescuento;
    }

    public void setRdPrecioDescuento(Radio rdPrecioDescuento) {
        this.rdPrecioDescuento = rdPrecioDescuento;
    }

    public Radio getRdPrecioTotal() {
        return rdPrecioTotal;
    }

    public void setRdPrecioTotal(Radio rdPrecioTotal) {
        this.rdPrecioTotal = rdPrecioTotal;
    }

    public Checkbox getChkValidaFolio() {
        return chkValidaFolio;
    }

    public void setChkValidaFolio(Checkbox chkValidaFolio) {
        this.chkValidaFolio = chkValidaFolio;
    }

    public Button getBtnAdicionarConvenioDet() {
        return btnAdicionarConvenioDet;
    }

    public void setBtnAdicionarConvenioDet(Button btnAdicionarConvenioDet) {
        this.btnAdicionarConvenioDet = btnAdicionarConvenioDet;
    }

    public Combobox getCmbEmpresa() {
		return cmbEmpresa;
	}

	public void setCmbEmpresa(Combobox cmbEmpresa) {
		this.cmbEmpresa = cmbEmpresa;
	}

	public MyListbox getEmpresaList() {
		return empresaList;
	}

	public void setEmpresaList(MyListbox empresaList) {
		this.empresaList = empresaList;
	}

	public Combobox getCmbRuta() {
		return cmbRuta;
	}

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

	public MyListbox getRutaList() {
		return rutaList;
	}

	public void setRutaList(MyListbox rutaList) {
		this.rutaList = rutaList;
	}

	public List<Ruta> getLsRutasCombo() {
		return lsRutasCombo;
	}

	public void setLsRutasCombo(List<Ruta> lsRutasCombo) {
		this.lsRutasCombo = lsRutasCombo;
	}

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

        lsRutasCombo = rutaService.obtenerTodos();
        
        convenio = (Convenio) Executions.getCurrent().getArg().get("convenio");
        convenioList = (MyListbox) Executions.getCurrent().getArg().get("convenioList");
        //Convenio Tramo
        convenioTramoList.setItemRenderer(new RenderConvenioTramo());
        lsConvenioTramo = new ArrayList<ConvenioTramo>();
        //Convenio Usuario
        convenioUsuarioList.setItemRenderer(new RenderConvenioUsuario());
        lsConvenioUsuario = new ArrayList<ConvenioUsuario>();
        //Convenio PuntoVenta
        convenioPuntoVentaList.setItemRenderer(new RenderConvenioPuntoVenta());
        lsConvenioPuntoVenta = new ArrayList<ConvenioPuntoVenta>();
        // Convenio Empresa
        empresaList.setItemRenderer(new RenderConvenioEmpresa());
        lsConvenioEmpresa = new ArrayList<ConvenioEmpresa>();
        // Convenio Ruta
        rutaList.setItemRenderer(new RenderConvenioRuta());
        lsConvenioRuta = new ArrayList<ConvenioRuta>();
        //Cliente
        clienteList.setItemRenderer(new RenderClienteConvenio());
        
        if (convenio.getConvenioId() == null) {
        	
            btnApagar.setVisible(Boolean.FALSE);
            lsConvenioDets = new ArrayList<ConvenioDet>();
            
        } else {

            convenio = convenioService.obtenerID(convenio.getConvenioId());
            lsConvenioDets = convenio.getConvenioDetList();
            
            lsConvenioTramo = convenio.getConvenioTramoList();
            convenioTramoList.setData(lsConvenioTramo);
            
            lsConvenioUsuario = convenio.getConvenioUsuarioList();
            convenioUsuarioList.setData(lsConvenioUsuario);
            
            lsConvenioPuntoVenta = convenio.getConvenioPuntoVentaList();
            convenioPuntoVentaList.setData(lsConvenioPuntoVenta);
            
            lsConvenioEmpresa = convenio.getConvenioEmpresaList();
            empresaList.setData(lsConvenioEmpresa);
            
            lsConvenioRuta = convenio.getConvenioRutaList();
            rutaList.setData(lsConvenioRuta);
            
            if (convenio.getImprimeprecio() != null) {
                if (convenio.getImprimeprecio().equals(Convenio.IMPRIME_DESCONTO)) {
                    rdDescuento.setChecked(Boolean.TRUE);
                } else if (convenio.getImprimeprecio().equals(Convenio.IMPRIME_PRECO_MENOS_DESCONTO)) {
                    rdPrecioDescuento.setChecked(Boolean.TRUE);
                } else if (convenio.getImprimeprecio().equals(Convenio.IMPRIME_PRECO_TOTAL)) {
                    rdPrecioTotal.setChecked(Boolean.TRUE);
                }
            }

            setClienteToSave(convenio.getCliente());
            bandBoxCliente.setValue(convenio.getCliente() != null ? convenio.getCliente().getNombcliente() : null);
                        
            setSelectedTipoDesconto(convenio);
            disableTipoDesconto();
            chkValidaFolio.setChecked(convenio.getValidafolio());
            chkValidaFolio.setDisabled(Boolean.TRUE);
        }

        convenioDetList.setItemRenderer(new RenderConvenioDet());
        convenioDetList.setData(lsConvenioDets);

        txtDescConvenio.focus();
    }

	private void disableTipoDesconto() {
		rdPorNumDocumento.setDisabled(Boolean.TRUE);
		rdPorQuantidade.setDisabled(Boolean.TRUE);
		rdNaoInformar.setDisabled(Boolean.TRUE);
	}

	private void setSelectedTipoDesconto(Convenio convenioToLoad) {
		if (convenioToLoad.getIndDescuentoNormal() == null || convenioToLoad.getIndDescuentoNormal().equals(ConstantesTipoDesconto.DESCONTO_POR_NUMERO_DOCUMENTO)) {
			rdPorNumDocumento.setChecked(Boolean.TRUE);
		} else if (convenioToLoad.getIndDescuentoNormal().equals(ConstantesTipoDesconto.DESCONTO_POR_QUANTIDADE)) {
			rdPorQuantidade.setChecked(Boolean.TRUE);
		} else {
			rdNaoInformar.setChecked(Boolean.TRUE);
		}
	}

	public void onClick$rdPorNumDocumento(Event ev) {
		enableChkValidaFolio();
	}

	public void onClick$rdPorQuantidade(Event ev) {
		enableChkValidaFolio();
	}
	
	public void onClick$rdNaoInformar(Event ev) {
		enableChkValidaFolio();
	}	
	
	private void enableChkValidaFolio() {
		if (rdPorNumDocumento.isChecked()) {
			chkValidaFolio.setDisabled(Boolean.FALSE);
			txtNumfolioinicio.setVisible(Boolean.TRUE);
			txtNumfoliofinal.setVisible(Boolean.TRUE);
			lbNumDoc.setVisible(Boolean.TRUE);
			lbFolioInicio.setVisible(Boolean.TRUE);
			lbFolioFinal.setVisible(Boolean.TRUE);
			
			txtQuantidade.setVisible(Boolean.FALSE);
			lbQuantidade.setVisible(Boolean.FALSE);
			txtQuantidade.setValue(null);			
		} else {
			
			if(rdPorQuantidade.isChecked()) {
				txtNumfolioinicio.setVisible(Boolean.FALSE);
				txtNumfolioinicio.setValue(null);
				
				txtNumfoliofinal.setVisible(Boolean.FALSE);
				txtNumfoliofinal.setValue(null);
				
				lbNumDoc.setVisible(Boolean.FALSE);
				lbFolioInicio.setVisible(Boolean.FALSE);
				lbFolioFinal.setVisible(Boolean.FALSE);
				
				txtQuantidade.setVisible(Boolean.TRUE);
				lbQuantidade.setVisible(Boolean.TRUE);
			} else {
				txtNumfolioinicio.setVisible(Boolean.FALSE);
				txtNumfolioinicio.setValue(null);
				
				txtNumfoliofinal.setVisible(Boolean.FALSE);
				txtNumfoliofinal.setValue(null);
				
				lbNumDoc.setVisible(Boolean.FALSE);
				lbFolioInicio.setVisible(Boolean.FALSE);
				lbFolioFinal.setVisible(Boolean.FALSE);
				
				txtQuantidade.setVisible(Boolean.FALSE);
				lbQuantidade.setVisible(Boolean.FALSE);
				txtQuantidade.setValue(null);
			}

			chkValidaFolio.setDisabled(Boolean.TRUE);
			chkValidaFolio.setChecked(Boolean.FALSE);
		}
	}	

	@SuppressWarnings("deprecation")
	public void onClick$btnSalvar(Event ev) {
    	
        txtDescConvenio.getValue();

        try {

            if (lsConvenioDets.isEmpty()) {
                Messagebox.show(
                        Labels.getLabel("editarConvenioController.MSG.necessaitaPorcentaje.value"),
                        Labels.getLabel("editarConvenioController.window.title"),
                        Messagebox.OK, Messagebox.EXCLAMATION);
                return;
            } else if (!isDescontoNaoNormalValido(Boolean.TRUE)) {
            	return;
            }

            convenio.setActivo(true);
            convenio.setFecmodif(Calendar.getInstance().getTime());
            convenio.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId());
            convenio.setConvenioDetList(lsConvenioDets);
            convenio.setValidafolio(chkValidaFolio.isChecked());
            convenio.setIndDescuentoNormal(getTipoDesconto());
            convenio.setCliente(getClienteToSave());

            if (rdDescuento.isChecked()) {
                convenio.setImprimeprecio(Convenio.IMPRIME_DESCONTO);
            } else if (rdPrecioDescuento.isChecked()) {
                convenio.setImprimeprecio(Convenio.IMPRIME_PRECO_MENOS_DESCONTO);
            } else if (rdPrecioTotal.isChecked()) {
                convenio.setImprimeprecio(Convenio.IMPRIME_PRECO_TOTAL);
            } else {
                Messagebox.show(
                        Labels.getLabel("editarConvenioController.ImpressionSeleccione.value"),
                        Labels.getLabel("editarConvenioController.window.title"),
                        Messagebox.OK, Messagebox.EXCLAMATION);

                return;
            }

            List<Convenio> lsConvenioDet =
                    convenioService.buscar(convenio.getDescconvenio(),
                    convenio.getCveconvenio());

            boolean podeSalvar = false;
            if (lsConvenioDet.isEmpty()) {
                podeSalvar = true;
            } else {
                if (convenio.getConvenioId() != null) {
                    for (Convenio c : lsConvenioDet) {
                        if (c.getConvenioId().equals(convenio.getConvenioId())) {
                            podeSalvar = true;
                        }
                    }
                }
            }

            if (podeSalvar) {
                if (convenio.getConvenioId() == null) {
                    convenioService.suscribir(convenio);
                    convenioList.addItem(convenio);
                } else {
                    convenioService.actualizacion(convenio);
                    convenioList.updateItem(convenio);
                }
                Messagebox.show(
                        Labels.getLabel("editarConvenioController.MSG.suscribirOK"),
                        Labels.getLabel("editarConvenioController.window.title"),
                        Messagebox.OK, Messagebox.INFORMATION);

                closeWindow();
            } else {
                Messagebox.show(
                        Labels.getLabel("MSG.Registro.Existe"),
                        Labels.getLabel("editarConvenioController.window.title"),
                        Messagebox.OK, Messagebox.EXCLAMATION);
            }

        } catch (Exception ex) {
            log.error(ex);
        }
    }

    private Integer getTipoDesconto() {
		
    	if(rdNaoInformar.isChecked()) {
    		return ConstantesTipoDesconto.TIPO_DESCONTO_NAO_INFORMADO;
    	} else if (rdPorNumDocumento.isChecked()) {
    		return ConstantesTipoDesconto.DESCONTO_POR_NUMERO_DOCUMENTO;
    	}
    	    	
		return ConstantesTipoDesconto.DESCONTO_POR_QUANTIDADE;
	}

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

            if (resp == Messagebox.YES) {

                convenioService.borrar(convenio);

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

                convenioList.removeItem(convenio);

                closeWindow();
            }
        } catch (Exception ex) {
            log.error(ex);
        }
    }

    /**
     *
     * @return
     *  0 - Esta ok
     *  1 - Registro duplicado
     *  2 - Registro traslapado
     * @throws InterruptedException
     */
    private int registroDuplicado(Long folioIni, Long folioFin) throws InterruptedException {
        Collections.sort(lsConvenioDets, new Comparator<ConvenioDet>() {

            public int compare(ConvenioDet o1, ConvenioDet o2) {
                return o1.getNumfolioinicial().compareTo(o2.getNumfoliofinal());
            }
        });

        for (ConvenioDet pv : lsConvenioDets) {
            if (!pv.getActivo()) {
                continue;
            }

            if (TraslaparUtil.intersectNum(pv.getNumfolioinicial().longValue(), pv.getNumfoliofinal().longValue(), folioIni, folioFin)) {
                return 2;
            }
        }

        return 0;
    }

    public void onClick$btnAdicionarConvenioDet(Event ev) throws InterruptedException {
    	
    	Boolean isDescontoNaoNormalValido = isDescontoNaoNormalValido(Boolean.FALSE);
    	
    	if(!isDescontoNaoNormalValido) {
    		return;
    	}
    	
        txtTarifa.setConstraint("no empty");
        txtTarifa.getValue();

        if (txtTarifa.getValueBigDecimal().compareTo(new BigDecimal("100")) > 0) {
            Clients.wrongValue(txtTarifa, Labels.getLabel("MSG.Porcentaje"));
            return;
        }

        if (chkValidaFolio.isChecked()) {
            txtNumfolioinicio.setConstraint("no empty, no negative, no zero");
            txtNumfoliofinal.setConstraint("no empty, no negative, no zero");
            txtNumfolioinicio.getValue();
            txtNumfoliofinal.getValue();
        }

        BigDecimal porcdescuento = txtTarifa.getValueBigDecimal();
        BigDecimal porcdescuentoTaxaEmbarque = txtTxEmbarque.getValueBigDecimal();
        BigDecimal porcdescuentoSeguro = txtSeguro.getValueBigDecimal();
        BigDecimal porcdescuentoPedagio = txtPedagio.getValueBigDecimal();
        Long numfolioinicio = txtNumfolioinicio.getValue();
        Long numfoliofinal = txtNumfoliofinal.getValue();
        Long quantidade = txtQuantidade.getValue();

        if (chkValidaFolio.isChecked() && (numfolioinicio > numfoliofinal)) {
            Messagebox.show(
                    Labels.getLabel("MSG.Folios"),
                    Labels.getLabel("editarConvenioController.window.title"),
                    Messagebox.OK, Messagebox.EXCLAMATION);
            return;
        }

        Boolean achou = Boolean.FALSE;
        for (ConvenioDet cds : convenio.getConvenioDetList()) {
            if (cds.getNumfoliofinal() != null && cds.getNumfolioinicial() != null) {
                if (cds.getNumfoliofinal().equals(numfoliofinal) && cds.getNumfolioinicial().equals(numfolioinicio) && cds.getPorcdescuento().equals(porcdescuento)) {
                    achou = Boolean.TRUE;
                }
            }
        }
        
        if (!achou) {
            ConvenioDet cd = new ConvenioDet();
            cd.setActivo(Boolean.TRUE);
            cd.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId());
            cd.setFecmodif(Calendar.getInstance().getTime());
            cd.setPorcdescuento(porcdescuento);
            cd.setNumfolioinicial(numfolioinicio);
            cd.setNumfoliofinal(numfoliofinal);
            cd.setPorcDescuentoTaxaEmbarque(porcdescuentoTaxaEmbarque);
            cd.setPorcDescuentoSeguro(porcdescuentoSeguro);
            cd.setPorcDescuentoPedagio(porcdescuentoPedagio);  
            cd.setQuantidade(quantidade);
            
            if (chkValidaFolio.isChecked()) {
                int resp = registroDuplicado(numfolioinicio, numfoliofinal);

                if (resp != 0) {
                    Messagebox.show(
                            (resp == 1) ? Labels.getLabel("MSG.Registro.Existe") : Labels.getLabel("editarConvenioController.MSG.registroTraslapado"),
                            Labels.getLabel("editarConvenioController.window.title"),
                            Messagebox.OK, Messagebox.EXCLAMATION);
                    return;
                }
            } else {
                if (lsConvenioDets.size() >= 1) {
                    Messagebox.show(
                            Labels.getLabel("editarConvenioController.MSG.pocentaje"),
                            Labels.getLabel("editarConvenioController.window.title"),
                            Messagebox.OK, Messagebox.EXCLAMATION);
                    return;
                }
            }
            
            lsConvenioDets.add(cd);
            convenioDetList.setData(lsConvenioDets);
            convenio.setConvenioDetList(lsConvenioDets);

            chkValidaFolio.setDisabled(Boolean.TRUE);
            limparDadosDocumentos();
            
        } else {
            Messagebox.show(
                    Labels.getLabel("MSG.Registro.Existe"),
                    Labels.getLabel("editarConvenioController.window.title"),
                    Messagebox.OK, Messagebox.EXCLAMATION);
        }
    }

    private void limparDadosDocumentos() {
        txtTarifa.setConstraint("");
        txtNumfolioinicio.setConstraint("");
        txtNumfoliofinal.setConstraint("");

        txtTarifa.setText("");
        txtNumfolioinicio.setValue(null);
        txtNumfoliofinal.setValue(null);
        
        txtPedagio.setConstraint("");
        txtPedagio.setText("");
        
        txtSeguro.setConstraint("");
        txtSeguro.setText("");
        
        txtTxEmbarque.setConstraint("");
        txtTxEmbarque.setText("");
        txtQuantidade.setValue(null);        
	}

	private Boolean isDescontoNaoNormalValido(Boolean salvando) throws InterruptedException {
		if (rdPorQuantidade.isChecked() || rdNaoInformar.isChecked()) {
			if (convenioDetList.getData().length > 1) {
				Messagebox.show(
						Labels.getLabel("editarConvenioController.MSG.erroDescontoNaoNormal"),
						Labels.getLabel("editarConvenioController.window.title"),
						Messagebox.OK, Messagebox.EXCLAMATION);
				txtTarifa.focus();
				limparDadosDocumentos();
				return Boolean.FALSE;
			}

			if(!salvando && rdPorQuantidade.isChecked()) {
				if (txtQuantidade.getValue() == null) {
					Messagebox.show(
							Labels.getLabel("editarConvenioController.MSG.infoQuantidade"),
							Labels.getLabel("editarConvenioController.window.title"),
							Messagebox.OK, Messagebox.EXCLAMATION);
					txtTarifa.focus();
					limparDadosDocumentos();
					return Boolean.FALSE;
				}
			}
		}

		return Boolean.TRUE;
	}

	public void onClick$btnRemoverConvenioDet(Event ev) {
        ConvenioDet cd = (ConvenioDet) convenioDetList.getSelected();
        if (cd != null) {
            cd.setActivo(Boolean.FALSE);
            cd.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId());
            cd.setFecmodif(Calendar.getInstance().getTime());

            if (cd.getConveniodetId() != null) {
                convenioDetService.borrar(cd);
            }

            lsConvenioDets.remove(cd);

            if (lsConvenioDets.isEmpty()) {
                btnAdicionarConvenioDet.setDisabled(Boolean.FALSE);
                chkValidaFolio.setDisabled(Boolean.FALSE);
            }

            convenioDetList.setData(lsConvenioDets);
            convenio.setConvenioDetList(lsConvenioDets);
        }
    }

	public MyListbox getConvenioTramoList() {
		return convenioTramoList;
	}

	public void setConvenioTramoList(MyListbox convenioTramoList) {
		this.convenioTramoList = convenioTramoList;
	}

	public Combobox getCmbParadaOrigem() {
		return cmbParadaOrigem;
	}

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

	public Combobox getCmbParadaDestino() {
		return cmbParadaDestino;
	}

	public void setCmbParadaDestino(Combobox cmbParadaDestino) {
		this.cmbParadaDestino = cmbParadaDestino;
	}      	
	
	public MyListbox getConvenioUsuarioList() {
		return convenioUsuarioList;
	}

	public void setConvenioUsuarioList(MyListbox convenioUsuarioList) {
		this.convenioUsuarioList = convenioUsuarioList;
	}

	public Combobox getCmbUsuario() {
		return cmbUsuario;
	}

	public void setCmbUsuario(Combobox cmbUsuario) {
		this.cmbUsuario = cmbUsuario;
	}

	public MyListbox getConvenioPuntoVentaList() {
		return convenioPuntoVentaList;
	}

	public void setConvenioPuntoVentaList(MyListbox convenioPuntoVentaList) {
		this.convenioPuntoVentaList = convenioPuntoVentaList;
	}

	public Combobox getCmbPuntoVenta() {
		return cmbPuntoVenta;
	}

	public void setCmbPuntoVenta(Combobox cmbPuntoVenta) {
		this.cmbPuntoVenta = cmbPuntoVenta;
	}		
		
	public Radio getRdPorNumDocumento() {
		return rdPorNumDocumento;
	}

	public void setRdPorNumDocumento(Radio rdPorNumDocumento) {
		this.rdPorNumDocumento = rdPorNumDocumento;
	}

	public Radio getRdPorQuantidade() {
		return rdPorQuantidade;
	}

	public void setRdPorQuantidade(Radio rdPorQuantidade) {
		this.rdPorQuantidade = rdPorQuantidade;
	}

	public Radio getRdNaoInformar() {
		return rdNaoInformar;
	}

	public PagedListWrapper<Cliente> getPlwCliente() {
		return plwCliente;
	}

	public void setPlwCliente(PagedListWrapper<Cliente> plwCliente) {
		this.plwCliente = plwCliente;
	}

	public MyTextbox getTxtNomeCliente() {
		return txtNomeCliente;
	}

	public void setTxtNomeCliente(MyTextbox txtNomeCliente) {
		this.txtNomeCliente = txtNomeCliente;
	}

	public Bandbox getBandBoxCliente() {
		return bandBoxCliente;
	}

	public void setBandBoxCliente(Bandbox bandBoxCliente) {
		this.bandBoxCliente = bandBoxCliente;
	}

	public MyListbox getClienteList() {
		return clienteList;
	}

	public void setClienteList(MyListbox clienteList) {
		this.clienteList = clienteList;
	}

	public Paging getPagingCliente() {
		return pagingCliente;
	}

	public void setPagingCliente(Paging pagingCliente) {
		this.pagingCliente = pagingCliente;
	}

	public Cliente getClienteToSave() {
		return clienteToSave;
	}

	public void setClienteToSave(Cliente clienteToSave) {
		this.clienteToSave = clienteToSave;
	}

	public void setRdNaoInformar(Radio rdNaoInformar) {
		this.rdNaoInformar = rdNaoInformar;
	}

	public void onClick$btnAdicionarTrecho(Event ev) throws InterruptedException {
		if ((cmbParadaOrigem.getSelectedItem() != null && cmbParadaDestino.getSelectedItem() == null) ||
				(cmbParadaOrigem.getSelectedItem() == null && cmbParadaDestino.getSelectedItem() != null)) {
			Messagebox.show(
					Labels.getLabel("editarConvenioController.tabTrecho.MSG.erroDestinoOrigem"),
					Labels.getLabel("editarConvenioController.tab.label.trechos"),
					Messagebox.OK, Messagebox.EXCLAMATION);
			return;
		}

		if (cmbParadaOrigem.getSelectedItem() != null && cmbParadaDestino.getSelectedItem() != null) {

			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("editarConvenioController.tabTrecho.MSG.selecioneItemDiferente"),
							Labels.getLabel("editarConvenioController.tab.label.trechos"), Messagebox.OK, Messagebox.EXCLAMATION);
					return;
				}

				ConvenioTramo convenioTramoToAdd = new ConvenioTramo();
				convenioTramoToAdd.setActivo(Boolean.TRUE);
				convenioTramoToAdd.setConvenio(convenio);
				convenioTramoToAdd.setFecmodif(Calendar.getInstance().getTime());
				convenioTramoToAdd.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId());
				convenioTramoToAdd.setParadaDestino(destino);
				convenioTramoToAdd.setParadaOrigem(origem);

				boolean achou = Boolean.FALSE;
				for (ConvenioTramo convenioTramoInTheList : lsConvenioTramo) {
					if (convenioTramoInTheList.getParadaOrigem().equals(convenioTramoToAdd.getParadaOrigem()) && convenioTramoInTheList.getParadaDestino().equals(convenioTramoToAdd.getParadaDestino()) && convenioTramoInTheList.getActivo()) {
						achou = Boolean.TRUE;
					}
				}

				if (!achou) {
					lsConvenioTramo.add(convenioTramoToAdd);
					convenio.setConvenioTramoList(lsConvenioTramo);
				}

				List<ConvenioTramo> tempList = new ArrayList<ConvenioTramo>();
				if (lsConvenioTramo != null) {
					for (ConvenioTramo convenioTramoTemp : lsConvenioTramo) {
						if (convenioTramoTemp.getActivo()) {
							tempList.add(convenioTramoTemp);
						}
					}
				}

				convenioTramoList.setData(tempList);
				cmbParadaOrigem.setSelectedItem(null);
				cmbParadaDestino.setSelectedItem(null);

			} catch (Exception ex) {
				log.error(ex);
				Clients.alert(
						Labels.getLabel("MSG.Error"),
						Labels.getLabel("editarConvenioController.tab.label.trechos"),
						Messagebox.EXCLAMATION);
			}
		}
	}
	
	public void onClick$btnRemoverTrecho(Event ev) {
		try {
			ConvenioTramo convenioTramoToRemove = (ConvenioTramo) convenioTramoList.getSelected();
			if (convenioTramoToRemove != null) {
				lsConvenioTramo.remove(convenioTramoToRemove);
				convenioTramoToRemove.setFecmodif(Calendar.getInstance().getTime());
				convenioTramoToRemove.setActivo(Boolean.FALSE);
				convenioTramoToRemove.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId());
				lsConvenioTramo.add(convenioTramoToRemove);
				convenioTramoList.updateItem(convenioTramoToRemove);
				convenioTramoList.removeItem(convenioTramoToRemove);
				convenio.setConvenioTramoList(lsConvenioTramo);
			} 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$btnRemoverUsuario(Event ev) {	
		try {
			ConvenioUsuario convenioUsuarioToRemove =  (ConvenioUsuario) convenioUsuarioList.getSelected();			
			if(convenioUsuarioToRemove != null) {				
				lsConvenioUsuario.remove(convenioUsuarioToRemove);
				convenioUsuarioToRemove.setFecmodif(Calendar.getInstance().getTime());
				convenioUsuarioToRemove.setActivo(Boolean.FALSE);
				convenioUsuarioToRemove.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId());
				lsConvenioUsuario.add(convenioUsuarioToRemove);
				convenioUsuarioList.updateItem(convenioUsuarioToRemove);
				convenioUsuarioList.removeItem(convenioUsuarioToRemove);
				convenio.setConvenioUsuarioList(lsConvenioUsuario);				
			} 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$btnRemoverPuntoVenta(Event ev) {	
		try {
			ConvenioPuntoVenta convenioPuntoVentaToRemove = (ConvenioPuntoVenta) convenioPuntoVentaList.getSelected();
			if(convenioPuntoVentaToRemove != null) {
				lsConvenioPuntoVenta.remove(convenioPuntoVentaToRemove);
				convenioPuntoVentaToRemove.setFecmodif(Calendar.getInstance().getTime());
				convenioPuntoVentaToRemove.setActivo(Boolean.FALSE);
				convenioPuntoVentaToRemove.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId());		
				lsConvenioPuntoVenta.add(convenioPuntoVentaToRemove);
				convenioPuntoVentaList.updateItem(convenioPuntoVentaToRemove);
				convenioPuntoVentaList.removeItem(convenioPuntoVentaToRemove);
				convenio.setConvenioPuntoVentaList(lsConvenioPuntoVenta);
			} 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$btnRemoverEmpresa(Event ev) {	
		try {
			ConvenioEmpresa convenioEmpresaToRemove = (ConvenioEmpresa) empresaList.getSelected();
			if(convenioEmpresaToRemove != null) {
				lsConvenioEmpresa.remove(convenioEmpresaToRemove);
				convenioEmpresaToRemove.setFecmodif(Calendar.getInstance().getTime());
				convenioEmpresaToRemove.setActivo(Boolean.FALSE);
				convenioEmpresaToRemove.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId());		
				lsConvenioEmpresa.add(convenioEmpresaToRemove);
				empresaList.updateItem(convenioEmpresaToRemove);
				empresaList.removeItem(convenioEmpresaToRemove);
				convenio.setConvenioEmpresaList(lsConvenioEmpresa);
			} 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$btnRemoverRuta(Event ev) {	
		try {
			ConvenioRuta convenioRutaToRemove = (ConvenioRuta) rutaList.getSelected();
			if(convenioRutaToRemove != null) {
				lsConvenioRuta.remove(convenioRutaToRemove);
				convenioRutaToRemove.setFecmodif(Calendar.getInstance().getTime());
				convenioRutaToRemove.setActivo(Boolean.FALSE);
				convenioRutaToRemove.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId());		
				lsConvenioRuta.add(convenioRutaToRemove);
				rutaList.updateItem(convenioRutaToRemove);
				rutaList.removeItem(convenioRutaToRemove);
				convenio.setConvenioRutaList(lsConvenioRuta);
			} 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$btnAdicionarUsuario(Event ev) throws InterruptedException {
		if (cmbUsuario.getSelectedItem() != null) {
			Usuario usuario = (Usuario) cmbUsuario.getSelectedItem().getValue();
			
			ConvenioUsuario convenioUsuarioToAdd = new ConvenioUsuario();
			convenioUsuarioToAdd.setActivo(Boolean.TRUE);
			convenioUsuarioToAdd.setConvenio(convenio);
			convenioUsuarioToAdd.setFecmodif(Calendar.getInstance().getTime());
			convenioUsuarioToAdd.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId());
			convenioUsuarioToAdd.setUsuario(usuario);
			
			boolean achou = Boolean.FALSE;
			for (ConvenioUsuario convenioUsuarioInTheList : lsConvenioUsuario) {
				if (convenioUsuarioInTheList.getUsuario().equals(convenioUsuarioToAdd.getUsuario()) && convenioUsuarioInTheList.getActivo()) {
					achou = Boolean.TRUE;
				}
			}
			
			if (!achou) {
				lsConvenioUsuario.add(convenioUsuarioToAdd);
				convenio.setConvenioUsuarioList(lsConvenioUsuario);
			}
			
			List<ConvenioUsuario> tempList = new ArrayList<ConvenioUsuario>();			
			if (lsConvenioUsuario != null) {
				for (ConvenioUsuario convenioUsuario : lsConvenioUsuario) {
					if (convenioUsuario.getActivo()) {
						tempList.add(convenioUsuario);
					}
				}
			}
			
			convenioUsuarioList.setData(tempList);
			cmbUsuario.setSelectedItem(null);
		}
	}
		
	
	public void onClick$btnAdicionarPuntoVenta(Event ev) throws InterruptedException {
		if (cmbPuntoVenta.getSelectedItem() != null) {
			PuntoVenta puntoVenta = (PuntoVenta) cmbPuntoVenta.getSelectedItem().getValue();
			
			ConvenioPuntoVenta convenioPuntoVentaToAdd = new ConvenioPuntoVenta();			
			convenioPuntoVentaToAdd.setActivo(Boolean.TRUE);
			convenioPuntoVentaToAdd.setConvenio(convenio);
			convenioPuntoVentaToAdd.setFecmodif(Calendar.getInstance().getTime());
			convenioPuntoVentaToAdd.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId());
			convenioPuntoVentaToAdd.setPuntoVenta(puntoVenta);
			
			boolean achou = Boolean.FALSE;
			for (ConvenioPuntoVenta convenioPuntoVentaInTheList : lsConvenioPuntoVenta) {
				if (convenioPuntoVentaInTheList.getPuntoVenta().equals(convenioPuntoVentaToAdd.getPuntoVenta()) && convenioPuntoVentaInTheList.getActivo()) {
					achou = Boolean.TRUE;
				}
			}
			
			if(!achou) {
				lsConvenioPuntoVenta.add(convenioPuntoVentaToAdd);
				convenio.setConvenioPuntoVentaList(lsConvenioPuntoVenta);
			}
			
			List<ConvenioPuntoVenta> tempList = new ArrayList<ConvenioPuntoVenta>();
			if(lsConvenioPuntoVenta != null) {
				for (ConvenioPuntoVenta convenioPuntoVenta : lsConvenioPuntoVenta) {
					if(convenioPuntoVenta.getActivo()) {
						tempList.add(convenioPuntoVenta);
					}
				}
			}
			
			convenioPuntoVentaList.setData(tempList);
			cmbPuntoVenta.setSelectedItem(null);
		}
	}
	
	public void onClick$btnAdicionarEmpresa(Event ev) throws InterruptedException {
		if (cmbEmpresa.getSelectedItem() != null) {
			Empresa empresa = (Empresa) cmbEmpresa.getSelectedItem().getValue();
			
			ConvenioEmpresa convenioEmpresaToAdd = new ConvenioEmpresa();			
			convenioEmpresaToAdd.setActivo(Boolean.TRUE);
			convenioEmpresaToAdd.setConvenio(convenio);
			convenioEmpresaToAdd.setFecmodif(Calendar.getInstance().getTime());
			convenioEmpresaToAdd.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId());
			convenioEmpresaToAdd.setEmpresa(empresa);
			
			boolean achou = Boolean.FALSE;
			for (ConvenioEmpresa convenioEmpresaInTheList : lsConvenioEmpresa) {
				if (convenioEmpresaInTheList.getEmpresa().equals(convenioEmpresaToAdd.getEmpresa()) && convenioEmpresaInTheList.getActivo()) {
					achou = Boolean.TRUE;
				}
			}
			
			if(!achou) {
				lsConvenioEmpresa.add(convenioEmpresaToAdd);
				convenio.setConvenioEmpresaList(lsConvenioEmpresa);
			}
			
			List<ConvenioEmpresa> tempList = new ArrayList<ConvenioEmpresa>();
			if(lsConvenioEmpresa != null) {
				for (ConvenioEmpresa convenioEmpresa : lsConvenioEmpresa) {
					if(convenioEmpresa.getActivo()) {
						tempList.add(convenioEmpresa);
					}
				}
			}
			
			empresaList.setData(tempList);
			cmbEmpresa.setSelectedItem(null);
		}		
	}
	
	public void onClick$btnAdicionarRuta(Event ev) throws InterruptedException {
		if (cmbRuta.getSelectedItem() != null) {
			Ruta ruta = (Ruta) cmbRuta.getSelectedItem().getValue();
			
			ConvenioRuta convenioRutaToAdd = new ConvenioRuta();			
			convenioRutaToAdd.setActivo(Boolean.TRUE);
			convenioRutaToAdd.setConvenio(convenio);
			convenioRutaToAdd.setFecmodif(Calendar.getInstance().getTime());
			convenioRutaToAdd.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId());
			convenioRutaToAdd.setRuta(ruta);
			
			boolean achou = Boolean.FALSE;
			for (ConvenioRuta convenioRutaInTheList : lsConvenioRuta) {
				if (convenioRutaInTheList.getRuta().equals(convenioRutaToAdd.getRuta()) && convenioRutaInTheList.getActivo()) {
					achou = Boolean.TRUE;
				}
			}
			
			if(!achou) {
				lsConvenioRuta.add(convenioRutaToAdd);
				convenio.setConvenioRutaList(lsConvenioRuta);
			}
			
			List<ConvenioRuta> tempList = new ArrayList<ConvenioRuta>();
			if(lsConvenioRuta != null) {
				for (ConvenioRuta convenioRuta : lsConvenioRuta) {
					if(convenioRuta.getActivo()) {
						tempList.add(convenioRuta);
					}
				}
			}
			
			rutaList.setData(tempList);
			cmbRuta.setSelectedItem(null);
		}		
	}	
	
	public void onClick$btnPesquisa(Event ev) {
		executarPesquisa();
	}
	
	public void onClick$btnLimpar(Event ev) {
		clienteList.setData(new ArrayList<Cliente>());
		bandBoxCliente.setText("");
		txtNomeCliente.setValue(null);
	}	

	private void executarPesquisa() {
		
		HibernateSearchObject<Cliente> findCliente = new HibernateSearchObject<Cliente>(Cliente.class, pagingCliente.getPageSize());
		findCliente.addFilterILike("nombcliente", "%" + txtNomeCliente.getValue() + "%");
		findCliente.addFilterEqual("activo", Boolean.TRUE);
		findCliente.addSortAsc("nombcliente");
		findCliente.addFilterEqual("activo", Boolean.TRUE);
		plwCliente.init(findCliente, clienteList, pagingCliente);

		if (clienteList.getData().length == 0) {
			try {
				Messagebox.show(Labels.getLabel("MSG.ningunRegistro"), Labels.getLabel("editarConvenioController.window.title"), Messagebox.OK, Messagebox.INFORMATION);
			} catch (InterruptedException ex) {}
		}
	}
	
	public void onDoubleClick$clienteList(Event ev) {
		Cliente cliente = (Cliente) clienteList.getSelected();
		
		if(cliente != null) {
			bandBoxCliente.setValue(cliente.getNombcliente());		
			setClienteToSave(cliente);
			bandBoxCliente.close();
		}		
	}
}