diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioAproveitamentoFinanceiro.java b/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioAproveitamentoFinanceiro.java index 4bfbf053f..25a8df641 100644 --- a/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioAproveitamentoFinanceiro.java +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioAproveitamentoFinanceiro.java @@ -41,6 +41,8 @@ public class RelatorioAproveitamentoFinanceiro extends Relatorio { sql.append(" count( c.caja_id) as passageiros, "); sql.append(" sum( c.PRECIOPAGADO )as valor, "); sql.append(" to_char( c.FECHORVENTA, 'D') as dia, "); + // Quantidade de dias da semana diferente vendidas + // "WW" Esse parâmetro para o to_char tras o dia da semana da data sql.append(" coalesce(count(DISTINCT to_char( c.FECHORVENTA, 'WW')), 0) as qtde, "); sql.append(" r.indsentidoida as sentido, "); sql.append(" da.cantasientos as assentos, "); @@ -104,7 +106,7 @@ public class RelatorioAproveitamentoFinanceiro extends Relatorio { dataResult.put("SENTIDO", rset.getString("sentido")); dataResult.put("SERVICO", rset.getString("servico")); dataResult.put("HORARIO", rset.getString("horario")); - + //Quantidade de assentos do diagrana autobus BigDecimal assentos = limpaNulo(rset.getBigDecimal("assentos")); BigDecimal tarifa = limpaNulo(rset.getBigDecimal("tarifa")); BigDecimal totPassageiros = BigDecimal.ZERO; @@ -169,37 +171,37 @@ public class RelatorioAproveitamentoFinanceiro extends Relatorio { dataResult.put("SEG_RECEITA_OPE", segReceitaOpe); dataResult.put("SEG_QTDE", new BigDecimal(segQtde)); dataResult.put("SEG_TOT", segTot); - dataResult.put("SEG_FIN", calculaMedia(segReceitaOpe, tarifa, segQtde, segTot)); + dataResult.put("SEG_FIN", calculaMedia(segReceitaOpe, tarifa, segQtde, assentos)); dataResult.put("TER_RECEITA_OPE", terReceitaOpe); dataResult.put("TER_QTDE", new BigDecimal(terQtde)); dataResult.put("TER_TOT", terTot); - dataResult.put("TER_FIN", calculaMedia(terReceitaOpe, tarifa, terQtde, terTot)); + dataResult.put("TER_FIN", calculaMedia(terReceitaOpe, tarifa, terQtde, assentos)); dataResult.put("QUA_RECEITA_OPE", quaReceitaOpe); dataResult.put("QUA_QTDE", new BigDecimal(quaQtde)); dataResult.put("QUA_TOT", quaTot); - dataResult.put("QUA_FIN", calculaMedia(quaReceitaOpe, tarifa, quaQtde, quaTot)); + dataResult.put("QUA_FIN", calculaMedia(quaReceitaOpe, tarifa, quaQtde, assentos)); dataResult.put("QUI_RECEITA_OPE", quiReceitaOpe); dataResult.put("QUI_QTDE", new BigDecimal(quiQtde)); dataResult.put("QUI_TOT", quiTot); - dataResult.put("QUI_FIN", calculaMedia(quiReceitaOpe, tarifa, quiQtde, quiTot)); + dataResult.put("QUI_FIN", calculaMedia(quiReceitaOpe, tarifa, quiQtde, assentos)); dataResult.put("SEX_RECEITA_OPE", sexReceitaOpe); dataResult.put("SEX_QTDE", new BigDecimal(sexQtde)); dataResult.put("SEX_TOT", sexTot); - dataResult.put("SEX_FIN", calculaMedia(sexReceitaOpe, tarifa, sexQtde, sexTot)); + dataResult.put("SEX_FIN", calculaMedia(sexReceitaOpe, tarifa, sexQtde, assentos)); dataResult.put("SAB_RECEITA_OPE", sabReceitaOpe); dataResult.put("SAB_QTDE", new BigDecimal(sabQtde)); dataResult.put("SAB_TOT", sabTot); - dataResult.put("SAB_FIN", calculaMedia(sabReceitaOpe, tarifa, sabQtde, sabTot)); + dataResult.put("SAB_FIN", calculaMedia(sabReceitaOpe, tarifa, sabQtde, assentos)); dataResult.put("DOM_RECEITA_OPE", domReceitaOpe); dataResult.put("DOM_QTDE", new BigDecimal(domQtde)); dataResult.put("DOM_TOT", domTot); - dataResult.put("DOM_FIN", calculaMedia(domReceitaOpe, tarifa, domQtde, domTot)); + dataResult.put("DOM_FIN", calculaMedia(domReceitaOpe, tarifa, domQtde, assentos)); this.dados.add(dataResult); } @@ -222,9 +224,21 @@ public class RelatorioAproveitamentoFinanceiro extends Relatorio { } } + /** + * Faz cálculo da média na seguinte fórmula (Tot. Rceita / (tarifa * qtde * assentos)) + * (1427,17 / (108,30*1*42)) * 100 + * @param totReceita + * @param tarifa + * @param qtde (Quantidade viagens do dia da semana no periodo. + * Ex 01 a 07, sendo 01 Domingo e 07 Sábado, terá sempre quantidade igual a 7 se o serviço for executado todo dia) + * @param tot + * @return + */ private BigDecimal calculaMedia(BigDecimal totReceita, BigDecimal tarifa, Integer qtde, BigDecimal tot) { if( qtde.intValue() != 0 && tot.intValue() !=0 ) { + //Multiplica a tarifa pela quantidade de viagens no dia da semana (Segunda, terça...) no período BigDecimal dividendo = tarifa.multiply(new BigDecimal(qtde)); + //Multiplica o dividendo pelo total de passegeiros dividendo = dividendo.multiply(tot); if(dividendo.intValue() == 0 ) { @@ -232,8 +246,7 @@ public class RelatorioAproveitamentoFinanceiro extends Relatorio { } BigDecimal fin = totReceita.divide(dividendo, 4, BigDecimal.ROUND_HALF_UP); - fin = fin.multiply(new BigDecimal(new Long(100L))); - fin.setScale(2); + fin = fin.multiply(new BigDecimal(new Long(100L))).setScale(2); return fin; }else{ return BigDecimal.ZERO; diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioAproveitamentoFinanceiro.jasper b/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioAproveitamentoFinanceiro.jasper index b4d754497..0a0fea011 100644 Binary files a/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioAproveitamentoFinanceiro.jasper and b/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioAproveitamentoFinanceiro.jasper differ diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioAproveitamentoFinanceiro.jrxml b/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioAproveitamentoFinanceiro.jrxml index 221a5bad2..14396e7ba 100644 --- a/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioAproveitamentoFinanceiro.jrxml +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioAproveitamentoFinanceiro.jrxml @@ -2,7 +2,7 @@ - +