
package com.rjconsultores.ventaboletos.relatorios.impl;

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

import com.rjconsultores.ventaboletos.entidad.Empresa;
import com.rjconsultores.ventaboletos.relatorios.utilitarios.DataSource;
import com.rjconsultores.ventaboletos.relatorios.utilitarios.Relatorio;
import com.rjconsultores.ventaboletos.relatorios.utilitarios.RelatorioServicoBloqueadoVendaInternetBean;
import com.rjconsultores.ventaboletos.web.utilerias.NamedParameterStatement;

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

public class RelatorioServicoBloqueadoVendaInternet extends Relatorio {

	public RelatorioServicoBloqueadoVendaInternet(Map<String, Object> parametros, Connection conexao) {
		super(parametros, conexao);

	}

	private List<RelatorioServicoBloqueadoVendaInternetBean> lsDadosRelatorio;

	@Override
	protected void processaParametros() throws Exception {

		this.setCustomDataSource(new DataSource(this) {
			@Override
			public void initDados() throws Exception {

				Connection conexao = this.relatorio.getConexao();

				Map<String, Object> parametros = this.relatorio.getParametros();
				Empresa empresa = (Empresa) parametros.get("EMPRESA");

				String sql = getSql(empresa);

				NamedParameterStatement stmt = new NamedParameterStatement(conexao, sql);

				stmt.setTimestamp("DATA_INICIAL", (Timestamp) parametros.get("DATA_INICIAL"));
				stmt.setTimestamp("DATA_FINAL", (Timestamp) parametros.get("DATA_FINAL"));

				ResultSet rset = null;
				rset = stmt.executeQuery();

				lsDadosRelatorio = new ArrayList<RelatorioServicoBloqueadoVendaInternetBean>();

				while (rset.next()) {

					RelatorioServicoBloqueadoVendaInternetBean bean = new RelatorioServicoBloqueadoVendaInternetBean();

					bean.setCodOrigem((Integer) Integer.parseInt(rset.getObject("codOrigem").toString()));
					bean.setCodDestino((Integer) Integer.parseInt(rset.getObject("codDestino").toString()));
					bean.setDescOrigem((String) rset.getObject("descOrigem"));
					bean.setDescDestino((String) rset.getObject("descDestino"));
					bean.setServico((String) rset.getObject("servico").toString());
					bean.setHoraViagem((String) rset.getObject("horaViagem"));
					bean.setDataServico((Date) rset.getObject("dataServico"));

					lsDadosRelatorio.add(bean);
				}

				if (lsDadosRelatorio.size() > 0) {

					setLsDadosRelatorio(lsDadosRelatorio);
				}
			}
		});
	}

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

	private String getSql(Empresa empresa) {

		StringBuilder sql = new StringBuilder();

		sql.append("SELECT C.CORRIDA_ID AS servico, ");
		sql.append("       CRC.ORIGEN_ID AS codOrigem, ");
		sql.append("       CRC.DESTINO_ID AS codDestino, ");
		sql.append("       PO.DESCPARADA AS descOrigem, ");
		sql.append("       PD.DESCPARADA AS descDestino, ");
		sql.append("       TO_DATE(C.FECCORRIDA,'dd/MM/yy') AS dataServico, ");
		sql.append("       TO_CHAR(C.FECHORSALIDA, 'HH24:MI:SS') AS horaViagem ");
		sql.append("FROM CONF_RESTRICAO_CANALVENTA CRC ");
		sql.append("INNER JOIN PARADA PO ON PO.PARADA_ID = CRC.ORIGEN_ID ");
		sql.append("INNER JOIN PARADA PD ON PD.PARADA_ID = CRC.DESTINO_ID ");
		sql.append("INNER JOIN CORRIDA C ON CRC.CORRIDA_ID = C.CORRIDA_ID ");
		sql.append("  WHERE CRC.TIPOPTOVTA_ID = 2 ");
		sql.append("AND  C.FECCORRIDA BETWEEN :DATA_INICIAL AND :DATA_FINAL ");
		sql.append("AND  CRC.EMPRESA_ID =" + empresa.getEmpresaId() + "  ");
		sql.append("AND  C.ACTIVO = 1   ");

		return sql.toString();
	}

}
