Bug From To
This commit is contained in:
@@ -569,6 +569,35 @@ class Purchase(metaclass=PoolMeta):
|
|||||||
if self.doc_template:
|
if self.doc_template:
|
||||||
return self.doc_template.type
|
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
|
@classmethod
|
||||||
def copy(cls, purchases, default=None):
|
def copy(cls, purchases, default=None):
|
||||||
if default is None:
|
if default is None:
|
||||||
|
|||||||
@@ -997,6 +997,35 @@ class Sale(metaclass=PoolMeta):
|
|||||||
if self.lines.lots:
|
if self.lines.lots:
|
||||||
return [l for l in 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
|
@classmethod
|
||||||
def validate(cls, sales):
|
def validate(cls, sales):
|
||||||
super(Sale, cls).validate(sales)
|
super(Sale, cls).validate(sales)
|
||||||
|
|||||||
@@ -604,6 +604,31 @@ class PurchaseTradeTestCase(ModuleTestCase):
|
|||||||
'quantity': Decimal('1'),
|
'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):
|
def test_pricing_eod_uses_weighted_average_for_manual_rows(self):
|
||||||
'manual pricing eod uses the weighted average of fixed and unfixed legs'
|
'manual pricing eod uses the weighted average of fixed and unfixed legs'
|
||||||
Pricing = Pool().get('pricing.pricing')
|
Pricing = Pool().get('pricing.pricing')
|
||||||
|
|||||||
Reference in New Issue
Block a user