Bug From To
This commit is contained in:
@@ -569,6 +569,35 @@ class Purchase(metaclass=PoolMeta):
|
||||
if self.doc_template:
|
||||
return self.doc_template.type
|
||||
|
||||
@classmethod
|
||||
def _check_lines_delivery_period_values(cls, values):
|
||||
line_commands = values.get('lines') or []
|
||||
if not line_commands:
|
||||
return
|
||||
Line = Pool().get('purchase.line')
|
||||
for command in line_commands:
|
||||
action = command[0]
|
||||
if action == 'create':
|
||||
for line_values in command[1]:
|
||||
Line._check_delivery_period_values([Line()], line_values)
|
||||
elif action == 'write':
|
||||
actions = iter(command[1:])
|
||||
for line_ids, line_values in zip(actions, actions):
|
||||
lines = Line.browse(line_ids)
|
||||
Line._check_delivery_period_values(lines, line_values)
|
||||
elif action == 'add':
|
||||
lines = Line.browse(command[1])
|
||||
Line._check_delivery_period_values(lines)
|
||||
|
||||
@classmethod
|
||||
def write(cls, *args):
|
||||
actions = iter(args)
|
||||
args = []
|
||||
for purchases, values in zip(actions, actions):
|
||||
cls._check_lines_delivery_period_values(values)
|
||||
args.extend((purchases, values))
|
||||
super().write(*args)
|
||||
|
||||
@classmethod
|
||||
def copy(cls, purchases, default=None):
|
||||
if default is None:
|
||||
|
||||
@@ -997,6 +997,35 @@ class Sale(metaclass=PoolMeta):
|
||||
if self.lines.lots:
|
||||
return [l for l in self.lines.lots]
|
||||
|
||||
@classmethod
|
||||
def _check_lines_delivery_period_values(cls, values):
|
||||
line_commands = values.get('lines') or []
|
||||
if not line_commands:
|
||||
return
|
||||
Line = Pool().get('sale.line')
|
||||
for command in line_commands:
|
||||
action = command[0]
|
||||
if action == 'create':
|
||||
for line_values in command[1]:
|
||||
Line._check_delivery_period_values([Line()], line_values)
|
||||
elif action == 'write':
|
||||
actions = iter(command[1:])
|
||||
for line_ids, line_values in zip(actions, actions):
|
||||
lines = Line.browse(line_ids)
|
||||
Line._check_delivery_period_values(lines, line_values)
|
||||
elif action == 'add':
|
||||
lines = Line.browse(command[1])
|
||||
Line._check_delivery_period_values(lines)
|
||||
|
||||
@classmethod
|
||||
def write(cls, *args):
|
||||
actions = iter(args)
|
||||
args = []
|
||||
for sales, values in zip(actions, actions):
|
||||
cls._check_lines_delivery_period_values(values)
|
||||
args.extend((sales, values))
|
||||
super().write(*args)
|
||||
|
||||
@classmethod
|
||||
def validate(cls, sales):
|
||||
super(Sale, cls).validate(sales)
|
||||
|
||||
@@ -604,6 +604,31 @@ class PurchaseTradeTestCase(ModuleTestCase):
|
||||
'quantity': Decimal('1'),
|
||||
})
|
||||
|
||||
def test_sale_and_purchase_parent_write_check_embedded_line_commands(self):
|
||||
'sale and purchase writes validate embedded one2many line commands'
|
||||
Sale = Pool().get('sale.sale')
|
||||
Purchase = Pool().get('purchase.purchase')
|
||||
invalid = Mock(
|
||||
from_del=datetime.date(2026, 4, 16),
|
||||
to_del=datetime.date(2026, 4, 10),
|
||||
)
|
||||
|
||||
with patch('trytond.modules.purchase_trade.sale.Pool') as SalePool:
|
||||
SalePool.return_value.get.return_value = Mock(
|
||||
browse=Mock(return_value=[invalid]))
|
||||
with self.assertRaises(UserError):
|
||||
Sale._check_lines_delivery_period_values({
|
||||
'lines': [['write', [564], {'quantity': Decimal('1')}]],
|
||||
})
|
||||
|
||||
with patch('trytond.modules.purchase_trade.purchase.Pool') as PurchasePool:
|
||||
PurchasePool.return_value.get.return_value = Mock(
|
||||
browse=Mock(return_value=[invalid]))
|
||||
with self.assertRaises(UserError):
|
||||
Purchase._check_lines_delivery_period_values({
|
||||
'lines': [['add', [564]]],
|
||||
})
|
||||
|
||||
def test_pricing_eod_uses_weighted_average_for_manual_rows(self):
|
||||
'manual pricing eod uses the weighted average of fixed and unfixed legs'
|
||||
Pricing = Pool().get('pricing.pricing')
|
||||
|
||||
Reference in New Issue
Block a user