package com.rjconsultores.ventaboletos.relatorios.impl;

import java.sql.Connection;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;

import com.rjconsultores.ventaboletos.relatorios.utilitarios.DataSource;
import com.rjconsultores.ventaboletos.relatorios.utilitarios.Relatorio;
import com.rjconsultores.ventaboletos.utilerias.DateUtil;
import com.rjconsultores.ventaboletos.web.utilerias.NamedParameterStatement;

import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;

public class RelatorioDescontoCupom extends Relatorio {

	private List<RelatorioDescontoPorCupomBean> lsDadosRelatorioDescontoPorCupom;

	public RelatorioDescontoCupom(Map<String, Object> parametros, Connection conexao) throws Exception {
		super(parametros, conexao);

		this.setCustomDataSource(new DataSource(this) {
			@Override
			public void initDados() throws Exception {

				lsDadosRelatorioDescontoPorCupom = new ArrayList<RelatorioDescontoPorCupomBean>();

				Connection conexao = this.relatorio.getConexao();
				Map<String, Object> parametros = this.relatorio.getParametros();

				String sql = getSql();

				NamedParameterStatement stmt = new NamedParameterStatement(conexao, sql);

				ResultSet rset = null;

				java.sql.Date dataInicial = new java.sql.Date(
						DateUtil.normalizarToFecha((Date) parametros.get("DATA_INICIAL")).getTime());
				java.sql.Date dataFinal = new java.sql.Date(
						DateUtil.normalizarToFecha((Date) parametros.get("DATA_FINAL")).getTime());

				java.sql.Date dateResgateInicial = new java.sql.Date(
						DateUtil.normalizarToFecha((Date) parametros.get("DATA_RESGATEINICIAL")).getTime());
				java.sql.Date dateResgateFinal = new java.sql.Date(
						DateUtil.normalizarToFecha((Date) parametros.get("DATA_RESGATEFINAL")).getTime());

				stmt.setDate("DATA_INICIAL", dataInicial);
				stmt.setDate("DATA_FINAL", dataFinal);

				stmt.setDate("DATA_RESGATEINICIAL", dateResgateInicial);
				stmt.setDate("DATA_RESGATEFINAL", dateResgateFinal);

				if (parametros.get("EMPRESA_ID") != null)
					stmt.setInt("EMPRESA_ID", (Integer) parametros.get("EMPRESA_ID"));
				else
					stmt.setNull("EMPRESA_ID", java.sql.Types.INTEGER);

				if (parametros.get("PUNTOVENTA_ID") != null)
					stmt.setInt("PUNTOVENTA_ID", (Integer) parametros.get("PUNTOVENTA_ID"));
				else
					stmt.setNull("PUNTOVENTA_ID", java.sql.Types.INTEGER);

				rset = stmt.executeQuery();

				RelatorioDescontoPorCupomBean relatorioDescontoPorCupom = null;
				while (rset.next()) {
					relatorioDescontoPorCupom = new RelatorioDescontoPorCupomBean();
					relatorioDescontoPorCupom.setDescConvenio(rset.getString("descConvenio"));
					relatorioDescontoPorCupom.setCodigoCupom(rset.getString("codigoCupom"));
					relatorioDescontoPorCupom.setCliente(rset.getString("cliente"));
					relatorioDescontoPorCupom.setDataEntrega(rset.getDate("dataEntrega"));
					relatorioDescontoPorCupom.setPuntoVentaEntrega(rset.getString("puntoVentaEntrega"));
					relatorioDescontoPorCupom.setDataResgate(rset.getDate("dataResgate"));
					relatorioDescontoPorCupom.setPuntoVentaResgate(rset.getString("puntoVentaResgate"));

					relatorioDescontoPorCupom.setNumeroTicket(rset.getLong("numeroTicket"));
					relatorioDescontoPorCupom.setValorTicket(rset.getBigDecimal("valorTicket"));
					relatorioDescontoPorCupom.setValorDescuento(rset.getBigDecimal("valorDescuento"));
					lsDadosRelatorioDescontoPorCupom.add(relatorioDescontoPorCupom);
				}

				if (lsDadosRelatorioDescontoPorCupom.size() > 0) {

					setLsDadosRelatorio(lsDadosRelatorioDescontoPorCupom);
				}
			}

		});

	}

	private String getSql() {
		StringBuilder sql = new StringBuilder();
		sql.append("SELECT  ");
		sql.append("C.DESCCONVENIO descConvenio, ");
		sql.append("CS.CODIGOCUPOM codigoCupom,  ");
		sql.append("BOLETOSORTEADO.NOMBPASAJERO cliente,  ");
		sql.append("BOLETOSORTEADO.fechorventa dataEntrega,  ");
		sql.append("PUNTOVENTASORTEADO.NOMBPUNTOVENTA puntoVentaEntrega,  ");
		sql.append("BOLETOCUPOM.fechorventa dataResgate,  ");
		sql.append("PUNTOVENTACUPOM.NOMBPUNTOVENTA puntoVentaResgate,  ");
		sql.append("CS.BOLETOSORTEADO_ID numeroTicket,  ");
		sql.append("BOLETOCUPOM.precioPagado valorTicket,  ");
		sql.append("BOLETOCUPOM.descuentoamparado valorDescuento  ");
		sql.append("FROM CAMPANHACUPOMSORTEADO CS  ");
		sql.append("INNER JOIN CONVENIO C ON C.CONVENIO_ID=CS.CONVENIO_ID  ");
		sql.append("INNER JOIN BOLETO BOLETOSORTEADO ON BOLETOSORTEADO.BOLETO_ID=CS.BOLETOSORTEADO_ID  ");
		sql.append(
				"INNER JOIN PUNTO_VENTA PUNTOVENTASORTEADO ON PUNTOVENTASORTEADO.PUNTOVENTA_ID = BOLETOSORTEADO.PUNTOVENTA_ID  ");
		sql.append("INNER JOIN BOLETO BOLETOCUPOM ON BOLETOCUPOM.BOLETO_ID=CS.BOLETOCUPOM_ID  ");
		sql.append(
				"INNER JOIN PUNTO_VENTA PUNTOVENTACUPOM ON PUNTOVENTACUPOM.PUNTOVENTA_ID = BOLETOCUPOM.PUNTOVENTA_ID  ");
		sql.append("WHERE  ");
		sql.append("BOLETOSORTEADO.FECHORVENTA BETWEEN :DATA_INICIAL AND :DATA_FINAL ");
		sql.append("AND BOLETOCUPOM.FECHORVENTA BETWEEN :DATA_RESGATEINICIAL AND :DATA_RESGATEFINAL ");
		sql.append("AND CS.EMPRESA_ID=COALESCE(:EMPRESA_ID,CS.EMPRESA_ID)  ");
		sql.append("AND CS.PUNTOVENTA_ID=COALESCE(:PUNTOVENTA_ID,CS.PUNTOVENTA_ID)  ");

		return sql.toString();
	}

	@Override
	protected void processaParametros() throws Exception {
		// TODO Auto-generated method stub

	}

	public void setLsDadosRelatorio(List<RelatorioDescontoPorCupomBean> lsDadosRelatorio) {
		this.setCollectionDataSource(new JRBeanCollectionDataSource(lsDadosRelatorio));
		this.lsDadosRelatorioDescontoPorCupom = lsDadosRelatorio;
	}

}