From c523b014f0f2e793de2d9e646c13e5cd95133ee6 Mon Sep 17 00:00:00 2001 From: csehatt741 Date: Thu, 27 Mar 2025 09:36:29 +0100 Subject: [PATCH] Portfolio calculation updated --- apps/api/src/app/import/import.service.ts | 7 +++++++ apps/api/src/app/order/interfaces/activities.interface.ts | 1 + apps/api/src/app/order/order.service.ts | 7 +++++++ .../src/app/portfolio/calculator/portfolio-calculator.ts | 8 ++++---- 4 files changed, 19 insertions(+), 4 deletions(-) diff --git a/apps/api/src/app/import/import.service.ts b/apps/api/src/app/import/import.service.ts index c72420417..9e0bf1d53 100644 --- a/apps/api/src/app/import/import.service.ts +++ b/apps/api/src/app/import/import.service.ts @@ -128,6 +128,13 @@ export class ImportService { symbolProfileId: assetProfile.id, type: 'DIVIDEND', unitPrice: marketPrice, + unitPriceInBaseCurrency: + await this.exchangeRateDataService.toCurrencyAtDate( + marketPrice, + assetProfile.currency, + userCurrency, + date + ), updatedAt: undefined, userId: Account?.userId, valueInBaseCurrency: diff --git a/apps/api/src/app/order/interfaces/activities.interface.ts b/apps/api/src/app/order/interfaces/activities.interface.ts index b16d10b7d..09038ea42 100644 --- a/apps/api/src/app/order/interfaces/activities.interface.ts +++ b/apps/api/src/app/order/interfaces/activities.interface.ts @@ -14,6 +14,7 @@ export interface Activity extends Order { feeInBaseCurrency: number; SymbolProfile?: EnhancedSymbolProfile; tags?: Tag[]; + unitPriceInBaseCurrency: number; updateAccountBalance?: boolean; value: number; valueInBaseCurrency: number; diff --git a/apps/api/src/app/order/order.service.ts b/apps/api/src/app/order/order.service.ts index fced56950..abc7299c6 100644 --- a/apps/api/src/app/order/order.service.ts +++ b/apps/api/src/app/order/order.service.ts @@ -542,6 +542,13 @@ export class OrderService { order.date ), SymbolProfile: assetProfile, + unitPriceInBaseCurrency: + await this.exchangeRateDataService.toCurrencyAtDate( + order.unitPrice, + order.currency ?? order.SymbolProfile.currency, + userCurrency, + order.date + ), valueInBaseCurrency: await this.exchangeRateDataService.toCurrencyAtDate( value, diff --git a/apps/api/src/app/portfolio/calculator/portfolio-calculator.ts b/apps/api/src/app/portfolio/calculator/portfolio-calculator.ts index 52d57230b..64ded194e 100644 --- a/apps/api/src/app/portfolio/calculator/portfolio-calculator.ts +++ b/apps/api/src/app/portfolio/calculator/portfolio-calculator.ts @@ -112,12 +112,12 @@ export abstract class PortfolioCalculator { .map( ({ date, - fee, + feeInBaseCurrency, quantity, SymbolProfile, tags = [], type, - unitPrice + unitPriceInBaseCurrency }) => { if (isBefore(date, dateOfFirstActivity)) { dateOfFirstActivity = date; @@ -134,9 +134,9 @@ export abstract class PortfolioCalculator { tags, type, date: format(date, DATE_FORMAT), - fee: new Big(fee), + fee: new Big(feeInBaseCurrency), quantity: new Big(quantity), - unitPrice: new Big(unitPrice) + unitPrice: new Big(unitPriceInBaseCurrency) }; } )