Browse Source

Calculate and include parent holdings allocation per holding (ETF)

pull/4044/head
JoryHogeveen 9 months ago
parent
commit
90103582a7
  1. 30
      apps/client/src/app/pages/portfolio/allocations/allocations-page.component.ts

30
apps/client/src/app/pages/portfolio/allocations/allocations-page.component.ts

@ -7,7 +7,7 @@ import { MAX_TOP_HOLDINGS, UNKNOWN_KEY } from '@ghostfolio/common/config';
import { prettifySymbol } from '@ghostfolio/common/helper'; import { prettifySymbol } from '@ghostfolio/common/helper';
import { import {
AssetProfileIdentifier, AssetProfileIdentifier,
Holding, HoldingWithParents,
PortfolioDetails, PortfolioDetails,
PortfolioPosition, PortfolioPosition,
User User
@ -86,7 +86,7 @@ export class AllocationsPageComponent implements OnDestroy, OnInit {
value: number; value: number;
}; };
}; };
public topHoldings: Holding[]; public topHoldings: HoldingWithParents[];
public topHoldingsMap: { public topHoldingsMap: {
[name: string]: { name: string; value: number }; [name: string]: { name: string; value: number };
}; };
@ -490,7 +490,31 @@ export class AllocationsPageComponent implements OnDestroy, OnInit {
name, name,
allocationInPercentage: allocationInPercentage:
this.totalValueInEtf > 0 ? value / this.totalValueInEtf : 0, this.totalValueInEtf > 0 ? value / this.totalValueInEtf : 0,
valueInBaseCurrency: value valueInBaseCurrency: value,
parents: Object.entries(this.portfolioDetails.holdings)
.map(([symbol, holding]) => {
if (holding.holdings) {
const parentHoldings = holding.holdings;
for (const index in parentHoldings) {
if (name === parentHoldings[index].name) {
return {
name: symbol,
allocationInPercentage:
(parentHoldings[index].valueInBaseCurrency / value) *
100,
valueInBaseCurrency:
parentHoldings[index].valueInBaseCurrency
};
}
}
}
return null;
})
.filter((item) => null !== item)
.sort((a, b) => {
return b.allocationInPercentage - a.allocationInPercentage;
})
}; };
}) })
.sort((a, b) => { .sort((a, b) => {

Loading…
Cancel
Save