Support multiple laytime start candidates

This commit is contained in:
2026-07-12 11:52:28 +02:00
parent 8719a63fa5
commit 47d0f025b3
9 changed files with 223 additions and 33 deletions

View File

@@ -1502,6 +1502,38 @@ class PurchaseTradeTestCase(ModuleTestCase):
sof._applied_laytime_start(),
datetime.datetime(2026, 6, 1, 8, 0))
@with_transaction()
def test_sof_laytime_start_uses_earliest_candidate(self):
'sof laytime start can use the earliest of multiple candidates'
Sof = Pool().get('sof.statement')
sof = Sof()
sof.applied_condition = SimpleNamespace(
laytime_start_rule='earliest_of',
laytime_start_rules=[
SimpleNamespace(
sequence=10,
event='notice_of_readiness',
offset=Decimal('6'),
offset_unit='hours'),
SimpleNamespace(
sequence=20,
event='all_fast',
offset=None,
offset_unit='hours'),
])
sof.notice_of_readiness_time = datetime.datetime(2026, 6, 1, 2, 0)
sof.all_fast = datetime.datetime(2026, 6, 1, 7, 0)
self.assertEqual(
sof._applied_laytime_start(),
datetime.datetime(2026, 6, 1, 7, 0))
self.assertEqual(
sof.get_calculation_info('calculation_start_event'),
'Earliest Of')
self.assertEqual(
sof.get_calculation_info('calculation_start_offset'),
'Notice of Readiness + 6 hours; All Fast')
@with_transaction()
def test_sof_laytime_end_reads_structured_condition_rule(self):
'sof laytime end reads the structured end event'
@@ -1593,11 +1625,16 @@ class PurchaseTradeTestCase(ModuleTestCase):
values = Sof._sync_datetime_values({
'notice_of_readiness_date': datetime.date(2026, 7, 6),
'notice_of_readiness_hour': datetime.time(8, 0),
'all_fast_date': datetime.date(2026, 7, 6),
'all_fast_hour': datetime.time(10, 30),
})
self.assertEqual(
values['notice_of_readiness_time'],
datetime.datetime(2026, 7, 6, 8, 0))
self.assertEqual(
values['all_fast'],
datetime.datetime(2026, 7, 6, 10, 30))
@with_transaction()
def test_sof_event_date_time_values_sync_to_datetime(self):