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

import com.rjconsultores.ventaboletos.entidad.ComisionistaExterno;
import com.rjconsultores.ventaboletos.entidad.Parada;
import com.rjconsultores.ventaboletos.entidad.ParadaEquivalencia;
import com.rjconsultores.ventaboletos.service.ComisionistaExternoService;
import com.rjconsultores.ventaboletos.web.utilerias.MyComboboxParada;
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.RenderParadaEquivalencia;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
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.event.Event;
import org.zkoss.zk.ui.event.EventListener;
import org.zkoss.zul.Combobox;
import org.zkoss.zul.Comboitem;
import org.zkoss.zul.Messagebox;
import org.zkoss.zul.Paging;
import org.zkoss.zul.Textbox;

/**
 *
 * @author Administrador
 */
@Controller("busquedaParadaEquivalenciaController")
@Scope("prototype")
public class BusquedaParadaEquivalenciaController extends MyGenericForwardComposer {

    @Autowired
    private transient PagedListWrapper<ParadaEquivalencia> plwParadaEquivalencia;
    @Autowired
    private ComisionistaExternoService comisionistaExternoService;
    private MyListbox paradaEquivalenciaList;
    private Paging pagingParadaEquivalencia;
    private MyComboboxParada cmbParada;
    private Textbox txtCVE;
    private Textbox txtEquivalencia;
    private Combobox cmbComissionestaExterno;
    private List<ComisionistaExterno> lsComisionistaExterno;

    public Combobox getCmbComissionestaExterno() {
        return cmbComissionestaExterno;
    }

    public void setCmbComissionestaExterno(Combobox cmbComissionestaExterno) {
        this.cmbComissionestaExterno = cmbComissionestaExterno;
    }

    public List<ComisionistaExterno> getLsComisionistaExterno() {
        return lsComisionistaExterno;
    }

    public void setLsComisionistaExterno(List<ComisionistaExterno> lsComisionistaExterno) {
        this.lsComisionistaExterno = lsComisionistaExterno;
    }

    public Paging getPagingParadaEquivalencia() {
        return pagingParadaEquivalencia;
    }

    public void setPagingParadaEquivalencia(Paging pagingParadaEquivalencia) {
        this.pagingParadaEquivalencia = pagingParadaEquivalencia;
    }

    public MyListbox getParadaEquivalenciaList() {
        return paradaEquivalenciaList;
    }

    public void setParadaEquivalenciaList(MyListbox paradaEquivalenciaList) {
        this.paradaEquivalenciaList = paradaEquivalenciaList;
    }

    public Textbox getTxtCVE() {
        return txtCVE;
    }

    public void setTxtCVE(Textbox txtCVE) {
        this.txtCVE = txtCVE;
    }

    public void onClick$btnPesquisa(Event ev) throws InterruptedException {
        refreshLista();
    }

    public void onClick$btnRefresh(Event ev) {
        refreshLista();
    }

    public void onClick$btnNovo(Event ev) {
        verParadaEquivalencia(new ParadaEquivalencia());
    }

    @Override
    public void doAfterCompose(Component comp) throws Exception {
        lsComisionistaExterno = comisionistaExternoService.obtenerTodos();

        super.doAfterCompose(comp);

        paradaEquivalenciaList.setItemRenderer(new RenderParadaEquivalencia());
        paradaEquivalenciaList.addEventListener("onDoubleClick", new EventListener() {

            @Override
            public void onEvent(Event event) throws Exception {
                ParadaEquivalencia c = (ParadaEquivalencia) paradaEquivalenciaList.getSelected();
                verParadaEquivalencia(c);
            }
        });

        cmbParada.focus();
        refreshLista();
    }

    private void verParadaEquivalencia(ParadaEquivalencia pe) {
        if (pe == null) {
            return;
        }

        Map args = new HashMap();
        args.put("paradaEquivalencia", pe);
        args.put("paradaEquivalenciaList", paradaEquivalenciaList);

        openWindow("/gui/equivalencia/editarParadaEquivalencia.zul",
                Labels.getLabel("editarParadaEquivalenciaController.window.title"),
                args, MODAL);
    }

    private void refreshLista() {
        HibernateSearchObject<ParadaEquivalencia> parada =
                new HibernateSearchObject<ParadaEquivalencia>(ParadaEquivalencia.class, pagingParadaEquivalencia.getPageSize());

        if (cmbParada.getSelectedItem() != null) {
            parada.addFilterEqual("parada", (Parada) cmbParada.getSelectedItem().getValue());
        }

        Comboitem ce = cmbComissionestaExterno.getSelectedItem();
        if (ce != null) {
            ComisionistaExterno c = (ComisionistaExterno) ce.getValue();
            parada.addFilterEqual("comisionistaExterno", c);
        }

        if (!txtEquivalencia.getValue().equals("")) {
            parada.addFilterILike("equivalenciaId", txtEquivalencia.getValue());
        }
        parada.addFilterEqual("activo", Boolean.TRUE);


        parada.addSortAsc("parada.descparada");

        plwParadaEquivalencia.init(parada, paradaEquivalenciaList, pagingParadaEquivalencia);

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