From 6fd99d12285a34deaf0ce86a51dabfa6daeebff7 Mon Sep 17 00:00:00 2001 From: csehatt741 Date: Mon, 7 Apr 2025 11:48:02 +0200 Subject: [PATCH] Activity fee, unitPrice in symbol curreny added --- apps/api/src/app/import/import.service.ts | 2 ++ .../app/order/interfaces/activities.interface.ts | 2 ++ apps/api/src/app/order/order.service.ts | 14 ++++++++++++++ .../portfolio/calculator/portfolio-calculator.ts | 8 ++++---- ...tor-baln-buy-and-sell-in-two-activities.spec.ts | 12 ++++++------ .../portfolio-calculator-baln-buy-and-sell.spec.ts | 8 ++++---- .../roai/portfolio-calculator-baln-buy.spec.ts | 4 ++-- ...alculator-btcusd-buy-and-sell-partially.spec.ts | 8 ++++---- .../roai/portfolio-calculator-fee.spec.ts | 4 ++-- .../roai/portfolio-calculator-googl-buy.spec.ts | 4 ++-- .../roai/portfolio-calculator-item.spec.ts | 4 ++-- .../roai/portfolio-calculator-liability.spec.ts | 4 ++-- ...folio-calculator-msft-buy-with-dividend.spec.ts | 8 ++++---- ...-calculator-novn-buy-and-sell-partially.spec.ts | 4 ++-- .../portfolio-calculator-novn-buy-and-sell.spec.ts | 4 ++-- 15 files changed, 54 insertions(+), 36 deletions(-) diff --git a/apps/api/src/app/import/import.service.ts b/apps/api/src/app/import/import.service.ts index 4ed5749a7..6ebaa8417 100644 --- a/apps/api/src/app/import/import.service.ts +++ b/apps/api/src/app/import/import.service.ts @@ -122,6 +122,7 @@ export class ImportService { createdAt: undefined, fee: 0, feeInBaseCurrency: 0, + feeInSymbolCurrency: 0, id: assetProfile.id, isDraft: false, SymbolProfile: assetProfile, @@ -135,6 +136,7 @@ export class ImportService { userCurrency, date ), + unitPriceInSymbolCurrency: marketPrice, 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 09038ea42..e085d1f23 100644 --- a/apps/api/src/app/order/interfaces/activities.interface.ts +++ b/apps/api/src/app/order/interfaces/activities.interface.ts @@ -12,9 +12,11 @@ export interface Activity extends Order { Account?: AccountWithPlatform; error?: ActivityError; feeInBaseCurrency: number; + feeInSymbolCurrency: number; SymbolProfile?: EnhancedSymbolProfile; tags?: Tag[]; unitPriceInBaseCurrency: number; + unitPriceInSymbolCurrency: 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 abc7299c6..bae7b1ac2 100644 --- a/apps/api/src/app/order/order.service.ts +++ b/apps/api/src/app/order/order.service.ts @@ -541,6 +541,13 @@ export class OrderService { userCurrency, order.date ), + feeInSymbolCurrency: + await this.exchangeRateDataService.toCurrencyAtDate( + order.fee, + order.currency ?? order.SymbolProfile.currency, + order.SymbolProfile.currency, + order.date + ), SymbolProfile: assetProfile, unitPriceInBaseCurrency: await this.exchangeRateDataService.toCurrencyAtDate( @@ -549,6 +556,13 @@ export class OrderService { userCurrency, order.date ), + unitPriceInSymbolCurrency: + await this.exchangeRateDataService.toCurrencyAtDate( + order.unitPrice, + order.currency ?? order.SymbolProfile.currency, + order.SymbolProfile.currency, + 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 64ded194e..1657733ef 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, - feeInBaseCurrency, + feeInSymbolCurrency, quantity, SymbolProfile, tags = [], type, - unitPriceInBaseCurrency + unitPriceInSymbolCurrency }) => { if (isBefore(date, dateOfFirstActivity)) { dateOfFirstActivity = date; @@ -134,9 +134,9 @@ export abstract class PortfolioCalculator { tags, type, date: format(date, DATE_FORMAT), - fee: new Big(feeInBaseCurrency), + fee: new Big(feeInSymbolCurrency), quantity: new Big(quantity), - unitPrice: new Big(unitPriceInBaseCurrency) + unitPrice: new Big(unitPriceInSymbolCurrency) }; } ) diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy-and-sell-in-two-activities.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy-and-sell-in-two-activities.spec.ts index c5f5a39c8..be216239b 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy-and-sell-in-two-activities.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy-and-sell-in-two-activities.spec.ts @@ -91,7 +91,7 @@ describe('PortfolioCalculator', () => { { ...activityDummyData, date: new Date('2021-11-22'), - feeInBaseCurrency: 1.55, + feeInSymbolCurrency: 1.55, quantity: 2, SymbolProfile: { ...symbolProfileDummyData, @@ -101,12 +101,12 @@ describe('PortfolioCalculator', () => { symbol: 'BALN.SW' }, type: 'BUY', - unitPriceInBaseCurrency: 142.9 + unitPriceInSymbolCurrency: 142.9 }, { ...activityDummyData, date: new Date('2021-11-30'), - feeInBaseCurrency: 1.65, + feeInSymbolCurrency: 1.65, quantity: 1, SymbolProfile: { ...symbolProfileDummyData, @@ -116,12 +116,12 @@ describe('PortfolioCalculator', () => { symbol: 'BALN.SW' }, type: 'SELL', - unitPriceInBaseCurrency: 136.6 + unitPriceInSymbolCurrency: 136.6 }, { ...activityDummyData, date: new Date('2021-11-30'), - feeInBaseCurrency: 0, + feeInSymbolCurrency: 0, quantity: 1, SymbolProfile: { ...symbolProfileDummyData, @@ -131,7 +131,7 @@ describe('PortfolioCalculator', () => { symbol: 'BALN.SW' }, type: 'SELL', - unitPriceInBaseCurrency: 136.6 + unitPriceInSymbolCurrency: 136.6 } ]; diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy-and-sell.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy-and-sell.spec.ts index 6997e0258..ac15f5be0 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy-and-sell.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy-and-sell.spec.ts @@ -91,7 +91,7 @@ describe('PortfolioCalculator', () => { { ...activityDummyData, date: new Date('2021-11-22'), - feeInBaseCurrency: 1.55, + feeInSymbolCurrency: 1.55, quantity: 2, SymbolProfile: { ...symbolProfileDummyData, @@ -101,12 +101,12 @@ describe('PortfolioCalculator', () => { symbol: 'BALN.SW' }, type: 'BUY', - unitPriceInBaseCurrency: 142.9 + unitPriceInSymbolCurrency: 142.9 }, { ...activityDummyData, date: new Date('2021-11-30'), - feeInBaseCurrency: 1.65, + feeInSymbolCurrency: 1.65, quantity: 2, SymbolProfile: { ...symbolProfileDummyData, @@ -116,7 +116,7 @@ describe('PortfolioCalculator', () => { symbol: 'BALN.SW' }, type: 'SELL', - unitPriceInBaseCurrency: 136.6 + unitPriceInSymbolCurrency: 136.6 } ]; diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy.spec.ts index be7d3a0a0..4c3fbd5bf 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy.spec.ts @@ -91,7 +91,7 @@ describe('PortfolioCalculator', () => { { ...activityDummyData, date: new Date('2021-11-30'), - feeInBaseCurrency: 1.55, + feeInSymbolCurrency: 1.55, quantity: 2, SymbolProfile: { ...symbolProfileDummyData, @@ -101,7 +101,7 @@ describe('PortfolioCalculator', () => { symbol: 'BALN.SW' }, type: 'BUY', - unitPriceInBaseCurrency: 136.6 + unitPriceInSymbolCurrency: 136.6 } ]; diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btcusd-buy-and-sell-partially.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btcusd-buy-and-sell-partially.spec.ts index 45d446e59..2f2440ead 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btcusd-buy-and-sell-partially.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btcusd-buy-and-sell-partially.spec.ts @@ -105,7 +105,7 @@ describe('PortfolioCalculator', () => { { ...activityDummyData, date: new Date('2015-01-01'), - feeInBaseCurrency: 0, + feeInSymbolCurrency: 0, quantity: 2, SymbolProfile: { ...symbolProfileDummyData, @@ -115,12 +115,12 @@ describe('PortfolioCalculator', () => { symbol: 'BTCUSD' }, type: 'BUY', - unitPriceInBaseCurrency: 320.43 + unitPriceInSymbolCurrency: 320.43 }, { ...activityDummyData, date: new Date('2017-12-31'), - feeInBaseCurrency: 0, + feeInSymbolCurrency: 0, quantity: 1, SymbolProfile: { ...symbolProfileDummyData, @@ -130,7 +130,7 @@ describe('PortfolioCalculator', () => { symbol: 'BTCUSD' }, type: 'SELL', - unitPriceInBaseCurrency: 14156.4 + unitPriceInSymbolCurrency: 14156.4 } ]; diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-fee.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-fee.spec.ts index c15847a59..022c96621 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-fee.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-fee.spec.ts @@ -91,7 +91,7 @@ describe('PortfolioCalculator', () => { { ...activityDummyData, date: new Date('2021-09-01'), - feeInBaseCurrency: 49, + feeInSymbolCurrency: 49, quantity: 0, SymbolProfile: { ...symbolProfileDummyData, @@ -101,7 +101,7 @@ describe('PortfolioCalculator', () => { symbol: '2c463fb3-af07-486e-adb0-8301b3d72141' }, type: 'FEE', - unitPriceInBaseCurrency: 0 + unitPriceInSymbolCurrency: 0 } ]; diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-googl-buy.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-googl-buy.spec.ts index b287507b8..32e4bc6c1 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-googl-buy.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-googl-buy.spec.ts @@ -104,7 +104,7 @@ describe('PortfolioCalculator', () => { { ...activityDummyData, date: new Date('2023-01-03'), - feeInBaseCurrency: 1, + feeInSymbolCurrency: 1, quantity: 1, SymbolProfile: { ...symbolProfileDummyData, @@ -114,7 +114,7 @@ describe('PortfolioCalculator', () => { symbol: 'GOOGL' }, type: 'BUY', - unitPriceInBaseCurrency: 89.12 + unitPriceInSymbolCurrency: 89.12 } ]; diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-item.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-item.spec.ts index 408b82dc8..1d89d848d 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-item.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-item.spec.ts @@ -91,7 +91,7 @@ describe('PortfolioCalculator', () => { { ...activityDummyData, date: new Date('2022-01-01'), - feeInBaseCurrency: 0, + feeInSymbolCurrency: 0, quantity: 1, SymbolProfile: { ...symbolProfileDummyData, @@ -101,7 +101,7 @@ describe('PortfolioCalculator', () => { symbol: 'dac95060-d4f2-4653-a253-2c45e6fb5cde' }, type: 'ITEM', - unitPriceInBaseCurrency: 500000 + unitPriceInSymbolCurrency: 500000 } ]; diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-liability.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-liability.spec.ts index 74dfd6673..00c1a3720 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-liability.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-liability.spec.ts @@ -91,7 +91,7 @@ describe('PortfolioCalculator', () => { { ...activityDummyData, date: new Date('2023-01-01'), // Date in future - feeInBaseCurrency: 0, + feeInSymbolCurrency: 0, quantity: 1, SymbolProfile: { ...symbolProfileDummyData, @@ -101,7 +101,7 @@ describe('PortfolioCalculator', () => { symbol: '55196015-1365-4560-aa60-8751ae6d18f8' }, type: 'LIABILITY', - unitPriceInBaseCurrency: 3000 + unitPriceInSymbolCurrency: 3000 } ]; diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-msft-buy-with-dividend.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-msft-buy-with-dividend.spec.ts index 1cf652a85..f841384c9 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-msft-buy-with-dividend.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-msft-buy-with-dividend.spec.ts @@ -104,7 +104,7 @@ describe('PortfolioCalculator', () => { { ...activityDummyData, date: new Date('2021-09-16'), - feeInBaseCurrency: 19, + feeInSymbolCurrency: 19, quantity: 1, SymbolProfile: { ...symbolProfileDummyData, @@ -114,12 +114,12 @@ describe('PortfolioCalculator', () => { symbol: 'MSFT' }, type: 'BUY', - unitPriceInBaseCurrency: 298.58 + unitPriceInSymbolCurrency: 298.58 }, { ...activityDummyData, date: new Date('2021-11-16'), - feeInBaseCurrency: 0, + feeInSymbolCurrency: 0, quantity: 1, SymbolProfile: { ...symbolProfileDummyData, @@ -129,7 +129,7 @@ describe('PortfolioCalculator', () => { symbol: 'MSFT' }, type: 'DIVIDEND', - unitPriceInBaseCurrency: 0.62 + unitPriceInSymbolCurrency: 0.62 } ]; diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-novn-buy-and-sell-partially.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-novn-buy-and-sell-partially.spec.ts index 444de4d51..1620ff258 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-novn-buy-and-sell-partially.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-novn-buy-and-sell-partially.spec.ts @@ -105,7 +105,7 @@ describe('PortfolioCalculator', () => { ...activityDummyData, ...activity, date: parseDate(activity.date), - feeInBaseCurrency: activity.fee, + feeInSymbolCurrency: activity.fee, SymbolProfile: { ...symbolProfileDummyData, currency: activity.currency, @@ -113,7 +113,7 @@ describe('PortfolioCalculator', () => { name: 'Novartis AG', symbol: activity.symbol }, - unitPriceInBaseCurrency: activity.unitPrice + unitPriceInSymbolCurrency: activity.unitPrice })); const portfolioCalculator = portfolioCalculatorFactory.createCalculator({ diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-novn-buy-and-sell.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-novn-buy-and-sell.spec.ts index 1d2183553..457248faa 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-novn-buy-and-sell.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-novn-buy-and-sell.spec.ts @@ -105,7 +105,7 @@ describe('PortfolioCalculator', () => { ...activityDummyData, ...activity, date: parseDate(activity.date), - feeInBaseCurrency: activity.fee, + feeInSymbolCurrency: activity.fee, SymbolProfile: { ...symbolProfileDummyData, currency: activity.currency, @@ -113,7 +113,7 @@ describe('PortfolioCalculator', () => { name: 'Novartis AG', symbol: activity.symbol }, - unitPriceInBaseCurrency: activity.unitPrice + unitPriceInSymbolCurrency: activity.unitPrice })); const portfolioCalculator = portfolioCalculatorFactory.createCalculator({