Olá
Segue imagem
Estou precisando calcular o saldo desse extrato linha a linha e ir acumulando. Exemplo
Valor Saldo
500,00 C 500,00
1.000,00 C 1.500,00
450,90 D 1.049,10
Alguém tem alguma ideia de como fazer isso?
Olá
Segue imagem
Estou precisando calcular o saldo desse extrato linha a linha e ir acumulando. Exemplo
Valor Saldo
500,00 C 500,00
1.000,00 C 1.500,00
450,90 D 1.049,10
Alguém tem alguma ideia de como fazer isso?
Qual é o método de calculo, tens o fonte? Foi criada regra para desconto e compra ? Só criar um laço incrementando o valor[1] para o valor[2]… Se [D] - se [C] +
É justamente esse laço que não estou conseguindo fazer… O que fiz não acumula o valor ele fica repetindo o mesmo valor da coluna valor.
//aqui estou assumindo que C e D é um boolean, true quando for C
If (creditoOuDebito) valorIterado = valor;
else valorIterado = -valor;
saldoAtual = saldoLinhaAnterior + valorIterado
pra ajudar mais precisaria saber o código
Qual o código você precisa ver?
Tentei colocar um ajax no datatable chamando um método no bean
Mas da erro dizendo que load não é suportado pelo datatable. E não sei qual evento colocar.
<p:ajax event=“load"
listener=”#{bancolancamentosBean.fnCalculaSaldo}"
update=“tabela” />
if (bancoextrato.getCd().equals(“C”)){
saldo = saldo.add(valor);
} else {
saldo = saldo.subtract(valor);
}
como vc chama cada campo saldo de cada linha? para definir um valor ao campo saldo da linha 10 por exemplo?
Não entendi
Você quer dizer como preenchi o datatable?
Alex vc tem uma Classe que representa este dados não tem? Você poderia usar enum para o tipo C e D serão constantes e cada um tem seu calculo, olha um exemplo que peguei daqui:
exemplo:
public enum Cargo implements Comissao {
ATENDENTE {
@Override
public double calculaComissao(double valor) {
return valor * 0.1;
}
},
VENDEDOR {
@Override
public double calculaComissao(double valor) {
return valor * 0.15 + 5;
}
};
}
ai por exemplo no lugar de ATENDENTE vc colocaria C e assim por diante.
e na sua classe que representa esses dados, de acordo com o exemplo que estou dando:
public class Funcionario {
private String nome;
private double salario;
//este é o enum do exemplo
private Cargo cargo;
//métodos
}
Ai seria usado da seguinte maneira:
public class Venda {
private final Funcionario funcionario;
private final double valor;
public Venda(Funcionario funcionario, double valor) {
this.funcionario = funcionario;
this.valor = valor;
}
public double calculaComissao() {
double comissao = 0.0;
Cargo cargo = this.funcionario.getCargo();
//veja que o próprio enum já tem o calculaComissao proprio.
comissao = cargo.calculaComissao(valor);
return comissao;
}
}
Este é só uma ideia @alexpassos acessa o link e ver se tu consegue implementar no seu código. #Dica
Beleza vou ver o link e pesquisar sobre o enum
Retorno com o resultado
Blz alex pesquisa ai, se quiser posso te dar um exemplo já no seu modelo. Mas eu não entendi isso aqui:
o que é esse C
o D eu entendi como deposito é isso?
Mas pq o 500 não aumento, mas quando foi 1000 aumento para 1500
É um extrato bancário então:
C - Crédito
D- Débito
No caso do 500 foi o primeiro lançamento então:
0 + 500 = 500
500 + 1000 = 1500
1500 - 450,00 = 1050
1050 + 3000 = 4050
O que não estou conseguindo é fazer esse saldo acumulativo
Jeanderson_Silva
Não consegui achar nenhum exemplo que o enum guarde um valor anterior para calcular com o próximo.
No exemplo do link ele calcula a comissão e retorna o resultado mas não aguarda o valor.
Entendi mano, vou fazer um exemplo rápido aqui para te mostrar e ver se vc consegue tirar alguma ideia para usar no seu blz?
@alexpassos fiz um exemplo para vc no netbeans, aqui vai o projeto:
exemplo_enum.zip (22,0 KB)
Lembrando que é só um exemplo vc teria q adaptar de acordo com o dado q vem do banco de dados que vc usa, mas executando o main:
public static void main(String[] args) {
Extrato extrato = new Extrato();
//vamos fazer as operações., Veja q informamos qual o enum utilizado.
extrato.calcularSaldo(Operacao.CREDITO, 500, "teste crédito");
System.out.println("Historico: " + extrato.getHistorico() + "| Valor: " + extrato.getSaldoAnterior() + " |Saldo: " + extrato.getSaldoAtual());
extrato.calcularSaldo(Operacao.CREDITO, 1000, "crédito 2");
System.out.println("Historico: " + extrato.getHistorico() + "| Valor: " + extrato.getSaldoAnterior() + " |Saldo: " + extrato.getSaldoAtual());
//agora operação de debito.
extrato.calcularSaldo(Operacao.DEBITO, 450, "Débito Teste");
System.out.println("Historico: " + extrato.getHistorico() + "| Valor: " + extrato.getSaldoAnterior() + " |Saldo: " + extrato.getSaldoAtual());
//crédito dnv
extrato.calcularSaldo(Operacao.CREDITO, 3000, "Crédito");
System.out.println("Historico: " + extrato.getHistorico() + "| Valor: " + extrato.getSaldoAnterior() + " |Saldo: " + extrato.getSaldoAtual());
}
Teremos como resultado:
Historico: teste crédito| Valor: 0.0 |Saldo: 500.0
Historico: crédito 2| Valor: 500.0 |Saldo: 1500.0
Historico: Débito Teste| Valor: 1500.0 |Saldo: 1050.0
Historico: Crédito| Valor: 1050.0 |Saldo: 4050.0
Cara não funcionou ficou do mesmo jeito que eu tinha feito antes.
Olhe a imagem
Esta repetindo o o valor no saldo com a diferença de negativo e positivo.
Lembrando que estou usando PrimeFaces + Hibernate (Java Web)
Fiz as classes assim:
INTERFACES
public interface Saldo {
public BigDecimal CalcularSaldo(BigDecimal valorAnterior, BigDecimal valorAtual);
}//fim interface
ENUM
public enum CalculaSaldo implements Saldo {
CREDITO{
@Override public BigDecimal CalcularSaldo(BigDecimal valorAnterior, BigDecimal valorAtual){ return valorAnterior.add(valorAtual); }
},
DEBITO{@Override public BigDecimal CalcularSaldo(BigDecimal valorAnterior, BigDecimal valorAtual){ return valorAnterior.subtract(valorAtual); }
};
@Override
public String toString() {
switch (this) {
case CREDITO:
return “C”;
case DEBITO: return "D";
default: return null; }
}
}//fim enum
Classe Extrato
public class clsExtrato {
private BigDecimal saldoAtual;
private BigDecimal saldoAnterior;
private CalculaSaldo calculaSaldo;public clsExtrato() {
//saldo inicial com 0
this.saldoAtual = new BigDecimal(“0.00”);
}public void fnCalculaSaldo(CalculaSaldo operacao, BigDecimal valor){
//salva o saldo anterior antes de alterar. this.saldoAnterior = this.saldoAtual; //a operação que for passada fará o calculo para nós evitando um monte de if em várias partes do código. Veja no main! this.saldoAtual = operacao.CalcularSaldo(this.saldoAtual, valor); //salvo se caso nós precisar usar. this.calculaSaldo = operacao;
}
public BigDecimal getSaldoAtual() {
return saldoAtual;
}public void setSaldoAtual(BigDecimal saldoAtual) {
this.saldoAtual = saldoAtual;
}public BigDecimal getSaldoAnterior() {
return saldoAnterior;
}public void setSaldoAnterior(BigDecimal saldoAnterior) {
this.saldoAnterior = saldoAnterior;
}public CalculaSaldo getCalculaSaldo() {
return calculaSaldo;
}public void setCalculaSaldo(CalculaSaldo calculaSaldo) {
this.calculaSaldo = calculaSaldo;
}}//fim classe
E por fim chamei a assim pelo get que carrega o datatable (ArrayList)
public BigDecimal getSaldo() {
if (saldo == null){ saldo = new BigDecimal("0.00"); } clsExtrato cExtrato = new clsExtrato(); if (cd.equals("C")){ cExtrato.fnCalculaSaldo(CalculaSaldo.CREDITO, valor); } else { cExtrato.fnCalculaSaldo(CalculaSaldo.DEBITO, valor); } saldo = cExtrato.getSaldoAtual(); return saldo;
}
Mano ainda não mexi com Hibernate e nem PrimeFace, logo logo vou chegar neste estudo ai kk mas falando do seu código, onde vc sabe que vai um valor para a coluna Valor e outro vai para a coluna Saldo ?
Como eu acho q esse getSaldo() é chamado várias vezes, não poderia instanciar várias vezes Extrato, já que no caso ele sempre vai resetar. No exemplo que dei
o Extrato só é instanciado uma única vez, somente seus métodos que é executado várias vezes.
Eu percebi isso, esse classe é controler com get e set ela é gira em todas as linhas.
Estou vendo como faço para instância Extrato fora disso e passar por parâmetro.
Pois é mano, queria ajudar mais, só que eu não aprendi primafaces e nem hibernate, ainda vou ver eles. Mas qualquer coisa tenta achar uma maneira melhor mano, só cuidado para o código não virar uma enorme gambiarra kkkk
Valeu pela ajuda
#partiugambiarra #pog -programação orientada a gambiarra
rsrsrs
kkkkkkkkkkkkkk arrochaaaa