This commit is contained in:
2026-04-01 21:48:31 +02:00
parent ea2627c9ae
commit 408970c339

View File

@@ -198,6 +198,9 @@ class ValuationBase(ModelSQL):
@classmethod
def _get_basis_premium_delta(cls, record):
premium_getter = getattr(record, '_get_premium_price', None)
if premium_getter:
return round(Decimal(premium_getter() or 0), 4)
total = Decimal(record.get_basis_price() or 0)
components = cls._get_basis_component_total(record)
return round(total - components, 4)
@@ -320,7 +323,34 @@ class ValuationBase(ModelSQL):
if line.price_type == 'basis':
premium_delta = cls._get_basis_premium_delta(line)
for pc in line.price_summary or []:
summaries = line.price_summary or []
if not summaries:
values = cls._build_simple_pnl(
line=line,
lot=lot,
sale_line=None,
price=Decimal(line.unit_price or 0) + premium_delta,
state='unfixed',
sign=-1,
pnl_type='pur. priced'
)
if values and lot.sale_line:
values['sale'] = lot.sale_line.sale.id
values['sale_line'] = lot.sale_line.id
if line.mtm and cls._supports_strategy_mtm(values):
for strat in line.mtm:
values['mtm_price'] = cls._get_strategy_mtm_price(strat, line)
values['mtm'] = strat.get_mtm(line, values['quantity'])
values['strategy'] = strat
if values:
price_lines.append(values)
else:
if values:
price_lines.append(values)
continue
for pc in summaries:
values = cls._build_basis_pnl(
line=line, lot=lot, sale_line=None, pc=pc, sign=-1,
extra_price=premium_delta)
@@ -522,11 +552,12 @@ class ValuationBase(ModelSQL):
for lot in sale_line.lots or []:
if sale_line.price_type == 'basis':
summaries = sale_line.price_summary or []
premium_delta = cls._get_basis_premium_delta(sale_line)
if not summaries:
values = cls._build_simple_pnl_from_sale_line(
sale_line=sale_line,
lot=lot,
price=Decimal(sale_line.unit_price or 0),
price=Decimal(sale_line.unit_price or 0) + premium_delta,
state='unfixed',
pnl_type='sale priced'
)
@@ -543,7 +574,6 @@ class ValuationBase(ModelSQL):
price_lines.append(values)
continue
premium_delta = cls._get_basis_premium_delta(sale_line)
for pc in summaries:
values = cls._build_basis_pnl_from_sale_line(
sale_line=sale_line, lot=lot, pc=pc,