From 3239549b997ed9509d2a2a3c778ed9dc4c901cab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20Krier?= Date: Mon, 5 Aug 2024 19:07:01 +0200 Subject: [PATCH] Do not include cancelled moves in measurements Closes #13439 --- modules/stock_shipment_measurements/CHANGELOG | 1 + modules/stock_shipment_measurements/stock.py | 20 +++++++++++++++++-- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/modules/stock_shipment_measurements/CHANGELOG b/modules/stock_shipment_measurements/CHANGELOG index 5629729323..7adb96113f 100644 --- a/modules/stock_shipment_measurements/CHANGELOG +++ b/modules/stock_shipment_measurements/CHANGELOG @@ -1,3 +1,4 @@ +* Do not include cancelled moves in measurements * Store internal measurements for final states of shipments Version 7.2.0 - 2024-04-29 diff --git a/modules/stock_shipment_measurements/stock.py b/modules/stock_shipment_measurements/stock.py index e47badeeeb..035a2fb943 100644 --- a/modules/stock_shipment_measurements/stock.py +++ b/modules/stock_shipment_measurements/stock.py @@ -172,6 +172,18 @@ class Move(metaclass=PoolMeta): if to_write: cls.write(*to_write) + @classmethod + @ModelView.button + @Workflow.transition('cancelled') + def cancel(cls, moves): + super().cancel(moves) + shipments = defaultdict(set) + for move in moves: + if issubclass(move.shipment, MeasurementsMixin): + shipments[move.shipment.__class__].add(move.shipment) + for Shipment, shipments in shipments.items(): + Shipment.set_measurements(shipments) + class MeasurementsMixin(object): __slots__ = () @@ -281,14 +293,16 @@ class MeasurementsMixin(object): table, move, location)) .select( Sum(Coalesce(move.internal_weight, 0)), - where=cls._measurements_move_condition(table, move)), + where=cls._measurements_move_condition(table, move) + & (move.state != 'cancelled')), move .join(location, condition=cls._measurements_location_condition( table, move, location)) .select( Sum(Coalesce(move.internal_volume, 0)), - where=cls._measurements_move_condition(table, move))], + where=cls._measurements_move_condition(table, move) + & (move.state != 'cancelled'))], where=table.state.in_(states))) if shipments: @@ -323,6 +337,7 @@ class MeasurementsMixin(object): query = table.join( move, type_='LEFT', condition=cls._measurements_move_condition(table, move) + & (move.state != 'cancelled') ).join( location, condition=cls._measurements_location_condition( @@ -411,6 +426,7 @@ class MeasurementsMixin(object): query = table.join( move, type_='LEFT', condition=cls._measurements_move_condition(table, move) + & (move.state != 'cancelled') ).join( location, condition=cls._measurements_location_condition(