Price composition

This commit is contained in:
2026-05-20 14:17:36 +02:00
parent 1f3616858a
commit 9ad0217a69
3 changed files with 90 additions and 0 deletions

View File

@@ -2589,6 +2589,50 @@ class PurchaseTradeTestCase(ModuleTestCase):
'USC 70.2500 PER POUND (SEVENTY USC AND TWENTY FIVE CENTS) ON ICE Cotton #2 MAY 2026',
])
def test_sale_report_price_composition_lines_uses_composition(self):
'sale report exposes price composition lines for invoice_melya'
Sale = Pool().get('sale.sale')
line = Mock()
line.type = 'line'
line.price_type = 'priced'
line.linked_currency = None
line.linked_unit = None
line.unit = Mock(rec_name='MT')
line.unit_price = Decimal('2525')
line.price_composition = [
Mock(component='FOB', price=Decimal('2500')),
Mock(component='FREIGHT', price=Decimal('25')),
]
sale = Sale()
sale.currency = Mock(rec_name='EUR')
sale.lines = [line]
self.assertEqual(
sale.report_price_composition_lines.splitlines(),
[
'FOB EUR 2500.0000 PER MT',
'FREIGHT EUR 25.0000 PER MT',
])
def test_invoice_report_rate_lines_prefers_sale_price_composition(self):
'invoice_melya rate block uses sale price composition when available'
Invoice = Pool().get('account.invoice')
sale = Mock(
report_price_composition_lines=(
'FOB EUR 2500.0000 PER MT\n'
'FREIGHT EUR 25.0000 PER MT'))
invoice = Invoice()
invoice.sales = [sale]
self.assertEqual(
invoice.report_rate_lines.splitlines(),
[
'FOB EUR 2500.0000 PER MT',
'FREIGHT EUR 25.0000 PER MT',
])
def test_sale_report_converts_mixed_units_for_total_and_words(self):
'sale report totals prefer the virtual lot unit as common unit'
Sale = Pool().get('sale.sale')