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

import java.math.BigDecimal;
import java.sql.Connection;
import java.sql.ResultSet;
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 Bruno H. G. Gouvea <bruno@rjconsultores.com.br>
 * 
 */
public class RelatorioResumoLinhasAnalitico extends Relatorio {

	/**
	 * @param parametros
	 * @param conexao
	 */

	private List<RelatorioResumoLinhasBean> lsDadosRelatorio;
	private static String CONSTANTE_GRATUIDADE_CRIANCA;
	
	public RelatorioResumoLinhasAnalitico(Map<String, Object> parametros, 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()) {

					relatorioBean = new RelatorioResumoLinhasBean();
					relatorioBean.setINDSENTIDOIDA(rset.getInt("INDSENTIDOIDA"));
					relatorioBean.setRUTA_ID(rset.getBigDecimal("RUTA_ID"));
					relatorioBean.setNUMRUTA(rset.getString("NUMRUTA"));
					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"));
					relatorioBean.setTARIFA(rset.getBigDecimal("TARIFA"));
					relatorioBean.setEQ(rset.getBigDecimal("EQ"));
					relatorioBean.setIAP(rset.getBigDecimal("IAP"));
					relatorioBean.setASSENTOS(rset.getBigDecimal("ASSENTOS"));
					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);
					}
				}
				
			}
		});
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see com.rjconsultores.ventaboletos.relatorios.utilitarios.Relatorio#processaParametros()
	 */
	@Override
	public void processaParametros() throws Exception {
	}
	
	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,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(RECEITA_TARIFA,0) / DECODE(NVL(RECEITA_TARIFA,0), 0, 1, NVL(SUB.VIAGENS_TOTAL,0))) / DECODE(NVL(SUB.TARIFA,0), 0, 1, NVL(SUB.TARIFA,0))), 2) AS EQ, ");
		sqlSb.append("	       (NVL(SUB.ASSENTOS,0) * NVL(SUB.KM_RODADO,0)) AS PAX_OFERTADO, ");
		sqlSb.append("	       ((((SUB.PAX_KM) / (NVL(SUB.ASSENTOS,0) * NVL(SUB.KM_RODADO,0)))) * 100) AS IAP ");
		sqlSb.append("	FROM ( SELECT TAB.INDSENTIDOIDA, TAB.RUTA_ID, TAB.NUMRUTA, TAB.DESCRUTA, TAB.TARIFA, TAB.ASSENTOS, TAB.ROLOPERATIVO_ID, ");
		sqlSb.append("	              TAB.INTERESTADUAL, TAB.GRUPO_LINHA, TAB.EXTENSAO_KM, TAB.CVE_CLASE_SERVICIO, ");
		sqlSb.append("	              SUM(NVL(TAB.RECEITA_SEGURO,0)) AS RECEITA_SEGURO, SUM(NVL(TAB.RECEITA_BAGAGEM,0)) AS RECEITA_BAGAGEM, ");
		sqlSb.append("	              SUM(NVL(TAB.RECEITA_SEGURO_OUTROS,0)) AS RECEITA_SEGURO_OUTROS, SUM(NVL(TAB.RECEITA_TARIFA,0)) AS RECEITA_TARIFA, ");
		sqlSb.append("	              SUM(NVL(TAB.RECEITA_PEDAGIO,0)) AS RECEITA_PEDAGIO, SUM(NVL(TAB.RECEITA_EMBARQUE,0)) AS RECEITA_EMBARQUE, SUM(NVL(TAB.PASSAGEIROS,0)) AS PASSAGEIROS,		 ");
		sqlSb.append("	              SUM(NVL(TAB.VIAGENS_EXTRA,0)) AS VIAGENS_EXTRA, SUM(NVL(TAB.VIAGENS,0)) AS VIAGENS, SUM(NVL(TAB.RECEITA_TOTAL,0)) AS RECEITA_TOTAL, ");
		sqlSb.append("	              SUM(NVL(TAB.VIAGENS_TOTAL,0)) AS VIAGENS_TOTAL, SUM(NVL(TAB.KM_RODADO,0)) AS KM_RODADO, SUM(NVL(TAB.PASSAGEIROS_EQUIVALENTE,0)) AS PASSAGEIROS_EQUIVALENTE, ");
		sqlSb.append("	              SUM(NVL(TAB.PAX_KM,0)) AS PAX_KM ");
		sqlSb.append("	        FROM (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("	                     TAB1.KM_REAL PAX_KM, ");
		sqlSb.append("	                    (SELECT SUM(NVL(PE.EQUIVALENTE,0)) ");
		sqlSb.append("	                       FROM (SELECT CO.FECCORRIDA, CO.RUTA_ID, BO.PRECIOBASE, CO.CORRIDA_ID, ROUND((BO.NUMKMVIAJE * COUNT(1) /  ");
		if (parametros.get("SOMAR_KM_RODADOS_POR").equals("SEQUENCIA")) {
			sqlSb.append("					             (SELECT SUM(NVL(TR.CANTKMREAL,0)) ");
			sqlSb.append("                                  FROM RUTA_SECUENCIA RS, TRAMO TR ");
			sqlSb.append("                                 WHERE RS.RUTA_ID = TAB1.RUTA_ID ");
			sqlSb.append("                                   AND RS.TRAMO_ID = TR.TRAMO_ID ");
			sqlSb.append("		                             AND RS.ACTIVO = 1 )), 2) EQUIVALENTE ");
		}else {
		    sqlSb.append("					             (SELECT SUM(NVL(TR.CANTKMREAL,0))  ");
		    sqlSb.append("                                     FROM RUTA_COMBINACION RS, TRAMO TR  ");
		    sqlSb.append("                                    WHERE RS.RUTA_ID = TAB1.RUTA_ID  ");
		    sqlSb.append("                                      AND RS.TRAMO_ID = TR.TRAMO_ID  ");
		    
		    sqlSb.append("                                      AND TR.ORIGEN_ID = CO.ORIGEN_ID ");
		    sqlSb.append("	                                    AND TR.DESTINO_ID = CO.DESTINO_ID ");
		    
		    sqlSb.append("                                      AND RS.ACTIVO = 1)), 2) EQUIVALENTE ");
		}
		sqlSb.append("	                                FROM CORRIDA CO, 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 OR BO.MOTIVOCANCELACION_ID = 0 AND BO.CATEGORIA_ID <> :CRIANCA_ID) ");
		sqlSb.append("	                              GROUP BY CO.FECCORRIDA, CO.RUTA_ID, BO.PRECIOBASE, BO.NUMKMVIAJE, CO.CORRIDA_ID, CO.ORIGEN_ID, CO.DESTINO_ID) PE ");
		sqlSb.append("	                      WHERE PE.FECCORRIDA = TAB1.FECCORRIDA ");
		sqlSb.append("		                    AND PE.CORRIDA_ID = TAB1.CORRIDA_ID ");
		sqlSb.append("				            AND PE.RUTA_ID = TAB1.RUTA_ID) PASSAGEIROS_EQUIVALENTE ");
		sqlSb.append("	                FROM (SELECT RT.RUTA_ID, ");
		sqlSb.append("                               RT.INDSENTIDOIDA, ");
		sqlSb.append("	                             RT.NUMRUTA, ");
		sqlSb.append("	                             CR.FECCORRIDA, ");
		sqlSb.append("                               CR.CORRIDA_ID, ");
		sqlSb.append("	                             CONCAT(RT.DESCRUTA, CASE WHEN RT.INDSENTIDOIDA = 0 THEN ' - VOLTA' ELSE ' - IDA' END) DESCRUTA, ");
        sqlSb.append("                               TF.PRECIO TARIFA, ");
   		sqlSb.append("                               DA.CANTASIENTOS ASSENTOS, ");
   		sqlSb.append("                               RO.ROLOPERATIVO_ID, ");
   		sqlSb.append("                               CASE WHEN CO.ESTADO_ID <> CD.ESTADO_ID THEN 'S' ELSE 'N' END INTERESTADUAL, ");
   		sqlSb.append("                               NVL(GR.DESCGRUPO, 'Nao Definido') GRUPO_LINHA, ");
   		if (parametros.get("SOMAR_KM_RODADOS_POR").equals("SEQUENCIA")) {
   			sqlSb.append("                           (SELECT SUM(NVL(RS.KMORIGINAL,0)) FROM RUTA_SECUENCIA RS, TRAMO TR WHERE RS.RUTA_ID = RT.RUTA_ID AND RS.TRAMO_ID = TR.TRAMO_ID AND RS.ACTIVO = 1) EXTENSAO_KM, ");
		}else {
			sqlSb.append("                            TR.CANTKMREAL AS EXTENSAO_KM, ");
		}	

   		sqlSb.append("                               SUM(NVL(BL.NUMKMVIAJE,0))  KM_REAL, ");
   		sqlSb.append("                               NVL(SUM(NVL(BL.IMPORTESEGURO,0)), 0) RECEITA_SEGURO, ");
   		sqlSb.append("                               0 RECEITA_BAGAGEM, ");
   		sqlSb.append("                               0 RECEITA_SEGURO_OUTROS, ");
   		sqlSb.append("                               SUM(NVL(BL.PRECIOPAGADO,0)) RECEITA_TARIFA, ");
   		sqlSb.append("                               SUM(NVL(BL.IMPORTEPEDAGIO,0)) RECEITA_PEDAGIO, ");
   		sqlSb.append("                               SUM(NVL(BL.IMPORTETAXAEMBARQUE,0)) RECEITA_EMBARQUE, ");
   		sqlSb.append("                               COUNT(1) PASSAGEIROS, ");
   		sqlSb.append("                               COUNT(DISTINCT CASE WHEN CR.TIPOSERVICIO_ID = 2 THEN CR.FECCORRIDA || CR.CORRIDA_ID ELSE NULL END) VIAGENS_EXTRA, ");
   		sqlSb.append("                               COUNT(DISTINCT CASE WHEN CR.TIPOSERVICIO_ID <> 2 THEN CR.FECCORRIDA || CR.CORRIDA_ID ELSE NULL END) VIAGENS, ");
   		sqlSb.append("                               NVL(CS.CVECLASE, ' ') CVE_CLASE_SERVICIO ");
   		sqlSb.append("                          FROM RUTA             RT, ");
   		
   		if (!parametros.get("SOMAR_KM_RODADOS_POR").equals("SEQUENCIA")) {
   		   sqlSb.append("                               RUTA_COMBINACION RC, ");
   		}
   		
	   	sqlSb.append("                               BOLETO           BL, ");
	    sqlSb.append("                               CORRIDA          CR, ");
	    sqlSb.append("                               TRAMO            TR, ");
	    sqlSb.append("                               ROL_OPERATIVO    RO, ");
	    sqlSb.append("                               DIAGRAMA_AUTOBUS DA, ");
	    sqlSb.append("                               TARIFA           TF, ");
	    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 RO.ROLOPERATIVO_ID = CR.ROLOPERATIVO_ID ");
	    sqlSb.append("                           AND RO.DIAGRAMAAUTOBUS_ID = DA.DIAGRAMAAUTOBUS_ID ");
	    sqlSb.append("                           AND TF.CLASESERVICIO_ID = CR.CLASESERVICIO_ID ");
	    sqlSb.append("                           AND TR.ORIGEN_ID = CR.ORIGEN_ID ");
	    sqlSb.append("	                         AND TR.DESTINO_ID = CR.DESTINO_ID ");
	    
	    if (!parametros.get("SOMAR_KM_RODADOS_POR").equals("SEQUENCIA")) {
	    	sqlSb.append("                           AND RC.RUTA_ID = RT.RUTA_ID  ");
	    	sqlSb.append("                           AND RC.TRAMO_ID = TR.TRAMO_ID ");
	    	sqlSb.append("	                         AND RC.ACTIVO = 1 ");
	    }	
	    
	    sqlSb.append("	                         AND TF.MARCA_ID = CR.MARCA_ID ");
	    sqlSb.append("	                         AND TF.RUTA_ID = CR.RUTA_ID ");
	    sqlSb.append("	                         AND TF.TRAMO_ID = TR.TRAMO_ID ");
	    sqlSb.append("	                         AND TF.STATUSTARIFA = 'A' ");
	    sqlSb.append("	                         AND TF.ACTIVO = 1 ");
	    sqlSb.append("	                         AND BL.MOTIVOCANCELACION_ID IS NULL ");
	    sqlSb.append("	                         AND BL.INDSTATUSOPERACION = 'F' ");
	    sqlSb.append("	                         AND TF.VIGENCIATARIFA_ID = VT.VIGENCIATARIFA_ID ");
	    sqlSb.append("	                         AND VT.ACTIVO = 1 ");
	    sqlSb.append("	                         AND BL.CATEGORIA_ID NOT IN (3, :CRIANCA_ID) ");
	    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("	                         AND BL.ACTIVO = 1 ");
	    sqlSb.append("	                       GROUP BY CS.CVECLASE, ");
	    sqlSb.append("	                             RT.RUTA_ID, ");
	    sqlSb.append("	                             RT.NUMRUTA, ");
	    sqlSb.append("	                             CR.FECCORRIDA, ");
	    sqlSb.append("                               CR.CORRIDA_ID, ");
	    sqlSb.append("	                             RT.DESCRUTA, ");
	    sqlSb.append("	                             TF.PRECIO, ");
	    sqlSb.append("	                             DA.CANTASIENTOS, ");
	    sqlSb.append("	                             RO.ROLOPERATIVO_ID, ");
	    sqlSb.append("	                             GR.DESCGRUPO, ");
	    sqlSb.append("	                             CO.ESTADO_ID, ");
	    sqlSb.append("	                             CD.ESTADO_ID, ");
	    sqlSb.append("	                             TR.CANTKMREAL, ");
	    sqlSb.append("			                     RT.INDSENTIDOIDA) TAB1 ");
		sqlSb.append("	     GROUP BY TAB1.RUTA_ID,TAB1.INDSENTIDOIDA,TAB1.NUMRUTA,TAB1.FECCORRIDA,TAB1.DESCRUTA, ");
	    sqlSb.append("	              TAB1.TARIFA,TAB1.ASSENTOS,TAB1.ROLOPERATIVO_ID,TAB1.INTERESTADUAL, ");
	    sqlSb.append("	              TAB1.GRUPO_LINHA,TAB1.EXTENSAO_KM,TAB1.RECEITA_SEGURO,TAB1.RECEITA_BAGAGEM, ");
	    sqlSb.append("	              TAB1.RECEITA_SEGURO_OUTROS,TAB1.RECEITA_TARIFA,TAB1.RECEITA_PEDAGIO,TAB1.RECEITA_EMBARQUE, ");
	    sqlSb.append("	              TAB1.PASSAGEIROS,TAB1.VIAGENS_EXTRA,TAB1.VIAGENS,TAB1.CVE_CLASE_SERVICIO, TAB1.KM_REAL, TAB1.CORRIDA_ID ");
        sqlSb.append("	     ) TAB ");
		sqlSb.append("	GROUP BY TAB.RUTA_ID, TAB.NUMRUTA, TAB.DESCRUTA, TAB.TARIFA, TAB.ASSENTOS, TAB.ROLOPERATIVO_ID, ");
	    sqlSb.append("	         TAB.INTERESTADUAL, TAB.GRUPO_LINHA, TAB.EXTENSAO_KM, TAB.CVE_CLASE_SERVICIO, TAB.INDSENTIDOIDA) SUB ");
		sqlSb.append("	WHERE ");
	    sqlSb.append("	    (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("	    AND DECODE(NVL(SUB.TARIFA,0), 0, 1, NVL(SUB.TARIFA,0)) != 0 ");
	    sqlSb.append("	    AND (NVL(SUB.ASSENTOS,0) * NVL(SUB.KM_RODADO,0)) != 0 ");
	    sqlSb.append("	ORDER BY SUB.DESCRUTA, SUB.INDSENTIDOIDA, SUB.ASSENTOS, SUB.TARIFA ");
		return sqlSb.toString();
	}
	
	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();
	}

}
