diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioDemandasDetalhado.java b/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioDemandasDetalhado.java index b91de1365..4e8694473 100644 --- a/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioDemandasDetalhado.java +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioDemandasDetalhado.java @@ -47,7 +47,8 @@ public class RelatorioDemandasDetalhado extends RelatorioDemandas { SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss"); StringBuilder sql = new StringBuilder(); - + + sql.append(" with vendidos as ( "); sql.append(" SELECT "); sql.append(" bol.fechorviaje DATA, "); sql.append(" r.DESCRUTA LINHA, "); @@ -61,7 +62,8 @@ public class RelatorioDemandasDetalhado extends RelatorioDemandas { sql.append(" nvl(ct.PLATAFORMA,'') PLATAFORMA, "); sql.append(" e.NOMBEMPRESA EMPRESA,"); sql.append(" COUNT(bol.BOLETO_ID) OCUPACAO, "); - sql.append(" r.NUMRUTA CODLINHA "); + sql.append(" r.NUMRUTA CODLINHA , "); + sql.append(" r.INDSENTIDOIDA SENTIDO "); sql.append(" FROM "); sql.append(" boleto bol "); sql.append(" LEFT JOIN ruta r "); @@ -141,7 +143,8 @@ public class RelatorioDemandasDetalhado extends RelatorioDemandas { sql.append(" ts.DESCSERVICIO, "); sql.append(" ct.PLATAFORMA, "); sql.append(" da.CANTASIENTOSVENDIBLES, "); - sql.append(" r.NUMRUTA "); + sql.append(" r.NUMRUTA, "); + sql.append(" r.INDSENTIDOIDA "); sql.append(" ORDER BY "); sql.append(" e.NOMBEMPRESA, "); @@ -151,6 +154,85 @@ public class RelatorioDemandasDetalhado extends RelatorioDemandas { sql.append(" p_destino.DESCPARADA, "); sql.append(" cs.DESCCLASE "); + sql.append(" ) , nao_vendidos as ( "); + + sql.append(" select distinct c.FECCORRIDA data, "); + sql.append(" r.DESCRUTA LINHA, "); + sql.append(" c.CORRIDA_ID SERVICO, "); + sql.append(" c.FECHORSALIDA HORARIO, "); + sql.append(" p_origem.DESCPARADA ORIGEM, "); + sql.append(" p_destino.DESCPARADA DESTINO, "); + sql.append(" cs.DESCCLASE CLASSE, "); + sql.append(" da.CANTASIENTOSVENDIBLES CAPACIDADE, "); + sql.append(" ts.DESCSERVICIO TIPO_SERVICO, "); + sql.append(" NVL(ct.PLATAFORMA,'') PLATAFORMA, "); + sql.append(" e.NOMBEMPRESA EMPRESA, "); + sql.append(" 0 as OCUPACAO, "); + sql.append(" r.NUMRUTA CODLINHA, "); + sql.append(" r.INDSENTIDOIDA SENTIDO "); + + sql.append(" from corrida c "); + sql.append(" LEFT JOIN ruta r "); + sql.append(" ON r.RUTA_ID = c.RUTA_ID "); + sql.append(" LEFT JOIN parada p_origem "); + sql.append(" ON p_origem.PARADA_ID = c.ORIGEN_ID "); + sql.append(" LEFT JOIN parada p_destino "); + sql.append(" ON p_destino.PARADA_ID = c.DESTINO_ID "); + sql.append(" LEFT JOIN CLASE_SERVICIO cs "); + sql.append(" ON cs.CLASESERVICIO_ID = c.CLASESERVICIO_ID "); + sql.append(" LEFT JOIN TIPO_SERVICIO ts "); + sql.append(" ON ts.TIPOSERVICIO_ID = cs.TIPOSERVICO "); + sql.append(" LEFT JOIN corrida_tramo ct "); + sql.append(" ON ct.CORRIDA_ID = c.CORRIDA_ID "); + sql.append(" AND ct.FECCORRIDA = c.FECCORRIDA "); + sql.append(" LEFT JOIN rol_operativo ro "); + sql.append(" ON ro.ROLOPERATIVO_ID = c.ROLOPERATIVO_ID "); + sql.append(" LEFT JOIN diagrama_autobus da "); + sql.append(" ON da.diagramaautobus_id = ro.diagramaautobus_id "); + sql.append(" LEFT JOIN empresa e "); + sql.append(" ON e.EMPRESA_ID = c.EMPRESACORRIDA_ID "); + sql.append(" WHERE "); + sql.append(" c.FECHORSALIDA >= :DATA_INICIAL "); + sql.append(" AND c.FECHORSALIDA <= :DATA_FINAL "); + sql.append(" and c.activo = 1 "); + + if (parametros.get("RUTA_ID") != null) { + sql.append(" AND r.RUTA_ID = :RUTA_ID "); + } + if (parametros.get("EMPRESA_ID") != null) { + sql.append(" AND e.EMPRESA_ID = :EMPRESA_ID "); + } + + if (parametros.get("HORA_INICIAL") != null && parametros.get("HORA_FINAL") != null) { + sql.append(" AND "); + sql.append(" ( "); + do { + mesclarDataHora(dataInicial, horaInicial); + sql.append(" C.FECHORSALIDA BETWEEN to_date('" + format.format(dataInicial.getTime()) + "', 'dd/MM/yyyy HH24:MI:ss') "); + mesclarDataHora(dataInicial, horaFinal); + sql.append(" AND to_date('" + format.format(dataInicial.getTime()) + "', 'dd/MM/yyyy HH24:MI:ss')"); + dataInicial.add(Calendar.DAY_OF_MONTH, 1); + if (!dataInicial.after(dataFinal)) { + sql.append(" OR "); + } + + } while (!dataInicial.after(dataFinal)); + sql.append(" ) "); + } + if (parametros.get("TIPO_SERVICO") != null) { + sql.append(" AND c.TIPOSERVICIO_ID = :TIPO_SERVICO "); + } + sql.append(" and (c.corrida_id) not in (select (ve.SERVICO) from vendidos ve) "); + sql.append(" ) "); + + sql.append(" select * from ( "); + + sql.append(" select * from vendidos union select * from nao_vendidos "); + + sql.append(" ) order by empresa "); + + + NamedParameterStatement stmt = new NamedParameterStatement(conexao, sql.toString()); if (parametros.get("EMPRESA_ID") != null) { stmt.setInt("EMPRESA_ID", Integer.valueOf(parametros.get("EMPRESA_ID").toString())); @@ -186,6 +268,7 @@ public class RelatorioDemandasDetalhado extends RelatorioDemandas { dataResult.put("OCUPACAO", rset.getInt("OCUPACAO")); dataResult.put("EMPRESA", rset.getString("EMPRESA")); dataResult.put("CODLINHA", rset.getString("CODLINHA")); + dataResult.put("SENTIDO", rset.getString("SENTIDO")); this.dados.add(dataResult); diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioDemandasDetalhadoNovoLayout.java b/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioDemandasDetalhadoNovoLayout.java index a0e576d59..eebc39855 100644 --- a/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioDemandasDetalhadoNovoLayout.java +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioDemandasDetalhadoNovoLayout.java @@ -42,6 +42,9 @@ public class RelatorioDemandasDetalhadoNovoLayout extends RelatorioDemandas { SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss"); StringBuilder sql = new StringBuilder(); + + sql.append(" with vendidos as ( "); + sql.append("select "); sql.append(" trunc(co.feccorrida) as data_corrida, "); sql.append(" trunc(bo.fechorviaje) as data, "); @@ -58,7 +61,8 @@ public class RelatorioDemandasDetalhadoNovoLayout extends RelatorioDemandas { sql.append(" count(bo.boleto_id) as ocupacao, "); sql.append(" ts.descservicio as tipo_servico, "); sql.append(" ct.plataforma as plataforma, "); - sql.append(" e.nombempresa as empresa "); + sql.append(" e.nombempresa as empresa, "); + sql.append(" r.INDSENTIDOIDA AS sentido "); sql.append("from boleto bo "); sql.append(" join corrida co on co.corrida_id = bo.corrida_id and co.feccorrida = bo.feccorrida "); sql.append(" join corrida_tramo ct on ct.corrida_id = bo.corrida_id and bo.feccorrida = ct.feccorrida and ct.origen_id = bo.origen_id "); @@ -99,8 +103,80 @@ public class RelatorioDemandasDetalhadoNovoLayout extends RelatorioDemandas { sql.append(" case when ((ori.indvisibleinternet is null or ori.indvisibleinternet = 1) "); sql.append(" and (des.indvisibleinternet is null or des.indvisibleinternet = 1)) then 'SIM' else 'NÃO' end, "); sql.append(" bo.fechorviaje, ori.descparada, des.descparada, cs.descclase, "); - sql.append(" da.cantasientos, ts.descservicio, ct.plataforma, e.nombempresa "); + sql.append(" da.cantasientos, ts.descservicio, ct.plataforma, e.nombempresa, r.INDSENTIDOIDA "); sql.append("order by e.nombempresa, data, linha, servico, origem, destino "); + + sql.append(" ), nao_vendidos as ( "); + + + sql.append(" SELECT co.FECHORSALIDA AS data_corrida, "); + sql.append(" co.FECHORSALIDA AS data, "); + sql.append(" r.descruta AS linha, "); + sql.append(" r.numruta AS codlinha, "); + sql.append(" co.corrida_id AS servico, "); + sql.append(" CASE "); + sql.append(" WHEN ((ori.indvisibleinternet IS NULL "); + sql.append(" OR ori.indvisibleinternet = 1) "); + sql.append("AND (des.indvisibleinternet IS NULL "); + sql.append("OR des.indvisibleinternet = 1)) "); + sql.append("THEN 'SIM' "); + sql.append("ELSE 'NÃO' "); + sql.append("END AS internet, "); + sql.append("co.FECCORRIDA AS horario, "); + sql.append("ori.descparada AS origem, "); + sql.append(" des.descparada AS destino, "); + sql.append(" cs.descclase AS classe, "); + sql.append(" da.cantasientos AS capacidade, "); + sql.append(" 0 AS ocupacao, "); + sql.append(" ts.descservicio AS tipo_servico, "); + sql.append(" ct.plataforma AS plataforma, "); + sql.append(" e.nombempresa AS empresa, "); + sql.append(" r.INDSENTIDOIDA AS sentido "); + sql.append(" FROM corrida co "); + sql.append(" JOIN corrida_tramo ct "); + sql.append(" ON ct.corrida_id = co.corrida_id "); + sql.append(" AND co.feccorrida = ct.feccorrida "); + sql.append(" AND ct.origen_id = co.origen_id "); + sql.append(" JOIN ruta r "); + sql.append(" ON co.ruta_id = r.ruta_id "); + sql.append(" LEFT JOIN empresa e "); + sql.append(" ON e.empresa_id = co.empresacorrida_id "); + sql.append(" JOIN parada ori "); + sql.append(" ON ori.parada_id = co.origen_id "); + sql.append(" JOIN parada des "); + sql.append(" ON des.parada_id = co.destino_id "); + sql.append(" JOIN clase_servicio cs "); + sql.append(" ON cs.claseservicio_id = co.claseservicio_id "); + sql.append(" JOIN rol_operativo ro "); + sql.append(" ON ro.roloperativo_id = co.roloperativo_id "); + sql.append(" JOIN diagrama_autobus da "); + sql.append(" ON ro.diagramaautobus_id = da.diagramaautobus_id "); + sql.append(" JOIN tipo_servicio ts "); + sql.append(" ON ts.tiposervicio_id = co.tiposervicio_id "); + sql.append(" WHERE ct.activo = 1 "); + sql.append(" and co.activo = 1 "); + sql.append(" and co.FECHORSALIDA >= :DATA_INICIAL and co.FECHORSALIDA <= :DATA_FINAL "); + + if (parametros.get("HORA_INICIAL") != null && parametros.get("HORA_FINAL") != null) { + sql.append(" AND "); + sql.append(" ( "); + do { + mesclarDataHora(dataInicial, horaInicial); + sql.append(" co.FECCORRIDA between to_date('" + format.format(dataInicial.getTime()) + "', 'dd/MM/yyyy HH24:MI:ss') "); + mesclarDataHora(dataInicial, horaFinal); + sql.append(" and to_date('" + format.format(dataInicial.getTime()) + "', 'dd/MM/yyyy HH24:MI:ss')"); + dataInicial.add(Calendar.DAY_OF_MONTH, 1); + if (!dataInicial.after(dataFinal)) { + sql.append(" or "); + } + + } while (!dataInicial.after(dataFinal)); + sql.append(" ) "); + } + + sql.append(" )select * from ( "); + sql.append(" select * from vendidos v union select * from nao_vendidos ) order by empresa "); + NamedParameterStatement stmt = new NamedParameterStatement(conexao, sql.toString()); if (parametros.get("EMPRESA_ID") != null) @@ -135,6 +211,7 @@ public class RelatorioDemandasDetalhadoNovoLayout extends RelatorioDemandas { dataResult.put("OCUPACAO", rset.getInt("OCUPACAO")); dataResult.put("EMPRESA", rset.getString("EMPRESA")); dataResult.put("CODLINHA", rset.getString("CODLINHA")); + dataResult.put("SENTIDO", rset.getString("SENTIDO")); this.dados.add(dataResult); } this.resultSet = rset; diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioDemandasDetalhado.jasper b/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioDemandasDetalhado.jasper index 41bce4d65..329984ff5 100644 Binary files a/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioDemandasDetalhado.jasper and b/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioDemandasDetalhado.jasper differ diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioDemandasDetalhado.jrxml b/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioDemandasDetalhado.jrxml index 8afdb6b6e..84bd03c9d 100644 --- a/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioDemandasDetalhado.jrxml +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioDemandasDetalhado.jrxml @@ -1,7 +1,7 @@ - +