Browse Source

Fix portfolio calculation for holdings with same symbol

pull/7664/head
Thomas Kaul 1 week ago
parent
commit
c6ad3c9d47
  1. 33
      apps/api/src/app/endpoints/public/public.service.ts
  2. 8
      apps/api/src/app/portfolio/portfolio.controller.ts

33
apps/api/src/app/endpoints/public/public.service.ts

@ -162,33 +162,32 @@ export class PublicService {
})
).toNumber();
for (const portfolioPosition of holdings) {
for (const holding of holdings) {
publicPortfolioResponse.holdings.push({
allocationInPercentage:
portfolioPosition.valueInBaseCurrency / totalValue,
allocationInPercentage: holding.valueInBaseCurrency / totalValue,
assetProfile: {
...portfolioPosition.assetProfile,
...holding.assetProfile,
assetClass:
hasDetails ||
portfolioPosition.assetProfile.assetClass === AssetClass.LIQUIDITY
? portfolioPosition.assetProfile.assetClass
holding.assetProfile.assetClass === AssetClass.LIQUIDITY
? holding.assetProfile.assetClass
: undefined,
assetClassLabel:
hasDetails ||
portfolioPosition.assetProfile.assetClass === AssetClass.LIQUIDITY
? portfolioPosition.assetProfile.assetClassLabel
holding.assetProfile.assetClass === AssetClass.LIQUIDITY
? holding.assetProfile.assetClassLabel
: undefined,
assetSubClass:
hasDetails ||
portfolioPosition.assetProfile.assetSubClass === AssetSubClass.CASH
? portfolioPosition.assetProfile.assetSubClass
holding.assetProfile.assetSubClass === AssetSubClass.CASH
? holding.assetProfile.assetSubClass
: undefined,
assetSubClassLabel:
hasDetails ||
portfolioPosition.assetProfile.assetSubClass === AssetSubClass.CASH
? portfolioPosition.assetProfile.assetSubClassLabel
holding.assetProfile.assetSubClass === AssetSubClass.CASH
? holding.assetProfile.assetSubClassLabel
: undefined,
holdings: portfolioPosition.assetProfile.holdings?.map(
holdings: holding.assetProfile.holdings?.map(
({ allocationInPercentage, name }) => {
return { allocationInPercentage, name };
}
@ -202,11 +201,11 @@ export class PublicService {
sectors: []
})
},
dateOfFirstActivity: portfolioPosition.dateOfFirstActivity,
markets: hasDetails ? portfolioPosition.markets : undefined,
dateOfFirstActivity: holding.dateOfFirstActivity,
markets: hasDetails ? holding.markets : undefined,
netPerformancePercentWithCurrencyEffect:
portfolioPosition.netPerformancePercentWithCurrencyEffect,
valueInPercentage: portfolioPosition.valueInBaseCurrency / totalValue
holding.netPerformancePercentWithCurrencyEffect,
valueInPercentage: holding.valueInBaseCurrency / totalValue
});
}

8
apps/api/src/app/portfolio/portfolio.controller.ts

@ -148,11 +148,9 @@ export class PortfolioController {
return a + b;
}, 0);
for (const portfolioPosition of holdings) {
portfolioPosition.investment =
portfolioPosition.investment / totalInvestment;
portfolioPosition.valueInPercentage =
portfolioPosition.valueInBaseCurrency / totalValue;
for (const holding of holdings) {
holding.investment = holding.investment / totalInvestment;
holding.valueInPercentage = holding.valueInBaseCurrency / totalValue;
}
for (const [name, { valueInBaseCurrency }] of Object.entries(accounts)) {

Loading…
Cancel
Save