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

import com.rjconsultores.ventaboletos.entidad.Empresa;
import com.rjconsultores.ventaboletos.entidad.PtovtaEmpresa;
import com.rjconsultores.ventaboletos.entidad.PuntoVenta;
import com.rjconsultores.ventaboletos.service.EmpresaService;
import com.rjconsultores.ventaboletos.service.PuntoVentaService;
import com.rjconsultores.ventaboletos.utilerias.UsuarioLogado;
import com.rjconsultores.ventaboletos.web.utilerias.MyGenericForwardComposer;
import com.rjconsultores.ventaboletos.web.utilerias.MyListbox;
import com.rjconsultores.ventaboletos.web.utilerias.paginacion.HibernateSearchObject;
import com.rjconsultores.ventaboletos.web.utilerias.paginacion.PagedListWrapper;
import com.rjconsultores.ventaboletos.web.utilerias.render.RenderPtovtaEmpresa;
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.zhtml.Messagebox;
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.Paging;

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

    @Autowired
    private transient PagedListWrapper<PtovtaEmpresa> plwPtovtaEmpresa;
    private MyListbox ptovtaEmpresaList;
    private Paging pagingPtovtaEmpresa;
    @Autowired
    private EmpresaService empresaService;
    @Autowired
    private PuntoVentaService puntoVentaService;
    private List<Empresa> lsEmpresa;
    private List<PuntoVenta> lsPuntoVenta;
    private Combobox cmbEmpresa;
    private Combobox cmbPuntoVenta;

    public Paging getPagingPtovtaEmpresa() {
        return pagingPtovtaEmpresa;
    }

    public void setPagingPtovtaEmpresa(Paging pagingPtovtaEmpresa) {
        this.pagingPtovtaEmpresa = pagingPtovtaEmpresa;
    }

    public MyListbox getPtovtaEmpresaList() {
        return ptovtaEmpresaList;
    }

    public void setPtovtaEmpresaList(MyListbox ptovtaEmpresaList) {
        this.ptovtaEmpresaList = ptovtaEmpresaList;
    }

    public PagedListWrapper<PtovtaEmpresa> getPlwPtovtaEmpresa() {
        return plwPtovtaEmpresa;
    }

    public void setPlwPtovtaEmpresa(PagedListWrapper<PtovtaEmpresa> plwPtovtaEmpresa) {
        this.plwPtovtaEmpresa = plwPtovtaEmpresa;
    }

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

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

    public void onClick$btnNovo(Event ev) {
        verPeriodo(new PtovtaEmpresa());
    }

    public List<Empresa> getLsEmpresa() {
        return lsEmpresa;
    }

    public void setLsEmpresa(List<Empresa> lsEmpresa) {
        this.lsEmpresa = lsEmpresa;
    }

    public List<PuntoVenta> getLsPuntoVenta() {
        return lsPuntoVenta;
    }

    public void setLsPuntoVenta(List<PuntoVenta> lsPuntoVenta) {
        this.lsPuntoVenta = lsPuntoVenta;
    }

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

        lsEmpresa =  UsuarioLogado.getUsuarioLogado().getEmpresa();
        lsPuntoVenta = puntoVentaService.obtenerTodos();

        super.doAfterCompose(comp);

        ptovtaEmpresaList.setItemRenderer(new RenderPtovtaEmpresa());
        ptovtaEmpresaList.addEventListener("onDoubleClick", new EventListener() {

            @Override
            public void onEvent(Event event) throws Exception {
                PtovtaEmpresa c = (PtovtaEmpresa) ptovtaEmpresaList.getSelected();
                verPeriodo(c);
            }
        });

        refreshLista();


    }

    private void verPeriodo(PtovtaEmpresa c) {
        if (c == null) {
            return;
        }

        Map args = new HashMap();
        args.put("ptovtaEmpresa", c);
        args.put("ptovtaEmpresaList", ptovtaEmpresaList);

        openWindow("/gui/catalogos/editarPtovtaEmpresa.zul",
                Labels.getLabel("editarPtovtaEmpresaController.window.title"), args, MODAL);
    }

    private void refreshLista() {
        HibernateSearchObject<PtovtaEmpresa> ptovtaEmpresa =
                new HibernateSearchObject<PtovtaEmpresa>(PtovtaEmpresa.class, pagingPtovtaEmpresa.getPageSize());

        Empresa empresa = (Empresa) (cmbEmpresa.getSelectedItem() != null ? cmbEmpresa.getSelectedItem().getValue() : null);
        PuntoVenta puntoVenta = (PuntoVenta) (cmbPuntoVenta.getSelectedItem() != null ? cmbPuntoVenta.getSelectedItem().getValue() : null);

        if (empresa != null) {
            ptovtaEmpresa.addFilterEqual("empresa", empresa);
        } else{
        	ptovtaEmpresa.addFilterIn("empresa", UsuarioLogado.getUsuarioLogado().getEmpresa());
		}
        if (puntoVenta != null) {
            ptovtaEmpresa.addFilterEqual("puntoVenta", puntoVenta);
        }
        ptovtaEmpresa.addFilterEqual("activo", Boolean.TRUE);


        plwPtovtaEmpresa.init(ptovtaEmpresa, ptovtaEmpresaList, pagingPtovtaEmpresa);
        if (ptovtaEmpresaList.getData().length == 0) {
            try {
                Messagebox.show(Labels.getLabel("MSG.ningunRegistro"),
                        Labels.getLabel("busquedaPtovtaEmpresaController.window.title"),
                        Messagebox.OK, Messagebox.INFORMATION);
            } catch (InterruptedException ex) {
            }
        }
    }
}
