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

import com.rjconsultores.ventaboletos.entidad.ClaseServicio;
import com.rjconsultores.ventaboletos.entidad.Empresa;
import com.rjconsultores.ventaboletos.entidad.Parada;
import com.rjconsultores.ventaboletos.entidad.PuntoVenta;
import com.rjconsultores.ventaboletos.entidad.Ruta;
import com.rjconsultores.ventaboletos.exception.BusinessException;
import com.rjconsultores.ventaboletos.service.ClaseServicioService;
import com.rjconsultores.ventaboletos.service.EmpresaService;
import com.rjconsultores.ventaboletos.service.InformeCategoriaVentaService;
import com.rjconsultores.ventaboletos.service.RutaService;
import com.rjconsultores.ventaboletos.utilerias.UsuarioLogado;
import com.rjconsultores.ventaboletos.web.utilerias.MyGenericForwardComposer;
import java.io.InputStream;
import java.util.Date;
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.media.Media;
import org.zkoss.util.resource.Labels;
import org.zkoss.zhtml.Filedownload;
import org.zkoss.zk.ui.Component;
import org.zkoss.zk.ui.event.Event;
import org.zkoss.zkplus.databind.BindingListModelList;
import org.zkoss.zul.Combobox;
import org.zkoss.zul.Comboitem;
import org.zkoss.zul.Datebox;
import org.zkoss.zul.Intbox;
import org.zkoss.zul.Messagebox;

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

	@Autowired
	private InformeCategoriaVentaService informeCategoriaVentaService;
	@Autowired
	private EmpresaService empresaService;
	@Autowired
	private ClaseServicioService claseServicioService;
	@Autowired
	private RutaService rutaService;
	private List<ClaseServicio> lsClaseServico;
	private List<Ruta> lsRutas;
	private List<Empresa> lsEmpresas;
	private Intbox intServicio;
	private Datebox fecInicio;
	private Datebox fecFinal;
	private Combobox cmbClaseServicio;
	private Combobox cmbRuta;
	private Combobox cmbEmpresa;
	private Combobox cmbParadaOrigem;
	private Combobox cmbParadaDestino;
	private Combobox cmbPuntoVenta;

	public Combobox getCmbEmpresa() {
		return cmbEmpresa;
	}

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

	public Datebox getFecFinal() {
		return fecFinal;
	}

	public void setFecFinal(Datebox fecFinal) {
		this.fecFinal = fecFinal;
	}

	public Datebox getFecInicio() {
		return fecInicio;
	}

	public void setFecInicio(Datebox fecInicio) {
		this.fecInicio = fecInicio;
	}

	public Intbox getIntServicio() {
		return intServicio;
	}

	public void setIntServicio(Intbox intServicio) {
		this.intServicio = intServicio;
	}

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

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

	public Combobox getCmbParadaDestino() {
		return cmbParadaDestino;
	}

	public void setCmbParadaDestino(Combobox cmbParadaDestino) {
		this.cmbParadaDestino = cmbParadaDestino;
	}

	public Combobox getCmbParadaOrigem() {
		return cmbParadaOrigem;
	}

	public void setCmbParadaOrigem(Combobox cmbParadaOrigem) {
		this.cmbParadaOrigem = cmbParadaOrigem;
	}

	public Combobox getCmbClaseServicio() {
		return cmbClaseServicio;
	}

	public void setCmbClaseServicio(Combobox cmbClaseServicio) {
		this.cmbClaseServicio = cmbClaseServicio;
	}

	public Combobox getCmbRuta() {
		return cmbRuta;
	}

	public void setCmbRuta(Combobox cmbRuta) {
		this.cmbRuta = cmbRuta;
	}

	public List<ClaseServicio> getLsClaseServico() {
		return lsClaseServico;
	}

	public void setLsClaseServico(List<ClaseServicio> lsClaseServico) {
		this.lsClaseServico = lsClaseServico;
	}

	public List<Ruta> getLsRutas() {
		return lsRutas;
	}

	public void setLsRutas(List<Ruta> lsRutas) {
		this.lsRutas = lsRutas;
	}

	public Combobox getCmbPuntoVenta() {
		return cmbPuntoVenta;
	}

	public void setCmbPuntoVenta(Combobox cmbPuntoVenta) {
		this.cmbPuntoVenta = cmbPuntoVenta;
	}

	@Override
	public void doAfterCompose(Component comp) throws Exception {
		lsEmpresas = empresaService.buscarTodosExceto(UsuarioLogado.getUsuarioLogado().getEmpresa(),-1);
		lsClaseServico = claseServicioService.obtenerTodos();

		super.doAfterCompose(comp);
	}

	public void onClick$btnInforme(Event e) throws InterruptedException {
		Empresa empresa = null;
		Comboitem cbiEmpresa = cmbEmpresa.getSelectedItem();
		if (cbiEmpresa != null) {
			empresa = (Empresa) cbiEmpresa.getValue();
		}

		Parada origen = null;
		Comboitem cbiOrigen = cmbParadaOrigem.getSelectedItem();
		if (cbiOrigen != null) {
			origen = (Parada) cbiOrigen.getValue();
		}

		Parada destino = null;
		Comboitem cbiDestino = cmbParadaDestino.getSelectedItem();
		if (cbiDestino != null) {
			destino = (Parada) cbiDestino.getValue();
		}

		Ruta ruta = null;
		Comboitem cbiRuta = cmbRuta.getSelectedItem();
		if (cbiRuta != null) {
			ruta = (Ruta) cbiRuta.getValue();
		}

		PuntoVenta puntoVenta = null;
		Comboitem cbiPuntoVenta = cmbPuntoVenta.getSelectedItem();
		if (cbiPuntoVenta != null) {
			puntoVenta = (PuntoVenta) cbiPuntoVenta.getValue();
		}

		Integer numServicio = intServicio.getValue();
		Date dataInicio = fecInicio.getValue();
		Date dataFinal = fecFinal.getValue();

		Map argsInforme = new HashMap();
		argsInforme.put("puntoVenta", puntoVenta);
		argsInforme.put("ruta", ruta);
		argsInforme.put("numServicio", numServicio);
		argsInforme.put("dataInicio", dataInicio);
		argsInforme.put("dataFinal", dataFinal);
		argsInforme.put("empresa", empresa);
		argsInforme.put("origen", origen);
		argsInforme.put("destino", destino);

		InputStream is = desktop.getWebApp().getResourceAsStream(
				"/gui/informes/categoria_venta/informeCategoriaVenta.jasper");
		try {
			Media m = informeCategoriaVentaService.gerarInforme(is, argsInforme);
			Filedownload.save(m);
		} catch (BusinessException ex) {
			Messagebox.show(ex.getLocalizedMessage(), Labels.getLabel("indexController.mnInformes.label"), Messagebox.OK, Messagebox.ERROR);
		}

	}

	public void onChange$cmbClaseServicio(Event ev) {
		Comboitem cbiClaseServicio = cmbClaseServicio.getSelectedItem();

		if (cbiClaseServicio != null) {
			ClaseServicio claseServicio = (ClaseServicio) cbiClaseServicio.getValue();
			lsRutas = rutaService.buscarPorClaseServicio(claseServicio);

			cmbRuta.setConstraint("");

			cmbRuta.setSelectedItem(null);
			cmbRuta.setText(null);

			BindingListModelList modelRuta = new BindingListModelList(lsRutas, true);
			cmbRuta.setModel(modelRuta);

			cmbRuta.setDisabled(Boolean.FALSE);
		}
	}
}
