/**
 * 
 */
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 RelatorioVendasBilheteiro extends Relatorio {


	public RelatorioVendasBilheteiro(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 pv.NUMPUNTOVENTA CODIGO_AGENCIA, ");
				sql.append(" pv.NOMBPUNTOVENTA NOME_AGENCIA, ");
				sql.append(" u.CVEUSUARIO CODIGO_BILHETEIRO, ");
				sql.append(" u.NOMBUSUARIO NOME_BILHETEIRO, ");
				sql.append(" c.NUMFOLIOSISTEMA NUMERO_PASSAGEM, ");
				sql.append(" p_origen.DESCPARADA ORIGEM, ");
				sql.append(" p_destino.DESCPARADA DESTINO, ");
				sql.append(" ct.DESCCATEGORIA TIPO_BILHETE, ");
				sql.append(" c.INDSTATUSBOLETO STATUS_PASSAGEM, ");
				sql.append(" c.FECCORRIDA DATA_VIAGEM, ");
				sql.append(" c.CORRIDA_ID SERVICO, ");
				sql.append(" c.IMPORTEPEDAGIO PEDAGIO," );
				sql.append(" c.IMPORTETAXAEMBARQUE TX_EMBARQUE," );
				sql.append(" c.PRECIOPAGADO TARIFA," );
				sql.append(" (NVL(c.PRECIOPAGADO,0)+(NVL(c.IMPORTEPEDAGIO,0)+ NVL(c.IMPORTETAXAEMBARQUE,0)+ NVL(c.IMPORTESEGURO,0))) TOTAL_BILHETE" );
				
				sql.append(" from caja c ");
				sql.append(" join PUNTO_VENTA pv on c.PUNTOVENTA_ID = pv.PUNTOVENTA_ID ");
				sql.append(" join USUARIO u on u.USUARIO_ID = c.USUARIO_ID ");
				sql.append(" join PARADA p_origen on p_origen.PARADA_ID = c.ORIGEN_ID ");
				sql.append(" join PARADA p_destino on p_destino.PARADA_ID = c.DESTINO_ID ");
				sql.append(" join CATEGORIA ct on ct.CATEGORIA_ID = c.CATEGORIA_ID ");
				sql.append(" where ");
				sql.append(" c.MARCA_ID  = :MARCA_ID ");
				sql.append(" and c.FECHORVENTA >= :DATA_INICIAL ");
				sql.append(" and c.FECHORVENTA <= :DATA_FINAL ");
				if (parametros.get("NUMPUNTOVENTA") != null) {
					sql.append(" and pv.PUNTOVENTA_ID IN (" + parametros.get("NUMPUNTOVENTA").toString() + ")");
				}
				if (parametros.get("BILHETEIRO") != null && !parametros.get("BILHETEIRO").equals("")) {
					sql.append(" and u.NOMBUSUARIO like '" + parametros.get("BILHETEIRO") + "%'");
				}
				sql.append(" order by u.CVEUSUARIO, ");
				sql.append(" u.NOMBUSUARIO, ");
				sql.append(" pv.NUMPUNTOVENTA, ");
				sql.append(" pv.NOMBPUNTOVENTA, ");
				sql.append(" c.NUMFOLIOSISTEMA, ");
				sql.append(" p_origen.DESCPARADA, ");
				sql.append(" p_destino.DESCPARADA, ");
				sql.append(" ct.DESCCATEGORIA, ");
				sql.append(" c.INDSTATUSBOLETO, ");
				sql.append(" c.FECCORRIDA, ");
				sql.append(" c.CORRIDA_ID ");

				NamedParameterStatement stmt = new NamedParameterStatement(conexao, sql.toString());

				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("CODIGO_AGENCIA", rset.getString("CODIGO_AGENCIA"));
					dataResult.put("NOME_AGENCIA", rset.getString("NOME_AGENCIA"));
					dataResult.put("CODIGO_BILHETEIRO", rset.getString("CODIGO_BILHETEIRO"));
					dataResult.put("NOME_BILHETEIRO", rset.getString("NOME_BILHETEIRO"));
					dataResult.put("NUMERO_PASSAGEM", rset.getBigDecimal("NUMERO_PASSAGEM"));
					dataResult.put("ORIGEM", rset.getString("ORIGEM"));
					dataResult.put("DESTINO", rset.getString("DESTINO"));
					dataResult.put("TIPO_BILHETE", rset.getString("TIPO_BILHETE"));
					dataResult.put("TX_EMBARQUE", rset.getBigDecimal("TX_EMBARQUE"));
					dataResult.put("PEDAGIO", rset.getBigDecimal("PEDAGIO"));
					dataResult.put("TARIFA", rset.getBigDecimal("TARIFA"));
					dataResult.put("TOTAL_BILHETE", rset.getBigDecimal("TOTAL_BILHETE"));
					dataResult.put("STATUS_PASSAGEM", IndStatusBoleto.valueOf(rset.getString("STATUS_PASSAGEM")).getValue() );
					dataResult.put("SERVICO", rset.getBigDecimal("SERVICO"));
					dataResult.put("DATA_VIAGEM", rset.getDate("DATA_VIAGEM"));

					this.dados.add(dataResult);

				}

				this.resultSet = rset;
			}
		});
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see com.rjconsultores.ventaboletos.relatorios.utilitarios.Relatorio#processaParametros()
	 */
	@Override
	protected void processaParametros() throws Exception {

	}

}
