package com.rjconsultores.ventaboletos.relatorios.impl;

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

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

public class RelatorioAidf extends Relatorio {

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

		this.setCustomDataSource(new ArrayDataSource(this) {

			public void initDados() throws Exception {
				Connection conexao = this.relatorio.getConexao();
				Map<String, Object> parametros = this.relatorio.getParametros();
				String sql = getSql();
				
				NamedParameterStatement stmt = new NamedParameterStatement(conexao, sql);

				ResultSet rset = stmt.executeQuery();

				while (rset.next()) {
					Map<String, Object> dataResult = new HashMap<String, Object>();
					dataResult.put("aidf", rset.getString("aidf"));
					dataResult.put("empresa", rset.getString("nombempresa"));
					dataResult.put("agencia", rset.getString("nombpuntoventa"));
					dataResult.put("serie", rset.getString("serie"));
					dataResult.put("numeracao", rset.getString("numeracao"));
					dataResult.put("folios", rset.getString("folios"));
					this.dados.add(dataResult);
				}

				this.resultSet = rset;
			}
		});
	}

	@Override
	protected void processaParametros() throws Exception {
	}

	private String getSql() {
		StringBuilder sql = new StringBuilder();			
		sql.append(" select a.aidf_id as aidf, e.nombempresa, p.nombpuntoventa, a.serie, ");
		sql.append(" concat(a.forminicial, concat('-',a.formfinal)) as numeracao,");
		sql.append(" concat(dab.numfolioinicial,concat('-',dab.numfoliofinal)) as folios ");
		sql.append(" from aidf a ");
		sql.append(" inner join empresa e on e.empresa_id = a.empresa_id ");
		sql.append(" inner join abasto_boleto ab on a.empresa_id = ab.empresa_id ");
		sql.append(" inner join det_abasto_boleto dab on dab.abastoboleto_id = ab.abastoboleto_id ");
		sql.append(" inner join punto_venta p on p.puntoventa_id = ab.puntoventa_id ");	
		sql.append("where (case when (length(dab.numseriepreimpresa) < 3) then '0' else  substr(dab.numseriepreimpresa,0,3) end) = cast(a.aidf_id as varchar(10))");
		if(parametros.get("EMPRESA_ID") != null){
			sql.append(" and a.empresa_id = ").append(parametros.get("EMPRESA_ID"));
		}			
		if(parametros.get("SERIE") != null){
			sql.append(" and a.serie ='").append(parametros.get("SERIE")).append("'");
		}	
		sql.append(" group by a.aidf_id, e.nombempresa, p.nombpuntoventa, a.serie, concat(a.forminicial, concat('-',a.formfinal)), ");
		sql.append(" concat(dab.numfolioinicial,concat('-',dab.numfoliofinal)) ");
		sql.append(" order by  a.aidf_id");
		
		return sql.toString();
	}

}
