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

import com.rjconsultores.ventaboletos.entidad.ClaseServicio;
import com.rjconsultores.ventaboletos.entidad.CortesiaDireccion;
import com.rjconsultores.ventaboletos.entidad.Marca;
import com.rjconsultores.ventaboletos.service.ClaseServicioService;
import com.rjconsultores.ventaboletos.service.CortesiaDireccionService;
import com.rjconsultores.ventaboletos.service.MarcaService;
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.RenderCortesiaDireccion;
import java.util.ArrayList;
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.Datebox;
import org.zkoss.zul.Messagebox;
import org.zkoss.zul.Paging;

/**
 *
 * @author Shiro
 */
@Controller("busquedaCortesiaTipoDireccionController")
@Scope("prototype")
public class BusquedaCortesiaTipoDireccionController extends MyGenericForwardComposer {

    @Autowired
    private transient PagedListWrapper<CortesiaDireccion> plwCortesiaDireccion;
    @Autowired
    private MarcaService marcaService;
    @Autowired
    private ClaseServicioService claseServicioService;
    @Autowired
    private CortesiaDireccionService cortesiaDireccionService;
    private MyListbox cortesiaDireccionList;
    private List<Marca> marcaList;
    private List<ClaseServicio> claseServicioList;
    private List<CortesiaDireccion> cdsList;
    private Paging pagingCortesiaDireccion;
    private Combobox cmbMarca;
    private Combobox cmbClaseSer;
    private Datebox fecInicio;
    private Datebox fecFinal;

    public List<CortesiaDireccion> getCdsList() {
        return cdsList;
    }

    public void setCdsList(List<CortesiaDireccion> cdsList) {
        this.cdsList = cdsList;
    }

    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 CortesiaDireccionService getCortesiaDireccionService() {
        return cortesiaDireccionService;
    }

    public void setCortesiaDireccionService(CortesiaDireccionService cortesiaDireccionService) {
        this.cortesiaDireccionService = cortesiaDireccionService;
    }

    public ClaseServicioService getClaseServicioService() {
        return claseServicioService;
    }

    public void setClaseServicioService(ClaseServicioService claseServicioService) {
        this.claseServicioService = claseServicioService;
    }

    public Combobox getCmbClaseSer() {
        return cmbClaseSer;
    }

    public void setCmbClaseSer(Combobox cmbClaseSer) {
        this.cmbClaseSer = cmbClaseSer;
    }

    public Combobox getCmbMarca() {
        return cmbMarca;
    }

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

    public MyListbox getCortesiaDireccionList() {
        return cortesiaDireccionList;
    }

    public void setCortesiaDireccionList(MyListbox cortesiaDireccionList) {
        this.cortesiaDireccionList = cortesiaDireccionList;
    }

    public MarcaService getMarcaService() {
        return marcaService;
    }

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

    public Paging getPagingCortesiaDireccion() {
        return pagingCortesiaDireccion;
    }

    public void setPagingCortesiaDireccion(Paging pagingCortesiaDireccion) {
        this.pagingCortesiaDireccion = pagingCortesiaDireccion;
    }

    public PagedListWrapper<CortesiaDireccion> getPlwCortesiaDireccion() {
        return plwCortesiaDireccion;
    }

    public void setPlwCortesiaDireccion(PagedListWrapper<CortesiaDireccion> plwCortesiaDireccion) {
        this.plwCortesiaDireccion = plwCortesiaDireccion;
    }

    public List<ClaseServicio> getClaseServicioList() {
        return claseServicioList;
    }

    public void setClaseServicioList(List<ClaseServicio> claseServicioList) {
        this.claseServicioList = claseServicioList;
    }

    public List<Marca> getMarcaList() {
        return marcaList;
    }

    public void setMarcaList(List<Marca> marcaList) {
        this.marcaList = marcaList;
    }

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

    public void onClick$btnNovo(Event ev) {
        verCortesiaDireccion(new CortesiaDireccion());
    }

    @Override
    public void doAfterCompose(Component comp) throws Exception {
        marcaList = marcaService.buscarDescricaoIdMarca();
        claseServicioList = claseServicioService.obtenerTodos();
        super.doAfterCompose(comp);

        cortesiaDireccionList.setItemRenderer(new RenderCortesiaDireccion());

        cortesiaDireccionList.addEventListener("onDoubleClick", new EventListener() {

            @Override
            public void onEvent(Event event) throws Exception {
                CortesiaDireccion cd = (CortesiaDireccion) cortesiaDireccionList.getSelected();
                verCortesiaDireccion(cd);
            }
        });


        cdsList = new ArrayList<CortesiaDireccion>();
        refreshLista();


    }

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

    private void verCortesiaDireccion(CortesiaDireccion cd) {
        if (cd == null) {
            return;
        }

        Map args = new HashMap();
        args.put("cortesiaDireccion", cd);
        args.put("cortesiaDireccionList", cortesiaDireccionList);

        openWindow("/gui/cortesias/editarCortesiaTipoDireccion.zul",
                Labels.getLabel("editarCortesiaTipoDireccionController.window.title"), args, MODAL);
    }

    private void refreshLista() {
        HibernateSearchObject<CortesiaDireccion> claseServicioBusqueda =
                new HibernateSearchObject<CortesiaDireccion>(CortesiaDireccion.class, pagingCortesiaDireccion.getPageSize());

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

        claseServicioBusqueda.addFilterGreaterOrEqual("fecInicioV", fecInicio.getValue());
        claseServicioBusqueda.addFilterLessOrEqual("fecFinV", fecFinal.getValue());

        Comboitem cbiMarca = cmbMarca.getSelectedItem();
        Marca marca = null;
        if (cbiMarca != null) {
            marca = (Marca) cbiMarca.getValue();
            claseServicioBusqueda.addFilterEqual("marca", marca);
        }

        Comboitem cbiClaseServicio = cmbClaseSer.getSelectedItem();
        ClaseServicio claseServicio = null;
        if (cbiClaseServicio != null) {
            claseServicio = (ClaseServicio) cbiClaseServicio.getValue();
            claseServicioBusqueda.addFilterEqual("claseServicio", claseServicio);
        }

        plwCortesiaDireccion.init(claseServicioBusqueda, cortesiaDireccionList, pagingCortesiaDireccion);

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