/*
 * and open the template in the editor.
 */
package com.rjconsultores.ventaboletos.web.gui.controladores.seguridad;

import java.util.ArrayList;
import java.util.List;

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.Comboitem;
import org.zkoss.zul.Paging;
import org.zkoss.zul.Radio;
import org.zkoss.zul.Textbox;

import com.rjconsultores.ventaboletos.entidad.Empresa;
import com.rjconsultores.ventaboletos.entidad.UsuarioSesion;
import com.rjconsultores.ventaboletos.service.UsuarioSesionService;
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.RenderUsuarioSesion;
import com.trg.search.Filter;

/**
 *
 * @author RJ Consultores
 */
@Controller("busquedaUsuarioSesionController")
@Scope("prototype")
public class BusquedaUsuarioSesionController extends MyGenericForwardComposer {

    @Autowired
    private transient PagedListWrapper<UsuarioSesion> plwFormaPago;
    @Autowired
    private UsuarioSesionService usuarioSesionService;
    private MyListbox usuarioSesionList;
    private Paging pagingUsuarioSesion;
    private Textbox txtNombUsuario;
    private Textbox txtNombPaterno;
    private Textbox txtNombMaterno;
    private Textbox txtCveUsuario;
    private Textbox txtCveEmpleado;
	private Radio radFirmadoSi;
	private Radio radFirmadoNo;

    private Combobox cmbEmpresa;
	private List<Empresa> lsEmpresas;  
    
    @Override
    public void doAfterCompose(Component comp) throws Exception {

        lsEmpresas = UsuarioLogado.getUsuarioLogado().getEmpresa();
        
        super.doAfterCompose(comp);

        usuarioSesionList.setItemRenderer(new RenderUsuarioSesion());
        
        Boolean isReadOnly = Boolean.FALSE;
        
        if(arg.get("isReadOnly") != null){
        	isReadOnly = (Boolean) arg.get("isReadOnly");
        }
        
		if (!isReadOnly) {
			usuarioSesionList.addEventListener("onDoubleClick", new EventListener() {

				@Override
				public void onEvent(Event event) throws Exception {
					UsuarioSesion s = (UsuarioSesion) usuarioSesionList.getSelected();
					verUsuario(s);
				}
			});
		}

        refreshLista();
    }

    private void verUsuario(UsuarioSesion u) {
        if (u == null) {
            return;
        }

		try {
			if (u.getIndFirmado()) {
				int resp = Messagebox.show(
						Labels.getLabel("busquedaUsuarioSesionController.MSG.gerarPergunta",
								new Object[] { u.getUsuario().getClaveUsuario() }),
						Labels.getLabel("busquedaUsuarioSesionController.window.title"), Messagebox.YES | Messagebox.NO, Messagebox.QUESTION);

				if (resp == Messagebox.YES) {

					u.setIndFirmado(Boolean.FALSE);
					usuarioSesionService.actualizacion(u);

					Messagebox.show(Labels.getLabel("busquedaUsuarioSesionController.MSG.ok"),
							Labels.getLabel("busquedaUsuarioSesionController.window.title"), Messagebox.OK, Messagebox.INFORMATION);

					refreshLista();
				}
			}else{
				Messagebox.show(Labels.getLabel("busquedaUsuarioSesionController.MSG.informa"),
						Labels.getLabel("busquedaUsuarioSesionController.window.title"), Messagebox.OK, Messagebox.INFORMATION);
			}
		} catch (Exception e) {
			try {
				Messagebox.show(Labels.getLabel("MSG.Error"), Labels.getLabel("busquedaUsuarioSesionController.window.title"),
						Messagebox.OK, Messagebox.ERROR);
			} catch (InterruptedException e1) {
			}
		}
        
    }

