Support multiple laytime start candidates
This commit is contained in:
@@ -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):
|
||||
|
||||
Reference in New Issue
Block a user