This commit is contained in:
2026-06-05 15:25:33 +02:00
parent 574c1a67f4
commit 77922997eb
5 changed files with 205 additions and 50 deletions

View File

@@ -160,6 +160,62 @@ class PurchaseTradeTestCase(ModuleTestCase):
strategy, line),
Decimal('-349167.53'))
@with_transaction()
def test_strategy_mtm_lines_split_by_curve_with_previous_price(self):
'strategy MTM creates one valuation line per curve with previous price'
Valuation = Pool().get('valuation.valuation')
valuation_date = datetime.date(2026, 6, 5)
previous_date = datetime.date(2026, 6, 4)
unit = Mock()
currency = Mock()
line = Mock(unit=unit)
curve_a = Mock(id=10)
curve_a.get_price.side_effect = [Decimal('100'), Decimal('90')]
curve_b = Mock(id=20)
curve_b.get_price.side_effect = [Decimal('50'), Decimal('45')]
strategy = Mock(
scenario=Mock(
valuation_date=valuation_date,
use_last_price=False),
currency=currency,
components=[
Mock(
price_source_type='curve',
price_index=curve_a,
ratio=Decimal('60')),
Mock(
price_source_type='curve',
price_index=curve_b,
ratio=Decimal('40')),
])
values = {
'type': 'pur. priced',
'price': Decimal('10'),
'amount': Decimal('-100'),
'base_amount': Decimal('-100'),
'quantity': Decimal('10'),
}
target = []
price_value = Mock()
price_value.search.return_value = [Mock(price_date=previous_date)]
with patch('trytond.modules.purchase_trade.valuation.Pool') as PoolMock:
PoolMock.return_value.get.return_value = price_value
Valuation._append_strategy_mtm_lines(
target, values, strategy, line)
self.assertEqual(len(target), 2)
self.assertEqual(target[0]['mtm_curve'], curve_a.id)
self.assertEqual(target[0]['amount'], Decimal('-60.00'))
self.assertEqual(target[0]['mtm_price'], Decimal('60.0000'))
self.assertEqual(target[0]['mtm_price_prev'], Decimal('54.0000'))
self.assertEqual(target[0]['mtm'], Decimal('-600.00'))
self.assertEqual(target[1]['mtm_curve'], curve_b.id)
self.assertEqual(target[1]['amount'], Decimal('-40.00'))
self.assertEqual(target[1]['mtm_price'], Decimal('20.0000'))
self.assertEqual(target[1]['mtm_price_prev'], Decimal('18.0000'))
self.assertEqual(target[1]['mtm'], Decimal('-200.00'))
@with_transaction()
def test_purchase_line_charter_conditions_inherit_header_when_empty(self):
'purchase line uses header charter conditions when it has no line terms'