From 12ae54e01bc359239708cdd300d7072ff15ee7d7 Mon Sep 17 00:00:00 2001
From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com>
Date: Thu, 6 Mar 2025 06:30:10 +0100
Subject: [PATCH 01/37] Bugfix/fix activities import on non-empty activities
page (#4398)
* Add missing import functionality
* Update changelog
---
CHANGELOG.md | 1 +
.../src/app/pages/portfolio/activities/activities-page.html | 5 ++---
.../src/lib/activities-table/activities-table.component.html | 5 ++++-
.../src/lib/activities-table/activities-table.component.ts | 1 +
4 files changed, 8 insertions(+), 4 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 44b6c720a..570112db2 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -9,6 +9,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
### Fixed
+- Fixed the missing import functionality on the non-empty activities page
- Fixed the functionality to delete an asset profile of a custom currency in the admin control panel
## 2.143.0 - 2025-03-02
diff --git a/apps/client/src/app/pages/portfolio/activities/activities-page.html b/apps/client/src/app/pages/portfolio/activities/activities-page.html
index 99eb16386..80ad71b79 100644
--- a/apps/client/src/app/pages/portfolio/activities/activities-page.html
+++ b/apps/client/src/app/pages/portfolio/activities/activities-page.html
@@ -6,9 +6,8 @@
[baseCurrency]="user?.settings?.baseCurrency"
[dataSource]="dataSource"
[deviceType]="deviceType"
- [hasPermissionToCreateActivity]="
- hasPermissionToCreateActivity && user?.activitiesCount === 0
- "
+ [hasActivities]="user?.activitiesCount > 0"
+ [hasPermissionToCreateActivity]="hasPermissionToCreateActivity"
[hasPermissionToDeleteActivity]="hasPermissionToDeleteActivity"
[hasPermissionToExportActivities]="!hasImpersonationId"
[locale]="user?.settings?.locale"
diff --git a/libs/ui/src/lib/activities-table/activities-table.component.html b/libs/ui/src/lib/activities-table/activities-table.component.html
index 4fdc41c59..e5b33efd2 100644
--- a/libs/ui/src/lib/activities-table/activities-table.component.html
+++ b/libs/ui/src/lib/activities-table/activities-table.component.html
@@ -500,7 +500,10 @@
/>
@if (
- dataSource?.data.length === 0 && hasPermissionToCreateActivity && !isLoading
+ !hasActivities &&
+ dataSource?.data.length === 0 &&
+ hasPermissionToCreateActivity &&
+ !isLoading
) {
diff --git a/libs/ui/src/lib/activities-table/activities-table.component.ts b/libs/ui/src/lib/activities-table/activities-table.component.ts
index 01b4c6ead..8e5a44a50 100644
--- a/libs/ui/src/lib/activities-table/activities-table.component.ts
+++ b/libs/ui/src/lib/activities-table/activities-table.component.ts
@@ -76,6 +76,7 @@ export class GfActivitiesTableComponent
@Input() baseCurrency: string;
@Input() dataSource: MatTableDataSource
;
@Input() deviceType: string;
+ @Input() hasActivities: boolean;
@Input() hasPermissionToCreateActivity: boolean;
@Input() hasPermissionToDeleteActivity: boolean;
@Input() hasPermissionToExportActivities: boolean;
From 72f1246b39a788aa12615ea6447818c7add92e73 Mon Sep 17 00:00:00 2001
From: "github-actions[bot]"
<41898282+github-actions[bot]@users.noreply.github.com>
Date: Thu, 6 Mar 2025 08:11:56 +0100
Subject: [PATCH 02/37] Feature/update locales (#4399)
* Update locales
---
Co-authored-by: github-actions[bot]
---
apps/client/src/locales/messages.ca.xlf | 10 +++++-----
apps/client/src/locales/messages.de.xlf | 10 +++++-----
apps/client/src/locales/messages.es.xlf | 10 +++++-----
apps/client/src/locales/messages.fr.xlf | 10 +++++-----
apps/client/src/locales/messages.it.xlf | 10 +++++-----
apps/client/src/locales/messages.nl.xlf | 10 +++++-----
apps/client/src/locales/messages.pl.xlf | 10 +++++-----
apps/client/src/locales/messages.pt.xlf | 10 +++++-----
apps/client/src/locales/messages.tr.xlf | 10 +++++-----
apps/client/src/locales/messages.uk.xlf | 10 +++++-----
apps/client/src/locales/messages.xlf | 10 +++++-----
apps/client/src/locales/messages.zh.xlf | 10 +++++-----
12 files changed, 60 insertions(+), 60 deletions(-)
diff --git a/apps/client/src/locales/messages.ca.xlf b/apps/client/src/locales/messages.ca.xlf
index ec0121ab5..1e905750c 100644
--- a/apps/client/src/locales/messages.ca.xlf
+++ b/apps/client/src/locales/messages.ca.xlf
@@ -1723,7 +1723,7 @@
Realment vol eliminar el perfil d’aquest actiu?
apps/client/src/app/components/admin-market-data/admin-market-data.service.ts
- 36
+ 37
@@ -1731,7 +1731,7 @@
Realment vol eliminar aquests perfils?
apps/client/src/app/components/admin-market-data/admin-market-data.service.ts
- 67
+ 68
@@ -1739,7 +1739,7 @@
Oooh! No s’han pogut eliminar els perfils
apps/client/src/app/components/admin-market-data/admin-market-data.service.ts
- 55
+ 56
@@ -6023,7 +6023,7 @@
Do you really want to delete these activities?
libs/ui/src/lib/activities-table/activities-table.component.ts
- 218
+ 219
@@ -6031,7 +6031,7 @@
Do you really want to delete this activity?
libs/ui/src/lib/activities-table/activities-table.component.ts
- 228
+ 229
diff --git a/apps/client/src/locales/messages.de.xlf b/apps/client/src/locales/messages.de.xlf
index 0bd543de9..c83497776 100644
--- a/apps/client/src/locales/messages.de.xlf
+++ b/apps/client/src/locales/messages.de.xlf
@@ -2566,7 +2566,7 @@
Möchtest du diese Aktivität wirklich löschen?
libs/ui/src/lib/activities-table/activities-table.component.ts
- 228
+ 229
@@ -3942,7 +3942,7 @@
Möchtest du diese Aktivitäten wirklich löschen?
libs/ui/src/lib/activities-table/activities-table.component.ts
- 218
+ 219
@@ -6031,7 +6031,7 @@
Möchtest du dieses Anlageprofil wirklich löschen?
apps/client/src/app/components/admin-market-data/admin-market-data.service.ts
- 36
+ 37
@@ -6715,7 +6715,7 @@
Möchtest du diese Profile wirklich löschen?
apps/client/src/app/components/admin-market-data/admin-market-data.service.ts
- 67
+ 68
@@ -6723,7 +6723,7 @@
Ups! Die Profile konnten nicht gelöscht werden.
apps/client/src/app/components/admin-market-data/admin-market-data.service.ts
- 55
+ 56
diff --git a/apps/client/src/locales/messages.es.xlf b/apps/client/src/locales/messages.es.xlf
index da0c0fb5c..3b5896525 100644
--- a/apps/client/src/locales/messages.es.xlf
+++ b/apps/client/src/locales/messages.es.xlf
@@ -2567,7 +2567,7 @@
¿Estás seguro de eliminar esta operación?
libs/ui/src/lib/activities-table/activities-table.component.ts
- 228
+ 229
@@ -3943,7 +3943,7 @@
Do you really want to delete these activities?
libs/ui/src/lib/activities-table/activities-table.component.ts
- 218
+ 219
@@ -6032,7 +6032,7 @@
Do you really want to delete this asset profile?
apps/client/src/app/components/admin-market-data/admin-market-data.service.ts
- 36
+ 37
@@ -6716,7 +6716,7 @@
Estas seguro de borrar estos perfiles?
apps/client/src/app/components/admin-market-data/admin-market-data.service.ts
- 67
+ 68
@@ -6724,7 +6724,7 @@
Oops! Could not delete profiles.
apps/client/src/app/components/admin-market-data/admin-market-data.service.ts
- 55
+ 56
diff --git a/apps/client/src/locales/messages.fr.xlf b/apps/client/src/locales/messages.fr.xlf
index 77224f1c9..7a427083e 100644
--- a/apps/client/src/locales/messages.fr.xlf
+++ b/apps/client/src/locales/messages.fr.xlf
@@ -3086,7 +3086,7 @@
Voulez-vous vraiment supprimer cette activité ?
libs/ui/src/lib/activities-table/activities-table.component.ts
- 228
+ 229
@@ -3942,7 +3942,7 @@
Voulez-vous vraiment supprimer toutes vos activités ?
libs/ui/src/lib/activities-table/activities-table.component.ts
- 218
+ 219
@@ -6031,7 +6031,7 @@
Confirmez la suppressoion de ce profil d'actif?
apps/client/src/app/components/admin-market-data/admin-market-data.service.ts
- 36
+ 37
@@ -6715,7 +6715,7 @@
Confirmer la suppression de ces Profils?
apps/client/src/app/components/admin-market-data/admin-market-data.service.ts
- 67
+ 68
@@ -6723,7 +6723,7 @@
Oops! Echec de la suppression de Profils.
apps/client/src/app/components/admin-market-data/admin-market-data.service.ts
- 55
+ 56
diff --git a/apps/client/src/locales/messages.it.xlf b/apps/client/src/locales/messages.it.xlf
index 80ca9ced7..5813fb11b 100644
--- a/apps/client/src/locales/messages.it.xlf
+++ b/apps/client/src/locales/messages.it.xlf
@@ -2567,7 +2567,7 @@
Vuoi davvero eliminare questa attività?
libs/ui/src/lib/activities-table/activities-table.component.ts
- 228
+ 229
@@ -3943,7 +3943,7 @@
Vuoi davvero eliminare tutte le tue attività?
libs/ui/src/lib/activities-table/activities-table.component.ts
- 218
+ 219
@@ -6032,7 +6032,7 @@
Vuoi veramente eliminare il profilo di questo asset?
apps/client/src/app/components/admin-market-data/admin-market-data.service.ts
- 36
+ 37
@@ -6716,7 +6716,7 @@
Confermi di voler eliminare questi profili?
apps/client/src/app/components/admin-market-data/admin-market-data.service.ts
- 67
+ 68
@@ -6724,7 +6724,7 @@
Ops! Impossibile eliminare i profili.
apps/client/src/app/components/admin-market-data/admin-market-data.service.ts
- 55
+ 56
diff --git a/apps/client/src/locales/messages.nl.xlf b/apps/client/src/locales/messages.nl.xlf
index 8beeae481..77760e761 100644
--- a/apps/client/src/locales/messages.nl.xlf
+++ b/apps/client/src/locales/messages.nl.xlf
@@ -2566,7 +2566,7 @@
Wil je deze activiteit echt verwijderen?
libs/ui/src/lib/activities-table/activities-table.component.ts
- 228
+ 229
@@ -3942,7 +3942,7 @@
Wil je echt al je activiteiten verwijderen?
libs/ui/src/lib/activities-table/activities-table.component.ts
- 218
+ 219
@@ -6031,7 +6031,7 @@
Do you really want to delete this asset profile?
apps/client/src/app/components/admin-market-data/admin-market-data.service.ts
- 36
+ 37
@@ -6715,7 +6715,7 @@
Do you really want to delete these profiles?
apps/client/src/app/components/admin-market-data/admin-market-data.service.ts
- 67
+ 68
@@ -6723,7 +6723,7 @@
Oops! Could not delete profiles.
apps/client/src/app/components/admin-market-data/admin-market-data.service.ts
- 55
+ 56
diff --git a/apps/client/src/locales/messages.pl.xlf b/apps/client/src/locales/messages.pl.xlf
index d2001157e..015e72359 100644
--- a/apps/client/src/locales/messages.pl.xlf
+++ b/apps/client/src/locales/messages.pl.xlf
@@ -1455,7 +1455,7 @@
Czy na pewno chcesz usunąć ten profil aktywów?
apps/client/src/app/components/admin-market-data/admin-market-data.service.ts
- 36
+ 37
@@ -4207,7 +4207,7 @@
Czy na pewno chcesz usunąć te aktywności?
libs/ui/src/lib/activities-table/activities-table.component.ts
- 218
+ 219
@@ -5555,7 +5555,7 @@
Czy na pewno chcesz usunąć tę działalność?
libs/ui/src/lib/activities-table/activities-table.component.ts
- 228
+ 229
@@ -6715,7 +6715,7 @@
Czy na pewno chcesz usunąć te profile?
apps/client/src/app/components/admin-market-data/admin-market-data.service.ts
- 67
+ 68
@@ -6723,7 +6723,7 @@
Ups! Nie udało się usunąć profili.
apps/client/src/app/components/admin-market-data/admin-market-data.service.ts
- 55
+ 56
diff --git a/apps/client/src/locales/messages.pt.xlf b/apps/client/src/locales/messages.pt.xlf
index 10c72e589..515140679 100644
--- a/apps/client/src/locales/messages.pt.xlf
+++ b/apps/client/src/locales/messages.pt.xlf
@@ -2958,7 +2958,7 @@
Deseja realmente eliminar esta atividade?
libs/ui/src/lib/activities-table/activities-table.component.ts
- 228
+ 229
@@ -3942,7 +3942,7 @@
Deseja mesmo eliminar estas atividades?
libs/ui/src/lib/activities-table/activities-table.component.ts
- 218
+ 219
@@ -6031,7 +6031,7 @@
Do you really want to delete this asset profile?
apps/client/src/app/components/admin-market-data/admin-market-data.service.ts
- 36
+ 37
@@ -6715,7 +6715,7 @@
Do you really want to delete these profiles?
apps/client/src/app/components/admin-market-data/admin-market-data.service.ts
- 67
+ 68
@@ -6723,7 +6723,7 @@
Oops! Could not delete profiles.
apps/client/src/app/components/admin-market-data/admin-market-data.service.ts
- 55
+ 56
diff --git a/apps/client/src/locales/messages.tr.xlf b/apps/client/src/locales/messages.tr.xlf
index ca2c9f99c..b5c2e6ae1 100644
--- a/apps/client/src/locales/messages.tr.xlf
+++ b/apps/client/src/locales/messages.tr.xlf
@@ -3715,7 +3715,7 @@
Tüm işlemlerinizi silmeyi gerçekten istiyor musunuz?
libs/ui/src/lib/activities-table/activities-table.component.ts
- 218
+ 219
@@ -5271,7 +5271,7 @@
TBu işlemi silmeyi gerçekten istiyor musunuz?
libs/ui/src/lib/activities-table/activities-table.component.ts
- 228
+ 229
@@ -6031,7 +6031,7 @@
Bu varlık profilini silmeyi gerçekten istiyor musunuz?
apps/client/src/app/components/admin-market-data/admin-market-data.service.ts
- 36
+ 37
@@ -6715,7 +6715,7 @@
Do you really want to delete these profiles?
apps/client/src/app/components/admin-market-data/admin-market-data.service.ts
- 67
+ 68
@@ -6723,7 +6723,7 @@
Oops! Could not delete profiles.
apps/client/src/app/components/admin-market-data/admin-market-data.service.ts
- 55
+ 56
diff --git a/apps/client/src/locales/messages.uk.xlf b/apps/client/src/locales/messages.uk.xlf
index a6146f4b2..def058161 100644
--- a/apps/client/src/locales/messages.uk.xlf
+++ b/apps/client/src/locales/messages.uk.xlf
@@ -1635,7 +1635,7 @@
Ви дійсно хочете видалити цей профіль активу?
apps/client/src/app/components/admin-market-data/admin-market-data.service.ts
- 36
+ 37
@@ -1643,7 +1643,7 @@
Упс! Не вдалося видалити профілі.
apps/client/src/app/components/admin-market-data/admin-market-data.service.ts
- 55
+ 56
@@ -1651,7 +1651,7 @@
Ви дійсно хочете видалити ці профілі?
apps/client/src/app/components/admin-market-data/admin-market-data.service.ts
- 67
+ 68
@@ -6669,7 +6669,7 @@
Ви дійсно хочете видалити ці дії?
libs/ui/src/lib/activities-table/activities-table.component.ts
- 218
+ 219
@@ -6677,7 +6677,7 @@
Ви дійсно хочете видалити цю активність?
libs/ui/src/lib/activities-table/activities-table.component.ts
- 228
+ 229
diff --git a/apps/client/src/locales/messages.xlf b/apps/client/src/locales/messages.xlf
index cb3bc15b3..18ac0c2be 100644
--- a/apps/client/src/locales/messages.xlf
+++ b/apps/client/src/locales/messages.xlf
@@ -1400,7 +1400,7 @@
Do you really want to delete this asset profile?
apps/client/src/app/components/admin-market-data/admin-market-data.service.ts
- 36
+ 37
@@ -3875,7 +3875,7 @@
Do you really want to delete these activities?
libs/ui/src/lib/activities-table/activities-table.component.ts
- 218
+ 219
@@ -5112,7 +5112,7 @@
Do you really want to delete this activity?
libs/ui/src/lib/activities-table/activities-table.component.ts
- 228
+ 229
@@ -6086,7 +6086,7 @@
Do you really want to delete these profiles?
apps/client/src/app/components/admin-market-data/admin-market-data.service.ts
- 67
+ 68
@@ -6100,7 +6100,7 @@
Oops! Could not delete profiles.
apps/client/src/app/components/admin-market-data/admin-market-data.service.ts
- 55
+ 56
diff --git a/apps/client/src/locales/messages.zh.xlf b/apps/client/src/locales/messages.zh.xlf
index 37db811ae..3f87d805b 100644
--- a/apps/client/src/locales/messages.zh.xlf
+++ b/apps/client/src/locales/messages.zh.xlf
@@ -1464,7 +1464,7 @@
您确实要删除此资产配置文件吗?
apps/client/src/app/components/admin-market-data/admin-market-data.service.ts
- 36
+ 37
@@ -4216,7 +4216,7 @@
您真的要删除所有活动吗?
libs/ui/src/lib/activities-table/activities-table.component.ts
- 218
+ 219
@@ -5596,7 +5596,7 @@
您确实要删除此活动吗?
libs/ui/src/lib/activities-table/activities-table.component.ts
- 228
+ 229
@@ -6716,7 +6716,7 @@
Do you really want to delete these profiles?
apps/client/src/app/components/admin-market-data/admin-market-data.service.ts
- 67
+ 68
@@ -6724,7 +6724,7 @@
Oops! Could not delete profiles.
apps/client/src/app/components/admin-market-data/admin-market-data.service.ts
- 55
+ 56
From 25320e05d9f379194646e6a9fc42ad9fa8c856c9 Mon Sep 17 00:00:00 2001
From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com>
Date: Thu, 6 Mar 2025 08:14:23 +0100
Subject: [PATCH 03/37] Release 2.144.0 (#4403)
---
CHANGELOG.md | 2 +-
package-lock.json | 4 ++--
package.json | 2 +-
3 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 570112db2..432a953c0 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -5,7 +5,7 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
-## Unreleased
+## 2.144.0 - 2025-03-06
### Fixed
diff --git a/package-lock.json b/package-lock.json
index 11e1b6ebd..cfda8ce42 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,12 +1,12 @@
{
"name": "ghostfolio",
- "version": "2.143.0",
+ "version": "2.144.0",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "ghostfolio",
- "version": "2.143.0",
+ "version": "2.144.0",
"hasInstallScript": true,
"license": "AGPL-3.0",
"dependencies": {
diff --git a/package.json b/package.json
index 9df5e1172..4ca628470 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "ghostfolio",
- "version": "2.143.0",
+ "version": "2.144.0",
"homepage": "https://ghostfol.io",
"license": "AGPL-3.0",
"repository": "https://github.com/ghostfolio/ghostfolio",
From b260c4f450e126d656d8b81bdf3cc4377046e448 Mon Sep 17 00:00:00 2001
From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com>
Date: Fri, 7 Mar 2025 19:48:03 +0100
Subject: [PATCH 04/37] Feature/extend personal finance tools 20250306 (#4406)
* Extend personal finance tools
* CoinStats
* Fincake
* Koinly
* Nansen
* Simply Wall St
* Tradervue
---
libs/common/src/lib/personal-finance-tools.ts | 57 +++++++++++++++++++
libs/ui/src/lib/i18n.ts | 3 +
2 files changed, 60 insertions(+)
diff --git a/libs/common/src/lib/personal-finance-tools.ts b/libs/common/src/lib/personal-finance-tools.ts
index e4c820fb7..936f3c6f6 100644
--- a/libs/common/src/lib/personal-finance-tools.ts
+++ b/libs/common/src/lib/personal-finance-tools.ts
@@ -82,6 +82,16 @@ export const personalFinanceTools: Product[] = [
regions: ['Global'],
slogan: 'Take control of your financial future'
},
+ {
+ founded: 2017,
+ hasFreePlan: true,
+ hasSelfHostingAbility: false,
+ key: 'coinstats',
+ name: 'CoinStats',
+ origin: 'Armenia',
+ pricingPerYear: '$168',
+ slogan: 'Manage All Your Wallets & Exchanges From One Place'
+ },
{
founded: 2013,
hasFreePlan: true,
@@ -154,6 +164,7 @@ export const personalFinanceTools: Product[] = [
name: 'Delta Investment Tracker',
note: 'Acquired by eToro',
origin: 'Belgium',
+ pricingPerYear: '$150',
slogan: 'The app to track all your investments. Make smart moves only.'
},
{
@@ -252,6 +263,13 @@ export const personalFinanceTools: Product[] = [
slogan:
'The most convenient mobile application for personal finance accounting'
},
+ {
+ founded: 2022,
+ key: 'fincake',
+ name: 'Fincake',
+ origin: 'British Virgin Islands',
+ slogan: 'Easy-to-use Portfolio Tracker'
+ },
{
founded: 2023,
hasFreePlan: true,
@@ -340,6 +358,15 @@ export const personalFinanceTools: Product[] = [
pricingPerYear: '€119',
slogan: 'ETF portfolios made simple'
},
+ {
+ founded: 2018,
+ hasFreePlan: true,
+ hasSelfHostingAbility: false,
+ key: 'koinly',
+ name: 'Koinly',
+ origin: 'Singapore',
+ slogan: 'Track all your crypto wallets in one place'
+ },
{
founded: 2016,
hasFreePlan: true,
@@ -469,6 +496,16 @@ export const personalFinanceTools: Product[] = [
slogan:
'Track your equity, fund, investment trust, ETF and pension investments in one place.'
},
+ {
+ founded: 2020,
+ hasFreePlan: true,
+ hasSelfHostingAbility: false,
+ key: 'nansen',
+ name: 'Crypto Portfolio Tracker by Nansen',
+ origin: 'Singapore',
+ pricingPerYear: '$1188',
+ slogan: 'Your Complete Crypto Portfolio, Reimagined'
+ },
{
founded: 2017,
hasFreePlan: false,
@@ -634,6 +671,16 @@ export const personalFinanceTools: Product[] = [
pricingPerYear: '€80',
slogan: 'Stock Portfolio Tracker'
},
+ {
+ founded: 2014,
+ hasFreePlan: true,
+ hasSelfHostingAbility: false,
+ key: 'simply-wallstreet',
+ name: 'Stock Portfolio Tracker & Visualizer by Simply Wall St',
+ origin: 'Australia',
+ pricingPerYear: '$120',
+ slogan: 'Smart portfolio tracker for informed investors'
+ },
{
founded: 2021,
hasFreePlan: true,
@@ -706,6 +753,16 @@ export const personalFinanceTools: Product[] = [
slogan:
'Your financial life in a spreadsheet, automatically updated each day'
},
+ {
+ founded: 2011,
+ hasFreePlan: false,
+ hasSelfHostingAbility: false,
+ key: 'tradervue',
+ name: 'Tradervue',
+ origin: 'United States',
+ pricingPerYear: '$360',
+ slogan: 'The Trading Journal to Improve Your Trading Performance'
+ },
{
hasFreePlan: true,
hasSelfHostingAbility: false,
diff --git a/libs/ui/src/lib/i18n.ts b/libs/ui/src/lib/i18n.ts
index 7ea36123b..4c09a4fc0 100644
--- a/libs/ui/src/lib/i18n.ts
+++ b/libs/ui/src/lib/i18n.ts
@@ -70,9 +70,11 @@ const locales = {
'South America': $localize`South America`,
// Countries
+ Armenia: $localize`Armenia`,
Australia: $localize`Australia`,
Austria: $localize`Austria`,
Belgium: $localize`Belgium`,
+ 'British Virgin Islands': $localize`British Virgin Islands`,
Bulgaria: $localize`Bulgaria`,
Canada: $localize`Canada`,
'Czech Republic': $localize`Czech Republic`,
@@ -86,6 +88,7 @@ const locales = {
'New Zealand': $localize`New Zealand`,
Poland: $localize`Poland`,
Romania: $localize`Romania`,
+ Singapore: $localize`Singapore`,
'South Africa': $localize`South Africa`,
Switzerland: $localize`Switzerland`,
Thailand: $localize`Thailand`,
From 589eefaa764090516f55a16d70899df7fe05ff4a Mon Sep 17 00:00:00 2001
From: csehatt741 <77381875+csehatt741@users.noreply.github.com>
Date: Fri, 7 Mar 2025 19:48:52 +0100
Subject: [PATCH 05/37] Feature/extend AI prompt API by mode (#4395)
* Extend AI prompt API by mode
* Update changelog
---
CHANGELOG.md | 6 +++++
.../api/src/app/endpoints/ai/ai.controller.ts | 11 ++++++----
apps/api/src/app/endpoints/ai/ai.service.ts | 7 ++++++
.../analysis/analysis-page.component.ts | 6 ++---
.../portfolio/analysis/analysis-page.html | 22 +++++++++++++++++--
apps/client/src/app/services/data.service.ts | 11 +++++++---
.../src/lib/types/ai-prompt-mode.type.ts | 1 +
libs/common/src/lib/types/index.ts | 2 ++
8 files changed, 54 insertions(+), 12 deletions(-)
create mode 100644 libs/common/src/lib/types/ai-prompt-mode.type.ts
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 432a953c0..88b90c943 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -5,6 +5,12 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
+## Unreleased
+
+### Added
+
+- Added a _Copy portfolio data to clipboard for AI prompt_ action to the analysis page (experimental)
+
## 2.144.0 - 2025-03-06
### Fixed
diff --git a/apps/api/src/app/endpoints/ai/ai.controller.ts b/apps/api/src/app/endpoints/ai/ai.controller.ts
index 981b26aa2..910abbf96 100644
--- a/apps/api/src/app/endpoints/ai/ai.controller.ts
+++ b/apps/api/src/app/endpoints/ai/ai.controller.ts
@@ -6,9 +6,9 @@ import {
} from '@ghostfolio/common/config';
import { AiPromptResponse } from '@ghostfolio/common/interfaces';
import { permissions } from '@ghostfolio/common/permissions';
-import type { RequestWithUser } from '@ghostfolio/common/types';
+import type { AiPromptMode, RequestWithUser } from '@ghostfolio/common/types';
-import { Controller, Get, Inject, UseGuards } from '@nestjs/common';
+import { Controller, Get, Inject, Param, UseGuards } from '@nestjs/common';
import { REQUEST } from '@nestjs/core';
import { AuthGuard } from '@nestjs/passport';
@@ -21,11 +21,14 @@ export class AiController {
@Inject(REQUEST) private readonly request: RequestWithUser
) {}
- @Get('prompt')
+ @Get('prompt/:mode')
@HasPermission(permissions.readAiPrompt)
@UseGuards(AuthGuard('jwt'), HasPermissionGuard)
- public async getPrompt(): Promise {
+ public async getPrompt(
+ @Param('mode') mode: AiPromptMode
+ ): Promise {
const prompt = await this.aiService.getPrompt({
+ mode,
impersonationId: undefined,
languageCode:
this.request.user.Settings.settings.language ?? DEFAULT_LANGUAGE_CODE,
diff --git a/apps/api/src/app/endpoints/ai/ai.service.ts b/apps/api/src/app/endpoints/ai/ai.service.ts
index 59dec6add..d9090d77c 100644
--- a/apps/api/src/app/endpoints/ai/ai.service.ts
+++ b/apps/api/src/app/endpoints/ai/ai.service.ts
@@ -1,4 +1,5 @@
import { PortfolioService } from '@ghostfolio/api/app/portfolio/portfolio.service';
+import type { AiPromptMode } from '@ghostfolio/common/types';
import { Injectable } from '@nestjs/common';
@@ -9,11 +10,13 @@ export class AiService {
public async getPrompt({
impersonationId,
languageCode,
+ mode,
userCurrency,
userId
}: {
impersonationId: string;
languageCode: string;
+ mode: AiPromptMode;
userCurrency: string;
userId: string;
}) {
@@ -43,6 +46,10 @@ export class AiService {
)
];
+ if (mode === 'portfolio') {
+ return holdingsTable.join('\n');
+ }
+
return [
`You are a neutral financial assistant. Please analyze the following investment portfolio (base currency being ${userCurrency}) in simple words.`,
...holdingsTable,
diff --git a/apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts b/apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts
index 5eebb42ef..28c0b9c0e 100644
--- a/apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts
+++ b/apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts
@@ -12,7 +12,7 @@ import {
User
} from '@ghostfolio/common/interfaces';
import { hasPermission, permissions } from '@ghostfolio/common/permissions';
-import { GroupBy } from '@ghostfolio/common/types';
+import type { AiPromptMode, GroupBy } from '@ghostfolio/common/types';
import { translate } from '@ghostfolio/ui/i18n';
import { Clipboard } from '@angular/cdk/clipboard';
@@ -142,9 +142,9 @@ export class AnalysisPageComponent implements OnDestroy, OnInit {
this.fetchDividendsAndInvestments();
}
- public onCopyPromptToClipboard() {
+ public onCopyPromptToClipboard(mode: AiPromptMode) {
this.dataService
- .fetchPrompt()
+ .fetchPrompt(mode)
.pipe(takeUntil(this.unsubscribeSubject))
.subscribe(({ prompt }) => {
this.clipboard.copy(prompt);
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 07ffa705d..84ca54e06 100644
--- a/apps/client/src/app/pages/portfolio/analysis/analysis-page.html
+++ b/apps/client/src/app/pages/portfolio/analysis/analysis-page.html
@@ -16,7 +16,7 @@
+
diff --git a/apps/client/src/app/services/data.service.ts b/apps/client/src/app/services/data.service.ts
index 0bc4ebccc..e8d4b7826 100644
--- a/apps/client/src/app/services/data.service.ts
+++ b/apps/client/src/app/services/data.service.ts
@@ -46,7 +46,12 @@ import {
User
} from '@ghostfolio/common/interfaces';
import { filterGlobalPermissions } from '@ghostfolio/common/permissions';
-import { AccountWithValue, DateRange, GroupBy } from '@ghostfolio/common/types';
+import type {
+ AccountWithValue,
+ AiPromptMode,
+ DateRange,
+ GroupBy
+} from '@ghostfolio/common/types';
import { translate } from '@ghostfolio/ui/i18n';
import { HttpClient, HttpParams } from '@angular/common/http';
@@ -650,8 +655,8 @@ export class DataService {
return this.http.get('/api/v1/portfolio/report');
}
- public fetchPrompt() {
- return this.http.get('/api/v1/ai/prompt');
+ public fetchPrompt(mode: AiPromptMode) {
+ return this.http.get(`/api/v1/ai/prompt/${mode}`);
}
public fetchPublicPortfolio(aAccessId: string) {
diff --git a/libs/common/src/lib/types/ai-prompt-mode.type.ts b/libs/common/src/lib/types/ai-prompt-mode.type.ts
new file mode 100644
index 000000000..00a031df0
--- /dev/null
+++ b/libs/common/src/lib/types/ai-prompt-mode.type.ts
@@ -0,0 +1 @@
+export type AiPromptMode = 'analysis' | 'portfolio';
diff --git a/libs/common/src/lib/types/index.ts b/libs/common/src/lib/types/index.ts
index 9e8178d3c..668486a94 100644
--- a/libs/common/src/lib/types/index.ts
+++ b/libs/common/src/lib/types/index.ts
@@ -2,6 +2,7 @@ import type { AccessType } from './access-type.type';
import type { AccessWithGranteeUser } from './access-with-grantee-user.type';
import type { AccountWithPlatform } from './account-with-platform.type';
import type { AccountWithValue } from './account-with-value.type';
+import type { AiPromptMode } from './ai-prompt-mode.type';
import type { BenchmarkTrend } from './benchmark-trend.type';
import type { ColorScheme } from './color-scheme.type';
import type { DateRange } from './date-range.type';
@@ -24,6 +25,7 @@ export type {
AccessWithGranteeUser,
AccountWithPlatform,
AccountWithValue,
+ AiPromptMode,
BenchmarkTrend,
ColorScheme,
DateRange,
From 9278adc6ba3ab1b0d6978ec06de6294a156bfcda Mon Sep 17 00:00:00 2001
From: "github-actions[bot]"
<41898282+github-actions[bot]@users.noreply.github.com>
Date: Fri, 7 Mar 2025 21:12:55 +0100
Subject: [PATCH 06/37] Feature/update locales 20250307 (#4409)
* Update translations
* Update changelog
---------
Co-authored-by: github-actions[bot]
Co-authored-by: Thomas Kaul <4159106+dtslvr@users.noreply.github.com>
---
CHANGELOG.md | 4 +
apps/client/src/locales/messages.ca.xlf | 126 +++++++++++++++---------
apps/client/src/locales/messages.de.xlf | 126 +++++++++++++++---------
apps/client/src/locales/messages.es.xlf | 126 +++++++++++++++---------
apps/client/src/locales/messages.fr.xlf | 126 +++++++++++++++---------
apps/client/src/locales/messages.it.xlf | 126 +++++++++++++++---------
apps/client/src/locales/messages.nl.xlf | 126 +++++++++++++++---------
apps/client/src/locales/messages.pl.xlf | 126 +++++++++++++++---------
apps/client/src/locales/messages.pt.xlf | 126 +++++++++++++++---------
apps/client/src/locales/messages.tr.xlf | 126 +++++++++++++++---------
apps/client/src/locales/messages.uk.xlf | 126 +++++++++++++++---------
apps/client/src/locales/messages.xlf | 120 +++++++++++++---------
apps/client/src/locales/messages.zh.xlf | 126 +++++++++++++++---------
13 files changed, 947 insertions(+), 563 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 88b90c943..45af8de6b 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -11,6 +11,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- Added a _Copy portfolio data to clipboard for AI prompt_ action to the analysis page (experimental)
+### Changed
+
+- Improved the language localization for German (`de`)
+
## 2.144.0 - 2025-03-06
### Fixed
diff --git a/apps/client/src/locales/messages.ca.xlf b/apps/client/src/locales/messages.ca.xlf
index 1e905750c..3dc8d56f3 100644
--- a/apps/client/src/locales/messages.ca.xlf
+++ b/apps/client/src/locales/messages.ca.xlf
@@ -2671,7 +2671,7 @@
libs/ui/src/lib/i18n.ts
- 98
+ 101
@@ -2683,7 +2683,7 @@
libs/ui/src/lib/i18n.ts
- 99
+ 102
@@ -5107,7 +5107,7 @@
Absolute Asset Performance
apps/client/src/app/pages/portfolio/analysis/analysis-page.html
- 60
+ 78
@@ -5115,7 +5115,7 @@
Asset Performance
apps/client/src/app/pages/portfolio/analysis/analysis-page.html
- 81
+ 99
@@ -5123,7 +5123,7 @@
Absolute Currency Performance
apps/client/src/app/pages/portfolio/analysis/analysis-page.html
- 103
+ 121
@@ -5131,7 +5131,7 @@
Currency Performance
apps/client/src/app/pages/portfolio/analysis/analysis-page.html
- 127
+ 145
@@ -5139,7 +5139,7 @@
Absolute Net Performance
apps/client/src/app/pages/portfolio/analysis/analysis-page.html
- 150
+ 168
@@ -5147,7 +5147,7 @@
Net Performance
apps/client/src/app/pages/portfolio/analysis/analysis-page.html
- 169
+ 187
@@ -5155,7 +5155,7 @@
Top
apps/client/src/app/pages/portfolio/analysis/analysis-page.html
- 197
+ 215
@@ -5163,7 +5163,7 @@
Bottom
apps/client/src/app/pages/portfolio/analysis/analysis-page.html
- 246
+ 264
@@ -5171,7 +5171,7 @@
Portfolio Evolution
apps/client/src/app/pages/portfolio/analysis/analysis-page.html
- 299
+ 317
@@ -5179,7 +5179,7 @@
Investment Timeline
apps/client/src/app/pages/portfolio/analysis/analysis-page.html
- 326
+ 344
@@ -5187,7 +5187,7 @@
Current Streak
apps/client/src/app/pages/portfolio/analysis/analysis-page.html
- 347
+ 365
@@ -5195,7 +5195,7 @@
Longest Streak
apps/client/src/app/pages/portfolio/analysis/analysis-page.html
- 356
+ 374
@@ -5203,7 +5203,7 @@
Dividend Timeline
apps/client/src/app/pages/portfolio/analysis/analysis-page.html
- 383
+ 401
@@ -5595,7 +5595,7 @@
libs/ui/src/lib/i18n.ts
- 90
+ 93
@@ -6391,7 +6391,7 @@
Japan
libs/ui/src/lib/i18n.ts
- 84
+ 86
@@ -6683,7 +6683,7 @@
Extreme Fear
libs/ui/src/lib/i18n.ts
- 96
+ 99
@@ -6691,7 +6691,7 @@
Extreme Greed
libs/ui/src/lib/i18n.ts
- 97
+ 100
@@ -6699,7 +6699,7 @@
Neutral
libs/ui/src/lib/i18n.ts
- 100
+ 103
@@ -6867,7 +6867,7 @@
Australia
libs/ui/src/lib/i18n.ts
- 73
+ 74
@@ -6875,7 +6875,7 @@
Austria
libs/ui/src/lib/i18n.ts
- 74
+ 75
@@ -6883,7 +6883,7 @@
Belgium
libs/ui/src/lib/i18n.ts
- 75
+ 76
@@ -6891,7 +6891,7 @@
Bulgaria
libs/ui/src/lib/i18n.ts
- 76
+ 78
@@ -6899,7 +6899,7 @@
Canada
libs/ui/src/lib/i18n.ts
- 77
+ 79
@@ -6907,7 +6907,7 @@
Czech Republic
libs/ui/src/lib/i18n.ts
- 78
+ 80
@@ -6915,7 +6915,7 @@
Finland
libs/ui/src/lib/i18n.ts
- 79
+ 81
@@ -6923,7 +6923,7 @@
France
libs/ui/src/lib/i18n.ts
- 80
+ 82
@@ -6931,7 +6931,7 @@
Germany
libs/ui/src/lib/i18n.ts
- 81
+ 83
@@ -6939,7 +6939,7 @@
India
libs/ui/src/lib/i18n.ts
- 82
+ 84
@@ -6947,7 +6947,7 @@
Italy
libs/ui/src/lib/i18n.ts
- 83
+ 85
@@ -6955,7 +6955,7 @@
Netherlands
libs/ui/src/lib/i18n.ts
- 85
+ 87
@@ -6963,7 +6963,7 @@
New Zealand
libs/ui/src/lib/i18n.ts
- 86
+ 88
@@ -6971,7 +6971,7 @@
Poland
libs/ui/src/lib/i18n.ts
- 87
+ 89
@@ -6979,7 +6979,7 @@
Romania
libs/ui/src/lib/i18n.ts
- 88
+ 90
@@ -6987,7 +6987,7 @@
South Africa
libs/ui/src/lib/i18n.ts
- 89
+ 92
@@ -6995,7 +6995,7 @@
Thailand
libs/ui/src/lib/i18n.ts
- 91
+ 94
@@ -7003,7 +7003,7 @@
United States
libs/ui/src/lib/i18n.ts
- 93
+ 96
@@ -7347,7 +7347,7 @@
Ukraine
libs/ui/src/lib/i18n.ts
- 92
+ 95
@@ -7624,14 +7624,6 @@
153
-
- Copy AI prompt to clipboard
- Copy AI prompt to clipboard
-
- apps/client/src/app/pages/portfolio/analysis/analysis-page.html
- 27
-
-
Link has been copied to the clipboard
Link has been copied to the clipboard
@@ -7764,6 +7756,46 @@
378
+
+ Copy portfolio data to clipboard for AI prompt
+ Copy portfolio data to clipboard for AI prompt
+
+ apps/client/src/app/pages/portfolio/analysis/analysis-page.html
+ 28
+
+
+
+ Copy AI prompt to clipboard for analysis
+ Copy AI prompt to clipboard for analysis
+
+ apps/client/src/app/pages/portfolio/analysis/analysis-page.html
+ 44
+
+
+
+ Armenia
+ Armenia
+
+ libs/ui/src/lib/i18n.ts
+ 73
+
+
+
+ British Virgin Islands
+ British Virgin Islands
+
+ libs/ui/src/lib/i18n.ts
+ 77
+
+
+
+ Singapore
+ Singapore
+
+ libs/ui/src/lib/i18n.ts
+ 91
+
+