From 28d2fd3877b65e26757d52a53cfe1e98c85d961c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcin=20Szyma=C5=84ski?= Date: Sun, 4 May 2025 16:14:46 +0100 Subject: [PATCH] Bugfix/restore incorrect fee currency conversion (#4645) * Restore incorrect fee currency conversion * Update changelog --- CHANGELOG.md | 4 ++ apps/api/src/app/import/import.service.ts | 4 +- .../order/interfaces/activities.interface.ts | 2 + apps/api/src/app/order/order.service.ts | 59 ++++++++++++------- .../portfolio-calculator-test-utils.ts | 1 + 5 files changed, 47 insertions(+), 23 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0f59ee6d..cdb61fd0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,6 +20,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Renamed `Account` to `accounts` in the `Platform` database schema - Upgraded `prisma` from version `6.6.0` to `6.7.0` +### Fixed + +- Fixed an issue with the fee calculations related to activities in a custom currency + ## 2.159.0 - 2025-05-02 ### Added diff --git a/apps/api/src/app/import/import.service.ts b/apps/api/src/app/import/import.service.ts index 7afb2cd7..28c49ca7 100644 --- a/apps/api/src/app/import/import.service.ts +++ b/apps/api/src/app/import/import.service.ts @@ -118,6 +118,7 @@ export class ImportService { createdAt: undefined, fee: 0, feeInAssetProfileCurrency: 0, + feeInBaseCurrency: 0, id: assetProfile.id, isDraft: false, SymbolProfile: assetProfile, @@ -126,7 +127,8 @@ export class ImportService { unitPrice: marketPrice, unitPriceInAssetProfileCurrency: marketPrice, updatedAt: undefined, - userId: Account?.userId + userId: Account?.userId, + valueInBaseCurrency: value }; }) ); diff --git a/apps/api/src/app/order/interfaces/activities.interface.ts b/apps/api/src/app/order/interfaces/activities.interface.ts index 0c25c8ef..c605c478 100644 --- a/apps/api/src/app/order/interfaces/activities.interface.ts +++ b/apps/api/src/app/order/interfaces/activities.interface.ts @@ -12,11 +12,13 @@ export interface Activity extends Order { Account?: AccountWithPlatform; error?: ActivityError; feeInAssetProfileCurrency: number; + feeInBaseCurrency: number; SymbolProfile?: EnhancedSymbolProfile; tags?: Tag[]; unitPriceInAssetProfileCurrency: number; updateAccountBalance?: boolean; value: number; + valueInBaseCurrency: number; } export interface ActivityError { diff --git a/apps/api/src/app/order/order.service.ts b/apps/api/src/app/order/order.service.ts index d1847635..ebd25732 100644 --- a/apps/api/src/app/order/order.service.ts +++ b/apps/api/src/app/order/order.service.ts @@ -531,31 +531,46 @@ export class OrderService { const value = new Big(order.quantity).mul(order.unitPrice).toNumber(); + const [ + feeInAssetProfileCurrency, + feeInBaseCurrency, + unitPriceInAssetProfileCurrency, + valueInBaseCurrency + ] = await Promise.all([ + this.exchangeRateDataService.toCurrencyAtDate( + order.fee, + order.currency ?? order.SymbolProfile.currency, + order.SymbolProfile.currency, + order.date + ), + this.exchangeRateDataService.toCurrencyAtDate( + order.fee, + order.currency ?? order.SymbolProfile.currency, + userCurrency, + order.date + ), + this.exchangeRateDataService.toCurrencyAtDate( + order.unitPrice, + order.currency ?? order.SymbolProfile.currency, + order.SymbolProfile.currency, + order.date + ), + this.exchangeRateDataService.toCurrencyAtDate( + value, + order.currency ?? order.SymbolProfile.currency, + userCurrency, + order.date + ) + ]); + return { ...order, + feeInAssetProfileCurrency, + feeInBaseCurrency, + unitPriceInAssetProfileCurrency, value, - feeInAssetProfileCurrency: - await this.exchangeRateDataService.toCurrencyAtDate( - order.fee, - order.currency ?? order.SymbolProfile.currency, - order.SymbolProfile.currency, - order.date - ), - SymbolProfile: assetProfile, - unitPriceInAssetProfileCurrency: - await this.exchangeRateDataService.toCurrencyAtDate( - order.unitPrice, - order.currency ?? order.SymbolProfile.currency, - order.SymbolProfile.currency, - order.date - ), - valueInBaseCurrency: - await this.exchangeRateDataService.toCurrencyAtDate( - value, - order.currency ?? order.SymbolProfile.currency, - userCurrency, - order.date - ) + valueInBaseCurrency, + SymbolProfile: assetProfile }; }) ); diff --git a/apps/api/src/app/portfolio/calculator/portfolio-calculator-test-utils.ts b/apps/api/src/app/portfolio/calculator/portfolio-calculator-test-utils.ts index db80652c..6208eb7d 100644 --- a/apps/api/src/app/portfolio/calculator/portfolio-calculator-test-utils.ts +++ b/apps/api/src/app/portfolio/calculator/portfolio-calculator-test-utils.ts @@ -8,6 +8,7 @@ export const activityDummyData = { currency: undefined, fee: undefined, feeInAssetProfileCurrency: undefined, + feeInBaseCurrency: undefined, id: undefined, isDraft: false, symbolProfileId: undefined,