Boa Noite!
Estou implementando o padrão Money, ta funcionando e tudo, mas, sempre tem
um, porém, fiquei com algumas duvidas, vou postar o código e logo abaixo as
dúvidas.
Classe Money retirei alguns métodos para focar nas dúvidas.
@Embeddable
public final class Dinheiro {
private static final long FATOR_FRACIONARIO = 100;
private static final String SEPARADOR_DECIMAL = ",";
private Currency moeda = Currency.getInstance(new Locale("pt", "BR"));
@Access(AccessType.FIELD)
private long valor;
private Dinheiro(long valor, Currency moeda) {
this.valor = valor;
this.moeda = moeda;
}
public static Dinheiro valueOf(String valor, Currency moeda) {
return valueOf(new BigDecimal(valor), moeda);
}
private static Dinheiro valueOf(BigDecimal valor, Currency moeda) {
//codigo...
}
@Transient
public Currency getMoeda() {
return moeda;
}
public long getValor() {
return valor;
}
@Transient
public String getValorFormatado() {
DecimalFormat dfUnidade = new DecimalFormat("00");
DecimalFormat dfDecimal = new DecimalFormat("#.###");
return dfDecimal.format(this.valor / FATOR_FRACIONARIO) + SEPARADOR_DECIMAL
+ dfUnidade.format(this.valor % FATOR_FRACIONARIO);
}
}
Uma classe utilizando:
@Entity
public class Estoque implements Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
private Long id;
private Dinheiro precoUnitario;
private Dinheiro precoMedio;
private Produto produto;
public Estoque() {
}
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
@OneToOne
@JoinColumn(name = "fk_produto")
@ForeignKey(name = "produto_fk")
public Produto getProduto() {
return produto;
}
public void setProduto(Produto produto) {
this.produto = produto;
}
@Embedded
@AttributeOverrides( {
@AttributeOverride(name="valor", column = @Column(name="preco_unitario") )
} )
public Dinheiro getPrecoUnitario() {
return precoUnitario;
}
public void setPrecoUnitario(Dinheiro precoUnitario) {
this.precoUnitario = precoUnitario;
}
@Embedded
@AttributeOverrides( {
@AttributeOverride(name="valor", column = @Column(name="preco_medio") )
} )
public Dinheiro getPrecoMedio() {
return precoMedio;
}
public void setPreco(Dinheiro precoMedio) {
this.precoMedio = precoMedio;
}
}
fica a dica ai para quem precisar de mais de um @Embedded numa classe.
Agora as dúvidas:
quando persisti o codigo abaixo:
Estoque estoque = new Estoque();
Dinheiro d1 = Dinheiro.valueOf("25", moeda);
Dinheiro d2 = Dinheiro.valueOf("1", moeda);
d2 = d2.somar(Dinheiro.valueOf("075", moeda));
estoque.setPrecoUnitario(d1);
estoque.setPrecoMedio(d2);
no banco, a soma de 1 + 075 resultou em: 760000
a dúvida é como um DBA vai trabalhar com esse valor e como vou
somar algo como: 0,34 + 22,99; como o usuario vai digitar esses
valores na pagina JSF? Se for preciso posto os metodos de
somar, subtrair...