/**
 * 
 */
package com.rjconsultores.ventaboletos.relatorios.impl;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Timestamp;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

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

/**
 * @author Thiago
 *
 */
public class RelatorioPosicaoCaixaAnalitico extends Relatorio  {

	public RelatorioPosicaoCaixaAnalitico(Map<String, Object> parametros, Connection conexao) throws Exception {
		super(parametros, conexao);
		this.setCustomDataSource(new ArrayDataSource(this){
			@Override
			public void initDados() throws Exception {
				Connection conexao = this.relatorio.getConexao();
				Map<String, Object> parametros = this.relatorio.getParametros();
				
				StringBuilder sql = new StringBuilder();
				sql.append(" SELECT                                            ");
				sql.append("   C.NUMSERIEPREIMPRESA numSerie,                           ");
				sql.append("   C.NUMFOLIOPREIMPRESO numFolioPreImpreso,                          ");
				sql.append("   C.NUMFOLIOSISTEMA numFolioSistema,                              ");
				sql.append("   DECODE(R.INDSENTIDOIDA,1,'IDA',0,'VOLTA') sentido,                                ");
				sql.append("   TV.DESCTIPOVENTA tipoVenta,                               ");
				sql.append("   C.FECHORVENTA fecHorVenta,  ");
				sql.append("   C.PRECIOPAGADO precioPagado,                                 ");
				sql.append("   C.IMPORTETAXAEMBARQUE importeTaxaEmbarque,                          ");
				sql.append("   C.IMPORTEPEDAGIO importePedagio,                               ");
				sql.append("   C.IMPORTESEGURO importeSeguro                                ");
				sql.append(" FROM                                              ");
				sql.append("   caja c                                          ");
				sql.append(" JOIN TIPO_VENTA tv                                ");
				sql.append(" ON                                                ");
				sql.append("   TV.TIPOVENTA_ID = C.TIPOVENTA_ID                ");
				sql.append(" JOIN ruta r                                       ");
				sql.append(" ON                                                ");
				sql.append("   R.RUTA_ID = C.RUTA_ID                           ");
				sql.append(" JOIN marca m                                      ");
				sql.append(" ON                                                ");
				sql.append("   M.MARCA_ID = C.MARCA_ID                         ");
				sql.append(" WHERE                                             ");
				sql.append("   C.FECCORTE BETWEEN :DATA_INICIAL AND :DATA_FINAL  ");
				if(parametros.get("MARCA_ID") != null){
					sql.append(" AND M.EMPRESA_ID   = :MARCA_ID                     ");
				}
				if (parametros.get("NUMPUNTOVENTA") != null) {
					sql.append(" and c.PUNTOVENTA_ID IN (" + parametros.get("NUMPUNTOVENTA").toString() + ")");
				}
				sql.append(" AND C.ACTIVO       = 1                           ");
				sql.append(" AND C.INDREIMPRESION = 0 ");
				sql.append(" AND C.MOTIVOCANCELACION_ID IS NULL ");
				sql.append(" ORDER BY ");
				sql.append("   C.NUMSERIEPREIMPRESA,                           ");
				sql.append("   C.NUMFOLIOPREIMPRESO,                          ");
				sql.append("   C.NUMFOLIOSISTEMA,                              ");
				sql.append("   DECODE(R.INDSENTIDOIDA,1,'IDA',0,'VOLTA'),                                ");
				sql.append("   TV.DESCTIPOVENTA,                               ");
				sql.append("   C.FECHORVENTA,  ");
				sql.append("   C.PRECIOPAGADO,                                 ");
				sql.append("   C.IMPORTETAXAEMBARQUE,                          ");
				sql.append("   C.IMPORTEPEDAGIO,                               ");
				sql.append("   C.IMPORTESEGURO                                ");
				
				NamedParameterStatement stmt = new NamedParameterStatement(conexao, sql.toString());

				if(parametros.get("MARCA_ID") != null){
					stmt.setInt("MARCA_ID", Integer.valueOf(parametros.get("MARCA_ID").toString()));
				}
				stmt.setTimestamp("DATA_INICIAL", new Timestamp(DateUtil.inicioFecha((Date) parametros.get("DATA_INICIAL")).getTime()));
				stmt.setTimestamp("DATA_FINAL", new Timestamp(DateUtil.fimFecha((Date) parametros.get("DATA_FINAL")).getTime()));

				ResultSet rset = stmt.executeQuery();

				while (rset.next()) {
					Map<String, Object> dataResult = new HashMap<String, Object>();

					dataResult.put("numSerie", rset.getString("numSerie"));
					dataResult.put("numFolioPreImpreso", rset.getString("numFolioPreImpreso"));
					dataResult.put("numFolioSistema", rset.getString("numFolioSistema"));
					dataResult.put("sentido", rset.getString("sentido"));
					dataResult.put("tipoVenta", rset.getString("tipoVenta"));
					dataResult.put("fecHorVenta", rset.getDate("fecHorVenta"));
					dataResult.put("precioPagado", rset.getBigDecimal("precioPagado"));
					dataResult.put("importeTaxaEmbarque", rset.getBigDecimal("importeTaxaEmbarque"));
					dataResult.put("importePedagio", rset.getBigDecimal("importePedagio"));
					dataResult.put("importeSeguro", rset.getBigDecimal("importeSeguro"));
					this.dados.add(dataResult);
				}
			}
			
		});
	}

	@Override
	protected void processaParametros() throws Exception {
		
		
	}

}
