Como impedir el stock negativo en Odoo
Odoo permite tener stock negativo. Lo cual como sostiene más de uno, puede estar bueno debido a que te permite realizar todos los envíos a tiempo. Pero a la larga es malo y soy de la idea de corregir los problemas de stock antes de hacer movimientos. Puede hacer más dura la etapa de implementación, pero a la larga el usuario se lo agradecerá. En pocas palabras, es una idea muy poco feliz de Odoo.
Lamentablemente no existe un flag en Odoo que impida el tener stocks negativos, pero hay un módulo muy piola que lo evita. Lo encuentran en OCA y lo bajan de este repositorio:
https://github.com/OCA/stock-logistics-workflow/tree/11.0/stock_no_negative/
Nombre muy sugerente la verdad. Pero es un gran módulo y si revisan el código les permitirá entender mejor como funcionan los quants. La verdad es un gran módulo y al día de hoy no entiendo como no forma parte del core de Odoo.
Hagan esta prueba. Creen un nro de serie para un producto, y seguidamente traten de hacer una transferencia interna (van a hacer una transferencia interna sin stock, por lo cual a la ubicación origen de la transferencia quedaría con stock negativo). El módulo stock_no_negative lo va a impedir con el siguiente mensaje de error:
Que hacer cuando uno encuentra stock negativo?
Primero es priorizar la tarea de corregir la situación. Seguidamente es instalar el módulo. Luego corregir haciendo ajustes manuales el stock que presenta stock negativo. Por último, capacitar al usuario para cuando vean el mensaje de error indicando el error. No es el fin del mundo.
Notas técnicas
El módulo agrega a los modelos de categorías de productos (product.category), templates de producto (product.template) y ubicación (stock.location) un campo que indica si la categoría/producto/ubicación permitirá stock negativo.
Lo importante ocurre en el modelo stock.quant, que es el modelo donde se almacena el inventario (y es el que permite valuarlo). Le agrega una restricción (conocida tecnicamente como constraint) en el cual cada vez que se cambia el producto y la cantidad; si la cantidad va a ser negativa y el producto/ubicación no permite cantidades negativas y la ubicación es una ubicación interna o de tránsito; se crea una excepción (que es la forma de en la que funcionan los constraints que fallan).
Es una forma muy elegante de implementar el control. Si no se lo hace a nivel modelo de inventario debería hacerse a nivel movimiento de stock (stock.move) y sería más engorroso.
Acerca de:
Gustavo Orrillo
Passionate about programming, he has implemented Odoo for different types of businesses since 2010. In Moldeo Interactive he is a founding Partner and Programmer; In addition to writing on the Blog about different topics related to the developments he makes.