/*
 * 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.Cortesia;
import com.rjconsultores.ventaboletos.entidad.MotivoViaje;
import com.rjconsultores.ventaboletos.entidad.TipoCortesia;
import com.rjconsultores.ventaboletos.service.MotivoViajeService;
import com.rjconsultores.ventaboletos.service.TipoCortesiaService;
import com.rjconsultores.ventaboletos.service.impl.CortesiaServiceImpl;
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.RenderCortesia;
import com.trg.search.Filter;
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;
import org.zkoss.zul.Textbox;

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

    @Autowired
    private transient PagedListWrapper<Cortesia> plwCortesia;
    @Autowired
    private MotivoViajeService motivoViajeService;
    @Autowired
    private TipoCortesiaService tipoCortesiaService;
    private MyListbox cortesiaList;
    private Paging pagingCortesia;
    private Textbox txtClave;
    private List<TipoCortesia> tipoCortesiaList;
    private Textbox txtCortesiaId;
    private Combobox cmbStatus;
    private Combobox cmbMotivoViaje;
    private Combobox cmbTipoCortesia;
    private List<MotivoViaje> motivoViajeList;

    public MyListbox getCortesiaList() {
        return cortesiaList;
    }

    public void setCortesiaList(MyListbox cortesiaList) {
        this.cortesiaList = cortesiaList;
    }

    public Paging getPagingCortesia() {
        return pagingCortesia;
    }

    public void setPagingCortesia(Paging pagingCortesia) {
        this.pagingCortesia = pagingCortesia;
    }

    public PagedListWrapper<Cortesia> getPlwCortesia() {
        return plwCortesia;
    }

    public void setPlwCortesia(PagedListWrapper<Cortesia> plwCortesia) {
        this.plwCortesia = plwCortesia;
    }

    public Textbox getTxtClave() {
        return txtClave;
    }

    public void setTxtClave(Textbox txtClave) {
        this.txtClave = txtClave;
    }

    public Textbox getTxtCortesiaId() {
        return txtCortesiaId;
    }

    public void setTxtCortesiaId(Textbox txtCortesiaId) {
        this.txtCortesiaId = txtCortesiaId;
    }

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

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

    public void onClick$btnNovo(Event ev) {
        verEmpleadoCortesia(new Cortesia());

    }

    @Override
    public void doAfterCompose(Component comp) throws Exception {
        motivoViajeList = motivoViajeService.obtenerTodos();
        tipoCortesiaList = tipoCortesiaService.obtenerGrupoCortesia(3);

        super.doAfterCompose(comp);

        cortesiaList.setItemRenderer(new RenderCortesia());
        cortesiaList.addEventListener("onDoubleClick", new EventListener() {

            @Override
            public void onEvent(Event event) throws Exception {
                Cortesia cortesia = (Cortesia) cortesiaList.getSelected();
                verEmpleadoCortesia(cortesia);
            }
        });

        refreshLista();
    }

    private void verEmpleadoCortesia(Cortesia cortesia) {
        if (cortesia == null) {
            return;
        }

        Map args = new HashMap();
        args.put("cortesia", cortesia);
        args.put("cortesiaList", cortesiaList);

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

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

        String intCVE = txtClave.getValue();
        if (!intCVE.equals("")) {
            claseServicioBusqueda.addFilterEqual("empleado.cveEmpleado", intCVE);
        }


        if (cmbMotivoViaje.getSelectedItem() != null) {
            claseServicioBusqueda.addFilterEqual("motivoViaje", (MotivoViaje) cmbMotivoViaje.getSelectedItem().getValue());
        }
        
        if (cmbTipoCortesia.getSelectedItem() != null) {
            claseServicioBusqueda.addFilterEqual("tipoCortesia", (TipoCortesia) cmbTipoCortesia.getSelectedItem().getValue());
        }

        if (cmbStatus.getSelectedItem() != null) {
            if (cmbStatus.getSelectedItem().getValue().equals(CortesiaServiceImpl.PENDIENTE)) {
                claseServicioBusqueda.addFilterEqual("ndstatus", CortesiaServiceImpl.PENDIENTE);
            } else {
                claseServicioBusqueda.addFilterNot(Filter.equal("ndstatus", CortesiaServiceImpl.PENDIENTE));
            }
        }
        claseServicioBusqueda.addFilterEqual("activo", Boolean.TRUE);

        plwCortesia.init(claseServicioBusqueda, cortesiaList, pagingCortesia);

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

    public List<MotivoViaje> getMotivoViajeList() {
        return motivoViajeList;
    }

    public void setMotivoViajeList(List<MotivoViaje> motivoViajeList) {
        this.motivoViajeList = motivoViajeList;
    }

    public List<TipoCortesia> getTipoCortesiaList() {
        return tipoCortesiaList;
    }

    public void setTipoCortesiaList(List<TipoCortesia> tipoCortesiaList) {
        this.tipoCortesiaList = tipoCortesiaList;
    }
    
}
