Add insurance template
This commit is contained in:
@@ -419,6 +419,96 @@ class PurchaseTradeTestCase(ModuleTestCase):
|
||||
}),
|
||||
'purchase/purchase_melya.fodt')
|
||||
|
||||
def test_shipment_reports_use_templates_from_configuration(self):
|
||||
'shipment report paths are resolved from purchase_trade configuration'
|
||||
shipping_report = Pool().get('stock.shipment.in.shipping', type='report')
|
||||
insurance_report = Pool().get('stock.shipment.in.insurance', type='report')
|
||||
config_model = Mock()
|
||||
config_model.search.return_value = [
|
||||
Mock(
|
||||
shipment_shipping_report_template='si_custom.fodt',
|
||||
shipment_insurance_report_template='insurance_custom.fodt',
|
||||
)
|
||||
]
|
||||
|
||||
with patch(
|
||||
'trytond.modules.purchase_trade.stock.Pool'
|
||||
) as PoolMock:
|
||||
PoolMock.return_value.get.return_value = config_model
|
||||
|
||||
self.assertEqual(
|
||||
shipping_report._resolve_configured_report_path({
|
||||
'name': 'Shipping instructions',
|
||||
'report': 'stock/si.fodt',
|
||||
}),
|
||||
'stock/si_custom.fodt')
|
||||
self.assertEqual(
|
||||
insurance_report._resolve_configured_report_path({
|
||||
'name': 'Insurance',
|
||||
'report': 'stock/insurance.fodt',
|
||||
}),
|
||||
'stock/insurance_custom.fodt')
|
||||
|
||||
def test_shipment_insurance_helpers_use_fee_and_controller(self):
|
||||
'shipment insurance helpers read insurance fee and shipment context'
|
||||
ShipmentIn = Pool().get('stock.shipment.in')
|
||||
shipment = ShipmentIn()
|
||||
shipment.number = 'IN/0001'
|
||||
shipment.bl_number = 'BL-001'
|
||||
shipment.from_location = Mock(name='LIVERPOOL')
|
||||
shipment.to_location = Mock(name='LE HAVRE')
|
||||
shipment.vessel = Mock(vessel_name='MV ATLANTIC')
|
||||
shipment.controller = Mock(rec_name='CONTROL UNION')
|
||||
shipment.supplier = Mock(rec_name='MELYA SA')
|
||||
|
||||
sale_party = Mock(rec_name='SGT FR')
|
||||
sale = Mock(party=sale_party)
|
||||
product = Mock(name='COTTON UPLAND', description='RAW WHITE COTTON')
|
||||
line = Mock(product=product, sale=sale)
|
||||
lot = Mock(sale_line=line, line=None)
|
||||
move = Mock(lot=lot, product=product)
|
||||
shipment.incoming_moves = [move]
|
||||
shipment.moves = [move]
|
||||
|
||||
insurance_fee = Mock()
|
||||
insurance_fee.product = Mock(name='Insurance')
|
||||
insurance_fee.currency = Mock(rec_name='USD')
|
||||
insurance_fee.get_amount.return_value = Decimal('1234.56')
|
||||
insurance_fee.supplier = Mock(rec_name='HELVETIA')
|
||||
shipment.fees = [insurance_fee]
|
||||
|
||||
with patch(
|
||||
'trytond.modules.purchase_trade.stock.Pool'
|
||||
) as PoolMock:
|
||||
date_model = Mock()
|
||||
date_model.today.return_value = datetime.date(2026, 4, 6)
|
||||
config_model = Mock()
|
||||
PoolMock.return_value.get.side_effect = lambda name: {
|
||||
'ir.date': date_model,
|
||||
'purchase_trade.configuration': config_model,
|
||||
}[name]
|
||||
shipment.company = Mock(
|
||||
party=Mock(
|
||||
rec_name='MELYA SA',
|
||||
address_get=Mock(return_value=Mock(city='GENEVA')),
|
||||
)
|
||||
)
|
||||
|
||||
self.assertEqual(
|
||||
shipment.report_insurance_certificate_number, 'BL-001')
|
||||
self.assertEqual(
|
||||
shipment.report_insurance_account_of, 'SGT FR')
|
||||
self.assertEqual(
|
||||
shipment.report_insurance_goods_description,
|
||||
'COTTON UPLAND - RAW WHITE COTTON')
|
||||
self.assertEqual(
|
||||
shipment.report_insurance_amount, 'USD 1234.56')
|
||||
self.assertEqual(
|
||||
shipment.report_insurance_surveyor, 'CONTROL UNION')
|
||||
self.assertEqual(
|
||||
shipment.report_insurance_issue_place_and_date,
|
||||
'GENEVA, 06-04-2026')
|
||||
|
||||
def test_sale_report_multi_line_helpers_aggregate_all_lines(self):
|
||||
'sale report helpers aggregate quantity, price lines and shipment periods'
|
||||
Sale = Pool().get('sale.sale')
|
||||
@@ -466,6 +556,27 @@ class PurchaseTradeTestCase(ModuleTestCase):
|
||||
'USC 70.2500 PER POUND (SEVENTY USC AND TWENTY FIVE CENTS) ON ICE Cotton #2 MAY 2026',
|
||||
])
|
||||
|
||||
def test_report_product_fields_expose_name_and_description(self):
|
||||
'sale and invoice templates use stable product name/description helpers'
|
||||
Sale = Pool().get('sale.sale')
|
||||
Invoice = Pool().get('account.invoice')
|
||||
|
||||
product = Mock(name='COTTON UPLAND', description='RAW WHITE COTTON')
|
||||
sale_line = Mock(product=product)
|
||||
invoice_line = Mock(product=product)
|
||||
|
||||
sale = Sale()
|
||||
sale.lines = [sale_line]
|
||||
|
||||
invoice = Invoice()
|
||||
invoice.lines = [invoice_line]
|
||||
invoice._get_report_trade_line = Mock(return_value=sale_line)
|
||||
|
||||
self.assertEqual(sale.report_product_name, 'COTTON UPLAND')
|
||||
self.assertEqual(sale.report_product_description, 'RAW WHITE COTTON')
|
||||
self.assertEqual(invoice.report_product_name, 'COTTON UPLAND')
|
||||
self.assertEqual(invoice.report_product_description, 'RAW WHITE COTTON')
|
||||
|
||||
def test_contract_factory_uses_one_line_per_selected_source(self):
|
||||
'matched multi-lot contract creation keeps one generated line per source lot'
|
||||
contract_detail = Mock(quantity=Decimal('2000'))
|
||||
|
||||
Reference in New Issue
Block a user