diff --git a/apps/api/src/app/portfolio/calculator/portfolio-calculator.ts b/apps/api/src/app/portfolio/calculator/portfolio-calculator.ts index e9c8a28bf..b14134c99 100644 --- a/apps/api/src/app/portfolio/calculator/portfolio-calculator.ts +++ b/apps/api/src/app/portfolio/calculator/portfolio-calculator.ts @@ -288,6 +288,7 @@ export abstract class PortfolioCalculator { const accumulatedValuesByDate: { [date: string]: { investmentValueWithCurrencyEffect: Big; + totalAccountBalanceWithCurrencyEffect: Big; totalCurrentValue: Big; totalCurrentValueWithCurrencyEffect: Big; totalInvestmentValue: Big; @@ -458,6 +459,8 @@ export abstract class PortfolioCalculator { } } + let lastDate = chartDates[0]; + for (const dateString of chartDates) { for (const symbol of Object.keys(valuesBySymbol)) { const symbolValues = valuesBySymbol[symbol]; @@ -501,6 +504,18 @@ export abstract class PortfolioCalculator { accumulatedValuesByDate[dateString] ?.investmentValueWithCurrencyEffect ?? new Big(0) ).add(investmentValueWithCurrencyEffect), + totalAccountBalanceWithCurrencyEffect: this.accountBalanceItems.some( + ({ date }) => { + return date === dateString; + } + ) + ? new Big( + this.accountBalanceItems.find(({ date }) => { + return date === dateString; + }).value + ) + : (accumulatedValuesByDate[lastDate] + ?.totalAccountBalanceWithCurrencyEffect ?? new Big(0)), totalCurrentValue: ( accumulatedValuesByDate[dateString]?.totalCurrentValue ?? new Big(0) ).add(currentValue), @@ -534,6 +549,8 @@ export abstract class PortfolioCalculator { ).add(timeWeightedInvestmentValueWithCurrencyEffect) }; } + + lastDate = dateString; } const historicalData: HistoricalDataItem[] = Object.entries( @@ -541,6 +558,7 @@ export abstract class PortfolioCalculator { ).map(([date, values]) => { const { investmentValueWithCurrencyEffect, + totalAccountBalanceWithCurrencyEffect, totalCurrentValue, totalCurrentValueWithCurrencyEffect, totalInvestmentValue, @@ -575,7 +593,11 @@ export abstract class PortfolioCalculator { netPerformance: totalNetPerformanceValue.toNumber(), netPerformanceWithCurrencyEffect: totalNetPerformanceValueWithCurrencyEffect.toNumber(), - netWorth: 0, // TODO + // TODO: Add valuables + netWorth: totalCurrentValueWithCurrencyEffect + .plus(totalAccountBalanceWithCurrencyEffect) + .toNumber(), + totalAccountBalance: totalAccountBalanceWithCurrencyEffect.toNumber(), totalInvestment: totalInvestmentValue.toNumber(), totalInvestmentValueWithCurrencyEffect: totalInvestmentValueWithCurrencyEffect.toNumber(), diff --git a/apps/api/src/app/portfolio/calculator/twr/portfolio-calculator-baln-buy-and-sell-in-two-activities.spec.ts b/apps/api/src/app/portfolio/calculator/twr/portfolio-calculator-baln-buy-and-sell-in-two-activities.spec.ts index 5c63cb58d..e143e1ae6 100644 --- a/apps/api/src/app/portfolio/calculator/twr/portfolio-calculator-baln-buy-and-sell-in-two-activities.spec.ts +++ b/apps/api/src/app/portfolio/calculator/twr/portfolio-calculator-baln-buy-and-sell-in-two-activities.spec.ts @@ -125,16 +125,12 @@ describe('PortfolioCalculator', () => { userId: userDummyData.id }); - const chartData = await portfolioCalculator.getChartData({ - start: parseDate('2021-11-22') - }); - const portfolioSnapshot = await portfolioCalculator.getSnapshot(); const investments = portfolioCalculator.getInvestments(); const investmentsByMonth = portfolioCalculator.getInvestmentsByGroup({ - data: chartData, + data: portfolioSnapshot.historicalData, groupBy: 'month' }); diff --git a/apps/api/src/app/portfolio/calculator/twr/portfolio-calculator-baln-buy-and-sell.spec.ts b/apps/api/src/app/portfolio/calculator/twr/portfolio-calculator-baln-buy-and-sell.spec.ts index 5ce1dd80b..912776311 100644 --- a/apps/api/src/app/portfolio/calculator/twr/portfolio-calculator-baln-buy-and-sell.spec.ts +++ b/apps/api/src/app/portfolio/calculator/twr/portfolio-calculator-baln-buy-and-sell.spec.ts @@ -110,16 +110,12 @@ describe('PortfolioCalculator', () => { userId: userDummyData.id }); - const chartData = await portfolioCalculator.getChartData({ - start: parseDate('2021-11-22') - }); - const portfolioSnapshot = await portfolioCalculator.getSnapshot(); const investments = portfolioCalculator.getInvestments(); const investmentsByMonth = portfolioCalculator.getInvestmentsByGroup({ - data: chartData, + data: portfolioSnapshot.historicalData, groupBy: 'month' }); diff --git a/apps/api/src/app/portfolio/calculator/twr/portfolio-calculator-baln-buy.spec.ts b/apps/api/src/app/portfolio/calculator/twr/portfolio-calculator-baln-buy.spec.ts index a71342c5a..a584d6809 100644 --- a/apps/api/src/app/portfolio/calculator/twr/portfolio-calculator-baln-buy.spec.ts +++ b/apps/api/src/app/portfolio/calculator/twr/portfolio-calculator-baln-buy.spec.ts @@ -95,16 +95,12 @@ describe('PortfolioCalculator', () => { userId: userDummyData.id }); - const chartData = await portfolioCalculator.getChartData({ - start: parseDate('2021-11-30') - }); - const portfolioSnapshot = await portfolioCalculator.getSnapshot(); const investments = portfolioCalculator.getInvestments(); const investmentsByMonth = portfolioCalculator.getInvestmentsByGroup({ - data: chartData, + data: portfolioSnapshot.historicalData, groupBy: 'month' }); diff --git a/apps/api/src/app/portfolio/calculator/twr/portfolio-calculator-btcusd-buy-and-sell-partially.spec.ts b/apps/api/src/app/portfolio/calculator/twr/portfolio-calculator-btcusd-buy-and-sell-partially.spec.ts index 0ce9d95a4..4a16cc86d 100644 --- a/apps/api/src/app/portfolio/calculator/twr/portfolio-calculator-btcusd-buy-and-sell-partially.spec.ts +++ b/apps/api/src/app/portfolio/calculator/twr/portfolio-calculator-btcusd-buy-and-sell-partially.spec.ts @@ -124,16 +124,12 @@ describe.skip('PortfolioCalculator', () => { userId: userDummyData.id }); - const chartData = await portfolioCalculator.getChartData({ - start: parseDate('2015-01-01') - }); - const portfolioSnapshot = await portfolioCalculator.getSnapshot(); const investments = portfolioCalculator.getInvestments(); const investmentsByMonth = portfolioCalculator.getInvestmentsByGroup({ - data: chartData, + data: portfolioSnapshot.historicalData, groupBy: 'month' }); diff --git a/apps/api/src/app/portfolio/calculator/twr/portfolio-calculator-googl-buy.spec.ts b/apps/api/src/app/portfolio/calculator/twr/portfolio-calculator-googl-buy.spec.ts index 74d91f9b7..1177fb461 100644 --- a/apps/api/src/app/portfolio/calculator/twr/portfolio-calculator-googl-buy.spec.ts +++ b/apps/api/src/app/portfolio/calculator/twr/portfolio-calculator-googl-buy.spec.ts @@ -108,16 +108,12 @@ describe('PortfolioCalculator', () => { userId: userDummyData.id }); - const chartData = await portfolioCalculator.getChartData({ - start: parseDate('2023-01-03') - }); - const portfolioSnapshot = await portfolioCalculator.getSnapshot(); const investments = portfolioCalculator.getInvestments(); const investmentsByMonth = portfolioCalculator.getInvestmentsByGroup({ - data: chartData, + data: portfolioSnapshot.historicalData, groupBy: 'month' }); diff --git a/apps/api/src/app/portfolio/calculator/twr/portfolio-calculator-no-orders.spec.ts b/apps/api/src/app/portfolio/calculator/twr/portfolio-calculator-no-orders.spec.ts index 564527cbd..19994f4ee 100644 --- a/apps/api/src/app/portfolio/calculator/twr/portfolio-calculator-no-orders.spec.ts +++ b/apps/api/src/app/portfolio/calculator/twr/portfolio-calculator-no-orders.spec.ts @@ -73,16 +73,12 @@ describe('PortfolioCalculator', () => { userId: userDummyData.id }); - const start = subDays(new Date(), 10); - - const chartData = await portfolioCalculator.getChartData({ start }); - const portfolioSnapshot = await portfolioCalculator.getSnapshot(); const investments = portfolioCalculator.getInvestments(); const investmentsByMonth = portfolioCalculator.getInvestmentsByGroup({ - data: chartData, + data: portfolioSnapshot.historicalData, groupBy: 'month' }); diff --git a/apps/api/src/app/portfolio/calculator/twr/portfolio-calculator-novn-buy-and-sell-partially.spec.ts b/apps/api/src/app/portfolio/calculator/twr/portfolio-calculator-novn-buy-and-sell-partially.spec.ts index 3157c9171..4770e2ce7 100644 --- a/apps/api/src/app/portfolio/calculator/twr/portfolio-calculator-novn-buy-and-sell-partially.spec.ts +++ b/apps/api/src/app/portfolio/calculator/twr/portfolio-calculator-novn-buy-and-sell-partially.spec.ts @@ -110,16 +110,12 @@ describe('PortfolioCalculator', () => { userId: userDummyData.id }); - const chartData = await portfolioCalculator.getChartData({ - start: parseDate('2022-03-07') - }); - const portfolioSnapshot = await portfolioCalculator.getSnapshot(); const investments = portfolioCalculator.getInvestments(); const investmentsByMonth = portfolioCalculator.getInvestmentsByGroup({ - data: chartData, + data: portfolioSnapshot.historicalData, groupBy: 'month' }); diff --git a/apps/api/src/app/portfolio/calculator/twr/portfolio-calculator-novn-buy-and-sell.spec.ts b/apps/api/src/app/portfolio/calculator/twr/portfolio-calculator-novn-buy-and-sell.spec.ts index 828cbc55e..992489bf9 100644 --- a/apps/api/src/app/portfolio/calculator/twr/portfolio-calculator-novn-buy-and-sell.spec.ts +++ b/apps/api/src/app/portfolio/calculator/twr/portfolio-calculator-novn-buy-and-sell.spec.ts @@ -110,20 +110,16 @@ describe('PortfolioCalculator', () => { userId: userDummyData.id }); - const chartData = await portfolioCalculator.getChartData({ - start: parseDate('2022-03-07') - }); - const portfolioSnapshot = await portfolioCalculator.getSnapshot(); const investments = portfolioCalculator.getInvestments(); const investmentsByMonth = portfolioCalculator.getInvestmentsByGroup({ - data: chartData, + data: portfolioSnapshot.historicalData, groupBy: 'month' }); - expect(chartData[0]).toEqual({ + expect(portfolioSnapshot.historicalData[0]).toEqual({ date: '2022-03-07', investmentValueWithCurrencyEffect: 151.6, netPerformance: 0, @@ -138,7 +134,11 @@ describe('PortfolioCalculator', () => { valueWithCurrencyEffect: 151.6 }); - expect(chartData[chartData.length - 1]).toEqual({ + expect( + portfolioSnapshot.historicalData[ + portfolioSnapshot.historicalData.length - 1 + ] + ).toEqual({ date: '2022-04-11', investmentValueWithCurrencyEffect: 0, netPerformance: 19.86,