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

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

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

Loading…
Cancel
Save