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

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

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

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


public class RelatorioFormaPagamentoAgenciaRutaTramo extends RelatorioDemandas {
	
	private List<RelatorioFormaPagamentoAgenciaRutaTramoBean> lsDadosRelatorio;
	
	public RelatorioFormaPagamentoAgenciaRutaTramo(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();

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

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

				String rutaId = (String) parametros.get("RUTAS_IDS");
				
				Integer agencia = (Integer) parametros.get("AGENCIA");
				
				Short formaPagoId = (Short) parametros.get("FORMA_PAGO");
		        
		        StringBuilder sql = new StringBuilder();
		        
				sql.append(" select  rc.RUTACOMBINACION_ID as rc_RUTACOMBINACION_ID, rc.ruta_id as rc_ruta_id, r.descruta as r_descruta, rc.tramo_id as rc_tramo_id , ");
				sql.append(" t.desctramo as t_desctramo, t.origen_id as t_origen_id, t.destino_id as t_destino_id , ");// b.caja_id as b_caja_id , ");
				sql.append(" fp.DESCPAGO as fp_DESCPAGO, sum(cfp.importe) as cfp_importe, sum(b.IMPORTEPEDAGIO) as b_IMPORTEPEDAGIO, ");
				sql.append(" sum(b.IMPORTESEGURO) as b_IMPORTESEGURO, sum(b.IMPORTETAXAEMBARQUE) as b_IMPORTETAXAEMBARQUE ,TO_DATE(TO_CHAR(b.fechorventa,'DD-MON-YYYY'),'DD-MON-YYYY' ) as b_fechorventa, pv.NOMBPUNTOVENTA as pv_NOMBPUNTOVENTA, count(b.caja_id) AS QTD ");
				sql.append(" from  ruta_combinacion RC ");
				sql.append(" inner join tramo t on t.tramo_id = rc.tramo_id ");
				sql.append(" inner join ruta r on r.ruta_id = rc.ruta_id ");
				sql.append(" left  join caja b on (b.ORIGEN_ID = t.ORIGEN_ID and b.DESTINO_ID = t.DESTINO_ID and b.RUTA_ID = rc.ruta_id ");
				sql.append(" and b.fechorventa BETWEEN to_date('" + dataIncial + " 00:00:00','dd/MM/yyyy hh24:mi:ss') AND to_date('" + dataFinal + " 23:59:59','dd/MM/yyyy hh24:mi:ss') ");//AND b.CORRIDA_ID = 86300  ");
				if(!"-1".equals(rutaId) && rutaId != null) { //Estava trazendo o relatorio em branco antes. Mantis 11317
					sql.append(" AND b.RUTA_ID in ("+rutaId+") ");
				}
				//sql.append(" and b.feccorrida BETWEEN to_date('" + format.format(dataIncial) + " 00:00:00','dd/MM/yyyy hh24:mi:ss') AND to_date('" + format.format(dataFinal) + " 00:00:00','dd/MM/yyyy hh24:mi:ss')  AND b.RUTA_ID = "+rutaId+" ");//AND b.CORRIDA_ID = 86300  ");
				sql.append(" ) ");
				sql.append(" left join caja_formapago cfp on cfp.CAJA_ID = b.CAJA_ID ");
				sql.append(" left join forma_pago fp on fp.FORMAPAGO_ID = cfp.FORMAPAGO_ID ");
				sql.append(" left join punto_venta pv on pv.PUNTOVENTA_ID = b.puntoventa_id ");
				sql.append(" WHERE ");
				
				if(!"-1".equals(rutaId) && rutaId != null) { //Estava trazendo o relatorio em branco antes. Mantis 11317
					sql.append(" RC.RUTA_ID in ("+rutaId+") and ");
				}
				sql.append(" rc.activo = 1 and t.activo =1 AND  B.EMPRESACORRIDA_ID = "+empresa+" ");
				if( agencia != null){
					sql.append("AND  pv.PUNTOVENTA_ID = "+agencia+" "); 
				}
				if (formaPagoId != null) {
					sql.append(" AND cfp.FORMAPAGO_ID = " + formaPagoId + " ");
		        }
				sql.append(" GROUP BY TO_DATE(TO_CHAR(B.fechorventa,'DD-MON-YYYY'),'DD-MON-YYYY' ),T.DESCTRAMO,FP.DESCPAGO, RC.RUTACOMBINACION_ID, r.descruta, RC.RUTA_ID, RC.TRAMO_ID, T.ORIGEN_ID, T.DESTINO_ID, PV.NOMBPUNTOVENTA ");
				sql.append(" order by RC_ruta_ID , RC_tramo_ID , b_fechorventa ");

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

				ResultSet rset = stmt.executeQuery();

				lsDadosRelatorio = new ArrayList<RelatorioFormaPagamentoAgenciaRutaTramoBean>();
				
				RelatorioFormaPagamentoAgenciaRutaTramoBean r ;
				SimpleDateFormat dt = new SimpleDateFormat("dd/MM/yy");
				
				while (rset.next()) {
					r= new RelatorioFormaPagamentoAgenciaRutaTramoBean();
					
					r.setDescRuta("desc ruta");
					r.setPeriodo("periodo");
					r.setDescFormaPag(rset.getString("fp_DESCPAGO"));
					r.setDescTramo(rset.getString("t_desctramo"));
					r.setDescRuta(rset.getString("r_descruta"));
					r.setData(dt.format(rset.getDate("b_fechorventa")));
					r.setAgencia(rset.getString("pv_NOMBPUNTOVENTA"));
					r.setTarifa(rset.getDouble("cfp_importe"));
					r.setPedagio(rset.getDouble("b_IMPORTEPEDAGIO"));
					r.setSeguro(rset.getDouble("b_IMPORTESEGURO"));
					r.setTaxas(rset.getDouble("b_IMPORTETAXAEMBARQUE"));
					r.setTotal(rset.getDouble("b_IMPORTETAXAEMBARQUE") +rset.getDouble("b_IMPORTESEGURO") + rset.getDouble("cfp_importe") + rset.getDouble("b_IMPORTEPEDAGIO"));
					r.setQuantidade(rset.getInt("QTD"));
					
					lsDadosRelatorio.add(r);
				}
				setLsDadosRelatorio(lsDadosRelatorio);
			}
		});
	}
	public List<RelatorioFormaPagamentoAgenciaRutaTramoBean> getLsDadosRelatorio() {
		return lsDadosRelatorio;
	}

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