diff --git a/apps/api/src/app/portfolio/calculator/portfolio-calculator.ts b/apps/api/src/app/portfolio/calculator/portfolio-calculator.ts index 48fcaf343..488f9ce99 100644 --- a/apps/api/src/app/portfolio/calculator/portfolio-calculator.ts +++ b/apps/api/src/app/portfolio/calculator/portfolio-calculator.ts @@ -29,7 +29,7 @@ import { max, subDays } from 'date-fns'; -import { last, uniq } from 'lodash'; +import { last, uniq, uniqBy } from 'lodash'; export abstract class PortfolioCalculator { protected static readonly ENABLE_LOGGING = false; @@ -57,9 +57,10 @@ export abstract class PortfolioCalculator { this.currentRateService = currentRateService; this.exchangeRateDataService = exchangeRateDataService; this.orders = activities.map( - ({ date, fee, quantity, SymbolProfile, type, unitPrice }) => { + ({ date, fee, quantity, SymbolProfile, tags = [], type, unitPrice }) => { return { SymbolProfile, + tags, type, date: format(date, DATE_FORMAT), fee: new Big(fee), @@ -711,17 +712,17 @@ export abstract class PortfolioCalculator { currentTransactionPointItem = { investment, - tags, averagePrice: newQuantity.gt(0) ? investment.div(newQuantity) : new Big(0), currency: SymbolProfile.currency, dataSource: SymbolProfile.dataSource, dividend: new Big(0), - fee: fee.plus(oldAccumulatedSymbol.fee), + fee: oldAccumulatedSymbol.fee.plus(fee), firstBuyDate: oldAccumulatedSymbol.firstBuyDate, quantity: newQuantity, symbol: SymbolProfile.symbol, + tags: oldAccumulatedSymbol.tags.concat(tags), transactionCount: oldAccumulatedSymbol.transactionCount + 1 }; } else { @@ -740,6 +741,11 @@ export abstract class PortfolioCalculator { }; } + currentTransactionPointItem.tags = uniqBy( + currentTransactionPointItem.tags, + 'id' + ); + symbols[SymbolProfile.symbol] = currentTransactionPointItem; const items = lastTransactionPoint?.items ?? [];