diff --git a/modules/purchase_trade/purchase.py b/modules/purchase_trade/purchase.py index ab15052..078d404 100755 --- a/modules/purchase_trade/purchase.py +++ b/modules/purchase_trade/purchase.py @@ -1480,9 +1480,15 @@ class Line(metaclass=PoolMeta): def on_change_linked_unit(self): self._recompute_trade_price_fields() - @classmethod - def write(cls, *args): - # Agents: + @classmethod + def write(cls, *args): + actions = iter(args) + args = [] + for records, values in zip(actions, actions): + cls._check_delivery_period_values(records, values) + args.extend((records, values)) + + # Agents: # Ici on gère la variation éventuelle de la théorical quantity après création du contrat # Si delta > 0 on met à jour le lot virtual qui est toujours unique pour une purchase line # mais aussi la table lot_qt dont le lot_p est ce lot virtuel (ajuster lot_quantity) @@ -1495,8 +1501,6 @@ class Line(metaclass=PoolMeta): old_values = {} for records, values in zip(args[::2], args[1::2]): - if {'from_del', 'to_del'} & set(values): - cls._check_delivery_period_values(records, values) if 'quantity_theorical' in values: for record in records: old_values[record.id] = record.quantity_theorical diff --git a/modules/purchase_trade/sale.py b/modules/purchase_trade/sale.py index ab65843..cf829d3 100755 --- a/modules/purchase_trade/sale.py +++ b/modules/purchase_trade/sale.py @@ -1604,13 +1604,17 @@ class SaleLine(metaclass=PoolMeta): @classmethod def write(cls, *args): + actions = iter(args) + args = [] + for records, values in zip(actions, actions): + cls._check_delivery_period_values(records, values) + args.extend((records, values)) + Lot = Pool().get('lot.lot') LotQt = Pool().get('lot.qt') old_values = {} for records, values in zip(args[::2], args[1::2]): - if {'from_del', 'to_del'} & set(values): - cls._check_delivery_period_values(records, values) if 'quantity_theorical' in values: for record in records: old_values[record.id] = record.quantity_theorical diff --git a/modules/purchase_trade/tests/test_module.py b/modules/purchase_trade/tests/test_module.py index d21542d..c0233e4 100644 --- a/modules/purchase_trade/tests/test_module.py +++ b/modules/purchase_trade/tests/test_module.py @@ -595,6 +595,14 @@ class PurchaseTradeTestCase(ModuleTestCase): SaleLine._check_delivery_period_values([valid], { 'to_del': datetime.date(2026, 3, 31), }) + with self.assertRaises(UserError): + PurchaseLine._check_delivery_period_values([invalid], { + 'quantity': Decimal('1'), + }) + with self.assertRaises(UserError): + SaleLine._check_delivery_period_values([invalid], { + 'quantity': Decimal('1'), + }) def test_pricing_eod_uses_weighted_average_for_manual_rows(self): 'manual pricing eod uses the weighted average of fixed and unfixed legs'