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 DOCUMENTOCOMERCIAL_DETALLES
SET PRECIOPORUNIDAD = (
SELECT PRECIO FROM PRODUCTO
WHERE NUMERO = PRODUCTO_NUMERO
)
Ahora actualizamos porcentajeIVA para todas las facturas:
UPDATE DOCUMENTOCOMERCIAL
SET PORCENTAJEIVA = 21
Lo siguiente es actualizar iva:
UPDATE DOCUMENTOCOMERCIAL
SET IVA = (
SELECT SUM(PRECIOPORUNIDAD * CANTIDAD) * 0.21
FROM DOCUMENTOCOMERCIAL_DETALLES D
WHERE D.DOCUMENTOCOMERCIAL_OID = DOCUMENTOCOMERCIAL.OID
)
Finalmente, actualizamos importeTotal en todas las facturas:
UPDATE DOCUMENTOCOMERCIAL
SET IMPORTETOTAL = (
SELECT SUM(PRECIOPORUNIDAD * CANTIDAD) * 1.21
FROM 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 que aparece en la sección "Propiedades de total de una colección" que puedes encontrar en la lección
12. @Calculation y totales de colección, incluso para facturas y pedidos ya existentes.