From 428546bc023db95b2128149a91c478e2be35ac39 Mon Sep 17 00:00:00 2001 From: Arnold Moyaux Date: Mon, 28 Jan 2019 09:27:41 +0000 Subject: [PATCH] [FIX] stock: scrap insufficient qty bypass UoM Usecase to reproduce: - Set 1 unit of product A in stock - Scrap 1 dozen of product A Warning message for Insufficient Quantity is not triggered. It happens because there is no UoM conversion between scrap qty and product quant quantity. Fixes #30570 closes odoo/odoo#30589 --- addons/stock/models/stock_scrap.py | 3 ++- addons/stock/tests/test_move.py | 18 ++++++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/addons/stock/models/stock_scrap.py b/addons/stock/models/stock_scrap.py index 517814573bc..a6d91e1cbdb 100644 --- a/addons/stock/models/stock_scrap.py +++ b/addons/stock/models/stock_scrap.py @@ -130,7 +130,8 @@ class StockScrap(models.Model): self.package_id, self.owner_id, strict=True).mapped('quantity')) - if float_compare(available_qty, self.scrap_qty, precision_digits=precision) >= 0: + scrap_qty = self.product_uom_id._compute_quantity(self.scrap_qty, self.product_id.uom_id) + if float_compare(available_qty, scrap_qty, precision_digits=precision) >= 0: return self.do_scrap() else: return { diff --git a/addons/stock/tests/test_move.py b/addons/stock/tests/test_move.py index 9a48f814abe..b3b3a451e8e 100644 --- a/addons/stock/tests/test_move.py +++ b/addons/stock/tests/test_move.py @@ -3424,6 +3424,24 @@ class StockMove(TransactionCase): self.assertEqual(scrap.state, 'done') self.assertEqual(move1.reserved_availability, 0.25) + def test_scrap_6(self): + """ Check that scrap correctly handle UoM. """ + self.env['stock.quant']._update_available_quantity(self.product1, self.stock_location, 1) + scrap = self.env['stock.scrap'].create({ + 'product_id': self.product1.id, + 'product_uom_id': self.uom_dozen.id, + 'scrap_qty': 1, + }) + warning_message = scrap.action_validate() + self.assertEqual(warning_message.get('res_model', 'Wrong Model'), 'stock.warn.insufficient.qty.scrap') + insufficient_qty_wizard = self.env['stock.warn.insufficient.qty.scrap'].create({ + 'product_id': self.product1.id, + 'location_id': self.stock_location.id, + 'scrap_id': scrap.id + }) + insufficient_qty_wizard.action_done() + self.assertEqual(self.env['stock.quant']._gather(self.product1, self.stock_location).quantity, -11) + def test_in_date_1(self): """ Check that moving a tracked quant keeps the incoming date. """