gleimar 2013-08-30 22:37:49 +00:00
parent 859d06be00
commit 14637a3a75
6 changed files with 147 additions and 48 deletions

View File

@ -41,7 +41,7 @@ public class RelatorioOrigemDestino extends Relatorio {
StringBuilder sql = new StringBuilder();
if (mostratTrechosSemMovimento) {
sql.append(" SELECT TRAMOS.*, NVL(SOMA.RECEITA, 0) RECEITA ");
sql.append(" SELECT TRAMOS.*, NVL(SOMA.RECEITA, 0) RECEITA,TRAMOS.SECO,TRAMOS.SECD ");
sql.append(" FROM ");
sql.append(" ( ");
sql.append(" SELECT ");
@ -84,6 +84,8 @@ public class RelatorioOrigemDestino extends Relatorio {
sql.append(" O.CVEPARADA CVE_ORIGEM, ");
sql.append(" O.DESCPARADA ORIGEM, ");
sql.append(" D.CVEPARADA CVE_DESTINO, ");
sql.append(" RS.NUMSECUENCIA SECO, ");
sql.append(" RSD.NUMSECUENCIA SECD, ");
sql.append(" D.DESCPARADA DESTINO ");
sql.append(" FROM CORRIDA CO ");
sql.append(" INNER JOIN RUTA R ON R.RUTA_ID=CO.RUTA_ID ");
@ -91,7 +93,12 @@ public class RelatorioOrigemDestino extends Relatorio {
sql.append(" INNER JOIN TRAMO TR ON TR.TRAMO_ID=RC.TRAMO_ID ");
sql.append(" INNER JOIN PARADA O ON O.PARADA_ID = TR.ORIGEN_ID ");
sql.append(" INNER JOIN PARADA D ON D.PARADA_ID = TR.DESTINO_ID ");
sql.append(" WHERE R.ACTIVO = 1 AND RC.ACTIVO = 1 AND TR.ACTIVO = 1 ");
sql.append(" LEFT JOIN RUTA_SECUENCIA RS ON RS.RUTA_ID = CO.RUTA_ID ");
sql.append(" INNER JOIN TRAMO T ON T.TRAMO_ID = RS.TRAMO_ID AND T.ORIGEN_ID = TR.ORIGEN_ID ");
sql.append(" LEFT JOIN RUTA_SECUENCIA RSD ON RSD.RUTA_ID = CO.RUTA_ID ");
sql.append(" INNER JOIN TRAMO TD ON TD.TRAMO_ID = RSD.TRAMO_ID AND TD.DESTINO_ID = TR.DESTINO_ID ");
sql.append(" WHERE R.ACTIVO = 1 AND RC.ACTIVO = 1 AND TR.ACTIVO = 1 AND RS.activo = 1 and rsd.activo = 1 ");
if (!corridasIds.equals("Todas")) {
sql.append(" AND CO.CORRIDA_ID IN (").append(corridasIds).append(")");
}
@ -108,11 +115,20 @@ public class RelatorioOrigemDestino extends Relatorio {
sql.append(" O.DESCPARADA ORIGEM, ");
sql.append(" D.CVEPARADA CVE_DESTINO, ");
sql.append(" D.DESCPARADA DESTINO, ");
sql.append(" RS.NUMSECUENCIA SECO, ");
sql.append(" RSD.NUMSECUENCIA SECD, ");
sql.append(" SUM(CA.PRECIOPAGADO) RECEITA ");
sql.append(" FROM BOLETO CA ");
sql.append(" INNER JOIN PARADA O ON O.PARADA_ID = CA.ORIGEN_ID ");
sql.append(" INNER JOIN PARADA D ON D.PARADA_ID = CA.DESTINO_ID ");
sql.append(" LEFT JOIN CORRIDA CO ON CO.CORRIDA_ID = CA.CORRIDA_ID AND CO.FECCORRIDA = CA.FECCORRIDA ");
sql.append(" LEFT JOIN RUTA_SECUENCIA RS ON RS.RUTA_ID = CO.RUTA_ID ");
sql.append(" INNER JOIN TRAMO T ON T.TRAMO_ID = RS.TRAMO_ID AND T.ORIGEN_ID = CA.ORIGEN_ID ");
sql.append(" LEFT JOIN RUTA_SECUENCIA RSD ON RSD.RUTA_ID = CO.RUTA_ID ");
sql.append(" INNER JOIN TRAMO TD ON TD.TRAMO_ID = RSD.TRAMO_ID AND TD.DESTINO_ID = CA.DESTINO_ID ");
sql.append(" WHERE CA.ACTIVO = 1 ");
sql.append(" AND RS.ACTIVO = 1 ");
sql.append(" AND CA.MOTIVOCANCELACION_ID IS NULL ");
sql.append(" AND CA.PRECIOBASE IS NOT NULL ");
if (bilhetesGratuitos) {
@ -131,8 +147,11 @@ public class RelatorioOrigemDestino extends Relatorio {
sql.append(" O.CVEPARADA, ");
sql.append(" O.DESCPARADA, ");
sql.append(" D.CVEPARADA, ");
sql.append(" RS.NUMSECUENCIA, ");
sql.append(" RSD.NUMSECUENCIA, ");
sql.append(" D.DESCPARADA ");
sql.append(" ORDER BY CA.CORRIDA_ID ");
sql.append(" ORDER BY CA.CORRIDA_ID,SECD ");
}
Connection conexao = getConexao();
@ -143,8 +162,8 @@ public class RelatorioOrigemDestino extends Relatorio {
ResultSet rset = null;
rset = stmt.executeQuery();
Map<Integer, Map<String, BigDecimal>> mapPorCorridaReceitaSaida = new HashMap<Integer, Map<String, BigDecimal>>();
Map<Integer, Map<String, BigDecimal>> mapPorCorridaReceitaChegada = new HashMap<Integer, Map<String, BigDecimal>>();
Map<Integer, Map<ParadaRelatorioOD, BigDecimal>> mapPorCorridaReceitaSaida = new HashMap<Integer, Map<ParadaRelatorioOD, BigDecimal>>();
Map<Integer, Map<ParadaRelatorioOD, BigDecimal>> mapPorCorridaReceitaChegada = new HashMap<Integer, Map<ParadaRelatorioOD, BigDecimal>>();
Map<Integer, BigDecimal> mapTotalReceitaCorrida = new HashMap<Integer, BigDecimal>();
List<Integer> lsCorridaIds = new ArrayList<Integer>();
while (rset.next()) {
@ -154,15 +173,15 @@ public class RelatorioOrigemDestino extends Relatorio {
lsCorridaIds.add(idCorrida);
}
Map<String, BigDecimal> mapReceitaSaida = mapPorCorridaReceitaSaida.get(idCorrida);
Map<String, BigDecimal> mapReceitaChegada = mapPorCorridaReceitaChegada.get(idCorrida);
Map<ParadaRelatorioOD, BigDecimal> mapReceitaSaida = mapPorCorridaReceitaSaida.get(idCorrida);
Map<ParadaRelatorioOD, BigDecimal> mapReceitaChegada = mapPorCorridaReceitaChegada.get(idCorrida);
if (mapReceitaSaida == null) {
mapReceitaSaida = new HashMap<String, BigDecimal>();
mapReceitaSaida = new HashMap<ParadaRelatorioOD, BigDecimal>();
}
if (mapReceitaChegada == null) {
mapReceitaChegada = new HashMap<String, BigDecimal>();
mapReceitaChegada = new HashMap<ParadaRelatorioOD, BigDecimal>();
}
BigDecimal receita = rset.getBigDecimal("RECEITA");
@ -172,27 +191,22 @@ public class RelatorioOrigemDestino extends Relatorio {
}
totalReceita = totalReceita.add(receita);
mapTotalReceitaCorrida.put(idCorrida, totalReceita);
String cveOrigem = rset.getString("CVE_ORIGEM");
String origem = rset.getString("ORIGEM");
String chaveOrigem = cveOrigem + " - " + origem;
String cveDestino = rset.getString("CVE_DESTINO");
String destino = rset.getString("DESTINO");
String chaveDestino = cveDestino + " - " + destino;
BigDecimal receitaSaida = mapReceitaSaida.get(chaveOrigem);
ParadaRelatorioOD paradaOrigem = new ParadaRelatorioOD(rset.getString("ORIGEM"), rset.getString("CVE_ORIGEM"), rset.getInt("SECO"));
ParadaRelatorioOD paradaDestino = new ParadaRelatorioOD(rset.getString("DESTINO"), rset.getString("CVE_DESTINO"), rset.getInt("SECD"));
BigDecimal receitaSaida = mapReceitaSaida.get(paradaOrigem);
if (receitaSaida != null) {
mapReceitaSaida.put(chaveOrigem, receita.add(receitaSaida));
mapReceitaSaida.put(paradaOrigem, receita.add(receitaSaida));
} else {
mapReceitaSaida.put(chaveOrigem, receita);
mapReceitaSaida.put(paradaOrigem, receita);
}
BigDecimal receitaChegada = mapReceitaChegada.get(chaveDestino);
BigDecimal receitaChegada = mapReceitaChegada.get(paradaDestino);
if (receitaChegada != null) {
mapReceitaChegada.put(chaveDestino, receita.add(receitaChegada));
mapReceitaChegada.put(paradaDestino, receita.add(receitaChegada));
} else {
mapReceitaChegada.put(chaveDestino, receita);
mapReceitaChegada.put(paradaDestino, receita);
}
mapPorCorridaReceitaSaida.put(idCorrida, mapReceitaSaida);
@ -201,21 +215,21 @@ public class RelatorioOrigemDestino extends Relatorio {
List<PesoOperacional> lsPesoOperacionalRelatorio = new ArrayList<PesoOperacional>();
for (Integer idCorrida : lsCorridaIds) {
Map<String, BigDecimal> mapReceitaSaida = mapPorCorridaReceitaSaida.get(idCorrida);
Map<String, BigDecimal> mapReceitaChegada = mapPorCorridaReceitaChegada.get(idCorrida);
Map<ParadaRelatorioOD, BigDecimal> mapReceitaSaida = mapPorCorridaReceitaSaida.get(idCorrida);
Map<ParadaRelatorioOD, BigDecimal> mapReceitaChegada = mapPorCorridaReceitaChegada.get(idCorrida);
List<String> lsTodasParadas = new ArrayList<String>();
for (String parada : mapReceitaChegada.keySet()) {
List<ParadaRelatorioOD> lsTodasParadas = new ArrayList<ParadaRelatorioOD>();
for (ParadaRelatorioOD parada : mapReceitaChegada.keySet()) {
lsTodasParadas.add(parada);
}
for (String parada : mapReceitaSaida.keySet()) {
for (ParadaRelatorioOD parada : mapReceitaSaida.keySet()) {
if (!lsTodasParadas.contains(parada)) {
lsTodasParadas.add(parada);
}
}
BigDecimal totalReceita = mapTotalReceitaCorrida.get(idCorrida);
for (String parada : lsTodasParadas) {
for (ParadaRelatorioOD 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);
@ -223,7 +237,8 @@ public class RelatorioOrigemDestino extends Relatorio {
PesoOperacional pesoOperacional = new PesoOperacional();
pesoOperacional.setCorridaId(idCorrida);
pesoOperacional.setLocalidade(parada);
pesoOperacional.setLocalidade(parada.getCveParada() + " - " +parada.getDescParada());
pesoOperacional.setSecuencia(parada.getNumSecuencia());
pesoOperacional.setReceitaSaida(receitaSaida);
pesoOperacional.setReceitaChegada(receitaChegada);
pesoOperacional.setSoma(soma);
@ -411,4 +426,72 @@ public class RelatorioOrigemDestino extends Relatorio {
return sql;
}
public class ParadaRelatorioOD{
private String descParada;
private String cveParada;
private Integer numSecuencia;
public ParadaRelatorioOD(String descParada, String cveParada, Integer numSecuencia) {
super();
this.descParada = descParada;
this.cveParada = cveParada;
this.numSecuencia = numSecuencia;
}
public String getDescParada() {
return descParada;
}
public void setDescParada(String descParada) {
this.descParada = descParada;
}
public Integer getNumSecuencia() {
return numSecuencia;
}
public void setNumSecuencia(Integer numSecuencia) {
this.numSecuencia = numSecuencia;
}
public String getCveParada() {
return cveParada;
}
public void setCveParada(String cveParada) {
this.cveParada = cveParada;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + getOuterType().hashCode();
result = prime * result + ((cveParada == null) ? 0 : cveParada.hashCode());
result = prime * result + ((descParada == null) ? 0 : descParada.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
ParadaRelatorioOD other = (ParadaRelatorioOD) obj;
if (!getOuterType().equals(other.getOuterType()))
return false;
if (cveParada == null) {
if (other.cveParada != null)
return false;
} else if (!cveParada.equals(other.cveParada))
return false;
if (descParada == null) {
if (other.descParada != null)
return false;
} else if (!descParada.equals(other.descParada))
return false;
return true;
}
private RelatorioOrigemDestino getOuterType() {
return RelatorioOrigemDestino.this;
}
}
}

View File

@ -1,16 +1,22 @@
<?xml version="1.0" encoding="UTF-8"?>
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="RelatorioOrigemDestino" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="84b9dfcf-8ec5-4f51-80cc-7339e3b158b4">
<property name="ireport.zoom" value="1.0"/>
<property name="ireport.zoom" value="1.3310000000000028"/>
<property name="ireport.x" value="0"/>
<property name="ireport.y" value="0"/>
<property name="ireport.y" value="153"/>
<subDataset name="peso_operacional" uuid="6107709b-669e-4e25-b14f-19ae373fd33c">
<parameter name="corrida_id_relatorio" class="java.math.BigDecimal"/>
<queryString>
<![CDATA[]]>
</queryString>
<field name="localidade" class="java.lang.String"/>
<field name="receitaSaida" class="java.math.BigDecimal"/>
<field name="receitaChegada" class="java.math.BigDecimal"/>
<field name="soma" class="java.math.BigDecimal"/>
<field name="peso" class="java.math.BigDecimal"/>
<field name="corridaId" class="java.lang.Integer"/>
<field name="secuencia" class="java.lang.Integer"/>
<sortField name="secuencia"/>
<filterExpression><![CDATA[$F{corridaId} ==$P{corrida_id_relatorio}.intValue()]]></filterExpression>
</subDataset>
<parameter name="SQL" class="java.lang.String"/>
<parameter name="DATA_DE" class="java.lang.String"/>
@ -601,57 +607,57 @@
<detail>
<band height="21" splitType="Stretch">
<textField>
<reportElement uuid="bf929e3d-cad8-411d-ba89-1d9cb35c8c00" x="0" y="0" width="43" height="20"/>
<reportElement uuid="bf929e3d-cad8-411d-ba89-1d9cb35c8c00" x="0" y="0" width="44" height="21"/>
<textElement/>
<textFieldExpression><![CDATA[$F{ORIGEM}]]></textFieldExpression>
</textField>
<textField>
<reportElement uuid="eab5b297-016b-404a-8b09-db55f57f1bfe" x="44" y="0" width="50" height="20"/>
<reportElement uuid="eab5b297-016b-404a-8b09-db55f57f1bfe" x="44" y="0" width="50" height="21"/>
<textElement/>
<textFieldExpression><![CDATA[$F{DESTINO}]]></textFieldExpression>
</textField>
<textField pattern="#,##0.00">
<reportElement uuid="bdf4a2b0-f041-47c1-962c-10df1c9fbec2" x="133" y="0" width="48" height="20"/>
<reportElement uuid="bdf4a2b0-f041-47c1-962c-10df1c9fbec2" x="133" y="0" width="48" height="21"/>
<textElement textAlignment="Right"/>
<textFieldExpression><![CDATA[$F{PRECIOBASE}]]></textFieldExpression>
</textField>
<textField>
<reportElement uuid="c45c70fb-1c4e-46a8-9a39-f804605e85b5" x="181" y="0" width="45" height="20"/>
<reportElement uuid="c45c70fb-1c4e-46a8-9a39-f804605e85b5" x="181" y="0" width="45" height="21"/>
<textElement textAlignment="Right"/>
<textFieldExpression><![CDATA[$F{ABSOLUTOS}]]></textFieldExpression>
</textField>
<textField pattern="#,##0.00">
<reportElement uuid="c88714a3-010d-4e26-801d-8982acc15a19" x="226" y="1" width="60" height="20"/>
<reportElement uuid="c88714a3-010d-4e26-801d-8982acc15a19" x="226" y="0" width="60" height="21"/>
<textElement textAlignment="Right"/>
<textFieldExpression><![CDATA[$F{RECEITA}]]></textFieldExpression>
</textField>
<textField>
<reportElement uuid="87a6161e-e6ed-4330-bbff-34a87a5fb1a6" x="94" y="0" width="39" height="20"/>
<reportElement uuid="87a6161e-e6ed-4330-bbff-34a87a5fb1a6" x="94" y="0" width="39" height="21"/>
<textElement textAlignment="Right"/>
<textFieldExpression><![CDATA[$F{KM_TRAMO}]]></textFieldExpression>
</textField>
<textField pattern="#,##0.00">
<reportElement uuid="5ad372c0-5127-4441-aae3-be6ca2949a93" x="334" y="1" width="60" height="20"/>
<reportElement uuid="5ad372c0-5127-4441-aae3-be6ca2949a93" x="334" y="0" width="60" height="21"/>
<textElement textAlignment="Right"/>
<textFieldExpression><![CDATA[$V{equivalente}]]></textFieldExpression>
</textField>
<textField pattern="#,##0.00">
<reportElement uuid="edc8f07c-0a7b-45c2-8280-ebd8584e60c6" x="394" y="1" width="69" height="20"/>
<reportElement uuid="edc8f07c-0a7b-45c2-8280-ebd8584e60c6" x="394" y="0" width="69" height="21"/>
<textElement textAlignment="Right"/>
<textFieldExpression><![CDATA[$V{pax_km}]]></textFieldExpression>
</textField>
<textField pattern="#,##0.00">
<reportElement uuid="0fe8352f-f787-46b6-adcb-e8dda60b4d9d" x="286" y="1" width="48" height="20"/>
<reportElement uuid="0fe8352f-f787-46b6-adcb-e8dda60b4d9d" x="286" y="0" width="48" height="21"/>
<textElement textAlignment="Right"/>
<textFieldExpression><![CDATA[$V{rec_abs}]]></textFieldExpression>
</textField>
<textField pattern="#,##0.00">
<reportElement uuid="22d22d0b-ed49-44a7-8725-c4a62b7fbb41" x="463" y="1" width="44" height="20"/>
<reportElement uuid="22d22d0b-ed49-44a7-8725-c4a62b7fbb41" x="463" y="0" width="44" height="21"/>
<textElement textAlignment="Right"/>
<textFieldExpression><![CDATA[$V{porc_abs}]]></textFieldExpression>
</textField>
<textField pattern="#,##0.00">
<reportElement uuid="5ecd33c0-2648-482f-b87a-d5197d2f193e" x="507" y="1" width="48" height="20"/>
<reportElement uuid="5ecd33c0-2648-482f-b87a-d5197d2f193e" x="507" y="0" width="48" height="21"/>
<textElement textAlignment="Right"/>
<textFieldExpression><![CDATA[$V{por_equivalente}]]></textFieldExpression>
</textField>

View File

@ -108,10 +108,10 @@ public abstract class Relatorio {
byte[] conteudo = null;
try {
this.processaParametros();
if (this.render == null)
if (this.render == null){
this.processaParametros();
this.render = new RenderRelatorioJasper(this);
}
conteudo = this.render.render(saida);

View File

@ -7,6 +7,7 @@ public class PesoOperacional {
private Integer corridaId;
private Date fecCorrida;
private String localidade;
private Integer secuencia;
private BigDecimal receitaSaida;
private BigDecimal receitaChegada;
private BigDecimal soma;
@ -67,4 +68,13 @@ public class PesoOperacional {
public void setPeso(BigDecimal peso) {
this.peso = peso;
}
public Integer getSecuencia() {
return secuencia;
}
public void setSecuencia(Integer secuencia) {
this.secuencia = secuencia;
}
}

View File

@ -7,7 +7,7 @@
# <controler>. <id>. <propiedade> = XXX
#Versao do VentaBoleto:
versao = ADM_20130829_1RC216
versao = ADM_20130830_1RC217
# MSG Defaut:
MSG.CONSTRAINT.PORCENTAGEM = Os valores devem estar entre 0 e 100