Menu

redondeo a cero decimales en propiedad persistente

2022-09-22
2026-05-18
  • Luis Rodriguez

    Luis Rodriguez - 2022-09-22

    Buenas tardes :
    ¿Como obtener un campo persistente con un valor redondeado a cero decimales? . Todos los ejemplos del tutorial muestran valores con decimales.
    He intentado con @Calculation , pero no puedo referenciar funciones "custom" con parametros , solo hace referencia al uso de "sum()".
    @DefaultValueCalculator funciona solo para valores iniciales (aparentemente).

    La propiedad de referencia según los tutoriales es :

    @ReadOnly
    @Stereotype("DINERO")
    @Calculation("sum(detalles.importe) * porcentajeIVA / 100")
    BigDecimal iva;

    Por ejemplo si da 1000.55 necesito redondear a 1001

    Tengo claro que se debe usar algo como iva.round(new MathContext(3, RoundingMode.HALF_UP))

    ¿Cual debe ser la estrategia de código que permita este tratamiento en OpenXava ?

    Gracias .

     
  • Javier Paniza

    Javier Paniza - 2022-09-26

    Hola Luis:

    Prueba esto:

    @Column(length=10, scale=0)
    BigDecimal iva;
    

    O esto:

    @Digits(integer=10, fraction=0) 
    BigDecimal iva;
    

    Ayuda a otros en este foro como yo te ayudo a ti.

     
  • Luis Rodriguez

    Luis Rodriguez - 2022-09-26

    He probado con:

    @ReadOnly
    @Stereotype("DINERO")
    @Calculation("sum(detalles.importe) * porcentajeIVA / 100")
    @Column(length=10, scale=0)
    BigDecimal iva;
    
    
    y no se produce ningun cambio
    
     
  • Luis Rodriguez

    Luis Rodriguez - 2022-09-26

    También he probado con:

    @Stereotype("DINERO")
    @Calculation("sum(detalles.importe) * porcentajeIVA / 100")
    @Digits(integer=10, fraction=0)
    BigDecimal iva;

    En la vista del formulario "Facturas", redondea correctamente , pero al grabar da el siguiente mensaje :

    • no es un valor válido para I.V.A. de Factura: valor numérico fuera de los límites (se esperaba <10 dígitos>.<0 dígitos)*
     

    Last edit: Luis Rodriguez 2022-09-26
  • Javier Paniza

    Javier Paniza - 2022-09-28

    Hola Luis:

    Tienes razón, lo he probado y el @Digits(integer=10, fraction=0) me da el mismo error que a ti. Por favor, añádelo como bug con un vínculo a este hilo para que lo arreglemos.

    Mientras tanto tendrás que usar una propiedad calculada para iva:
    https://openxava.org/OpenXavaDoc/docs/calculated-properties_es.html

    En una propiedad calculada, al usar Java, puedes hacer el redondeo que quieras.


    Ayuda a otros en este foro como yo te ayudo a ti.

     
  • Luis Rodriguez

    Luis Rodriguez - 2022-09-28

    Agradeceré un ejemplo ya que he intentado hacerlo con una propiedad calculada para iva y no me funciona. Gracias

     
  • Javier Paniza

    Javier Paniza - 2026-05-18

    Hola Luis:

    El bug ya está resuelto, ya se puede grabar sin errores cuando se hace un rendondeo con @Money y @Digits(fraction=0). El arreglo se incluirá en la versión 7.7.3, disponible en unas semanas.

     

Log in to post a comment.

MongoDB Logo MongoDB