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

import java.math.BigDecimal;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;

import com.rjconsultores.ventaboletos.relatorios.utilitarios.DataSource;
import com.rjconsultores.ventaboletos.relatorios.utilitarios.Relatorio;
import com.rjconsultores.ventaboletos.relatorios.utilitarios.RelatorioResumoLinhasBean;
import com.rjconsultores.ventaboletos.service.ConstanteService;
import com.rjconsultores.ventaboletos.web.utilerias.NamedParameterStatement;
import com.rjconsultores.ventaboletos.web.utilerias.spring.AppContext;

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

/**
 * @author valdevir_rj
 * 
 */
public class RelatorioResumoLinhasAnaliticoSumarizado extends Relatorio {

	private List<RelatorioResumoLinhasBean> lsDadosRelatorio;
	private static String CONSTANTE_GRATUIDADE_CRIANCA;
	
	/**
	 * @param parametros
	 * @param conexao
	 * @throws Exception 
	 */
	public RelatorioResumoLinhasAnaliticoSumarizado(final Map<String, Object> parametros, final Connection conexao) throws Exception {
		super(parametros, conexao);
		this.setCustomDataSource(new DataSource(this) {
			@Override
			public void initDados() throws Exception {
				Integer rutaId = parametros.get("RUTA_ID") != null ? Integer.valueOf(parametros.get("RUTA_ID").toString()) : null;
				Integer empresaId = parametros.get("EMPRESA_ID") != null ? Integer.valueOf(parametros.get("EMPRESA_ID").toString()) : null;
				Integer grupoRutaId = parametros.get("GRUPORUTA_ID") != null ? Integer.valueOf(parametros.get("GRUPORUTA_ID").toString()) : null;
				CONSTANTE_GRATUIDADE_CRIANCA = buscarConstante("GRATUIDADE_CRIANCA");
				String sql = getSql(rutaId, grupoRutaId);

				NamedParameterStatement stmt = new NamedParameterStatement(conexao, sql);
				ResultSet rset = null;

				SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
				if (parametros.get("DATA_INICIAL") != null) {
					Date dataInicio = (Date) parametros.get("DATA_INICIAL");
					stmt.setString("DATA_INICIAL", sdf.format(dataInicio));
				}

				if (parametros.get("DATA_FINAL") != null) {
					Date dataFinal = (Date) parametros.get("DATA_FINAL");
					stmt.setString("DATA_FINAL", sdf.format(dataFinal));
				}

				if (rutaId != null) {
					stmt.setInt("RUTA_ID", rutaId);
				}
				if (grupoRutaId != null) {
					stmt.setInt("GRUPORUTA_ID", grupoRutaId);
				}
				stmt.setInt("EMPRESA_ID", empresaId.intValue());
				stmt.setString("CRIANCA_ID",CONSTANTE_GRATUIDADE_CRIANCA);
				rset = stmt.executeQuery(); 

				lsDadosRelatorio = new ArrayList<RelatorioResumoLinhasBean>();
				Set<RelatorioResumoLinhasBean> setDadosRelatorio = new HashSet<RelatorioResumoLinhasBean>();

				RelatorioResumoLinhasBean relatorioBean = null;
				while (rset.next()) {

					Boolean isMesmaLinhaIdaVolta = relatorioBean !=null && rset.getString("PREFIXO") != null &&
							rset.getString("PREFIXO").equals(relatorioBean.getPREFIXO()) ? Boolean.TRUE : Boolean.FALSE;

					relatorioBean = preencheAgrupaRelatorioBeanPorIdaVolta(rset, isMesmaLinhaIdaVolta, relatorioBean);

					setDadosRelatorio.add(relatorioBean);
				}
				
				if (setDadosRelatorio.size() > 0) {
					lsDadosRelatorio.addAll(setDadosRelatorio);
					setLsDadosRelatorio( lsDadosRelatorio );
				}else {
					//tratado caso onde filtra a linha (apenas uma linha)
					if(rset.getRow() ==0 && rutaId !=null && relatorioBean!=null) {
						lsDadosRelatorio.add(relatorioBean);
						setLsDadosRelatorio(lsDadosRelatorio);
					}
				}
				
			}

			private String getSql(Integer rutaId, Integer grupoRutaId) {
				StringBuilder sqlSb = new StringBuilder();
				sqlSb.append(" SELECT SUB.*, ");
				sqlSb.append("   (NVL(SUB.PASSAGEIROS,0)                        / DECODE(NVL(SUB.VIAGENS_TOTAL,0), 0, 1, NVL(SUB.VIAGENS_TOTAL,0))) AS PASSAGEIROS_MPA,"); 
				sqlSb.append("   ( ROUND(NVL(SUB.PASSAGEIROS_EQUIVALENTE,0), 2) / DECODE(NVL(SUB.VIAGENS_TOTAL,0), 0, 1, NVL(SUB.VIAGENS_TOTAL,0))) AS PASSAGEIROS_MPE,");
				sqlSb.append("   (NVL(SUB.RECEITA_TOTAL,0)                      / DECODE(NVL(SUB.KM_RODADO,0), 0, 1, NVL(SUB.KM_RODADO,0))) RECEITA_KM,                ");
				sqlSb.append("   (NVL(SUB.RECEITA_TOTAL,0)                      / DECODE(NVL(SUB.VIAGENS_TOTAL,0), 0, 1, NVL(SUB.VIAGENS_TOTAL,0))) AS RECEITA_VIAGEM, ");
				sqlSb.append("   (ROUND(NVL(SUB.PASSAGEIROS_EQUIVALENTE,0), 2)  * NVL(SUB.EXTENSAO_KM,0))                                           AS PAX_KM ");
				sqlSb.append(" FROM ");
				sqlSb.append("   (SELECT TAB.INDSENTIDOIDA, ");
				sqlSb.append("     TAB.RUTA_ID, ");
				sqlSb.append("     TAB.NUMRUTA, ");
				sqlSb.append("     TAB.PREFIXO, ");
				sqlSb.append("     TAB.DESCRUTA, ");
				sqlSb.append("     TAB.INTERESTADUAL, ");
				sqlSb.append("     TAB.GRUPO_LINHA, ");
				sqlSb.append("     COALESCE(TAB.EXTENSAO_KM, 0)            AS EXTENSAO_KM, ");
				sqlSb.append("     TAB.CVE_CLASE_SERVICIO, ");
				sqlSb.append("     SUM(NVL(TAB.RECEITA_SEGURO,0))          AS RECEITA_SEGURO, ");
				sqlSb.append("     SUM(NVL(TAB.RECEITA_BAGAGEM,0))         AS RECEITA_BAGAGEM,  ");
				sqlSb.append("     SUM(NVL(TAB.RECEITA_SEGURO_OUTROS,0))   AS RECEITA_SEGURO_OUTROS, ");
				sqlSb.append("     SUM(NVL(TAB.RECEITA_TARIFA,0))          AS RECEITA_TARIFA, ");
				sqlSb.append("     SUM(NVL(TAB.RECEITA_PEDAGIO,0))         AS RECEITA_PEDAGIO, ");
				sqlSb.append("     SUM(NVL(TAB.RECEITA_EMBARQUE,0))        AS RECEITA_EMBARQUE,  ");
				sqlSb.append("     SUM(NVL(TAB.PASSAGEIROS,0))             AS PASSAGEIROS, ");
				sqlSb.append("     SUM(NVL(TAB.VIAGENS_EXTRA,0))           AS VIAGENS_EXTRA, ");
				sqlSb.append("     SUM(NVL(TAB.VIAGENS,0))                 AS VIAGENS,  ");
				sqlSb.append("     SUM(NVL(TAB.RECEITA_TOTAL,0))           AS RECEITA_TOTAL,  ");
				sqlSb.append("     SUM(NVL(TAB.VIAGENS_TOTAL,0))           AS VIAGENS_TOTAL, ");
				sqlSb.append("     SUM(NVL(TAB.KM_RODADO,0))               AS KM_RODADO,  ");
				sqlSb.append("     SUM(NVL(TAB.PASSAGEIROS_EQUIVALENTE,0)) AS PASSAGEIROS_EQUIVALENTE  ");
				sqlSb.append("   FROM ");
				sqlSb.append("     (SELECT TAB1.*,  ");
				sqlSb.append("       (TAB1.RECEITA_TARIFA  + RECEITA_SEGURO + RECEITA_EMBARQUE + RECEITA_PEDAGIO) RECEITA_TOTAL,  ");
				sqlSb.append("       (NVL(TAB1.VIAGENS,0)  + NVL(TAB1.VIAGENS_EXTRA,0)) VIAGENS_TOTAL, ");
				sqlSb.append("       ((NVL(TAB1.VIAGENS,0) + NVL(TAB1.VIAGENS_EXTRA,0)) * NVL(TAB1.EXTENSAO_KM,0)) KM_RODADO, ");
				sqlSb.append("       (SELECT SUM(NVL(PE.EQUIVALENTE,0))  ");
				sqlSb.append("       FROM  ");
				sqlSb.append("         (SELECT CO.FECCORRIDA,  ");
				sqlSb.append("           CO.RUTA_ID,   ");
				sqlSb.append("           BO.PRECIOBASE,  ");
				sqlSb.append("           ROUND((BO.NUMKMVIAJE * COUNT(1) /   ");
				sqlSb.append("           (SELECT SUM(NVL(TR.CANTKMREAL,0))   ");
				if (parametros.get("SOMAR_KM_RODADOS_POR").equals("SEQUENCIA")) { 
					sqlSb.append("           FROM RUTA_SECUENCIA RS,   ");
				}else {
					sqlSb.append("           FROM RUTA_COMBINACION RS,   ");
				}	
				sqlSb.append("             TRAMO TR   ");
				sqlSb.append("           WHERE RS.RUTA_ID = CO.RUTA_ID   ");
				sqlSb.append("           AND RS.TRAMO_ID  = TR.TRAMO_ID AND RS.ACTIVO = 1 ");
				sqlSb.append("           )), 2) EQUIVALENTE  ");
				sqlSb.append("         FROM CORRIDA CO, ");
				sqlSb.append("           BOLETO BO  ");
				sqlSb.append("         WHERE CO.CORRIDA_ID           = BO.CORRIDA_ID  ");
				sqlSb.append("         AND CO.FECCORRIDA             = BO.FECCORRIDA  ");
				sqlSb.append("         AND BO.ACTIVO                 = 1    ");
				sqlSb.append("         AND (BO.MOTIVOCANCELACION_ID IS NULL   ");
				sqlSb.append("         OR BO.MOTIVOCANCELACION_ID    = 0 AND BO.CATEGORIA_ID <> :CRIANCA_ID )  ");
				sqlSb.append("         GROUP BY CO.FECCORRIDA,  ");
				sqlSb.append("           CO.RUTA_ID,  ");
				sqlSb.append("           BO.PRECIOBASE, ");
				sqlSb.append("           BO.NUMKMVIAJE ");
				sqlSb.append("         ) PE  ");
				sqlSb.append("       WHERE PE.FECCORRIDA = TAB1.FECCORRIDA    ");
				sqlSb.append("       AND PE.RUTA_ID      = TAB1.RUTA_ID     ");
				sqlSb.append("       ) PASSAGEIROS_EQUIVALENTE   ");
				sqlSb.append("     FROM     ");
				sqlSb.append("       (SELECT RUTA_ID,   ");
				sqlSb.append("         INDSENTIDOIDA,  ");
				sqlSb.append("         NUMRUTA, ");
				sqlSb.append("         PREFIXO, ");
				sqlSb.append("         FECCORRIDA, ");
				sqlSb.append("         DESCRUTA, ");
				sqlSb.append("         INTERESTADUAL, ");
				sqlSb.append("         GRUPO_LINHA, ");
				sqlSb.append("         EXTENSAO_KM, ");
				sqlSb.append("         SUM(importeseguro) AS RECEITA_SEGURO, ");
				sqlSb.append("         RECEITA_BAGAGEM, ");
				sqlSb.append("         RECEITA_SEGURO_OUTROS, ");
				sqlSb.append("         SUM(importepedagio) AS RECEITA_PEDAGIO, ");
				sqlSb.append("         SUM(importetaxaembarque) AS RECEITA_EMBARQUE, ");
				sqlSb.append("         SUM(PASSAGEIROS) AS PASSAGEIROS, ");
				sqlSb.append("         COUNT(DISTINCT  ");
				sqlSb.append("           CASE  ");
				sqlSb.append("               WHEN tiposervicio_id <> 2 THEN  ");
				sqlSb.append("                   feccorrida || corrida_id  ");
				sqlSb.append("               ELSE  ");
				sqlSb.append("                   NULL ");
				sqlSb.append("            END  ");
				sqlSb.append("         ) viagens, ");
				sqlSb.append("         COUNT(DISTINCT ");
				sqlSb.append("         	  CASE ");
				sqlSb.append("            	  WHEN tiposervicio_id = 2 THEN ");
				sqlSb.append("                	 feccorrida || corrida_id ");
				sqlSb.append("           	  ELSE ");
				sqlSb.append("                   NULL ");
				sqlSb.append("        	  END ");
				sqlSb.append("         ) viagens_extra, ");
				sqlSb.append("         CVE_CLASE_SERVICIO, ");
				sqlSb.append("         SUM(PRECIOPAGADO) AS RECEITA_TARIFA ");
				sqlSb.append("       FROM ");
				sqlSb.append("         (SELECT RT.RUTA_ID, ");
				sqlSb.append("           BL.BOLETO_ID, ");
				sqlSb.append("           SUM(BL.PRECIOPAGADO) AS preciototal, ");
				sqlSb.append("           BL.preciopagado      AS PRECIOPAGADO, ");
				sqlSb.append("           RT.INDSENTIDOIDA, ");
				sqlSb.append("           RT.NUMRUTA, ");
				sqlSb.append("           RT.PREFIXO, ");
				sqlSb.append("           CR.FECCORRIDA, ");
				sqlSb.append("           cr.corrida_id, ");
				sqlSb.append("           cr.tiposervicio_id, ");
				sqlSb.append("           RT.DESCRUTA, ");
				sqlSb.append("           CASE ");
				sqlSb.append("             WHEN CO.ESTADO_ID <> CD.ESTADO_ID ");
				sqlSb.append("             THEN 'S' ");
				sqlSb.append("             ELSE 'N' ");
				sqlSb.append("           END INTERESTADUAL,                                                                                                            ");
				sqlSb.append("           NVL(GR.DESCGRUPO, 'Não Definido') GRUPO_LINHA, ");
				if (parametros.get("SOMAR_KM_RODADOS_POR").equals("SEQUENCIA")) { 
					sqlSb.append("           (SELECT SUM(NVL(RS.KMORIGINAL,0)) ");
				}else {
					sqlSb.append("           (SELECT SUM(NVL(TR.CANTKMREAL, 0)) ");
				}
				sqlSb.append("           FROM RUTA_SECUENCIA RS, ");
				sqlSb.append("             TRAMO TR ");
				sqlSb.append("           WHERE RS.RUTA_ID = RT.RUTA_ID ");
				sqlSb.append("           AND RS.TRAMO_ID  = TR.TRAMO_ID ");
				sqlSb.append("           AND RS.ACTIVO    = 1 ");
				sqlSb.append("           ) EXTENSAO_KM, ");
				sqlSb.append("           BL.IMPORTESEGURO, ");
				sqlSb.append("           0 RECEITA_BAGAGEM, ");
				sqlSb.append("           0 RECEITA_SEGURO_OUTROS, ");
				sqlSb.append("           BL.IMPORTEPEDAGIO, ");
				sqlSb.append("           BL.IMPORTETAXAEMBARQUE, ");
				sqlSb.append("          COUNT(DISTINCT BOLETO_ID) PASSAGEIROS, ");
				sqlSb.append(" NVL(CS.CVECLASE, ' ') CVE_CLASE_SERVICIO ");
				sqlSb.append(" FROM RUTA RT, ");
				sqlSb.append(" BOLETO BL, ");
				sqlSb.append(" CORRIDA CR, ");
				sqlSb.append(" TRAMO TR, ");
				sqlSb.append(" VIGENCIA_TARIFA VT, ");
				sqlSb.append(" GRUPO_RUTA GR, ");
				sqlSb.append(" PARADA PO, ");
				sqlSb.append(" PARADA PD, ");
				sqlSb.append(" CIUDAD CO, ");
				sqlSb.append(" CIUDAD CD, ");
				sqlSb.append(" CLASE_SERVICIO CS ");
				sqlSb.append(" WHERE RT.RUTA_ID             = CR.RUTA_ID ");
				sqlSb.append(" AND CS.CLASESERVICIO_ID      = RT.CLASESERVICIO_ID ");
				sqlSb.append(" AND CR.FECCORRIDA            = BL.FECCORRIDA ");
				if(rutaId !=null) {
					sqlSb.append(" AND CR.RUTA_ID = NVL(:RUTA_ID, CR.RUTA_ID) ");
				}
				if(grupoRutaId!=null) {
					sqlSb.append(" AND DECODE(:GRUPORUTA_ID, NULL, 1, RT.GRUPORUTA_ID) = DECODE(:GRUPORUTA_ID, NULL, 1, :GRUPORUTA_ID) ");
				}
				sqlSb.append(" AND CR.CORRIDA_ID            = BL.CORRIDA_ID ");
				sqlSb.append(" AND CR.EMPRESACORRIDA_ID     = :EMPRESA_ID ");
				sqlSb.append(" AND CR.ORIGEN_ID             = PO.PARADA_ID ");
				sqlSb.append(" AND CR.DESTINO_ID            = PD.PARADA_ID ");
				sqlSb.append(" AND PO.CIUDAD_ID             = CO.CIUDAD_ID ");
				sqlSb.append(" AND PD.CIUDAD_ID             = CD.CIUDAD_ID ");
				sqlSb.append(" AND RT.GRUPORUTA_ID          = GR.GRUPORUTA_ID(+) ");
				sqlSb.append(" AND TR.ORIGEN_ID             = CR.ORIGEN_ID ");
				sqlSb.append(" AND TR.DESTINO_ID            = CR.DESTINO_ID ");
				sqlSb.append(" AND BL.MOTIVOCANCELACION_ID IS NULL  AND BL.CATEGORIA_ID <> :CRIANCA_ID");
				sqlSb.append(" AND BL.INDSTATUSOPERACION    = 'F' ");
				sqlSb.append(" AND VT.ACTIVO                = 1 ");
				sqlSb.append(" AND CR.FECCORRIDA BETWEEN VT.FECINICIOVIGENCIA AND VT.FECFINVIGENCIA ");
				sqlSb.append(" AND CR.FECCORRIDA BETWEEN TO_DATE(:DATA_INICIAL, 'DD/MM/YY hh24:mi:ss') AND  TO_DATE(:DATA_FINAL, 'DD/MM/YY hh24:mi:ss') ");
				sqlSb.append(" AND CR.ACTIVO = 1 ");
				sqlSb.append(" GROUP BY RT.RUTA_ID, ");
				sqlSb.append(" RT.NUMRUTA, ");
				sqlSb.append(" RT.PREFIXO, ");
				sqlSb.append(" CR.FECCORRIDA, ");
				sqlSb.append(" cr.corrida_id, ");
				sqlSb.append(" cr.tiposervicio_id, ");
				sqlSb.append(" RT.DESCRUTA, ");
				sqlSb.append(" GR.DESCGRUPO, ");
				sqlSb.append(" CO.ESTADO_ID, ");
				sqlSb.append(" CD.ESTADO_ID, ");
				sqlSb.append(" RT.INDSENTIDOIDA, ");
				sqlSb.append(" CS.CVECLASE, ");
				sqlSb.append(" BL.BOLETO_ID, ");
				sqlSb.append(" BL.preciopagado, ");
				sqlSb.append(" BL.importeseguro, ");
				sqlSb.append(" BL.importepedagio, ");
				sqlSb.append(" BL.importetaxaembarque ");
				sqlSb.append(" ) DADOS ");
				sqlSb.append(" GROUP BY RUTA_ID, ");
				sqlSb.append(" INDSENTIDOIDA, ");
				sqlSb.append(" NUMRUTA, ");
				sqlSb.append(" PREFIXO, ");
				sqlSb.append(" FECCORRIDA, ");
				sqlSb.append(" DESCRUTA, ");
				sqlSb.append(" INTERESTADUAL,  ");
				sqlSb.append(" GRUPO_LINHA,   ");
				sqlSb.append(" EXTENSAO_KM,  ");
				sqlSb.append(" RECEITA_BAGAGEM,  ");
				sqlSb.append(" RECEITA_SEGURO_OUTROS,   ");
				sqlSb.append(" PASSAGEIROS,      ");
				sqlSb.append(" CVE_CLASE_SERVICIO    ");
				sqlSb.append(" ) TAB1   ");
				sqlSb.append(" )TAB   ");
				sqlSb.append(" GROUP BY TAB.RUTA_ID,    ");
				sqlSb.append(" TAB.NUMRUTA,   ");
				sqlSb.append(" TAB.PREFIXO,    ");
				sqlSb.append(" TAB.DESCRUTA,   ");
				sqlSb.append(" TAB.INTERESTADUAL,   ");
				sqlSb.append(" TAB.GRUPO_LINHA,    ");
				sqlSb.append(" TAB.EXTENSAO_KM,   ");
				sqlSb.append(" TAB.CVE_CLASE_SERVICIO,     ");
				sqlSb.append(" TAB.INDSENTIDOIDA          ");
				sqlSb.append("   ) SUB      ");
				sqlSb.append(" WHERE (DECODE(NVL(SUB.VIAGENS_TOTAL,0), 0, 1, NVL(SUB.VIAGENS_TOTAL,0)) != 0) ");
				sqlSb.append(" AND DECODE(NVL(SUB.VIAGENS_TOTAL,0), 0, 1, NVL(SUB.VIAGENS_TOTAL,0))    != 0  ");
				sqlSb.append(" AND DECODE(NVL(SUB.KM_RODADO,0), 0, 1, NVL(SUB.KM_RODADO,0))            != 0   ");
				sqlSb.append(" AND DECODE(NVL(SUB.VIAGENS_TOTAL,0), 0, 1, NVL(SUB.VIAGENS_TOTAL,0))    != 0  ");
				sqlSb.append(" AND DECODE(NVL(SUB.VIAGENS_TOTAL,0), 0, 1, NVL(SUB.VIAGENS_TOTAL,0))    != 0   ");
				sqlSb.append(" ORDER BY SUB.PREFIXO,  ");
				sqlSb.append("   SUB.INDSENTIDOIDA DESC  ");
				return sqlSb.toString();
				
			}
		});
	}
	
