Scenario Mtm
This commit is contained in:
@@ -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'
|
||||
|
||||
Reference in New Issue
Block a user