Si no te gustan los videos sigue
las instrucciones a continuación.
Evolución
de esquema manual
Cuando usamos cosas como
@Calculation o
@DefaultValueCalculator
la evolución de esquema automática que provee OpenXava se nos queda corta,
porque añade una nueva columna cuando tu añades una nueva propiedad, pero
no rellena la columna con los valores correctos. En este caso hemos
añadido varias propiedades persistentes con
@Calculation cuyos
valores no se recalculan hasta que el usuario interactua con el registro.
Además, tenemos un valor por defecto para
porcentajeIVA que sólo
tiene efecto cuando el usuario crea un nuevo registro pero no en los
registros ya existentes. Hemos de rellenar las nuevas columnas con valores
razonables.
Dado que estamos en una etapa
temprana del desarrollo una buena opción sería borrar todos los
registros, pero es seguro que esto no es una buena idea para producción,
por tanto vamos a ajustar nuestra base de datos al nuevo código sin
perder información para ilustrar la evolución manual de esquema.
Lo más fácil es usar la propia
aplicación para hacer las actualizaciones. Vamos a hacerlo para
actualizar los precios de los productos. Para que las nuevas propiedades
calculadas funcionen bien todos los productos deberían tener un precio,
por tanto ve al módulo Producto con tu navegador y asegurate de
que todos los productos tienen precio:
Si algún producto no tiene
precio edítalo e introduce un precio.
Los siguientes cambios no son
tan sencillos, por lo que vamos a ejecutar sentencias SQL contra nuestra
base de datos. Para ejecutar estas sentencias SQL, primero asegurate de
que tu aplicación se está ejecutando, después usa la opción de menú
OpenXava
> Database Manager de OpenXava Studio::

Ahora estás listo para escribir y ejecutar SQLs. Primero, establecemos
el valor para la columna
precioPorUnidad en todos los detalles:
UPDATE FACTURACION.DOCUMENTOCOMERCIAL_DETALLES
SET PRECIOPORUNIDAD = (
SELECT PRECIO FROM FACTURACION.PRODUCTO
WHERE NUMERO = PRODUCTO_NUMERO
)
Ahora actualizamos porcentajeIVA
para todas las facturas:
UPDATE FACTURACION.DOCUMENTOCOMERCIAL
SET PORCENTAJEIVA = 21
Lo siguiente es actualizar iva:
UPDATE FACTURACION.DOCUMENTOCOMERCIAL
SET IVA = (
SELECT SUM(PRECIOPORUNIDAD * CANTIDAD) * 0.21
FROM FACTURACION.DOCUMENTOCOMERCIAL_DETALLES D
WHERE D.DOCUMENTOCOMERCIAL_OID = DOCUMENTOCOMERCIAL.OID
)
Finalmente, actualizamos importeTotal
en todas las facturas:
UPDATE FACTURACION.DOCUMENTOCOMERCIAL
SET IMPORTETOTAL = (
SELECT SUM(PRECIOPORUNIDAD * CANTIDAD) * 1.21
FROM FACTURACION.DOCUMENTOCOMERCIAL_DETALLES D
WHERE D.DOCUMENTOCOMERCIAL_OID = DOCUMENTOCOMERCIAL.OID
)
Ten cuidado, las sentencias de
arriba funciona bien con HSQLDB, la base de datos incluida con OpenXava.
Si usas otra base de datos probablemente tengas que adaptar la sintaxis.
Después de ejecutar estas sentencias puedes probar tu aplicación.
Debería funcionar como en la figura al principio de la sección
"Propiedades de total de una colección" incluso para facturas y pedidos
ya existentes.