From 41d458d91dc28fe6f56fe24f09c05427d5b185ab Mon Sep 17 00:00:00 2001 From: Andrew Gavgavian Date: Thu, 23 Feb 2023 20:47:32 +0000 Subject: [PATCH] [FIX] stock: correct reserved_qty inverse Issue: Since PR #80434, for versions 15.2 onward stock.move.line changed the product_qty field to reserved_qty. When doing this change, the compute and inverse function definitions were changed, but the inverse method on the field was never corrected. This means that if something tries to write to reserved_qty a traceback will occur: AttributeError: 'stock.move.line' object has no attribute '_set_product_qty' To recreate this error, make a write call on stock.move.line to reserved_qty and you will get the traceback instead of the UserError. Solution: Change the field's definition to the correct function name (_set_reserved_qty) leads to the proper UserError instead of a traceback. opw-3204213 closes odoo/odoo#113812 X-original-commit: 5ac0568af2909864a2231309fa3e72397a581957 Signed-off-by: Tiffany Chang --- addons/stock/models/stock_move_line.py | 2 +- addons/stock/tests/test_move.py | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/addons/stock/models/stock_move_line.py b/addons/stock/models/stock_move_line.py index abd8bc343f3..9420eb3ae08 100644 --- a/addons/stock/models/stock_move_line.py +++ b/addons/stock/models/stock_move_line.py @@ -34,7 +34,7 @@ class StockMoveLine(models.Model): product_category_name = fields.Char(related="product_id.categ_id.complete_name", store=True, string="Product Category") reserved_qty = fields.Float( 'Real Reserved Quantity', digits=0, copy=False, - compute='_compute_reserved_qty', inverse='_set_product_qty', store=True) + compute='_compute_reserved_qty', inverse='_set_reserved_qty', store=True) reserved_uom_qty = fields.Float( 'Reserved', default=0.0, digits='Product Unit of Measure', required=True, copy=False) qty_done = fields.Float('Done', default=0.0, digits='Product Unit of Measure', copy=False) diff --git a/addons/stock/tests/test_move.py b/addons/stock/tests/test_move.py index 481310c0e0a..eeeb334588b 100644 --- a/addons/stock/tests/test_move.py +++ b/addons/stock/tests/test_move.py @@ -217,6 +217,8 @@ class StockMove(TransactionCase): self.assertEqual(move_line.reserved_qty, 100.0) self.assertEqual(move_line.qty_done, 0.0) move_line.qty_done = 100.0 + with self.assertRaises(UserError, msg="It should not be possible to write directly to reserved_qty"): + move_line.reserved_qty = 1.0 # validation move1._action_done()