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 @classmethod
def _get_basis_premium_delta(cls, record): 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) total = Decimal(record.get_basis_price() or 0)
components = cls._get_basis_component_total(record) components = cls._get_basis_component_total(record)
return round(total - components, 4) return round(total - components, 4)
@@ -320,7 +323,34 @@ class ValuationBase(ModelSQL):
if line.price_type == 'basis': if line.price_type == 'basis':
premium_delta = cls._get_basis_premium_delta(line) 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( values = cls._build_basis_pnl(
line=line, lot=lot, sale_line=None, pc=pc, sign=-1, line=line, lot=lot, sale_line=None, pc=pc, sign=-1,
extra_price=premium_delta) extra_price=premium_delta)
@@ -522,11 +552,12 @@ class ValuationBase(ModelSQL):
for lot in sale_line.lots or []: for lot in sale_line.lots or []:
if sale_line.price_type == 'basis': if sale_line.price_type == 'basis':
summaries = sale_line.price_summary or [] summaries = sale_line.price_summary or []
premium_delta = cls._get_basis_premium_delta(sale_line)
if not summaries: if not summaries:
values = cls._build_simple_pnl_from_sale_line( values = cls._build_simple_pnl_from_sale_line(
sale_line=sale_line, sale_line=sale_line,
lot=lot, lot=lot,
price=Decimal(sale_line.unit_price or 0), price=Decimal(sale_line.unit_price or 0) + premium_delta,
state='unfixed', state='unfixed',
pnl_type='sale priced' pnl_type='sale priced'
) )
@@ -543,7 +574,6 @@ class ValuationBase(ModelSQL):
price_lines.append(values) price_lines.append(values)
continue continue
premium_delta = cls._get_basis_premium_delta(sale_line)
for pc in summaries: for pc in summaries:
values = cls._build_basis_pnl_from_sale_line( values = cls._build_basis_pnl_from_sale_line(
sale_line=sale_line, lot=lot, pc=pc, sale_line=sale_line, lot=lot, pc=pc,