	/**
	 * Preenche objeto de relatorio caso seja Ida criar novo objeto e preenche com dados, caso seja Volta concantena/agrupa com o objeto de linha da Ida
	 * 
	 * @param rset
	 * @param relatorioBean
	 * @return
	 * @throws SQLException
	 */
	private RelatorioResumoLinhasBean preencheAgrupaRelatorioBeanPorIdaVolta(ResultSet rset, Boolean isMesmaLinhaIdaVolta, RelatorioResumoLinhasBean relatorioBean) throws SQLException {
		//Ida
		if (!isMesmaLinhaIdaVolta) {
			relatorioBean = new RelatorioResumoLinhasBean();
			relatorioBean.setINDSENTIDOIDA(rset.getInt("INDSENTIDOIDA"));
			relatorioBean.setRUTA_ID(rset.getBigDecimal("RUTA_ID"));
			relatorioBean.setNUMRUTA(rset.getString("NUMRUTA"));
			relatorioBean.setPREFIXO(rset.getString("PREFIXO"));
			relatorioBean.setDESCRUTA(rset.getString("DESCRUTA") + (BigDecimal.ZERO.equals(rset.getBigDecimal("INDSENTIDOIDA")) ? " - VOLTA " : " - IDA"));
			relatorioBean.setINTERESTADUAL(rset.getString("INTERESTADUAL"));
			relatorioBean.setGRUPO_LINHA(rset.getString("GRUPO_LINHA"));
			relatorioBean.setEXTENSAO_KM(rset.getBigDecimal("EXTENSAO_KM"));
			relatorioBean.setRECEITA_SEGURO(rset.getBigDecimal("RECEITA_SEGURO"));
			relatorioBean.setRECEITA_BAGAGEM(rset.getBigDecimal("RECEITA_BAGAGEM"));
			relatorioBean.setRECEITA_SEGURO_OUTROS(rset.getBigDecimal("RECEITA_SEGURO_OUTROS"));
			relatorioBean.setRECEITA_TARIFA(rset.getBigDecimal("RECEITA_TARIFA"));
			relatorioBean.setRECEITA_PEDAGIO(rset.getBigDecimal("RECEITA_PEDAGIO"));
			relatorioBean.setRECEITA_EMBARQUE(rset.getBigDecimal("RECEITA_EMBARQUE"));
			relatorioBean.setPASSAGEIROS(rset.getBigDecimal("PASSAGEIROS"));
			relatorioBean.setVIAGENS_EXTRA(rset.getBigDecimal("VIAGENS_EXTRA"));
			relatorioBean.setVIAGENS(rset.getBigDecimal("VIAGENS"));
			relatorioBean.setCVE_CLASE_SERVICIO(rset.getString("CVE_CLASE_SERVICIO"));
			relatorioBean.setRECEITA_TOTAL(rset.getBigDecimal("RECEITA_TOTAL"));
			relatorioBean.setVIAGENS_TOTAL(rset.getBigDecimal("VIAGENS_TOTAL"));
			relatorioBean.setKM_RODADO(rset.getBigDecimal("KM_RODADO"));
			relatorioBean.setPASSAGEIROS_EQUIVALENTE(rset.getBigDecimal("PASSAGEIROS_EQUIVALENTE"));
			relatorioBean.setPASSAGEIROS_MPA(rset.getBigDecimal("PASSAGEIROS_MPA"));
			relatorioBean.setPASSAGEIROS_MPE(rset.getBigDecimal("PASSAGEIROS_MPE"));
			relatorioBean.setRECEITA_KM(rset.getBigDecimal("RECEITA_KM"));
			relatorioBean.setRECEITA_VIAGEM(rset.getBigDecimal("RECEITA_VIAGEM"));
			relatorioBean.setPAX_KM(rset.getBigDecimal("PAX_KM"));
			//relatorioBean.setPAX_OFERTADO(rset.getBigDecimal("PAX_OFERTADO"));
		} else {
			//Volta
			relatorioBean.setRUTA_ID(rset.getBigDecimal("RUTA_ID"));
			relatorioBean.setNUMRUTA(relatorioBean.getNUMRUTA() + rset.getString("NUMRUTA"));
			relatorioBean.setPREFIXO(rset.getString("PREFIXO"));
			relatorioBean.setDESCRUTA(relatorioBean.getDESCRUTA() + (BigDecimal.ZERO.equals(rset.getBigDecimal("INDSENTIDOIDA")) ? " - VOLTA " : " - IDA"));
			relatorioBean.setINTERESTADUAL(rset.getString("INTERESTADUAL"));
			relatorioBean.setGRUPO_LINHA(rset.getString("GRUPO_LINHA"));
			relatorioBean.setEXTENSAO_KM(relatorioBean.getEXTENSAO_KM().add(rset.getBigDecimal("EXTENSAO_KM")));
			relatorioBean.setRECEITA_SEGURO(relatorioBean.getRECEITA_SEGURO().add(rset.getBigDecimal("RECEITA_SEGURO")));
			relatorioBean.setRECEITA_BAGAGEM(relatorioBean.getRECEITA_BAGAGEM().add(rset.getBigDecimal("RECEITA_BAGAGEM")));
			relatorioBean.setRECEITA_SEGURO_OUTROS(relatorioBean.getRECEITA_SEGURO_OUTROS().add(rset.getBigDecimal("RECEITA_SEGURO_OUTROS")));
			relatorioBean.setRECEITA_TARIFA(relatorioBean.getRECEITA_TARIFA().add(rset.getBigDecimal("RECEITA_TARIFA")));
			relatorioBean.setRECEITA_PEDAGIO(relatorioBean.getRECEITA_PEDAGIO().add(rset.getBigDecimal("RECEITA_PEDAGIO")));
			relatorioBean.setRECEITA_EMBARQUE(relatorioBean.getRECEITA_EMBARQUE().add(rset.getBigDecimal("RECEITA_EMBARQUE")));
			relatorioBean.setPASSAGEIROS(relatorioBean.getPASSAGEIROS().add(rset.getBigDecimal("PASSAGEIROS")));
			relatorioBean.setVIAGENS_EXTRA(relatorioBean.getVIAGENS_EXTRA().add(rset.getBigDecimal("VIAGENS_EXTRA")));
			relatorioBean.setVIAGENS(relatorioBean.getVIAGENS().add(rset.getBigDecimal("VIAGENS")));
			relatorioBean.setCVE_CLASE_SERVICIO(rset.getString("CVE_CLASE_SERVICIO"));
			relatorioBean.setRECEITA_TOTAL(relatorioBean.getRECEITA_TOTAL().add(rset.getBigDecimal("RECEITA_TOTAL")));
			relatorioBean.setVIAGENS_TOTAL(relatorioBean.getVIAGENS_TOTAL().add(rset.getBigDecimal("VIAGENS_TOTAL")));
			relatorioBean.setKM_RODADO(relatorioBean.getKM_RODADO().add(rset.getBigDecimal("KM_RODADO")));
			relatorioBean.setPASSAGEIROS_EQUIVALENTE(relatorioBean.getPASSAGEIROS_EQUIVALENTE().add(rset.getBigDecimal("PASSAGEIROS_EQUIVALENTE")));
			relatorioBean.setPASSAGEIROS_MPA(relatorioBean.getPASSAGEIROS_MPA().add(rset.getBigDecimal("PASSAGEIROS_MPA")));
			relatorioBean.setPASSAGEIROS_MPE(relatorioBean.getPASSAGEIROS_MPE().add(rset.getBigDecimal("PASSAGEIROS_MPE")));
			relatorioBean.setRECEITA_KM(relatorioBean.getRECEITA_KM().add(rset.getBigDecimal("RECEITA_KM")));
			relatorioBean.setRECEITA_VIAGEM(relatorioBean.getRECEITA_VIAGEM().add(rset.getBigDecimal("RECEITA_VIAGEM")));
			relatorioBean.setPAX_KM(relatorioBean.getPAX_KM().add(rset.getBigDecimal("PAX_KM")));
			//relatorioBean.setPAX_OFERTADO(relatorioBean.getPAX_OFERTADO().add(rset.getBigDecimal("PAX_OFERTADO")));
			
		}
		return relatorioBean;
	}
	
	public void setLsDadosRelatorio(List<RelatorioResumoLinhasBean> lsDadosRelatorio) {
		this.setCollectionDataSource(new JRBeanCollectionDataSource(lsDadosRelatorio));
		this.lsDadosRelatorio = lsDadosRelatorio;
	}
	private String buscarConstante(String nomeConstante) {
		ConstanteService constanteService = (ConstanteService) AppContext.getApplicationContext().getBean("constanteService");
		return constanteService.buscarPorNomeConstante(nomeConstante).getValorconstante();
	}


	@Override
	public void processaParametros() throws Exception {
	}

}
