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

import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.sql.DataSource;

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.zul.Checkbox;
import org.zkoss.zul.Combobox;
import org.zkoss.zul.Datebox;
import org.zkoss.zul.Paging;
import org.zkoss.zul.Textbox;

import com.rjconsultores.ventaboletos.entidad.Categoria;
import com.rjconsultores.ventaboletos.entidad.Empresa;
import com.rjconsultores.ventaboletos.relatorios.impl.RelatorioPassageirosViajar;
import com.rjconsultores.ventaboletos.relatorios.utilitarios.Relatorio;
import com.rjconsultores.ventaboletos.service.CategoriaService;
import com.rjconsultores.ventaboletos.service.EmpresaService;
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.RenderCategoriaSimple;
import com.trg.search.Filter;

/**
 * 
 * @author Administrador
 */
@Controller("relatorioPassageirosViajarController")
@Scope("prototype")
public class RelatorioPassageirosViajarController extends MyGenericForwardComposer {

	@Autowired
	private EmpresaService empresaService;
	@Autowired
	private CategoriaService categoriaService;
	@Autowired
	private DataSource dataSourceRead;
	private List<Empresa> lsEmpresa;
	private ArrayList<Categoria> lsNumCategoria = new ArrayList<Categoria>();
	@Autowired
	private transient PagedListWrapper<Categoria> plwCategoria;
	private MyListbox categoriaList;
	private MyListbox categoriaSelList;
	private Paging pagingCategoria;
	private Textbox txtPalavraPesquisa;
	private Combobox cmbEmpresa;
	private Combobox cmbCategoria;
	private Datebox datInicial;
	private Datebox datFinal;
	private Checkbox chkPassageiroAberto;

	public Datebox getDatInicial() {
		return datInicial;
	}

	public void setDatInicial(Datebox datInicial) {
		this.datInicial = datInicial;
	}

	public Datebox getDatFinal() {
		return datFinal;
	}

	public void setDatFinal(Datebox datFinal) {
		this.datFinal = datFinal;
	}

	public Paging getPagingCategoria() {
		return pagingCategoria;
	}

	public void setPagingCategoria(Paging pagingCategoria) {
		this.pagingCategoria = pagingCategoria;
	}

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

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

	public ArrayList<Categoria> getLsNumCategoria() {
		return lsNumCategoria;
	}

	public void setLsNumCategoria(ArrayList<Categoria> lsNumCategoria) {
		this.lsNumCategoria = lsNumCategoria;
	}

	public MyListbox getCategoriaList() {
		return categoriaList;
	}

	public void setCategoriaList(MyListbox categoriaList) {
		this.categoriaList = categoriaList;
	}

	public MyListbox getCategoriaSelList() {
		return categoriaSelList;
	}

	public void setCategoriaSelList(MyListbox categoriaSelList) {
		this.categoriaSelList = categoriaSelList;
	}

	public Combobox getCmbEmpresa() {
		return cmbEmpresa;
	}

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

	public Combobox getCmbCategoria() {
		return cmbCategoria;
	}

	public void setCmbCategoria(Combobox cmbCategoria) {
		this.cmbCategoria = cmbCategoria;
	}

	public Checkbox getChkPassageiroAberto() {
		return chkPassageiroAberto;
	}

	public void setChkPassageiroAberto(Checkbox chkPassageiroAberto) {
		this.chkPassageiroAberto = chkPassageiroAberto;
	}

	public Textbox getTxtPalavraPesquisa() {
		return txtPalavraPesquisa;
	}

	public void setTxtPalavraPesquisa(Textbox txtPalavraPesquisa) {
		this.txtPalavraPesquisa = txtPalavraPesquisa;
	}

	public void onClick$btnExecutarRelatorio(Event ev) throws Exception {
		executarRelatorio();
	}

	public void onSelect$categoriaList(Event ev) {

	}

	public void onClick$btnLimpar(Event ev) {
		limparPesquisa();
	}

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

	/**
	 * 
	 */
	private void limparPesquisa() {
		lsNumCategoria.clear();
		categoriaSelList.setData(lsNumCategoria);

	}

	/**
	 * 
	 */
	private void executarPesquisa() {
		HibernateSearchObject<Categoria> categoriaBusqueda =new HibernateSearchObject<Categoria>(Categoria.class,pagingCategoria.getPageSize());

		categoriaBusqueda.addFilterOr(Filter.like("desccategoria", "%" + txtPalavraPesquisa.getText().trim().toUpperCase().concat("%")),
				Filter.like("desccategoria", "%" + txtPalavraPesquisa.getText().trim().toUpperCase().concat("%")));

		categoriaBusqueda.addSortAsc("desccategoria");
		categoriaBusqueda.addFilterEqual("activo", Boolean.TRUE);

		plwCategoria.init(categoriaBusqueda, categoriaList, pagingCategoria);

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

	/**
	 * @throws Exception
	 * 
	 */
	private void executarRelatorio() throws Exception {

		Map<String, Object> parametros = new HashMap<String, Object>();

		parametros.put("DATA_INICIO", datInicial.getValue());
		parametros.put("DATA_FINAL", datFinal.getValue());
		String passagemAberta = "";
		if (!chkPassageiroAberto.isChecked()) {
			passagemAberta = "T";
		}
		parametros.put("PASSAGEM_ABERTA", passagemAberta);
		Empresa e = (Empresa) cmbEmpresa.getSelectedItem().getValue();
		parametros.put("EMPRESA_ID", e.getEmpresaId().toString());

		String strNumCategoria="";
		
		StringBuilder sbCategoria = new StringBuilder("");
		if (categoriaSelList.getData().length != 0){
			
			lsNumCategoria = new ArrayList(Arrays.asList(categoriaSelList.getData()));
			
			sbCategoria = new StringBuilder(" and cj.categoria_id in ( ");
			for (Categoria c : lsNumCategoria) {
				sbCategoria.append(c.getCategoriaId().toString()).append(",");
			}	
			sbCategoria.delete(sbCategoria.length()-1,sbCategoria.length());
			sbCategoria.append(")");
		}
		
		parametros.put("LS_CATEGORIA", sbCategoria.toString());
		parametros.put("USUARIO", UsuarioLogado.getUsuarioLogado().getUsuarioId());

		Relatorio relatorio = new RelatorioPassageirosViajar(parametros, dataSourceRead.getConnection());

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

		openWindow("/component/reportView.zul",
				Labels.getLabel("relatorioPassageirosViajarController.window.title"), args, MODAL);

	}

	@Override
	public void doAfterCompose(Component comp) throws Exception {
		lsEmpresa = empresaService.obtenerTodos();
		super.doAfterCompose(comp);

		categoriaList.setItemRenderer(new RenderCategoriaSimple());
		categoriaSelList.setItemRenderer(new RenderCategoriaSimple());

	}

	public void onDoubleClick$categoriaList(Event ev) {
		Categoria categoriaSel = (Categoria) categoriaList.getSelected();
		categoriaSelList.addItemNovo(categoriaSel);

	}

	public void onDoubleClick$categoriaSelList(Event ev) {
		Categoria categoriaSel = (Categoria) categoriaSelList.getSelected();
		categoriaSelList.removeItem(categoriaSel);
	}
}
