Las bajas lógicas y el campo active en Odoo

19 de junio de 2023 por
Gustavo Orrillo
| Sin comentarios aún
 

Odoo maneja tres formas de borrar registros. La primera es el borrado físico del registro en la base de datos (el método unlink del ORM). El cual a veces se lo puede hacer (transacciones que estan en estado borrador u datos maestros aún no utilizados en transacciones) pero la mayoría de las veces es imposible hacerlo. La segunda manera es en las transacciones, cancelar las mismas (por ejemplo; cancelar una factura, una orden de venta o una orden de compra, por ejemplo). Lo cual es una forma muy prolija de dar de baja información ya que las transacciones canceladas no deberían tomarse en cuenta (por procedimiento) en la operación diaria.

La tercer manera es la baja lógica, la cual se aplica a datos maestos. Si uno analiza la estructura de los datos maestros (por ejemplo producto, cuenta contable, contacto) se encontrará con un campo llamado active el cual indica si el registro fue dado de alta o no. 

Por ejemplo, no queremos trabajar más con un cliente y no queremos que el mismo tenga nuevas facturas o pedidos de venta. No podemos borrarlo porque ya tiene facturas viejas asociadas (si llegasemos a hacerlo la integridad de los datos se vería comprometida). Para no trabajar más con el cliente solemos archivarlo.



Esto es posible ya que Odoo permite agregar a todos sus modelos un campo llamado active (y es una buena práctica agregarlo a todos los objetos de datos maestros). Cada vez que este campo active se agrega a un modelo, el mismo debe tener un valor default igual a True (así se encuentra visible en las búsquedas). Si el campo active tiene un valor False, el registro no podrá ser encontrado durante las búsquedas del ORM. Esto se debe a que en todas las operaciones de búsqueda en Odoo se les agrega el dominio ('active','=',True). A menos que explicitamente se indique lo contrario, agregando el dominio de búsqueda de la siguiente manera:

domain = ['|',('active','=',True),('active','=',False)]
records = model.search(domain)

Este "truco" es algo a tener en cuenta cuando uno migra de versión los sistemas Odoo, ya que uno debe migrar datos maestros archivados y activos.

Como no utilizar el campo active

Como decíamos párrafos arriba, el campo active solo se debe utilizar en datos maestros. Pero nunca en transacciones porque tarde o temprano genera problemas. Es tentador agregar el campo active para que las transacciones no aparezcan en los reportes o en las vistas, pero es una práctica que tarde o temprano se vuelve en contra.

Supongamos que en un arranque de espiritu emprendedor un programador agrega el campo active al modelo sale.order para archivar los pedidos de venta. Que sucede con los datos relacionados? Facturas o remitos? u oportunidades? Agregando el campo active a una transacción provocó que la base de datos ya se encuentre en un estado inconsistente ya que en el sistema se verá una transacción pero no el resto.

Entiendo que es tentador agregar el campo active a las transacciones, pero no vale la pena. Es preferible analizar el workflow, y agregar la opción de cancelar a las transacciones. Es mucho más sano.


Gustavo Orrillo 19 de junio de 2023
Compartir
Archivar
Identificarse dejar un comentario