From a834a1b235b7392ee7df4e404efafd91889508e2 Mon Sep 17 00:00:00 2001 From: Nicolas Martinelli Date: Thu, 16 Apr 2020 15:15:34 +0000 Subject: [PATCH] [FIX] stock: correct qty comparison Use `float_compare` to avoid the usual float representation comparison errors. opw-2215497 closes odoo/odoo#49702 X-original-commit: 500240874cd21c6950210968c8c7e8d84c1c4bee Signed-off-by: Nicolas Martinelli (nim) --- addons/stock/models/stock_picking.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/addons/stock/models/stock_picking.py b/addons/stock/models/stock_picking.py index 3d9276c7061..12da2dd4902 100644 --- a/addons/stock/models/stock_picking.py +++ b/addons/stock/models/stock_picking.py @@ -956,6 +956,7 @@ class Picking(models.Model): return True def _check_backorder(self): + prec = self.env["decimal.precision"].precision_get("Product Unit of Measure") backorder_pickings = self.browse() for picking in self: quantity_todo = {} @@ -972,7 +973,10 @@ class Picking(models.Model): for pack in picking.mapped('move_line_ids').filtered(lambda x: x.product_id and not x.move_id): quantity_done.setdefault(pack.product_id.id, 0) quantity_done[pack.product_id.id] += pack.product_uom_id._compute_quantity(pack.qty_done, pack.product_id.uom_id) - if any(quantity_done[x] < quantity_todo.get(x, 0) for x in quantity_done): + if any( + float_compare(quantity_done[x], quantity_todo.get(x, 0), precision_digits=prec,) == -1 + for x in quantity_done + ): backorder_pickings |= picking return backorder_pickings