/*
 * 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.ClaseServicio;
import com.rjconsultores.ventaboletos.entidad.Empresa;
import com.rjconsultores.ventaboletos.entidad.Marca;
import com.rjconsultores.ventaboletos.entidad.MarcaClaseServicio;
import com.rjconsultores.ventaboletos.service.ClaseServicioService;
import com.rjconsultores.ventaboletos.service.MarcaService;
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.RenderClaseServicioMarca;
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 rodrigo
 */
@Controller("busquedaAsociacionClaseServicioMarcaController")
@Scope("prototype")
public class BusquedaAsociacionClaseServicioMarcaController extends MyGenericForwardComposer {

    @Autowired
    private transient PagedListWrapper<MarcaClaseServicio> plwMarcaClaseServicio;
    @Autowired
    private MarcaService marcaService;
    @Autowired
    private ClaseServicioService claseServicioService;
    private List<Marca> lsMarcas;
    private List<ClaseServicio> lsClaseServicios;
    private MyListbox marcaClaseServicioList;
    private Paging pagingMarcaClaseServicio;
    private Combobox cmbMarca;
    private Combobox cmbProducto;

    public MyListbox getMarcaClaseServicioList() {
        return marcaClaseServicioList;
    }

    public void setMarcaClaseServicioList(MyListbox marcaClaseServicioList) {
        this.marcaClaseServicioList = marcaClaseServicioList;
    }

    public Paging getPagingMarcaClaseServicio() {
        return pagingMarcaClaseServicio;
    }

    public void setPagingMarcaClaseServicio(Paging pagingMarcaClaseServicio) {
        this.pagingMarcaClaseServicio = pagingMarcaClaseServicio;
    }

    public Combobox getCmbMarca() {
        return cmbMarca;
    }

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

    public Combobox getCmbProducto() {
        return cmbProducto;
    }

    public void setCmbProducto(Combobox cmbProducto) {
        this.cmbProducto = cmbProducto;
    }

    public ClaseServicioService getClaseServicioService() {
        return claseServicioService;
    }

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

    public List<ClaseServicio> getLsClaseServicios() {
        return lsClaseServicios;
    }

    public void setLsClaseServicios(List<ClaseServicio> lsClaseServicios) {
        this.lsClaseServicios = lsClaseServicios;
    }

    public List<Marca> getLsMarcas() {
        return lsMarcas;
    }

    public void setLsMarcas(List<Marca> lsMarcas) {
        this.lsMarcas = lsMarcas;
    }

    public MarcaService getMarcaService() {
        return marcaService;
    }

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

    @Override
    public void doAfterCompose(Component comp) throws Exception {
        lsMarcas = marcaService.buscarMarcaPorEmpresa(UsuarioLogado.getUsuarioLogado().getEmpresa());
        lsClaseServicios = claseServicioService.obtenerTodos();
        
        super.doAfterCompose(comp);

        marcaClaseServicioList.setItemRenderer(new RenderClaseServicioMarca());
        marcaClaseServicioList.addEventListener("onDoubleClick", new EventListener() {

            @Override
            public void onEvent(Event event) throws Exception {
                MarcaClaseServicio m = (MarcaClaseServicio) marcaClaseServicioList.getSelected();
                verMarcaClaseServicio(m);
            }
        });

        refreshLista();

        cmbMarca.focus();
    }

    private void verMarcaClaseServicio(MarcaClaseServicio m) {
        if (m == null) {
            return;
        }

        Map args = new HashMap();
        args.put("marcaClaseServicio", m);
        args.put("marcaClaseServicioList", marcaClaseServicioList);

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

    private void refreshLista() {
        HibernateSearchObject<MarcaClaseServicio> marcaClaseServicioBusqueda =
                new HibernateSearchObject<MarcaClaseServicio>(MarcaClaseServicio.class, pagingMarcaClaseServicio.getPageSize());

        String marca = cmbMarca.getText().trim();
        String tipoServico = cmbProducto.getText().trim();
      

        if ((marca != null) && (!marca.isEmpty())) {
            marcaClaseServicioBusqueda.addFilterLike("marcaClaseservicioPK.marca.descmarca", "%" + cmbMarca.getText().toUpperCase().trim().concat("%"));
        }else{
        	marcaClaseServicioBusqueda.addFilterIn("marcaClaseservicioPK.marca", lsMarcas);
        }

        if ((tipoServico != null) && (!tipoServico.isEmpty())) {
            marcaClaseServicioBusqueda.addFilterLike("marcaClaseservicioPK.claseservicio.descclase", "%" + cmbProducto.getText().toUpperCase().trim().concat("%"));
        }
        marcaClaseServicioBusqueda.addFilterNotEqual("marcaClaseservicioPK.claseservicio.claseservicioId", -1);

        marcaClaseServicioBusqueda.addFilterEqual("activo", Boolean.TRUE);
        marcaClaseServicioBusqueda.addSortAsc("marcaClaseservicioPK.marca.descmarca");

        plwMarcaClaseServicio.init(marcaClaseServicioBusqueda, marcaClaseServicioList, pagingMarcaClaseServicio);

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

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

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

    public void onClick$btnNovo(Event ev) {
        verMarcaClaseServicio(new MarcaClaseServicio());
    }
}
