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

import java.sql.Connection;
import java.sql.ResultSet;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

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

/**
 * @author Thiago
 *
 */
public class RelatorioFinanceiroGrupoLinhas extends RelatorioDemandas {
	public RelatorioFinanceiroGrupoLinhas(Map<String, Object> parametros, Connection conexao) throws Exception {
		super(parametros, conexao);
		this.setCustomDataSource(new ArrayDataSource(this) {
			@Override
			public void initDados() throws Exception {
				SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy");
				Connection conexao = this.relatorio.getConexao();
				Map<String, Object> parametros = this.relatorio.getParametros();

				Date dataIncial = (Date) parametros.get("DATA_INICIAL");

				Date dataFinal = (Date) parametros.get("DATA_FINAL");
				
				Integer empresa = (Integer) parametros.get("EMPRESA");

				Integer agencia = (Integer) parametros.get("AGENCIA");

				Boolean somenteCancelados = (Boolean) parametros.get("SOMENTE_CANCELADOS");

				StringBuilder where = new StringBuilder();
		        where.append(" WHERE 1 = 1 ");

		        if (dataIncial != null) {
		            where.append(" AND caja.fechorventa >= to_date('" + format.format(dataIncial) + "','dd/MM/yyyy') ");
		        }

		        if (dataFinal != null) {
		            where.append(" AND caja.fechorventa <= to_date('" + format.format(dataFinal) + "','dd/MM/yyyy') ");
		        }
		        
		        if (empresa != null) {
		        	where.append(" AND caja.EMPRESAPUNTOVENTA_ID = " + empresa + " ");
		        }
		        
		        if (agencia != null) {
		        	where.append(" AND pv.PUNTOVENTA_ID = " + agencia + " ");
		        }
		        
		        if (somenteCancelados) {
		        	where.append(" AND caja.MOTIVOCANCELACION_ID is not null ");
		        }
 
		        StringBuilder sql = new StringBuilder();
		        sql.append(" select to_date(caja.FECHORVENTA, 'dd/MM/yyyy') as FECHORVENTA,MC.DESCMOTIVO,pv.NOMBPUNTOVENTA,EMPRESA.NOMBEMPRESA,gr.DESCGRUPO,sum(caja.PRECIOPAGADO) as PRECIOPAGADO ");
		        sql.append(" from caja join ruta on caja.RUTA_ID = ruta.RUTA_ID ");
		        sql.append(" join grupo_ruta gr on ruta.GRUPORUTA_ID = gr.GRUPORUTA_ID ");
		        sql.append(" join PUNTO_VENTA pv on pv.PUNTOVENTA_ID = caja.PUNTOVENTA_ID ");
		        sql.append(" join MARCA on caja.MARCA_ID = MARCA.MARCA_ID ");
		        sql.append(" join EMPRESA on EMPRESA.EMPRESA_ID = MARCA.EMPRESA_ID ");
		        sql.append(" LEFT JOIN MOTIVO_CANCELACION MC ON MC.MOTIVOCANCELACION_ID = caja.MOTIVOCANCELACION_ID ");
		        sql.append(where);
		        sql.append(" group by to_date(caja.FECHORVENTA, 'dd/MM/yyyy'),MC.DESCMOTIVO,pv.NOMBPUNTOVENTA,EMPRESA.NOMBEMPRESA,gr.DESCGRUPO ");
		        sql.append(" order by pv.NOMBPUNTOVENTA, to_date(caja.FECHORVENTA,'dd/MM/yyyy') ");

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

				ResultSet rset = stmt.executeQuery();

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

					dataResult.put("FECHORVENTA", format.format(rset.getDate("FECHORVENTA")));
					dataResult.put("DESCMOTIVO", rset.getString("DESCMOTIVO"));
					dataResult.put("NOMBPUNTOVENTA", rset.getString("NOMBPUNTOVENTA"));
					dataResult.put("NOMBEMPRESA", rset.getString("NOMBEMPRESA"));
					dataResult.put("DESCGRUPO", rset.getString("DESCGRUPO"));
					dataResult.put("NOMBEMPRESA", rset.getString("NOMBEMPRESA"));
					dataResult.put("PRECIOPAGADO", rset.getDouble("PRECIOPAGADO"));

					this.dados.add(dataResult);
				}

				this.resultSet = rset;
			}
		});
	}
}
