From 362c0ee7a93e23373c28ace41b84502c7a8aad1a Mon Sep 17 00:00:00 2001
From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com>
Date: Thu, 1 Oct 2026 11:35:31 +0200
Subject: [PATCH] Implement ROI portfolio calculator
---
.../portfolio-summary/portfolio-summary.component.html | 10 ++++++++++
.../user-account-settings/user-account-settings.html | 4 +++-
.../app/pages/portfolio/analysis/analysis-page.html | 10 ++++++++++
libs/common/src/lib/dtos/update-user-setting.dto.ts | 5 +++++
4 files changed, 28 insertions(+), 1 deletion(-)
diff --git a/apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html b/apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html
index d40249cafb..5335712cd7 100644
--- a/apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html
+++ b/apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html
@@ -159,6 +159,16 @@
title="Return on Average Investment (total return with dividends)"
>(ROAI)
+ } @else if (
+ user?.settings?.performanceCalculationType ===
+ PerformanceCalculationType.ROI
+ ) {
+ (ROI)
}
diff --git a/apps/client/src/app/components/user-account-settings/user-account-settings.html b/apps/client/src/app/components/user-account-settings/user-account-settings.html
index 055276129a..843a6078fa 100644
--- a/apps/client/src/app/components/user-account-settings/user-account-settings.html
+++ b/apps/client/src/app/components/user-account-settings/user-account-settings.html
@@ -39,7 +39,6 @@
Return on Average Investment (ROAI)
+ Return on Investment (ROI)
diff --git a/apps/client/src/app/pages/portfolio/analysis/analysis-page.html b/apps/client/src/app/pages/portfolio/analysis/analysis-page.html
index 255ede038a..38cfa0861d 100644
--- a/apps/client/src/app/pages/portfolio/analysis/analysis-page.html
+++ b/apps/client/src/app/pages/portfolio/analysis/analysis-page.html
@@ -264,6 +264,16 @@
title="Return on Average Investment (total return with dividends)"
>(ROAI)
+ } @else if (
+ user?.settings?.performanceCalculationType ===
+ PerformanceCalculationType.ROI
+ ) {
+ (ROI)
}
diff --git a/libs/common/src/lib/dtos/update-user-setting.dto.ts b/libs/common/src/lib/dtos/update-user-setting.dto.ts
index d290f1fdad..b51d8bb61b 100644
--- a/libs/common/src/lib/dtos/update-user-setting.dto.ts
+++ b/libs/common/src/lib/dtos/update-user-setting.dto.ts
@@ -5,6 +5,7 @@ import type {
HoldingsViewMode,
ViewMode
} from '@ghostfolio/common/types';
+import { PerformanceCalculationType } from '@ghostfolio/common/types/performance-calculation-type.type';
import { IsCurrencyCode } from '@ghostfolio/common/validators/is-currency-code';
import {
@@ -100,6 +101,10 @@ export class UpdateUserSettingDto {
@IsOptional()
locale?: string;
+ @IsIn([PerformanceCalculationType.ROAI, PerformanceCalculationType.ROI])
+ @IsOptional()
+ performanceCalculationType?: PerformanceCalculationType;
+
/**
* The target financial amount the user aims to reach before retiring.
* Can be explicitly set to null to clear the value and calculate it dynamically.