/**
 * 
 */
package com.rjconsultores.ventaboletos.web.gui.controladores.relatorios;

import java.sql.Timestamp;
import java.text.SimpleDateFormat;
import java.util.Date;
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.zk.ui.Component;
import org.zkoss.zk.ui.event.Event;
import org.zkoss.zul.Comboitem;
import org.zkoss.zul.Datebox;
import org.zkoss.zul.Messagebox;

import com.rjconsultores.ventaboletos.entidad.Empresa;
import com.rjconsultores.ventaboletos.entidad.InstiFinanceira;
import com.rjconsultores.ventaboletos.relatorios.impl.RelatorioDepositosDetalhado;
import com.rjconsultores.ventaboletos.relatorios.utilitarios.Relatorio;
import com.rjconsultores.ventaboletos.service.EmpresaService;
import com.rjconsultores.ventaboletos.service.InstiFinanceiraService;
import com.rjconsultores.ventaboletos.utilerias.DateUtil;
import com.rjconsultores.ventaboletos.web.utilerias.MyComboboxEstandar;
import com.rjconsultores.ventaboletos.web.utilerias.MyGenericForwardComposer;

/**
 * @author Thiago
 *
 */
@Controller("relatorioDepositosDetalhadosController")
@Scope("prototype")
public class RelatorioDepositosDetalhadosController extends MyGenericForwardComposer {
	
private static final long serialVersionUID = 1L;
	
	@Autowired
	private DataSource dataSourceRead;
	
	@Autowired
	private EmpresaService empresaService;
	
	@Autowired
	private InstiFinanceiraService ptovtaBancoService;
	
	private MyComboboxEstandar cmbEmpresa;
	private List<Empresa> lsEmpresa;
	private MyComboboxEstandar cmbBanco;
	private List<InstiFinanceira> lsBanco;
	
	private Datebox dataInicial;
	private Datebox dataFinal;
	
	@Override
		public void doAfterCompose(Component comp) throws Exception {
			setLsEmpresa(empresaService.obtenerTodos());
			setLsBanco(ptovtaBancoService.obtenerTodos());
			super.doAfterCompose(comp);
		}
	
	public void onClick$btnExecutarRelatorio(Event ev) throws Exception {
		SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
		Date dataDe = dataInicial.getValue();
		Date dataAte = dataFinal.getValue();
		
		
		Timestamp fecVentaInicial = new Timestamp(DateUtil.inicioFecha(dataDe).getTime());
		Timestamp fecVentaFinal = new Timestamp(DateUtil.fimFecha(dataAte).getTime());
		
		if(fecVentaFinal.before(fecVentaInicial)){
			Messagebox.show(
                    Labels.getLabel("relatorioDepositosDetalhadosController.MSG.busquedaPeriodo"),
                    Labels.getLabel("relatorioDepositosDetalhadosController.window.title"),
                    Messagebox.OK, Messagebox.INFORMATION);
			return;
		}
		
		Map<String, Object> parametros = new HashMap<String, Object>();
		parametros.put("fecInicio", sdf.format(dataDe));
		parametros.put("fecFinal", sdf.format(dataAte));
		
		parametros.put("dataFiltroInicial", fecVentaInicial);
		parametros.put("dataFiltroFinal", fecVentaFinal);

		Comboitem itemEmpresa = cmbEmpresa.getSelectedItem();
		
		if (itemEmpresa != null) {
			Empresa empresa = (Empresa) itemEmpresa.getValue();
			parametros.put("MARCA_ID", empresa.getEmpresaId());
			parametros.put("empresa", empresa.getNombempresa());
		} else{
			parametros.put("empresa", "Todas;");
		}
		Comboitem itemBanco = cmbBanco.getSelectedItem();
		if (itemBanco != null) {
			InstiFinanceira banco = (InstiFinanceira) itemBanco.getValue();
			parametros.put("INST_FINANCEIRA", banco.getInstFinanceiraId());
			parametros.put("banco", banco.getNome());
		} else{
			parametros.put("banco", "Todos;");
		}
		
		Relatorio relatorio = new RelatorioDepositosDetalhado(parametros, dataSourceRead.getConnection());
		
		Map<String, Object> args = new HashMap<String, Object>();
		args.put("relatorio", relatorio);

		openWindow("/component/reportView.zul",
				   Labels.getLabel("indexController.mniRelatorioDepositosDetalhados.label"), args, MODAL);
	}
	
	/**
	 * @return the lsEmpresa
	 */
	public List<Empresa> getLsEmpresa() {
		return lsEmpresa;
	}

	/**
	 * @param lsEmpresa the lsEmpresa to set
	 */
	public void setLsEmpresa(List<Empresa> lsEmpresa) {
		this.lsEmpresa = lsEmpresa;
	}

	/**
	 * @return the lsBanco
	 */
	public List<InstiFinanceira> getLsBanco() {
		return lsBanco;
	}

	/**
	 * @param lsBanco the lsBanco to set
	 */
	public void setLsBanco(List<InstiFinanceira> lsBanco) {
		this.lsBanco = lsBanco;
	}

}
