diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioOrigemDestino.java b/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioOrigemDestino.java index 2fc29dc43..aa044b486 100644 --- a/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioOrigemDestino.java +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioOrigemDestino.java @@ -11,6 +11,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import com.rjconsultores.ventaboletos.entidad.Corrida; import com.rjconsultores.ventaboletos.relatorios.utilitarios.Relatorio; import com.rjconsultores.ventaboletos.relatorios.utilitarios.beans.PesoOperacional; @@ -39,7 +40,8 @@ public class RelatorioOrigemDestino extends Relatorio { private List getPesoOperacional(String corridasIds, String dataDe, String dataAte) throws SQLException { StringBuilder sql = new StringBuilder(); sql.append(" SELECT "); - sql.append(" CA.CORRIDA_ID, "); + sql.append(" CA.CORRIDA_ID CORRIDA_ID, "); + sql.append(" CA.FECCORRIDA FECCORRIDA, "); sql.append(" O.CVEPARADA CVE_ORIGEM, "); sql.append(" O.DESCPARADA ORIGEM, "); sql.append(" D.CVEPARADA CVE_DESTINO, "); @@ -51,13 +53,15 @@ public class RelatorioOrigemDestino extends Relatorio { if (!corridasIds.equals("Todas")) { sql.append(" AND CA.CORRIDA_ID IN (").append(corridasIds).append(")"); } - sql.append(" AND CA.FECHORVENTA BETWEEN TO_DATE('").append(dataDe).append("','DD/MM/YYYY HH24:MI:SS') AND TO_DATE('").append(dataAte).append("','DD/MM/YYYY HH24:MI:SS') "); + sql.append(" AND CA.FECCORRIDA BETWEEN TO_DATE('").append(dataDe).append("','DD/MM/YYYY HH24:MI:SS') AND TO_DATE('").append(dataAte).append("','DD/MM/YYYY HH24:MI:SS') "); sql.append(" GROUP BY "); sql.append(" CA.CORRIDA_ID, "); + sql.append(" CA.FECCORRIDA, "); sql.append(" O.CVEPARADA, "); sql.append(" O.DESCPARADA, "); sql.append(" D.CVEPARADA, "); sql.append(" D.DESCPARADA "); + sql.append(" ORDER BY CA.CORRIDA_ID "); Connection conexao = getConexao(); @@ -67,13 +71,37 @@ public class RelatorioOrigemDestino extends Relatorio { ResultSet rset = null; rset = stmt.executeQuery(); - Map mapReceitaSaida = new HashMap(); - Map mapReceitaChegada = new HashMap(); - List lsParadas = new ArrayList(); - BigDecimal totalReceita = BigDecimal.ZERO; + Map> mapPorCorridaReceitaSaida = new HashMap>(); + Map> mapPorCorridaReceitaChegada = new HashMap>(); + Map mapTotalReceitaCorrida = new HashMap(); + List lsCorridaIds = new ArrayList(); while (rset.next()) { + Corrida.Id id = new Corrida.Id(); + id.setCorridaId(rset.getInt("CORRIDA_ID")); + id.setFeccorrida(rset.getDate("FECCORRIDA")); + + if (!lsCorridaIds.contains(id)) { + lsCorridaIds.add(id); + } + + Map mapReceitaSaida = mapPorCorridaReceitaSaida.get(id); + Map mapReceitaChegada = mapPorCorridaReceitaChegada.get(id); + + if (mapReceitaSaida == null) { + mapReceitaSaida = new HashMap(); + } + + if (mapReceitaChegada == null) { + mapReceitaChegada = new HashMap(); + } + BigDecimal receita = rset.getBigDecimal("RECEITA"); + BigDecimal totalReceita = mapTotalReceitaCorrida.get(id); + if (totalReceita == null) { + totalReceita = BigDecimal.ZERO; + } totalReceita = totalReceita.add(receita); + mapTotalReceitaCorrida.put(id, totalReceita); String cveOrigem = rset.getString("CVE_ORIGEM"); String origem = rset.getString("ORIGEM"); @@ -83,14 +111,6 @@ public class RelatorioOrigemDestino extends Relatorio { String destino = rset.getString("DESTINO"); String chaveDestino = cveDestino + " - " + destino; - if (!lsParadas.contains(chaveOrigem)) { - lsParadas.add(chaveOrigem); - } - - if (!lsParadas.contains(chaveDestino)) { - lsParadas.add(chaveDestino); - } - BigDecimal receitaSaida = mapReceitaSaida.get(chaveOrigem); if (receitaSaida != null) { mapReceitaSaida.put(chaveOrigem, receita.add(receitaSaida)); @@ -104,23 +124,44 @@ public class RelatorioOrigemDestino extends Relatorio { } else { mapReceitaChegada.put(chaveDestino, receita); } + + mapPorCorridaReceitaSaida.put(id, mapReceitaSaida); + mapPorCorridaReceitaChegada.put(id, mapReceitaChegada); } List lsPesoOperacionalRelatorio = new ArrayList(); - for (String parada : lsParadas) { - BigDecimal receitaSaida = mapReceitaSaida.get(parada) == null ? BigDecimal.ZERO : mapReceitaSaida.get(parada); - BigDecimal receitaChegada = mapReceitaChegada.get(parada) == null ? BigDecimal.ZERO : mapReceitaChegada.get(parada); - BigDecimal soma = receitaSaida.add(receitaChegada); - BigDecimal peso = soma.divide(totalReceita, 2, RoundingMode.HALF_EVEN); + for (Corrida.Id id : lsCorridaIds) { + Map mapReceitaSaida = mapPorCorridaReceitaSaida.get(id); + Map mapReceitaChegada = mapPorCorridaReceitaChegada.get(id); - PesoOperacional pesoOperacional = new PesoOperacional(); - pesoOperacional.setLocalidade(parada); - pesoOperacional.setReceitaSaida(receitaSaida); - pesoOperacional.setReceitaChegada(receitaChegada); - pesoOperacional.setSoma(soma); - pesoOperacional.setPeso(peso); + List lsTodasParadas = new ArrayList(); + for (String parada : mapReceitaChegada.keySet()) { + lsTodasParadas.add(parada); + } + for (String parada : mapReceitaSaida.keySet()) { + if (!lsTodasParadas.contains(parada)) { + lsTodasParadas.add(parada); + } + } - lsPesoOperacionalRelatorio.add(pesoOperacional); + BigDecimal totalReceita = mapTotalReceitaCorrida.get(id); + for (String parada : lsTodasParadas) { + BigDecimal receitaSaida = mapReceitaSaida.get(parada) == null ? BigDecimal.ZERO : mapReceitaSaida.get(parada); + BigDecimal receitaChegada = mapReceitaChegada.get(parada) == null ? BigDecimal.ZERO : mapReceitaChegada.get(parada); + BigDecimal soma = receitaSaida.add(receitaChegada); + BigDecimal peso = totalReceita.equals(BigDecimal.ZERO) ? BigDecimal.ZERO : soma.divide(totalReceita, 2, RoundingMode.HALF_EVEN); + + PesoOperacional pesoOperacional = new PesoOperacional(); + pesoOperacional.setCorridaId(id.getCorridaId()); + pesoOperacional.setFecCorrida(id.getFeccorrida()); + pesoOperacional.setLocalidade(parada); + pesoOperacional.setReceitaSaida(receitaSaida); + pesoOperacional.setReceitaChegada(receitaChegada); + pesoOperacional.setSoma(soma); + pesoOperacional.setPeso(peso); + + lsPesoOperacionalRelatorio.add(pesoOperacional); + } } return lsPesoOperacionalRelatorio; @@ -194,6 +235,7 @@ public class RelatorioOrigemDestino extends Relatorio { sql.append(" WHERE RS.ACTIVO = 1 "); sql.append(" AND TR.ACTIVO = 1 "); sql.append(" GROUP BY resultado.NOMBEMPRESA, resultado.CORRIDA_ID, resultado.FECHORSALIDA, resultado.ORIGEM, resultado.DESTINO, resultado.KM_TRAMO, resultado.RUTA_ID, resultado.DESCRUTA, resultado.INDSENTIDOIDA, resultado.ABSOLUTOS, resultado.RECEITA, resultado.PRECIOBASE "); + sql.append(" ORDER BY resultado.CORRIDA_ID "); return sql.toString(); } diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioOrigemDestino.jasper b/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioOrigemDestino.jasper index ecc8f102c..8e295df13 100644 Binary files a/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioOrigemDestino.jasper and b/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioOrigemDestino.jasper differ diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioOrigemDestino.jrxml b/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioOrigemDestino.jrxml index 1949d4ee9..1db3931f5 100644 --- a/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioOrigemDestino.jrxml +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioOrigemDestino.jrxml @@ -4,11 +4,13 @@ + + @@ -442,34 +444,47 @@ - - - + + + + + + - + + + - + + + - + + + - + + + - + + + diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/utilitarios/beans/PesoOperacional.java b/src/java/com/rjconsultores/ventaboletos/relatorios/utilitarios/beans/PesoOperacional.java index 6ef5761bc..2021b1b06 100644 --- a/src/java/com/rjconsultores/ventaboletos/relatorios/utilitarios/beans/PesoOperacional.java +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/utilitarios/beans/PesoOperacional.java @@ -1,14 +1,33 @@ package com.rjconsultores.ventaboletos.relatorios.utilitarios.beans; import java.math.BigDecimal; +import java.util.Date; public class PesoOperacional { + private Integer corridaId; + private Date fecCorrida; private String localidade; private BigDecimal receitaSaida; private BigDecimal receitaChegada; private BigDecimal soma; private BigDecimal peso; + public Integer getCorridaId() { + return corridaId; + } + + public void setCorridaId(Integer corridaId) { + this.corridaId = corridaId; + } + + public Date getFecCorrida() { + return fecCorrida; + } + + public void setFecCorrida(Date fecCorrida) { + this.fecCorrida = fecCorrida; + } + public String getLocalidade() { return localidade; } diff --git a/web/WEB-INF/i3-label_pt_BR.label b/web/WEB-INF/i3-label_pt_BR.label index 281407a95..b672fcebe 100644 --- a/web/WEB-INF/i3-label_pt_BR.label +++ b/web/WEB-INF/i3-label_pt_BR.label @@ -7,7 +7,7 @@ # . . = XXX #Versao do VentaBoleto: -versao = ADM_20130802_1RC191 +versao = ADM_20130802_1RC192 # MSG Defaut: MSG.CONSTRAINT.PORCENTAGEM = Os valores devem estar entre 0 e 100