From 1344aad156e5345e7111c7c898e8a9089118fe8e Mon Sep 17 00:00:00 2001 From: sergio-teruel Date: Wed, 20 Oct 2021 22:30:46 +0200 Subject: [PATCH] [FIX] stock_secondary_unit: Keep secondary uom qty in stock move lines after picking validation TT32443 --- stock_secondary_unit/models/stock_move.py | 38 ++++++++++++------- .../tests/test_stock_secondary_unit.py | 6 +++ 2 files changed, 30 insertions(+), 14 deletions(-) diff --git a/stock_secondary_unit/models/stock_move.py b/stock_secondary_unit/models/stock_move.py index 6d89cee30..0cde8ca6b 100644 --- a/stock_secondary_unit/models/stock_move.py +++ b/stock_secondary_unit/models/stock_move.py @@ -99,18 +99,28 @@ class StockMoveLine(models.Model): @api.multi def write(self, vals): - for rec in self: + move_lines_with_second_unit = self.filtered( + lambda ml: ml.move_id.secondary_uom_id) + res = super(StockMoveLine, self - move_lines_with_second_unit).write( + vals) + for rec in move_lines_with_second_unit: move = rec.move_id - if move.secondary_uom_id: - uom = rec.product_id.uom_id - factor = move.secondary_uom_id.factor * uom.factor - move_line_qty = vals.get('product_uom_qty', rec.product_uom_qty) - qty = float_round( - move_line_qty / (factor or 1.0), - precision_rounding=move.secondary_uom_id.uom_id.rounding - ) - vals.update({ - 'secondary_uom_qty': qty, - 'secondary_uom_id': move.secondary_uom_id.id, - }) - return super().write(vals) + uom = rec.product_id.uom_id + factor = move.secondary_uom_id.factor * uom.factor + if 'product_uom_qty' in vals and vals['product_uom_qty'] == 0: + # The picking has been validated and product_uom_qty is + # reset to zero + move_line_qty = move.quantity_done + else: + move_line_qty = vals.get( + 'product_uom_qty', rec.product_uom_qty) + qty = float_round( + move_line_qty / (factor or 1.0), + precision_rounding=move.secondary_uom_id.uom_id.rounding + ) + vals.update({ + 'secondary_uom_qty': qty, + 'secondary_uom_id': move.secondary_uom_id.id, + }) + res = super(StockMoveLine, rec).write(vals) + return res diff --git a/stock_secondary_unit/tests/test_stock_secondary_unit.py b/stock_secondary_unit/tests/test_stock_secondary_unit.py index e896c94b9..292bbfb1f 100644 --- a/stock_secondary_unit/tests/test_stock_secondary_unit.py +++ b/stock_secondary_unit/tests/test_stock_secondary_unit.py @@ -121,6 +121,12 @@ class TestProductSecondaryUnit(SavepointCase): sum(delivery_order.move_line_ids.mapped('secondary_uom_qty')) self.assertEquals(uom_qty, 20.0) self.assertEquals(secondary_uom_qty, 40.0) + # After picking validation secondary_uom_qty not reset to zero + delivery_order.move_lines.quantity_done = 20.0 + delivery_order.action_done() + secondary_uom_qty = \ + sum(delivery_order.move_line_ids.mapped('secondary_uom_qty')) + self.assertEquals(secondary_uom_qty, 40.0) def test_04_picking_secondary_unit(self): product = self.product_template.product_variant_ids[0]