Bug premium sale

This commit is contained in:
2026-06-01 14:50:55 +02:00
parent fcd24af41b
commit 3b9a6ca943
2 changed files with 24 additions and 2 deletions

View File

@@ -509,7 +509,10 @@ class Sale(metaclass=PoolMeta):
def _get_report_display_price_value(self, line):
if getattr(line, 'price_type', None) == 'basis':
if getattr(line, 'enable_linked_currency', False) and getattr(line, 'linked_currency', None):
return Decimal(str(line.premium or 0))
premium = getattr(line, 'premium', None)
if premium is None and hasattr(line, '_get_premium_price'):
premium = line._get_premium_price()
return Decimal(str(premium or 0))
return Decimal(str(line._get_premium_price() or 0))
if getattr(line, 'linked_price', None):
return Decimal(str(line.linked_price or 0))
@@ -1854,7 +1857,10 @@ class SaleLine(metaclass=PoolMeta):
}])
def _get_premium_price(self):
return Decimal(self.premium or 0)
premium = getattr(self, 'premium', None)
if premium is None:
premium = self.get_premium('premium')
return Decimal(str(premium or 0))
def _get_amount_quantity(self):
if getattr(self, 'finished', False):

View File

@@ -2164,6 +2164,22 @@ class PurchaseTradeTestCase(ModuleTestCase):
self.assertEqual(line.get_premium('premium'), Decimal('10.2500'))
def test_sale_line_premium_price_falls_back_to_decomposition(self):
'sale line premium price works when the function field is not loaded'
class LineWithoutPremium:
premium_decomposition = [
Mock(base_amount=Decimal('7.25')),
Mock(base_amount=Decimal('-1.00')),
]
get_premium = sale_module.SaleLine.get_premium
line = LineWithoutPremium()
self.assertEqual(
sale_module.SaleLine._get_premium_price(line),
Decimal('6.2500'))
def test_purchase_and_sale_line_premium_fields_are_readonly_totals(self):
'line premium fields are readonly totals from premium decomposition'
PurchaseLine = Pool().get('purchase.line')