From 7b4eb149688fd27dcfab1548826a3ea77ccca44a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20Krier?= Date: Fri, 2 Jan 2026 12:32:43 +0100 Subject: [PATCH] Use defaultdict with float as default value when calculating product quantities --- modules/stock/move.py | 8 +++----- modules/stock_lot/stock.py | 2 +- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/modules/stock/move.py b/modules/stock/move.py index 8d06807184..6c4d793136 100644 --- a/modules/stock/move.py +++ b/modules/stock/move.py @@ -81,8 +81,7 @@ class StockMixin(object): pool = Pool() Product = pool.get('product.product') - record_ids = [r.id for r in records] - quantities = dict.fromkeys(record_ids, 0.0) + quantities = defaultdict(float) if not location_ids: return quantities @@ -98,8 +97,7 @@ class StockMixin(object): for key, quantity in pbl.items(): # pbl could return None in some keys - if (key[position] is not None - and key[position] in quantities): + if key[position] is not None: quantities[key[position]] += quantity return quantities @@ -1739,7 +1737,7 @@ class Move(Workflow, ModelSQL, ModelView): Model = Template id_getter = operator.itemgetter(grouping.index(id_name) + 1) ids = set() - quantities = defaultdict(int) + quantities = defaultdict(float) keys = set() # We can do a quick loop without propagation if the request is for a # single location because all the locations are children and we can sum diff --git a/modules/stock_lot/stock.py b/modules/stock_lot/stock.py index 40bb25c8d5..cf951dd34d 100644 --- a/modules/stock_lot/stock.py +++ b/modules/stock_lot/stock.py @@ -81,7 +81,7 @@ class Lot(DeactivableMixin, ModelSQL, ModelView, LotMixin, StockMixin): def get_quantity(cls, lots, name): location_ids = Transaction().context.get('locations') product_ids = list(set(l.product.id for l in lots)) - quantities = {} + quantities = defaultdict(float) for product_ids in grouped_slice(product_ids): quantities.update(cls._get_quantity(lots, name, location_ids, grouping=('product', 'lot',),