From TO line/sale line

This commit is contained in:
2026-04-28 20:07:55 +02:00
parent 1d6f3158c0
commit b5b554bad0
3 changed files with 23 additions and 7 deletions

View File

@@ -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

View File

@@ -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

View File

@@ -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'