	@SuppressWarnings("static-access")
	private void refreshLista() {
        HibernateSearchObject<UsuarioSesion> sistemaBusqueda =
                new HibernateSearchObject<UsuarioSesion>(UsuarioSesion.class,
                pagingUsuarioSesion.getPageSize());

        String nombUsuario = txtNombUsuario.getText();
        if (!nombUsuario.equals("")) {
            sistemaBusqueda.addFilterLike("usuario.nombusuario", "%" + nombUsuario.trim().concat("%"));
        }

        String nombPaterno = txtNombPaterno.getText();
        if (!nombPaterno.equals("")) {
            sistemaBusqueda.addFilterLike("usuario.nombpaterno", "%" + nombPaterno.trim().concat("%"));
        }

        String nombMaterno = txtNombMaterno.getText();
        if (!nombMaterno.equals("")) {
            sistemaBusqueda.addFilterLike("usuario.nombmaterno", "%" + nombMaterno.trim().concat("%"));
        }

        String cveUsuario = txtCveUsuario.getText();
        if (cveUsuario != null) {
            sistemaBusqueda.addFilterLike("usuario.claveUsuario", "%" + cveUsuario.trim().concat("%"));
        }

       List<Empresa> lsEmpresaTmp =null;
       
        Comboitem itemEmpresa = cmbEmpresa.getSelectedItem();		
		if (itemEmpresa != null) {
			Empresa empresa = (Empresa) itemEmpresa.getValue();
			lsEmpresaTmp = new ArrayList<Empresa>();
			lsEmpresaTmp.add(empresa);
			
			sistemaBusqueda.addFilter(
					Filter.and(Filter.in("empresa", lsEmpresaTmp),
							Filter.equal("activo", true)
							));
		}else{
			lsEmpresaTmp = lsEmpresas;
		}
		
		if(radFirmadoSi.isChecked()){
			 sistemaBusqueda.addFilterEqual("indFirmado", Boolean.TRUE);
		}else if(radFirmadoNo.isChecked()){
			 sistemaBusqueda.addFilterEqual("indFirmado", Boolean.FALSE);
		}
		
        sistemaBusqueda.addFilterEqual("activo", Boolean.TRUE);
        
        plwFormaPago.init(sistemaBusqueda, usuarioSesionList, pagingUsuarioSesion);

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

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

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

	public Combobox getCmbEmpresa() {
		return cmbEmpresa;
	}

	public void setCmbEmpresa(Combobox cmbEmpresa) {
		this.cmbEmpresa = cmbEmpresa;
	}

	public List<Empresa> getLsEmpresas() {
		return lsEmpresas;
	}

	public void setLsEmpresas(List<Empresa> lsEmpresas) {
		this.lsEmpresas = lsEmpresas;
	}

	public Textbox getTxtCveUsuario() {
        return txtCveUsuario;
    }

    public void setTxtCveUsuario(Textbox txtCveUsuario) {
        this.txtCveUsuario = txtCveUsuario;
    }


    public Paging getPagingUsuario() {
        return pagingUsuarioSesion;
    }

    public void setPagingUsuario(Paging pagingUsuario) {
        this.pagingUsuarioSesion = pagingUsuario;
    }


    public Textbox getTxtNombMaterno() {
        return txtNombMaterno;
    }

    public void setTxtNombMaterno(Textbox txtNombMaterno) {
        this.txtNombMaterno = txtNombMaterno;
    }

    public Textbox getTxtNombPaterno() {
        return txtNombPaterno;
    }

    public void setTxtNombPaterno(Textbox txtNombPaterno) {
        this.txtNombPaterno = txtNombPaterno;
    }

    public Textbox getTxtNombUsuario() {
        return txtNombUsuario;
    }

    public void setTxtNombUsuario(Textbox txtNombUsuario) {
        this.txtNombUsuario = txtNombUsuario;
    }

    public MyListbox getUsuarioList() {
        return usuarioSesionList;
    }

    public void setUsuarioList(MyListbox usuarioList) {
        this.usuarioSesionList = usuarioList;
    }

    public Textbox getTxtCveEmpleado() {
        return txtCveEmpleado;
    }

    public void setTxtCveEmpleado(Textbox txtCveEmpleado) {
        this.txtCveEmpleado = txtCveEmpleado;
    }

}
