Add SOF calculation overrides
This commit is contained in:
@@ -1457,6 +1457,30 @@ class PurchaseTradeTestCase(ModuleTestCase):
|
||||
sof._applied_compensation_amount(), Decimal('-12000.00'))
|
||||
self.assertEqual(sof.compensation_type, 'demurrage')
|
||||
|
||||
@with_transaction()
|
||||
def test_sof_calculation_rate_overrides_win_over_condition_rates(self):
|
||||
'sof calculation rate overrides are used before condition rates'
|
||||
Sof = Pool().get('sof.statement')
|
||||
sof = Sof()
|
||||
sof.applied_condition = Mock(
|
||||
laytime_allowed=None,
|
||||
rates=[
|
||||
Mock(rate=Decimal('24000'), rate_type=Mock(category='demurrage')),
|
||||
Mock(rate=Decimal('100'), rate_type=Mock(category='pumping')),
|
||||
])
|
||||
sof.demurrage_rate_override = Decimal('36000')
|
||||
sof.pumping_rate_override = Decimal('200')
|
||||
sof.laytime_balance = -Decimal('12')
|
||||
|
||||
self.assertEqual(
|
||||
sof._applied_laytime_allowed(Decimal('1000')), 5.0)
|
||||
self.assertEqual(
|
||||
sof._applied_compensation_amount(), Decimal('-18000.00'))
|
||||
self.assertEqual(sof.compensation_type, 'demurrage')
|
||||
self.assertEqual(
|
||||
sof.get_calculation_info('calculation_demurrage_rate'),
|
||||
'36000 / day')
|
||||
|
||||
@with_transaction()
|
||||
def test_sof_available_conditions_include_shipment_contracts(self):
|
||||
'sof applied condition choices include owner, purchase and sale terms'
|
||||
@@ -1539,13 +1563,25 @@ class PurchaseTradeTestCase(ModuleTestCase):
|
||||
'sof laytime end reads the structured end event'
|
||||
Sof = Pool().get('sof.statement')
|
||||
sof = Sof()
|
||||
sof.applied_condition = Mock(laytime_end_event='hoses_disconnected')
|
||||
sof.applied_condition = Mock(laytime_end_event='documents_on_board')
|
||||
sof.end_pumping = datetime.datetime(2026, 6, 1, 12, 0)
|
||||
sof.hoses_disconnected = datetime.datetime(2026, 6, 1, 13, 0)
|
||||
sof.documents_on_board = datetime.datetime(2026, 6, 1, 14, 0)
|
||||
|
||||
self.assertEqual(
|
||||
sof._applied_laytime_end(),
|
||||
datetime.datetime(2026, 6, 1, 13, 0))
|
||||
datetime.datetime(2026, 6, 1, 14, 0))
|
||||
|
||||
@with_transaction()
|
||||
def test_sof_additional_quantity_is_added_to_calculation_quantity(self):
|
||||
'sof additional quantity is added to the quantity used for calculation'
|
||||
Sof = Pool().get('sof.statement')
|
||||
sof = Sof()
|
||||
sof.additional_quantity = Decimal('25')
|
||||
|
||||
self.assertEqual(
|
||||
sof._calculation_quantity(Decimal('100')),
|
||||
Decimal('125'))
|
||||
|
||||
@with_transaction()
|
||||
def test_sof_laytime_ignores_free_text_clauses(self):
|
||||
@@ -1627,6 +1663,8 @@ class PurchaseTradeTestCase(ModuleTestCase):
|
||||
'notice_of_readiness_hour': datetime.time(8, 0),
|
||||
'all_fast_date': datetime.date(2026, 7, 6),
|
||||
'all_fast_hour': datetime.time(10, 30),
|
||||
'documents_on_board_date': datetime.date(2026, 7, 6),
|
||||
'documents_on_board_hour': datetime.time(12, 0),
|
||||
})
|
||||
|
||||
self.assertEqual(
|
||||
@@ -1635,6 +1673,9 @@ class PurchaseTradeTestCase(ModuleTestCase):
|
||||
self.assertEqual(
|
||||
values['all_fast'],
|
||||
datetime.datetime(2026, 7, 6, 10, 30))
|
||||
self.assertEqual(
|
||||
values['documents_on_board'],
|
||||
datetime.datetime(2026, 7, 6, 12, 0))
|
||||
|
||||
@with_transaction()
|
||||
def test_sof_event_date_time_values_sync_to_datetime(self):
|
||||
|
||||
Reference in New Issue
Block a user