diff --git a/apps/api/src/app/portfolio/current-rate.service.ts b/apps/api/src/app/portfolio/current-rate.service.ts index 0549596ce..86020ce2e 100644 --- a/apps/api/src/app/portfolio/current-rate.service.ts +++ b/apps/api/src/app/portfolio/current-rate.service.ts @@ -28,13 +28,7 @@ export class CurrentRateService { (!dateQuery.gte || isBefore(dateQuery.gte, new Date())) && (!dateQuery.in || this.containsToday(dateQuery.in)); - const promises: Promise< - { - date: Date; - marketPrice: number; - symbol: string; - }[] - >[] = []; + const promises: Promise[] = []; if (includeToday) { const today = resetHours(new Date()); @@ -42,16 +36,17 @@ export class CurrentRateService { this.dataProviderService .getQuotes(dataGatheringItems) .then((dataResultProvider) => { - const result = []; + const result: GetValueObject[] = []; for (const dataGatheringItem of dataGatheringItems) { result.push({ date: today, - marketPrice: this.exchangeRateDataService.toCurrency( - dataResultProvider?.[dataGatheringItem.symbol]?.marketPrice ?? - 0, - dataResultProvider?.[dataGatheringItem.symbol]?.currency, - userCurrency - ), + marketPriceInBaseCurrency: + this.exchangeRateDataService.toCurrency( + dataResultProvider?.[dataGatheringItem.symbol] + ?.marketPrice ?? 0, + dataResultProvider?.[dataGatheringItem.symbol]?.currency, + userCurrency + ), symbol: dataGatheringItem.symbol }); } @@ -74,11 +69,12 @@ export class CurrentRateService { return data.map((marketDataItem) => { return { date: marketDataItem.date, - marketPrice: this.exchangeRateDataService.toCurrency( - marketDataItem.marketPrice, - currencies[marketDataItem.symbol], - userCurrency - ), + marketPriceInBaseCurrency: + this.exchangeRateDataService.toCurrency( + marketDataItem.marketPrice, + currencies[marketDataItem.symbol], + userCurrency + ), symbol: marketDataItem.symbol }; }); diff --git a/apps/api/src/app/portfolio/interfaces/get-value-object.interface.ts b/apps/api/src/app/portfolio/interfaces/get-value-object.interface.ts index 8072a5ea6..e67aca619 100644 --- a/apps/api/src/app/portfolio/interfaces/get-value-object.interface.ts +++ b/apps/api/src/app/portfolio/interfaces/get-value-object.interface.ts @@ -1,5 +1,5 @@ export interface GetValueObject { date: Date; - marketPrice: number; + marketPriceInBaseCurrency: number; symbol: string; } diff --git a/apps/api/src/app/portfolio/portfolio-calculator.ts b/apps/api/src/app/portfolio/portfolio-calculator.ts index 4f8631a3f..555ad1cab 100644 --- a/apps/api/src/app/portfolio/portfolio-calculator.ts +++ b/apps/api/src/app/portfolio/portfolio-calculator.ts @@ -231,9 +231,9 @@ export class PortfolioCalculator { if (!marketSymbolMap[date]) { marketSymbolMap[date] = {}; } - if (marketSymbol.marketPrice) { + if (marketSymbol.marketPriceInBaseCurrency) { marketSymbolMap[date][marketSymbol.symbol] = new Big( - marketSymbol.marketPrice + marketSymbol.marketPriceInBaseCurrency ); } } @@ -548,9 +548,9 @@ export class PortfolioCalculator { if (!marketSymbolMap[date]) { marketSymbolMap[date] = {}; } - if (marketSymbol.marketPrice) { + if (marketSymbol.marketPriceInBaseCurrency) { marketSymbolMap[date][marketSymbol.symbol] = new Big( - marketSymbol.marketPrice + marketSymbol.marketPriceInBaseCurrency ); } } diff --git a/apps/api/src/app/portfolio/portfolio.service.ts b/apps/api/src/app/portfolio/portfolio.service.ts index 409a40017..840c17f42 100644 --- a/apps/api/src/app/portfolio/portfolio.service.ts +++ b/apps/api/src/app/portfolio/portfolio.service.ts @@ -462,8 +462,9 @@ export class PortfolioService { const accounts = await this.getValueOfAccounts({ orders, - userId, portfolioItemsNow, + userCurrency, + userId, filters: aFilters }); @@ -899,7 +900,8 @@ export class PortfolioService { const accounts = await this.getValueOfAccounts({ orders, portfolioItemsNow, - userId + userId, + userCurrency: currency }); return { rules: { @@ -1268,11 +1270,13 @@ export class PortfolioService { filters = [], orders, portfolioItemsNow, + userCurrency, userId }: { filters?: Filter[]; orders: OrderWithAccount[]; portfolioItemsNow: { [p: string]: TimelinePosition }; + userCurrency: string; userId: string; }) { const accounts: PortfolioDetails['accounts'] = {}; @@ -1301,34 +1305,47 @@ export class PortfolioService { accounts[account.id] = { balance: account.balance, currency: account.currency, - current: account.balance, + current: this.exchangeRateDataService.toCurrency( + account.balance, + account.currency, + userCurrency + ), name: account.name, - original: account.balance + original: this.exchangeRateDataService.toCurrency( + account.balance, + account.currency, + userCurrency + ) }; for (const order of ordersByAccount) { - let currentValueOfSymbol = + let currentValueOfSymbolInBaseCurrency = order.quantity * portfolioItemsNow[order.SymbolProfile.symbol].marketPrice; - let originalValueOfSymbol = order.quantity * order.unitPrice; + let originalValueOfSymbolInBaseCurrency = + this.exchangeRateDataService.toCurrency( + order.quantity * order.unitPrice, + order.SymbolProfile.currency, + userCurrency + ); if (order.type === 'SELL') { - currentValueOfSymbol *= -1; - originalValueOfSymbol *= -1; + currentValueOfSymbolInBaseCurrency *= -1; + originalValueOfSymbolInBaseCurrency *= -1; } if (accounts[order.Account?.id || UNKNOWN_KEY]?.current) { accounts[order.Account?.id || UNKNOWN_KEY].current += - currentValueOfSymbol; + currentValueOfSymbolInBaseCurrency; accounts[order.Account?.id || UNKNOWN_KEY].original += - originalValueOfSymbol; + originalValueOfSymbolInBaseCurrency; } else { accounts[order.Account?.id || UNKNOWN_KEY] = { balance: 0, currency: order.Account?.currency, - current: currentValueOfSymbol, + current: currentValueOfSymbolInBaseCurrency, name: account.name, - original: originalValueOfSymbol + original: originalValueOfSymbolInBaseCurrency }; } }