Scenario Mtm

This commit is contained in:
2026-06-18 10:56:03 +02:00
parent a754e15e32
commit 248e410d88
5 changed files with 196 additions and 40 deletions

View File

@@ -20,6 +20,7 @@ from trytond.modules.purchase_trade import purchase as purchase_module
from trytond.modules.purchase_trade import sale as sale_module
from trytond.modules.purchase_trade import stock as stock_module
from trytond.modules.purchase_trade import fee as fee_module
from trytond.modules.purchase_trade import pricing as pricing_module
from trytond.modules.purchase_trade import company_defaults
from trytond.modules.purchase_trade.service import ContractFactory
@@ -715,6 +716,78 @@ class PurchaseTradeTestCase(ModuleTestCase):
strategy.currency,
relative_last=True)
def test_mtm_scenario_resolves_fixed_valuation_date(self):
'mtm scenario can force an explicit valuation date'
scenario = pricing_module.MtmScenario()
scenario.valuation_date_type = 'fixed'
scenario.valuation_date = datetime.date(2026, 6, 18)
self.assertEqual(
scenario.get_valuation_date(),
datetime.date(2026, 6, 18))
def test_mtm_scenario_resolves_relative_valuation_dates(self):
'mtm scenario can resolve relative valuation dates'
scenario = pricing_module.MtmScenario()
Date = Mock()
Date.today.return_value = datetime.date(2026, 2, 12)
with patch(
'trytond.modules.purchase_trade.pricing.Pool'
) as PoolMock:
PoolMock.return_value.get.return_value = Date
scenario.valuation_date_type = 'today'
self.assertEqual(
scenario.get_valuation_date(),
datetime.date(2026, 2, 12))
scenario.valuation_date_type = 'month_end'
self.assertEqual(
scenario.get_valuation_date(),
datetime.date(2026, 2, 28))
scenario.valuation_date_type = 'next_month_end'
self.assertEqual(
scenario.get_valuation_date(),
datetime.date(2026, 3, 31))
@with_transaction()
def test_get_mtm_uses_resolved_scenario_date(self):
'get_mtm uses the scenario resolved valuation date'
Strategy = Pool().get('mtm.strategy')
strategy = Strategy()
scenario = pricing_module.MtmScenario()
scenario.valuation_date_type = 'month_end'
scenario.use_last_price = True
strategy.scenario = scenario
strategy.currency = Mock()
price_index = Mock(get_price=Mock(return_value=Decimal('100')))
strategy.components = [Mock(
price_source_type='curve',
price_index=price_index,
price_matrix=None,
ratio=Decimal('100'),
)]
line = Mock(unit=Mock())
Date = Mock()
Date.today.return_value = datetime.date(2026, 2, 12)
with patch(
'trytond.modules.purchase_trade.pricing.Pool'
) as PoolMock:
PoolMock.return_value.get.return_value = Date
self.assertEqual(
strategy.get_mtm(line, Decimal('2')),
Decimal('200.00'))
price_index.get_price.assert_called_once_with(
datetime.date(2026, 2, 28),
line.unit,
strategy.currency,
relative_last=True)
@with_transaction()
def test_get_mtm_uses_fixed_pricing_component(self):
'get_mtm values fixed components like a constant price curve'