apps/client/src/app/pages/about/overview/about-overview-page.html
170
From 1fa05f31eb168de70fbcf1fea2550dd63adfcf01 Mon Sep 17 00:00:00 2001
From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com>
Date: Thu, 30 Jul 2026 19:51:37 +0200
Subject: [PATCH 16/86] Bugfix/allow removing invalid Ghostfolio API key
(#7470)
Allow removing invalid Ghostfolio API key
---
.../admin-settings/admin-settings.component.html | 10 +++++++---
.../admin-settings/admin-settings.component.ts | 3 +++
2 files changed, 10 insertions(+), 3 deletions(-)
diff --git a/apps/client/src/app/components/admin-settings/admin-settings.component.html b/apps/client/src/app/components/admin-settings/admin-settings.component.html
index c2ed2f8f5..b35f10438 100644
--- a/apps/client/src/app/components/admin-settings/admin-settings.component.html
+++ b/apps/client/src/app/components/admin-settings/admin-settings.component.html
@@ -162,7 +162,7 @@
@if (isGhostfolioDataProvider(element)) {
- @if (isGhostfolioApiKeyValid === true) {
+ @if (hasGhostfolioApiKey) {
-
+
@@ -179,7 +183,7 @@
- } @else if (isGhostfolioApiKeyValid === false) {
+ } @else if (hasGhostfolioApiKey === false) {
Date: Thu, 30 Jul 2026 21:00:00 +0200
Subject: [PATCH 17/86] Task/add missing status of GHOSTFOLIO data provider in
case of invalid API key (#7476)
Add missing status of GHOSTFOLIO data provider in case of invalid API key
---
.../admin-settings/admin-settings.component.html | 9 +++++++--
1 file changed, 7 insertions(+), 2 deletions(-)
diff --git a/apps/client/src/app/components/admin-settings/admin-settings.component.html b/apps/client/src/app/components/admin-settings/admin-settings.component.html
index b35f10438..99346f0fb 100644
--- a/apps/client/src/app/components/admin-settings/admin-settings.component.html
+++ b/apps/client/src/app/components/admin-settings/admin-settings.component.html
@@ -105,8 +105,13 @@
@if (
- !isGhostfolioDataProvider(element) ||
- isGhostfolioApiKeyValid === true
+ hasGhostfolioApiKey &&
+ isGhostfolioApiKeyValid === false &&
+ isGhostfolioDataProvider(element)
+ ) {
+ Invalid API key
+ } @else if (
+ hasGhostfolioApiKey || !isGhostfolioDataProvider(element)
) {
}
From 52fa7c224046bb3b84f88af8071d900450e174c9 Mon Sep 17 00:00:00 2001
From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com>
Date: Thu, 30 Jul 2026 21:06:00 +0200
Subject: [PATCH 18/86] Task/consolidate markets pages (#7471)
* Consolidate markets pages
* Update changelog
---
CHANGELOG.md | 6 +
apps/api/src/app/user/user.service.ts | 5 +-
.../fear-and-greed-index.component.html | 24 ----
.../fear-and-greed-index.component.scss | 8 --
.../home-market/home-market.component.ts | 80 ------------
.../components/home-market/home-market.html | 35 -----
.../components/markets/markets.component.ts | 122 ++++++++++++------
.../src/app/components/markets/markets.html | 82 ++++++------
.../src/app/pages/api/api-page.component.ts | 2 +-
apps/client/src/app/pages/api/api-page.html | 22 +---
.../src/app/pages/home/home-page.component.ts | 15 +--
.../src/app/pages/home/home-page.routes.ts | 8 +-
.../pages/markets/markets-page.component.ts | 4 +-
.../src/app/pages/markets/markets-page.html | 2 +-
libs/common/src/lib/helper.ts | 6 +-
libs/common/src/lib/routes/routes.ts | 5 -
.../fear-and-greed-index.component.html | 25 ++++
.../fear-and-greed-index.component.scss | 0
.../fear-and-greed-index.component.stories.ts | 39 ++++++
.../fear-and-greed-index.component.ts | 23 ++--
libs/ui/src/lib/fear-and-greed-index/index.ts | 1 +
libs/ui/src/lib/i18n.ts | 1 +
22 files changed, 234 insertions(+), 281 deletions(-)
delete mode 100644 apps/client/src/app/components/fear-and-greed-index/fear-and-greed-index.component.html
delete mode 100644 apps/client/src/app/components/fear-and-greed-index/fear-and-greed-index.component.scss
delete mode 100644 apps/client/src/app/components/home-market/home-market.component.ts
delete mode 100644 apps/client/src/app/components/home-market/home-market.html
create mode 100644 libs/ui/src/lib/fear-and-greed-index/fear-and-greed-index.component.html
rename apps/client/src/app/components/home-market/home-market.scss => libs/ui/src/lib/fear-and-greed-index/fear-and-greed-index.component.scss (100%)
create mode 100644 libs/ui/src/lib/fear-and-greed-index/fear-and-greed-index.component.stories.ts
rename {apps/client/src/app/components => libs/ui/src/lib}/fear-and-greed-index/fear-and-greed-index.component.ts (53%)
create mode 100644 libs/ui/src/lib/fear-and-greed-index/index.ts
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 500d00d2c..f5fefea4d 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -7,10 +7,16 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
## Unreleased
+### Added
+
+- Added an empty state to the _Fear & Greed Index_ component
+- Added a _Storybook_ story for the _Fear & Greed Index_ component
+
### Changed
- Moved the tags to the overview tab of the account detail dialog (experimental)
- Moved the tags to the overview tab of the holding detail dialog
+- Consolidated the markets pages into a single route where the _Fear & Greed Index_ is controlled by permission
- Refactored the line chart components to share the common chart configuration
- Improved the language localization for Spanish (`es`)
- Improved the language localization for Ukrainian (`uk`)
diff --git a/apps/api/src/app/user/user.service.ts b/apps/api/src/app/user/user.service.ts
index 648f36cbf..7f3631c54 100644
--- a/apps/api/src/app/user/user.service.ts
+++ b/apps/api/src/app/user/user.service.ts
@@ -555,7 +555,10 @@ export class UserService {
}
} else {
if (
- await this.propertyService.getByKey(PROPERTY_API_KEY_GHOSTFOLIO)
+ this.configurationService.get('ENABLE_FEATURE_FEAR_AND_GREED_INDEX') ||
+ (await this.propertyService.getByKey(
+ PROPERTY_API_KEY_GHOSTFOLIO
+ ))
) {
currentPermissions.push(permissions.readMarketDataOfMarkets);
}
diff --git a/apps/client/src/app/components/fear-and-greed-index/fear-and-greed-index.component.html b/apps/client/src/app/components/fear-and-greed-index/fear-and-greed-index.component.html
deleted file mode 100644
index dd2925f43..000000000
--- a/apps/client/src/app/components/fear-and-greed-index/fear-and-greed-index.component.html
+++ /dev/null
@@ -1,24 +0,0 @@
-
-
-
{{ fearAndGreedIndexEmoji }}
-
-
- {{ fearAndGreedIndexText }}
- {{ fearAndGreedIndex | number: '1.0-0' }} /100
-
-
Current Market Mood
-
-
- @if (!fearAndGreedIndex) {
-
- }
-
diff --git a/apps/client/src/app/components/fear-and-greed-index/fear-and-greed-index.component.scss b/apps/client/src/app/components/fear-and-greed-index/fear-and-greed-index.component.scss
deleted file mode 100644
index dfe024a03..000000000
--- a/apps/client/src/app/components/fear-and-greed-index/fear-and-greed-index.component.scss
+++ /dev/null
@@ -1,8 +0,0 @@
-:host {
- display: block;
-
- ngx-skeleton-loader {
- bottom: 0;
- top: 0;
- }
-}
diff --git a/apps/client/src/app/components/home-market/home-market.component.ts b/apps/client/src/app/components/home-market/home-market.component.ts
deleted file mode 100644
index 0eec3f2d9..000000000
--- a/apps/client/src/app/components/home-market/home-market.component.ts
+++ /dev/null
@@ -1,80 +0,0 @@
-import { GfFearAndGreedIndexComponent } from '@ghostfolio/client/components/fear-and-greed-index/fear-and-greed-index.component';
-import { UserService } from '@ghostfolio/client/services/user/user.service';
-import { Benchmark, InfoItem, User } from '@ghostfolio/common/interfaces';
-import { hasPermission, permissions } from '@ghostfolio/common/permissions';
-import { GfBenchmarkComponent } from '@ghostfolio/ui/benchmark';
-import { DataService } from '@ghostfolio/ui/services';
-
-import {
- ChangeDetectionStrategy,
- ChangeDetectorRef,
- Component,
- computed,
- CUSTOM_ELEMENTS_SCHEMA,
- DestroyRef,
- inject,
- OnInit,
- signal
-} from '@angular/core';
-import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
-import { DeviceDetectorService } from 'ngx-device-detector';
-
-@Component({
- changeDetection: ChangeDetectionStrategy.OnPush,
- imports: [GfBenchmarkComponent, GfFearAndGreedIndexComponent],
- schemas: [CUSTOM_ELEMENTS_SCHEMA],
- selector: 'gf-home-market',
- styleUrls: ['./home-market.scss'],
- templateUrl: './home-market.html'
-})
-export class GfHomeMarketComponent implements OnInit {
- protected readonly benchmarks = signal([]);
-
- protected readonly deviceType = computed(
- () => this.deviceDetectorService.deviceInfo().deviceType
- );
-
- protected fearAndGreedIndex: number | undefined;
- protected hasPermissionToAccessFearAndGreedIndex: boolean;
- protected user: User;
-
- private readonly info: InfoItem;
-
- private readonly changeDetectorRef = inject(ChangeDetectorRef);
- private readonly dataService = inject(DataService);
- private readonly destroyRef = inject(DestroyRef);
- private readonly deviceDetectorService = inject(DeviceDetectorService);
- private readonly userService = inject(UserService);
-
- public constructor() {
- this.info = this.dataService.fetchInfo();
-
- this.userService.stateChanged
- .pipe(takeUntilDestroyed(this.destroyRef))
- .subscribe((state) => {
- if (state?.user) {
- this.user = state.user;
-
- this.changeDetectorRef.markForCheck();
- }
- });
- }
-
- public ngOnInit() {
- this.hasPermissionToAccessFearAndGreedIndex = hasPermission(
- this.info?.globalPermissions,
- permissions.enableFearAndGreedIndex
- );
-
- if (this.hasPermissionToAccessFearAndGreedIndex) {
- this.fearAndGreedIndex = this.info.fearAndGreedStocksMarketPrice;
- }
-
- this.dataService
- .fetchBenchmarks()
- .pipe(takeUntilDestroyed(this.destroyRef))
- .subscribe(({ benchmarks }) => {
- this.benchmarks.set(benchmarks);
- });
- }
-}
diff --git a/apps/client/src/app/components/home-market/home-market.html b/apps/client/src/app/components/home-market/home-market.html
deleted file mode 100644
index b1e21df95..000000000
--- a/apps/client/src/app/components/home-market/home-market.html
+++ /dev/null
@@ -1,35 +0,0 @@
-
-
Markets
- @if (hasPermissionToAccessFearAndGreedIndex) {
-
- }
-
-
-
-
- @if (benchmarks()?.length > 0) {
-
-
- Calculations are based on delayed market data and may not be
- displayed in real-time.
-
- }
-
-
-
diff --git a/apps/client/src/app/components/markets/markets.component.ts b/apps/client/src/app/components/markets/markets.component.ts
index d2f64f3fc..27f60d86a 100644
--- a/apps/client/src/app/components/markets/markets.component.ts
+++ b/apps/client/src/app/components/markets/markets.component.ts
@@ -1,15 +1,17 @@
-import { GfFearAndGreedIndexComponent } from '@ghostfolio/client/components/fear-and-greed-index/fear-and-greed-index.component';
import { UserService } from '@ghostfolio/client/services/user/user.service';
import { resetHours } from '@ghostfolio/common/helper';
import {
Benchmark,
HistoricalDataItem,
+ InfoItem,
MarketDataOfMarketsResponse,
ToggleOption,
User
} from '@ghostfolio/common/interfaces';
+import { hasPermission, permissions } from '@ghostfolio/common/permissions';
import { FearAndGreedIndexMode } from '@ghostfolio/common/types';
import { GfBenchmarkComponent } from '@ghostfolio/ui/benchmark';
+import { GfFearAndGreedIndexComponent } from '@ghostfolio/ui/fear-and-greed-index';
import { GfLineChartComponent } from '@ghostfolio/ui/line-chart';
import { DataService } from '@ghostfolio/ui/services';
import { GfToggleComponent } from '@ghostfolio/ui/toggle';
@@ -18,9 +20,12 @@ import {
ChangeDetectionStrategy,
ChangeDetectorRef,
Component,
+ computed,
CUSTOM_ELEMENTS_SCHEMA,
DestroyRef,
- OnInit
+ inject,
+ OnInit,
+ signal
} from '@angular/core';
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
import { DeviceDetectorService } from 'ngx-device-detector';
@@ -39,29 +44,50 @@ import { DeviceDetectorService } from 'ngx-device-detector';
templateUrl: './markets.html'
})
export class GfMarketsComponent implements OnInit {
- public benchmarks: Benchmark[];
- public deviceType: string;
- public fearAndGreedIndex: number;
- public fearAndGreedIndexData: MarketDataOfMarketsResponse['fearAndGreedIndex'];
- public fearLabel = $localize`Fear`;
- public greedLabel = $localize`Greed`;
- public historicalDataItems: HistoricalDataItem[];
- public fearAndGreedIndexMode: FearAndGreedIndexMode = 'STOCKS';
- public fearAndGreedIndexModeOptions: ToggleOption[] = [
+ protected readonly benchmarks = signal([]);
+
+ protected readonly deviceType = computed(
+ () => this.deviceDetectorService.deviceInfo().deviceType
+ );
+
+ protected readonly fearAndGreedIndexModeOptions: ToggleOption[] = [
{ label: $localize`Stocks`, value: 'STOCKS' },
{ label: $localize`Cryptocurrencies`, value: 'CRYPTOCURRENCIES' }
];
- public readonly numberOfDays = 365;
- public user: User;
-
- public constructor(
- private changeDetectorRef: ChangeDetectorRef,
- private dataService: DataService,
- private destroyRef: DestroyRef,
- private deviceDetectorService: DeviceDetectorService,
- private userService: UserService
- ) {
- this.deviceType = this.deviceDetectorService.getDeviceInfo().deviceType;
+
+ protected readonly fearLabel = $localize`Fear`;
+ protected readonly greedLabel = $localize`Greed`;
+ protected readonly numberOfDays = 365;
+
+ protected fearAndGreedIndex: number | undefined;
+ protected fearAndGreedIndexMode: FearAndGreedIndexMode = 'STOCKS';
+ protected hasPermissionToAccessFearAndGreedIndex: boolean;
+ protected hasPermissionToReadMarketDataOfMarkets: boolean;
+ protected historicalDataItems: HistoricalDataItem[];
+ protected isLoadingFearAndGreedIndex = true;
+ protected user: User;
+
+ private fearAndGreedIndexData: MarketDataOfMarketsResponse['fearAndGreedIndex'];
+
+ private readonly info: InfoItem;
+
+ private readonly changeDetectorRef = inject(ChangeDetectorRef);
+ private readonly dataService = inject(DataService);
+ private readonly destroyRef = inject(DestroyRef);
+ private readonly deviceDetectorService = inject(DeviceDetectorService);
+ private readonly userService = inject(UserService);
+
+ public constructor() {
+ this.info = this.dataService.fetchInfo();
+
+ this.hasPermissionToAccessFearAndGreedIndex = hasPermission(
+ this.info?.globalPermissions,
+ permissions.enableFearAndGreedIndex
+ );
+
+ if (this.hasPermissionToAccessFearAndGreedIndex) {
+ this.fearAndGreedIndex = this.info.fearAndGreedStocksMarketPrice;
+ }
this.userService.stateChanged
.pipe(takeUntilDestroyed(this.destroyRef))
@@ -69,6 +95,20 @@ export class GfMarketsComponent implements OnInit {
if (state?.user) {
this.user = state.user;
+ this.hasPermissionToReadMarketDataOfMarkets = hasPermission(
+ this.user.permissions,
+ permissions.readMarketDataOfMarkets
+ );
+
+ if (
+ this.hasPermissionToReadMarketDataOfMarkets &&
+ !this.fearAndGreedIndexData
+ ) {
+ this.fetchMarketDataOfMarkets();
+ } else {
+ this.isLoadingFearAndGreedIndex = false;
+ }
+
this.changeDetectorRef.markForCheck();
}
});
@@ -76,27 +116,37 @@ export class GfMarketsComponent implements OnInit {
public ngOnInit() {
this.dataService
- .fetchMarketDataOfMarkets({ includeHistoricalData: this.numberOfDays })
+ .fetchBenchmarks()
.pipe(takeUntilDestroyed(this.destroyRef))
- .subscribe(({ fearAndGreedIndex }) => {
- this.fearAndGreedIndexData = fearAndGreedIndex;
+ .subscribe(({ benchmarks }) => {
+ this.benchmarks.set(benchmarks);
+ });
+ }
- this.initialize();
+ protected onChangeFearAndGreedIndexMode(
+ aFearAndGreedIndexMode: FearAndGreedIndexMode
+ ) {
+ this.fearAndGreedIndexMode = aFearAndGreedIndexMode;
- this.changeDetectorRef.markForCheck();
- });
+ this.initializeFearAndGreedIndex();
+ }
+ private fetchMarketDataOfMarkets() {
this.dataService
- .fetchBenchmarks()
+ .fetchMarketDataOfMarkets({ includeHistoricalData: this.numberOfDays })
.pipe(takeUntilDestroyed(this.destroyRef))
- .subscribe(({ benchmarks }) => {
- this.benchmarks = benchmarks;
+ .subscribe(({ fearAndGreedIndex }) => {
+ this.fearAndGreedIndexData = fearAndGreedIndex;
+
+ this.initializeFearAndGreedIndex();
+
+ this.isLoadingFearAndGreedIndex = false;
this.changeDetectorRef.markForCheck();
});
}
- public initialize() {
+ private initializeFearAndGreedIndex() {
this.fearAndGreedIndex =
this.fearAndGreedIndexData[this.fearAndGreedIndexMode]?.marketPrice;
@@ -109,12 +159,4 @@ export class GfMarketsComponent implements OnInit {
}
];
}
-
- public onChangeFearAndGreedIndexMode(
- aFearAndGreedIndexMode: FearAndGreedIndexMode
- ) {
- this.fearAndGreedIndexMode = aFearAndGreedIndexMode;
-
- this.initialize();
- }
}
diff --git a/apps/client/src/app/components/markets/markets.html b/apps/client/src/app/components/markets/markets.html
index 38234a785..bd9013a00 100644
--- a/apps/client/src/app/components/markets/markets.html
+++ b/apps/client/src/app/components/markets/markets.html
@@ -1,52 +1,62 @@
Markets
-
-
- @if (user?.settings?.isExperimentalFeatures) {
-
-
+
+ @if (hasPermissionToReadMarketDataOfMarkets) {
+ @if (user?.settings?.isExperimentalFeatures) {
+
+
+
+ }
+
+ Last {{ numberOfDays }} Days
+
+
-
- }
-
- Last {{ numberOfDays }} Days
+ }
+
-
-
-
+ }
- @if (benchmarks?.length > 0) {
+ @if (benchmarks()?.length > 0) {
diff --git a/apps/client/src/app/pages/api/api-page.component.ts b/apps/client/src/app/pages/api/api-page.component.ts
index 556890271..8b80370e8 100644
--- a/apps/client/src/app/pages/api/api-page.component.ts
+++ b/apps/client/src/app/pages/api/api-page.component.ts
@@ -1,4 +1,3 @@
-import { GfFearAndGreedIndexComponent } from '@ghostfolio/client/components/fear-and-greed-index/fear-and-greed-index.component';
import {
HEADER_KEY_SKIP_INTERCEPTOR,
HEADER_KEY_TOKEN
@@ -14,6 +13,7 @@ import {
MarketDataOfMarketsResponse,
QuotesResponse
} from '@ghostfolio/common/interfaces';
+import { GfFearAndGreedIndexComponent } from '@ghostfolio/ui/fear-and-greed-index';
import { CommonModule } from '@angular/common';
import {
diff --git a/apps/client/src/app/pages/api/api-page.html b/apps/client/src/app/pages/api/api-page.html
index b2d9d03ac..2153fba1e 100644
--- a/apps/client/src/app/pages/api/api-page.html
+++ b/apps/client/src/app/pages/api/api-page.html
@@ -179,16 +179,12 @@
@if (isFetchFailure(marketDataOfMarkets)) {
🔴 {{ marketDataOfMarkets.fetchError }}
- } @else if (marketDataOfMarkets) {
+ } @else {
- } @else {
-
}
@@ -203,17 +199,13 @@
@if (isFetchFailure(marketDataOfMarkets)) {
🔴 {{ marketDataOfMarkets.fetchError }}
- } @else if (marketDataOfMarkets) {
+ } @else {
- } @else {
-
}
diff --git a/apps/client/src/app/pages/home/home-page.component.ts b/apps/client/src/app/pages/home/home-page.component.ts
index 574286c82..4ef7741de 100644
--- a/apps/client/src/app/pages/home/home-page.component.ts
+++ b/apps/client/src/app/pages/home/home-page.component.ts
@@ -1,7 +1,6 @@
import { ImpersonationStorageService } from '@ghostfolio/client/services/impersonation-storage.service';
import { UserService } from '@ghostfolio/client/services/user/user.service';
import { User } from '@ghostfolio/common/interfaces';
-import { hasPermission, permissions } from '@ghostfolio/common/permissions';
import { internalRoutes } from '@ghostfolio/common/routes/routes';
import {
GfPageTabsComponent,
@@ -73,18 +72,8 @@ export class GfHomePageComponent implements OnInit {
},
{
iconName: 'newspaper-outline',
- label: hasPermission(
- this.user?.permissions,
- permissions.readMarketDataOfMarkets
- )
- ? internalRoutes.home.subRoutes.marketsPremium.title
- : internalRoutes.home.subRoutes.markets.title,
- routerLink: hasPermission(
- this.user?.permissions,
- permissions.readMarketDataOfMarkets
- )
- ? internalRoutes.home.subRoutes.marketsPremium.routerLink
- : internalRoutes.home.subRoutes.markets.routerLink
+ label: internalRoutes.home.subRoutes.markets.title,
+ routerLink: internalRoutes.home.subRoutes.markets.routerLink
}
];
}
diff --git a/apps/client/src/app/pages/home/home-page.routes.ts b/apps/client/src/app/pages/home/home-page.routes.ts
index 82ef1e521..cc444c2b0 100644
--- a/apps/client/src/app/pages/home/home-page.routes.ts
+++ b/apps/client/src/app/pages/home/home-page.routes.ts
@@ -1,5 +1,4 @@
import { GfHomeHoldingsComponent } from '@ghostfolio/client/components/home-holdings/home-holdings.component';
-import { GfHomeMarketComponent } from '@ghostfolio/client/components/home-market/home-market.component';
import { GfHomeOverviewComponent } from '@ghostfolio/client/components/home-overview/home-overview.component';
import { GfHomeSummaryComponent } from '@ghostfolio/client/components/home-summary/home-summary.component';
import { GfHomeWatchlistComponent } from '@ghostfolio/client/components/home-watchlist/home-watchlist.component';
@@ -31,13 +30,8 @@ export const routes: Routes = [
},
{
path: internalRoutes.home.subRoutes.markets.path,
- component: GfHomeMarketComponent,
- title: internalRoutes.home.subRoutes.markets.title
- },
- {
- path: internalRoutes.home.subRoutes.marketsPremium.path,
component: GfMarketsComponent,
- title: internalRoutes.home.subRoutes.marketsPremium.title
+ title: internalRoutes.home.subRoutes.markets.title
},
{
path: internalRoutes.home.subRoutes.watchlist.path,
diff --git a/apps/client/src/app/pages/markets/markets-page.component.ts b/apps/client/src/app/pages/markets/markets-page.component.ts
index 9a7576a95..bf35c5556 100644
--- a/apps/client/src/app/pages/markets/markets-page.component.ts
+++ b/apps/client/src/app/pages/markets/markets-page.component.ts
@@ -1,11 +1,11 @@
-import { GfHomeMarketComponent } from '@ghostfolio/client/components/home-market/home-market.component';
+import { GfMarketsComponent } from '@ghostfolio/client/components/markets/markets.component';
import { ChangeDetectionStrategy, Component } from '@angular/core';
@Component({
changeDetection: ChangeDetectionStrategy.OnPush,
host: { class: 'page' },
- imports: [GfHomeMarketComponent],
+ imports: [GfMarketsComponent],
selector: 'gf-markets-page',
styleUrls: ['./markets-page.scss'],
templateUrl: './markets-page.html'
diff --git a/apps/client/src/app/pages/markets/markets-page.html b/apps/client/src/app/pages/markets/markets-page.html
index 16457b8cd..0ff0170d7 100644
--- a/apps/client/src/app/pages/markets/markets-page.html
+++ b/apps/client/src/app/pages/markets/markets-page.html
@@ -1,7 +1,7 @@
diff --git a/libs/common/src/lib/helper.ts b/libs/common/src/lib/helper.ts
index 5d1ff538e..b2a3ab419 100644
--- a/libs/common/src/lib/helper.ts
+++ b/libs/common/src/lib/helper.ts
@@ -560,8 +560,10 @@ export function resetHours(aDate: Date) {
return new Date(Date.UTC(year, month, day));
}
-export function resolveFearAndGreedIndex(aValue: number) {
- if (aValue <= 25) {
+export function resolveFearAndGreedIndex(aValue?: number) {
+ if (isNil(aValue)) {
+ return { emoji: '⚪', key: 'UNKNOWN', text: 'Unknown' };
+ } else if (aValue <= 25) {
return { emoji: '🥵', key: 'EXTREME_FEAR', text: 'Extreme Fear' };
} else if (aValue <= 45) {
return { emoji: '😨', key: 'FEAR', text: 'Fear' };
diff --git a/libs/common/src/lib/routes/routes.ts b/libs/common/src/lib/routes/routes.ts
index 86cb2480b..4d40cc5fb 100644
--- a/libs/common/src/lib/routes/routes.ts
+++ b/libs/common/src/lib/routes/routes.ts
@@ -94,11 +94,6 @@ export const internalRoutes = {
routerLink: ['/home', 'markets'],
title: $localize`Markets`
},
- marketsPremium: {
- path: 'markets-premium',
- routerLink: ['/home', 'markets-premium'],
- title: $localize`Markets`
- },
summary: {
path: 'summary',
routerLink: ['/home', 'summary'],
diff --git a/libs/ui/src/lib/fear-and-greed-index/fear-and-greed-index.component.html b/libs/ui/src/lib/fear-and-greed-index/fear-and-greed-index.component.html
new file mode 100644
index 000000000..e441c53f6
--- /dev/null
+++ b/libs/ui/src/lib/fear-and-greed-index/fear-and-greed-index.component.html
@@ -0,0 +1,25 @@
+@if (isLoading() && !fearAndGreedIndex()) {
+
+} @else {
+
+
{{ fearAndGreedIndexEmoji() }}
+
+
+ {{ fearAndGreedIndexText() }}
+ {{
+ (fearAndGreedIndex() | number: '1.0-0') ?? placeholder
+ }} /100
+
+
Current Market Mood
+
+
+}
diff --git a/apps/client/src/app/components/home-market/home-market.scss b/libs/ui/src/lib/fear-and-greed-index/fear-and-greed-index.component.scss
similarity index 100%
rename from apps/client/src/app/components/home-market/home-market.scss
rename to libs/ui/src/lib/fear-and-greed-index/fear-and-greed-index.component.scss
diff --git a/libs/ui/src/lib/fear-and-greed-index/fear-and-greed-index.component.stories.ts b/libs/ui/src/lib/fear-and-greed-index/fear-and-greed-index.component.stories.ts
new file mode 100644
index 000000000..b5b2074da
--- /dev/null
+++ b/libs/ui/src/lib/fear-and-greed-index/fear-and-greed-index.component.stories.ts
@@ -0,0 +1,39 @@
+import '@angular/localize/init';
+import { moduleMetadata } from '@storybook/angular';
+import type { Meta, StoryObj } from '@storybook/angular';
+import { NgxSkeletonLoaderModule } from 'ngx-skeleton-loader';
+
+import { GfFearAndGreedIndexComponent } from './fear-and-greed-index.component';
+
+export default {
+ title: 'Fear & Greed Index',
+ component: GfFearAndGreedIndexComponent,
+ decorators: [
+ moduleMetadata({
+ imports: [NgxSkeletonLoaderModule]
+ })
+ ]
+} as Meta
;
+
+type Story = StoryObj;
+
+export const Loading: Story = {
+ args: {
+ fearAndGreedIndex: undefined,
+ isLoading: true
+ }
+};
+
+export const Default: Story = {
+ args: {
+ fearAndGreedIndex: 50,
+ isLoading: false
+ }
+};
+
+export const Unknown: Story = {
+ args: {
+ fearAndGreedIndex: undefined,
+ isLoading: false
+ }
+};
diff --git a/apps/client/src/app/components/fear-and-greed-index/fear-and-greed-index.component.ts b/libs/ui/src/lib/fear-and-greed-index/fear-and-greed-index.component.ts
similarity index 53%
rename from apps/client/src/app/components/fear-and-greed-index/fear-and-greed-index.component.ts
rename to libs/ui/src/lib/fear-and-greed-index/fear-and-greed-index.component.ts
index b507f0008..4416752b3 100644
--- a/apps/client/src/app/components/fear-and-greed-index/fear-and-greed-index.component.ts
+++ b/libs/ui/src/lib/fear-and-greed-index/fear-and-greed-index.component.ts
@@ -5,8 +5,8 @@ import { DecimalPipe } from '@angular/common';
import {
ChangeDetectionStrategy,
Component,
- Input,
- OnChanges
+ computed,
+ input
} from '@angular/core';
import { NgxSkeletonLoaderModule } from 'ngx-skeleton-loader';
@@ -17,16 +17,17 @@ import { NgxSkeletonLoaderModule } from 'ngx-skeleton-loader';
styleUrls: ['./fear-and-greed-index.component.scss'],
templateUrl: './fear-and-greed-index.component.html'
})
-export class GfFearAndGreedIndexComponent implements OnChanges {
- @Input() fearAndGreedIndex: number;
+export class GfFearAndGreedIndexComponent {
+ public readonly fearAndGreedIndex = input();
+ public readonly isLoading = input(false);
- public fearAndGreedIndexEmoji: string;
- public fearAndGreedIndexText: string;
+ protected readonly placeholder = '—';
- public ngOnChanges() {
- const { emoji, key } = resolveFearAndGreedIndex(this.fearAndGreedIndex);
+ protected readonly fearAndGreedIndexEmoji = computed(() => {
+ return resolveFearAndGreedIndex(this.fearAndGreedIndex()).emoji;
+ });
- this.fearAndGreedIndexEmoji = emoji;
- this.fearAndGreedIndexText = translate(key);
- }
+ protected readonly fearAndGreedIndexText = computed(() => {
+ return translate(resolveFearAndGreedIndex(this.fearAndGreedIndex()).key);
+ });
}
diff --git a/libs/ui/src/lib/fear-and-greed-index/index.ts b/libs/ui/src/lib/fear-and-greed-index/index.ts
new file mode 100644
index 000000000..0f1db159b
--- /dev/null
+++ b/libs/ui/src/lib/fear-and-greed-index/index.ts
@@ -0,0 +1 @@
+export * from './fear-and-greed-index.component';
diff --git a/libs/ui/src/lib/i18n.ts b/libs/ui/src/lib/i18n.ts
index 26091be05..9e55a5edb 100644
--- a/libs/ui/src/lib/i18n.ts
+++ b/libs/ui/src/lib/i18n.ts
@@ -85,6 +85,7 @@ const locales = {
FEAR: $localize`Fear`,
GREED: $localize`Greed`,
NEUTRAL: $localize`Neutral`,
+ UNKNOWN: $localize`Unknown`,
// Sectors
'Basic Materials': $localize`Basic Materials`,
From 281d7add0c5ec8c283ba72cb54acc6233104b52e Mon Sep 17 00:00:00 2001
From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com>
Date: Thu, 30 Jul 2026 21:09:51 +0200
Subject: [PATCH 19/86] Release 3.37.0 (#7477)
---
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 f5fefea4d..098969146 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
+## 3.37.0 - 2026-07-30
### Added
diff --git a/package-lock.json b/package-lock.json
index 2f55459e6..f43ed2cbf 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,12 +1,12 @@
{
"name": "ghostfolio",
- "version": "3.36.0",
+ "version": "3.37.0",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "ghostfolio",
- "version": "3.36.0",
+ "version": "3.37.0",
"hasInstallScript": true,
"license": "AGPL-3.0",
"dependencies": {
diff --git a/package.json b/package.json
index 40b2ef182..b0ca3ea20 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "ghostfolio",
- "version": "3.36.0",
+ "version": "3.37.0",
"homepage": "https://ghostfol.io",
"license": "AGPL-3.0",
"repository": "https://github.com/ghostfolio/ghostfolio",
From 794449e6822bd92a5eb5c1aa39c7b5279cfabd26 Mon Sep 17 00:00:00 2001
From: "github-actions[bot]"
<41898282+github-actions[bot]@users.noreply.github.com>
Date: Thu, 30 Jul 2026 23:05:10 +0200
Subject: [PATCH 20/86] Task/update locales (#7463)
Co-authored-by: github-actions[bot]
---
apps/client/src/locales/messages.ca.xlf | 322 ++++++++++++-----------
apps/client/src/locales/messages.de.xlf | 322 ++++++++++++-----------
apps/client/src/locales/messages.es.xlf | 322 ++++++++++++-----------
apps/client/src/locales/messages.fr.xlf | 322 ++++++++++++-----------
apps/client/src/locales/messages.it.xlf | 322 ++++++++++++-----------
apps/client/src/locales/messages.ja.xlf | 322 ++++++++++++-----------
apps/client/src/locales/messages.ko.xlf | 322 ++++++++++++-----------
apps/client/src/locales/messages.nl.xlf | 322 ++++++++++++-----------
apps/client/src/locales/messages.pl.xlf | 322 ++++++++++++-----------
apps/client/src/locales/messages.pt.xlf | 322 ++++++++++++-----------
apps/client/src/locales/messages.tr.xlf | 322 ++++++++++++-----------
apps/client/src/locales/messages.uk.xlf | 326 ++++++++++++------------
apps/client/src/locales/messages.xlf | 320 ++++++++++++-----------
apps/client/src/locales/messages.zh.xlf | 322 ++++++++++++-----------
14 files changed, 2338 insertions(+), 2172 deletions(-)
diff --git a/apps/client/src/locales/messages.ca.xlf b/apps/client/src/locales/messages.ca.xlf
index 49ddc2157..a7bb8abdd 100644
--- a/apps/client/src/locales/messages.ca.xlf
+++ b/apps/client/src/locales/messages.ca.xlf
@@ -1,6 +1,14 @@
+
+ Invalid API key
+ Invalid API key
+
+ apps/client/src/app/components/admin-settings/admin-settings.component.html
+ 112
+
+
Features
Característiques
@@ -18,7 +26,7 @@
libs/common/src/lib/routes/routes.ts
- 276
+ 271
@@ -26,7 +34,7 @@
Internacionalització
libs/common/src/lib/routes/routes.ts
- 119
+ 114
@@ -107,31 +115,31 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 196
+ 191
libs/common/src/lib/routes/routes.ts
- 197
+ 192
libs/common/src/lib/routes/routes.ts
- 202
+ 197
libs/common/src/lib/routes/routes.ts
- 210
+ 205
libs/common/src/lib/routes/routes.ts
- 218
+ 213
libs/common/src/lib/routes/routes.ts
- 226
+ 221
libs/common/src/lib/routes/routes.ts
- 234
+ 229
@@ -140,11 +148,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 208
+ 203
libs/common/src/lib/routes/routes.ts
- 211
+ 206
@@ -153,11 +161,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 224
+ 219
libs/common/src/lib/routes/routes.ts
- 227
+ 222
@@ -166,19 +174,19 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 254
+ 249
libs/common/src/lib/routes/routes.ts
- 255
+ 250
libs/common/src/lib/routes/routes.ts
- 259
+ 254
libs/common/src/lib/routes/routes.ts
- 265
+ 260
@@ -187,11 +195,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 274
+ 269
libs/common/src/lib/routes/routes.ts
- 275
+ 270
@@ -200,11 +208,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 279
+ 274
libs/common/src/lib/routes/routes.ts
- 280
+ 275
@@ -213,11 +221,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 289
+ 284
libs/common/src/lib/routes/routes.ts
- 290
+ 285
@@ -226,11 +234,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 299
+ 294
libs/common/src/lib/routes/routes.ts
- 300
+ 295
@@ -239,31 +247,31 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 304
+ 299
libs/common/src/lib/routes/routes.ts
- 305
+ 300
libs/common/src/lib/routes/routes.ts
- 310
+ 305
libs/common/src/lib/routes/routes.ts
- 318
+ 313
libs/common/src/lib/routes/routes.ts
- 326
+ 321
libs/common/src/lib/routes/routes.ts
- 334
+ 329
libs/common/src/lib/routes/routes.ts
- 342
+ 337
@@ -375,7 +383,7 @@
Balanç de Caixa
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 43
+ 54
apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html
@@ -391,7 +399,7 @@
Plataforma
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 88
+ 112
apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html
@@ -407,7 +415,7 @@
Balanç de Caixa
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 143
+ 169
@@ -754,6 +762,14 @@
96
+
+ Unknown
+ Unknown
+
+ libs/ui/src/lib/i18n.ts
+ 88
+
+
Attempts
Intents
@@ -1075,7 +1091,7 @@
Healthcare
libs/ui/src/lib/i18n.ts
- 96
+ 97
@@ -1199,7 +1215,7 @@
Update Activity
libs/common/src/lib/routes/routes.ts
- 146
+ 141
@@ -1207,7 +1223,7 @@
Technology
libs/ui/src/lib/i18n.ts
- 100
+ 101
@@ -1315,7 +1331,7 @@
Industrials
libs/ui/src/lib/i18n.ts
- 97
+ 98
@@ -1351,7 +1367,7 @@
Consumer Cyclical
libs/ui/src/lib/i18n.ts
- 92
+ 93
@@ -1551,7 +1567,7 @@
Plataformes
apps/client/src/app/components/admin-settings/admin-settings.component.html
- 212
+ 221
@@ -1559,7 +1575,7 @@
Etiquetes
apps/client/src/app/components/admin-settings/admin-settings.component.html
- 218
+ 227
libs/ui/src/lib/tags-selector/tags-selector.component.html
@@ -1567,7 +1583,7 @@
libs/ui/src/lib/tags-selector/tags-selector.component.html
- 25
+ 23
@@ -1703,7 +1719,7 @@
Portfolio
apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts
- 139
+ 140
apps/client/src/app/components/header/header.component.html
@@ -1719,7 +1735,7 @@
libs/common/src/lib/routes/routes.ts
- 172
+ 167
@@ -1731,15 +1747,15 @@
apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts
- 151
+ 152
Current Market Mood
Sentiment del Mercat
- apps/client/src/app/components/fear-and-greed-index/fear-and-greed-index.component.html
- 12
+ libs/ui/src/lib/fear-and-greed-index/fear-and-greed-index.component.html
+ 22
@@ -1873,6 +1889,10 @@
Activity
Activitat
+
+ apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
+ 100
+
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
231
@@ -1883,7 +1903,7 @@
Informar d’un Problema amb les Dades
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 462
+ 463
@@ -1931,7 +1951,7 @@
Por
apps/client/src/app/components/markets/markets.component.ts
- 46
+ 58
libs/ui/src/lib/i18n.ts
@@ -1943,7 +1963,7 @@
Cobdícia
apps/client/src/app/components/markets/markets.component.ts
- 47
+ 59
libs/ui/src/lib/i18n.ts
@@ -1955,7 +1975,7 @@
Últims Dies
apps/client/src/app/components/markets/markets.html
- 17
+ 24
@@ -2063,7 +2083,7 @@
Import total
apps/client/src/app/components/investment-chart/investment-chart.component.ts
- 143
+ 144
@@ -2079,7 +2099,7 @@
Taxa d’estalvi
apps/client/src/app/components/investment-chart/investment-chart.component.ts
- 201
+ 193
@@ -2163,7 +2183,7 @@
Energy
libs/ui/src/lib/i18n.ts
- 94
+ 95
@@ -2603,7 +2623,7 @@
Consumer Defensive
libs/ui/src/lib/i18n.ts
- 93
+ 94
@@ -2691,7 +2711,7 @@
Clone Activity
libs/common/src/lib/routes/routes.ts
- 134
+ 129
@@ -2715,7 +2735,7 @@
Utilities
libs/ui/src/lib/i18n.ts
- 101
+ 102
@@ -3007,7 +3027,7 @@
libs/common/src/lib/routes/routes.ts
- 240
+ 235
@@ -3023,7 +3043,7 @@
libs/common/src/lib/routes/routes.ts
- 205
+ 200
@@ -3039,7 +3059,7 @@
libs/common/src/lib/routes/routes.ts
- 213
+ 208
@@ -3055,7 +3075,7 @@
libs/common/src/lib/routes/routes.ts
- 229
+ 224
@@ -3115,7 +3135,7 @@
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 384
+ 395
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
@@ -3171,7 +3191,7 @@
Financial Planning
libs/ui/src/lib/i18n.ts
- 108
+ 109
@@ -3231,7 +3251,7 @@
Dades de mercat
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 406
+ 417
libs/common/src/lib/routes/routes.ts
@@ -3269,6 +3289,10 @@
Overview
Visió general
+
+ apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
+ 41
+
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
114
@@ -3295,11 +3319,11 @@
libs/common/src/lib/routes/routes.ts
- 113
+ 108
libs/common/src/lib/routes/routes.ts
- 190
+ 185
@@ -3411,7 +3435,7 @@
libs/common/src/lib/routes/routes.ts
- 245
+ 240
@@ -3475,7 +3499,7 @@
libs/common/src/lib/routes/routes.ts
- 271
+ 266
@@ -3495,7 +3519,7 @@
libs/common/src/lib/routes/routes.ts
- 260
+ 255
@@ -3507,7 +3531,7 @@
libs/common/src/lib/routes/routes.ts
- 268
+ 263
@@ -3516,11 +3540,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 263
+ 258
libs/common/src/lib/routes/routes.ts
- 266
+ 261
@@ -3684,7 +3708,7 @@
Explotacions
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 100
+ 126
apps/client/src/app/components/home-holdings/home-holdings.html
@@ -3704,7 +3728,7 @@
libs/common/src/lib/routes/routes.ts
- 187
+ 182
libs/ui/src/lib/assistant/assistant.html
@@ -3728,7 +3752,7 @@
libs/common/src/lib/routes/routes.ts
- 105
+ 100
@@ -3746,10 +3770,6 @@
apps/client/src/app/components/header/header.component.html
408
-
- apps/client/src/app/components/home-market/home-market.html
- 2
-
apps/client/src/app/components/markets/markets.html
2
@@ -3768,15 +3788,11 @@
libs/common/src/lib/routes/routes.ts
- 100
-
-
- libs/common/src/lib/routes/routes.ts
- 281
+ 276
libs/common/src/lib/routes/routes.ts
- 329
+ 324
@@ -3920,7 +3936,7 @@
Basic Materials
libs/ui/src/lib/i18n.ts
- 90
+ 91
@@ -4120,7 +4136,7 @@
Add Activity
libs/common/src/lib/routes/routes.ts
- 139
+ 134
@@ -4272,11 +4288,11 @@
Activitats
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 84
+ 102
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 111
+ 137
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
@@ -4300,7 +4316,7 @@
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 350
+ 361
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
@@ -4312,7 +4328,7 @@
libs/common/src/lib/routes/routes.ts
- 149
+ 144
libs/ui/src/lib/accounts-table/accounts-table.component.html
@@ -4572,7 +4588,7 @@
libs/common/src/lib/routes/routes.ts
- 154
+ 149
@@ -4764,7 +4780,7 @@
libs/common/src/lib/routes/routes.ts
- 159
+ 154
@@ -4780,7 +4796,7 @@
Dividend
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 79
+ 90
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
@@ -4848,7 +4864,7 @@
Close Holding
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 449
+ 450
@@ -4984,7 +5000,7 @@
libs/common/src/lib/routes/routes.ts
- 291
+ 286
@@ -5224,7 +5240,7 @@
libs/common/src/lib/routes/routes.ts
- 301
+ 296
@@ -5256,7 +5272,7 @@
libs/common/src/lib/routes/routes.ts
- 349
+ 344
@@ -5265,11 +5281,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 340
+ 335
libs/common/src/lib/routes/routes.ts
- 344
+ 339
@@ -5533,7 +5549,7 @@
Stock Tracking
libs/ui/src/lib/i18n.ts
- 111
+ 112
@@ -5557,7 +5573,7 @@
Web
libs/ui/src/lib/i18n.ts
- 120
+ 121
@@ -5589,7 +5605,7 @@
libs/common/src/lib/routes/routes.ts
- 352
+ 347
@@ -5833,7 +5849,7 @@
Perfils d’actius
apps/client/src/app/components/admin-settings/admin-settings.component.html
- 123
+ 128
libs/ui/src/lib/assistant/assistant.html
@@ -5989,7 +6005,7 @@
Interès
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 67
+ 78
apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html
@@ -6249,7 +6265,7 @@
libs/ui/src/lib/i18n.ts
- 98
+ 99
libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts
@@ -6461,7 +6477,7 @@
Patrimoni
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 55
+ 66
libs/ui/src/lib/i18n.ts
@@ -6493,7 +6509,7 @@
libs/ui/src/lib/i18n.ts
- 99
+ 100
@@ -6581,7 +6597,7 @@
Communication Services
libs/ui/src/lib/i18n.ts
- 91
+ 92
@@ -6741,7 +6757,7 @@
Pressupost
libs/ui/src/lib/i18n.ts
- 104
+ 105
@@ -6817,7 +6833,7 @@
Oficina familiar
libs/ui/src/lib/i18n.ts
- 107
+ 108
@@ -6897,7 +6913,7 @@
Wealth Management
libs/ui/src/lib/i18n.ts
- 113
+ 114
@@ -7093,7 +7109,7 @@
Tax Reporting
libs/ui/src/lib/i18n.ts
- 112
+ 113
@@ -7241,7 +7257,7 @@
Financial Services
libs/ui/src/lib/i18n.ts
- 95
+ 96
@@ -7325,7 +7341,7 @@
Dividend Tracking
libs/ui/src/lib/i18n.ts
- 105
+ 106
@@ -7369,7 +7385,7 @@
Set API key
apps/client/src/app/components/admin-settings/admin-settings.component.html
- 188
+ 197
@@ -7385,7 +7401,7 @@
Investment Research
libs/ui/src/lib/i18n.ts
- 109
+ 110
@@ -7409,7 +7425,7 @@
libs/common/src/lib/routes/routes.ts
- 313
+ 308
@@ -7425,7 +7441,7 @@
libs/common/src/lib/routes/routes.ts
- 321
+ 316
@@ -7434,11 +7450,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 316
+ 311
libs/common/src/lib/routes/routes.ts
- 319
+ 314
@@ -7447,11 +7463,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 308
+ 303
libs/common/src/lib/routes/routes.ts
- 311
+ 306
@@ -7475,7 +7491,7 @@
of
apps/client/src/app/components/admin-settings/admin-settings.component.html
- 152
+ 157
@@ -7483,7 +7499,7 @@
daily requests
apps/client/src/app/components/admin-settings/admin-settings.component.html
- 154
+ 159
@@ -7491,7 +7507,7 @@
Remove API key
apps/client/src/app/components/admin-settings/admin-settings.component.html
- 178
+ 187
@@ -7499,7 +7515,7 @@
Do you really want to delete the API key?
apps/client/src/app/components/admin-settings/admin-settings.component.ts
- 143
+ 144
@@ -7667,7 +7683,7 @@
Net Worth Tracking
libs/ui/src/lib/i18n.ts
- 110
+ 111
@@ -7675,7 +7691,7 @@
Please enter your Ghostfolio API key.
apps/client/src/app/components/admin-settings/admin-settings.component.ts
- 162
+ 163
@@ -7787,7 +7803,7 @@
Create
libs/ui/src/lib/tags-selector/tags-selector.component.html
- 64
+ 62
@@ -7952,11 +7968,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 232
+ 227
libs/common/src/lib/routes/routes.ts
- 235
+ 230
@@ -7968,7 +7984,7 @@
libs/common/src/lib/routes/routes.ts
- 237
+ 232
@@ -8080,7 +8096,7 @@
libs/common/src/lib/routes/routes.ts
- 110
+ 105
@@ -8102,13 +8118,9 @@
Calculations are based on delayed market data and may not be displayed in real-time.
Calculations are based on delayed market data and may not be displayed in real-time.
-
- apps/client/src/app/components/home-market/home-market.html
- 28
-
apps/client/src/app/components/markets/markets.html
- 54
+ 64
@@ -8117,11 +8129,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 200
+ 195
libs/common/src/lib/routes/routes.ts
- 203
+ 198
@@ -8129,7 +8141,7 @@
ETF Tracking
libs/ui/src/lib/i18n.ts
- 106
+ 107
@@ -8217,7 +8229,7 @@
libs/common/src/lib/routes/routes.ts
- 251
+ 246
@@ -8225,7 +8237,7 @@
Open Source Alternative to
libs/common/src/lib/routes/routes.ts
- 346
+ 341
@@ -8258,15 +8270,15 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 332
+ 327
libs/common/src/lib/routes/routes.ts
- 335
+ 330
libs/common/src/lib/routes/routes.ts
- 343
+ 338
@@ -8275,11 +8287,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 324
+ 319
libs/common/src/lib/routes/routes.ts
- 327
+ 322
@@ -8504,11 +8516,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 356
+ 351
libs/common/src/lib/routes/routes.ts
- 357
+ 352
@@ -8540,7 +8552,7 @@
Stocks
apps/client/src/app/components/markets/markets.component.ts
- 51
+ 54
apps/client/src/app/pages/features/features-page.html
@@ -8552,7 +8564,7 @@
Cryptocurrencies
apps/client/src/app/components/markets/markets.component.ts
- 52
+ 55
apps/client/src/app/pages/features/features-page.html
@@ -8564,7 +8576,7 @@
Manage Asset Profile
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 477
+ 478
diff --git a/apps/client/src/locales/messages.de.xlf b/apps/client/src/locales/messages.de.xlf
index 9bcc596fd..4fe442267 100644
--- a/apps/client/src/locales/messages.de.xlf
+++ b/apps/client/src/locales/messages.de.xlf
@@ -349,6 +349,14 @@
20
+
+ Unknown
+ Unknown
+
+ libs/ui/src/lib/i18n.ts
+ 88
+
+
Attempts
Versuche
@@ -398,7 +406,7 @@
Anlageprofile
apps/client/src/app/components/admin-settings/admin-settings.component.html
- 123
+ 128
libs/ui/src/lib/assistant/assistant.html
@@ -717,8 +725,8 @@
Current Market Mood
Aktuelle Marktstimmung
- apps/client/src/app/components/fear-and-greed-index/fear-and-greed-index.component.html
- 12
+ libs/ui/src/lib/fear-and-greed-index/fear-and-greed-index.component.html
+ 22
@@ -826,7 +834,7 @@
Letzte Tage
apps/client/src/app/components/markets/markets.html
- 17
+ 24
@@ -910,7 +918,7 @@
Energie
libs/ui/src/lib/i18n.ts
- 94
+ 95
@@ -1042,7 +1050,7 @@
Tags
apps/client/src/app/components/admin-settings/admin-settings.component.html
- 218
+ 227
libs/ui/src/lib/tags-selector/tags-selector.component.html
@@ -1050,7 +1058,7 @@
libs/ui/src/lib/tags-selector/tags-selector.component.html
- 25
+ 23
@@ -1058,7 +1066,7 @@
Datenfehler melden
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 462
+ 463
@@ -1206,7 +1214,7 @@
libs/common/src/lib/routes/routes.ts
- 240
+ 235
@@ -1222,7 +1230,7 @@
libs/common/src/lib/routes/routes.ts
- 229
+ 224
@@ -1258,7 +1266,7 @@
Defensive Konsumgüter
libs/ui/src/lib/i18n.ts
- 93
+ 94
@@ -1318,7 +1326,7 @@
Versorgungsbetriebe
libs/ui/src/lib/i18n.ts
- 101
+ 102
@@ -1462,7 +1470,7 @@
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 384
+ 395
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
@@ -1542,7 +1550,7 @@
Cash-Bestand
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 43
+ 54
apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html
@@ -1558,7 +1566,7 @@
Plattform
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 88
+ 112
apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html
@@ -1582,7 +1590,7 @@
Finanzplanung
libs/ui/src/lib/i18n.ts
- 108
+ 109
@@ -1710,7 +1718,7 @@
libs/common/src/lib/routes/routes.ts
- 245
+ 240
@@ -1754,7 +1762,15 @@
libs/common/src/lib/routes/routes.ts
- 271
+ 266
+
+
+
+ Invalid API key
+ Invalid API key
+
+ apps/client/src/app/components/admin-settings/admin-settings.component.html
+ 112
@@ -1774,12 +1790,16 @@
libs/common/src/lib/routes/routes.ts
- 276
+ 271
Overview
Übersicht
+
+ apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
+ 41
+
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
114
@@ -1806,11 +1826,11 @@
libs/common/src/lib/routes/routes.ts
- 113
+ 108
libs/common/src/lib/routes/routes.ts
- 190
+ 185
@@ -1828,10 +1848,6 @@
apps/client/src/app/components/header/header.component.html
408
-
- apps/client/src/app/components/home-market/home-market.html
- 2
-
apps/client/src/app/components/markets/markets.html
2
@@ -1850,15 +1866,11 @@
libs/common/src/lib/routes/routes.ts
- 100
-
-
- libs/common/src/lib/routes/routes.ts
- 281
+ 276
libs/common/src/lib/routes/routes.ts
- 329
+ 324
@@ -1874,7 +1886,7 @@
libs/common/src/lib/routes/routes.ts
- 154
+ 149
@@ -1962,7 +1974,7 @@
libs/common/src/lib/routes/routes.ts
- 159
+ 154
@@ -2010,7 +2022,7 @@
Positionen
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 100
+ 126
apps/client/src/app/components/home-holdings/home-holdings.html
@@ -2030,7 +2042,7 @@
libs/common/src/lib/routes/routes.ts
- 187
+ 182
libs/ui/src/lib/assistant/assistant.html
@@ -2102,7 +2114,7 @@
Zyklische Konsumgüter
libs/ui/src/lib/i18n.ts
- 92
+ 93
@@ -2166,11 +2178,11 @@
Aktivitäten
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 84
+ 102
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 111
+ 137
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
@@ -2194,7 +2206,7 @@
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 350
+ 361
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
@@ -2206,7 +2218,7 @@
libs/common/src/lib/routes/routes.ts
- 149
+ 144
libs/ui/src/lib/accounts-table/accounts-table.component.html
@@ -2266,7 +2278,7 @@
libs/common/src/lib/routes/routes.ts
- 291
+ 286
@@ -2274,7 +2286,7 @@
Portfolio
apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts
- 139
+ 140
apps/client/src/app/components/header/header.component.html
@@ -2290,7 +2302,7 @@
libs/common/src/lib/routes/routes.ts
- 172
+ 167
@@ -2326,7 +2338,7 @@
libs/common/src/lib/routes/routes.ts
- 301
+ 296
@@ -2370,7 +2382,7 @@
libs/common/src/lib/routes/routes.ts
- 352
+ 347
@@ -2702,7 +2714,7 @@
Verzinsung
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 67
+ 78
apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html
@@ -2762,7 +2774,7 @@
Angst
apps/client/src/app/components/markets/markets.component.ts
- 46
+ 58
libs/ui/src/lib/i18n.ts
@@ -2774,7 +2786,7 @@
Gier
apps/client/src/app/components/markets/markets.component.ts
- 47
+ 59
libs/ui/src/lib/i18n.ts
@@ -2846,7 +2858,7 @@
apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts
- 151
+ 152
@@ -2926,7 +2938,7 @@
Gesamtbetrag
apps/client/src/app/components/investment-chart/investment-chart.component.ts
- 143
+ 144
@@ -2950,7 +2962,7 @@
Sparrate
apps/client/src/app/components/investment-chart/investment-chart.component.ts
- 201
+ 193
@@ -3070,7 +3082,7 @@
Beteiligungskapital
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 55
+ 66
libs/ui/src/lib/i18n.ts
@@ -3094,7 +3106,7 @@
libs/ui/src/lib/i18n.ts
- 99
+ 100
@@ -3194,7 +3206,7 @@
libs/ui/src/lib/i18n.ts
- 98
+ 99
libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts
@@ -3258,7 +3270,7 @@
Kommunikationsdienste
libs/ui/src/lib/i18n.ts
- 91
+ 92
@@ -3398,7 +3410,7 @@
Dividenden
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 79
+ 90
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
@@ -3490,7 +3502,7 @@
Marktdaten
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 406
+ 417
libs/common/src/lib/routes/routes.ts
@@ -3526,7 +3538,7 @@
libs/common/src/lib/routes/routes.ts
- 105
+ 100
@@ -4202,7 +4214,7 @@
Plattformen
apps/client/src/app/components/admin-settings/admin-settings.component.html
- 212
+ 221
@@ -4410,7 +4422,7 @@
libs/common/src/lib/routes/routes.ts
- 205
+ 200
@@ -4426,7 +4438,7 @@
libs/common/src/lib/routes/routes.ts
- 213
+ 208
@@ -4546,7 +4558,7 @@
Aktivität bearbeiten
libs/common/src/lib/routes/routes.ts
- 146
+ 141
@@ -4554,7 +4566,7 @@
Technologie
libs/ui/src/lib/i18n.ts
- 100
+ 101
@@ -4598,7 +4610,7 @@
libs/common/src/lib/routes/routes.ts
- 349
+ 344
@@ -4774,7 +4786,7 @@
Web
libs/ui/src/lib/i18n.ts
- 120
+ 121
@@ -5242,7 +5254,7 @@
Grundstoffe
libs/ui/src/lib/i18n.ts
- 90
+ 91
@@ -5426,7 +5438,7 @@
Aktivität hinzufügen
libs/common/src/lib/routes/routes.ts
- 139
+ 134
@@ -5475,19 +5487,19 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 254
+ 249
libs/common/src/lib/routes/routes.ts
- 255
+ 250
libs/common/src/lib/routes/routes.ts
- 259
+ 254
libs/common/src/lib/routes/routes.ts
- 265
+ 260
@@ -5496,11 +5508,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 274
+ 269
libs/common/src/lib/routes/routes.ts
- 275
+ 270
@@ -5509,31 +5521,31 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 196
+ 191
libs/common/src/lib/routes/routes.ts
- 197
+ 192
libs/common/src/lib/routes/routes.ts
- 202
+ 197
libs/common/src/lib/routes/routes.ts
- 210
+ 205
libs/common/src/lib/routes/routes.ts
- 218
+ 213
libs/common/src/lib/routes/routes.ts
- 226
+ 221
libs/common/src/lib/routes/routes.ts
- 234
+ 229
@@ -5542,11 +5554,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 224
+ 219
libs/common/src/lib/routes/routes.ts
- 227
+ 222
@@ -5555,11 +5567,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 208
+ 203
libs/common/src/lib/routes/routes.ts
- 211
+ 206
@@ -5568,11 +5580,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 279
+ 274
libs/common/src/lib/routes/routes.ts
- 280
+ 275
@@ -5581,11 +5593,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 289
+ 284
libs/common/src/lib/routes/routes.ts
- 290
+ 285
@@ -5594,11 +5606,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 299
+ 294
libs/common/src/lib/routes/routes.ts
- 300
+ 295
@@ -5607,31 +5619,31 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 304
+ 299
libs/common/src/lib/routes/routes.ts
- 305
+ 300
libs/common/src/lib/routes/routes.ts
- 310
+ 305
libs/common/src/lib/routes/routes.ts
- 318
+ 313
libs/common/src/lib/routes/routes.ts
- 326
+ 321
libs/common/src/lib/routes/routes.ts
- 334
+ 329
libs/common/src/lib/routes/routes.ts
- 342
+ 337
@@ -5696,11 +5708,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 340
+ 335
libs/common/src/lib/routes/routes.ts
- 344
+ 339
@@ -5708,7 +5720,7 @@
Aktien-Tracking
libs/ui/src/lib/i18n.ts
- 111
+ 112
@@ -5996,7 +6008,7 @@
Industrie
libs/ui/src/lib/i18n.ts
- 97
+ 98
@@ -6092,7 +6104,7 @@
Gesundheitswesen
libs/ui/src/lib/i18n.ts
- 96
+ 97
@@ -6132,7 +6144,7 @@
Cash-Bestände
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 143
+ 169
@@ -6272,7 +6284,7 @@
Position abschliessen
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 449
+ 450
@@ -6476,7 +6488,7 @@
libs/common/src/lib/routes/routes.ts
- 260
+ 255
@@ -6488,7 +6500,7 @@
libs/common/src/lib/routes/routes.ts
- 268
+ 263
@@ -6497,11 +6509,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 263
+ 258
libs/common/src/lib/routes/routes.ts
- 266
+ 261
@@ -6547,6 +6559,10 @@
Activity
Aktivität
+
+ apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
+ 100
+
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
231
@@ -6621,7 +6637,7 @@
Internationalisierung
libs/common/src/lib/routes/routes.ts
- 119
+ 114
@@ -6685,7 +6701,7 @@
Aktivität kopieren
libs/common/src/lib/routes/routes.ts
- 134
+ 129
@@ -6765,7 +6781,7 @@
Budgetierung
libs/ui/src/lib/i18n.ts
- 104
+ 105
@@ -6841,7 +6857,7 @@
Family Office
libs/ui/src/lib/i18n.ts
- 107
+ 108
@@ -6921,7 +6937,7 @@
Vermögensverwaltung
libs/ui/src/lib/i18n.ts
- 113
+ 114
@@ -7117,7 +7133,7 @@
Steuerreporting
libs/ui/src/lib/i18n.ts
- 112
+ 113
@@ -7265,7 +7281,7 @@
Finanzdienstleistungen
libs/ui/src/lib/i18n.ts
- 95
+ 96
@@ -7349,7 +7365,7 @@
Dividenden-Tracking
libs/ui/src/lib/i18n.ts
- 105
+ 106
@@ -7393,7 +7409,7 @@
API-Schlüssel setzen
apps/client/src/app/components/admin-settings/admin-settings.component.html
- 188
+ 197
@@ -7409,7 +7425,7 @@
Investment Research
libs/ui/src/lib/i18n.ts
- 109
+ 110
@@ -7433,7 +7449,7 @@
libs/common/src/lib/routes/routes.ts
- 313
+ 308
@@ -7449,7 +7465,7 @@
libs/common/src/lib/routes/routes.ts
- 321
+ 316
@@ -7458,11 +7474,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 316
+ 311
libs/common/src/lib/routes/routes.ts
- 319
+ 314
@@ -7471,11 +7487,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 308
+ 303
libs/common/src/lib/routes/routes.ts
- 311
+ 306
@@ -7499,7 +7515,7 @@
von
apps/client/src/app/components/admin-settings/admin-settings.component.html
- 152
+ 157
@@ -7507,7 +7523,7 @@
täglichen Anfragen
apps/client/src/app/components/admin-settings/admin-settings.component.html
- 154
+ 159
@@ -7515,7 +7531,7 @@
API-Schlüssel löschen
apps/client/src/app/components/admin-settings/admin-settings.component.html
- 178
+ 187
@@ -7523,7 +7539,7 @@
Möchtest du den API-Schlüssel wirklich löschen?
apps/client/src/app/components/admin-settings/admin-settings.component.ts
- 143
+ 144
@@ -7691,7 +7707,7 @@
Vermögens-Tracking
libs/ui/src/lib/i18n.ts
- 110
+ 111
@@ -7699,7 +7715,7 @@
Bitte gebe deinen Ghostfolio API-Schlüssel ein.
apps/client/src/app/components/admin-settings/admin-settings.component.ts
- 162
+ 163
@@ -7811,7 +7827,7 @@
Erstelle
libs/ui/src/lib/tags-selector/tags-selector.component.html
- 64
+ 62
@@ -7976,11 +7992,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 232
+ 227
libs/common/src/lib/routes/routes.ts
- 235
+ 230
@@ -7992,7 +8008,7 @@
libs/common/src/lib/routes/routes.ts
- 237
+ 232
@@ -8080,7 +8096,7 @@
libs/common/src/lib/routes/routes.ts
- 110
+ 105
@@ -8102,13 +8118,9 @@
Calculations are based on delayed market data and may not be displayed in real-time.
Berechnungen basieren auf verzögerten Marktdaten und werden nicht in Echtzeit angezeigt.
-
- apps/client/src/app/components/home-market/home-market.html
- 28
-
apps/client/src/app/components/markets/markets.html
- 54
+ 64
@@ -8117,11 +8129,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 200
+ 195
libs/common/src/lib/routes/routes.ts
- 203
+ 198
@@ -8129,7 +8141,7 @@
ETF-Tracking
libs/ui/src/lib/i18n.ts
- 106
+ 107
@@ -8217,7 +8229,7 @@
libs/common/src/lib/routes/routes.ts
- 251
+ 246
@@ -8225,7 +8237,7 @@
Open Source Alternative zu
libs/common/src/lib/routes/routes.ts
- 346
+ 341
@@ -8258,15 +8270,15 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 332
+ 327
libs/common/src/lib/routes/routes.ts
- 335
+ 330
libs/common/src/lib/routes/routes.ts
- 343
+ 338
@@ -8275,11 +8287,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 324
+ 319
libs/common/src/lib/routes/routes.ts
- 327
+ 322
@@ -8504,11 +8516,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 356
+ 351
libs/common/src/lib/routes/routes.ts
- 357
+ 352
@@ -8540,7 +8552,7 @@
Aktien
apps/client/src/app/components/markets/markets.component.ts
- 51
+ 54
apps/client/src/app/pages/features/features-page.html
@@ -8552,7 +8564,7 @@
Kryptowährungen
apps/client/src/app/components/markets/markets.component.ts
- 52
+ 55
apps/client/src/app/pages/features/features-page.html
@@ -8564,7 +8576,7 @@
Anlageprofil verwalten
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 477
+ 478
diff --git a/apps/client/src/locales/messages.es.xlf b/apps/client/src/locales/messages.es.xlf
index 732d53c96..87c434b2c 100644
--- a/apps/client/src/locales/messages.es.xlf
+++ b/apps/client/src/locales/messages.es.xlf
@@ -350,6 +350,14 @@
20
+
+ Unknown
+ Unknown
+
+ libs/ui/src/lib/i18n.ts
+ 88
+
+
Attempts
Intentos
@@ -399,7 +407,7 @@
Perfiles de activos
apps/client/src/app/components/admin-settings/admin-settings.component.html
- 123
+ 128
libs/ui/src/lib/assistant/assistant.html
@@ -702,8 +710,8 @@
Current Market Mood
Sentimiento del mercado
- apps/client/src/app/components/fear-and-greed-index/fear-and-greed-index.component.html
- 12
+ libs/ui/src/lib/fear-and-greed-index/fear-and-greed-index.component.html
+ 22
@@ -811,7 +819,7 @@
Últimos días
apps/client/src/app/components/markets/markets.html
- 17
+ 24
@@ -895,7 +903,7 @@
Energía
libs/ui/src/lib/i18n.ts
- 94
+ 95
@@ -1027,7 +1035,7 @@
Etiquetas
apps/client/src/app/components/admin-settings/admin-settings.component.html
- 218
+ 227
libs/ui/src/lib/tags-selector/tags-selector.component.html
@@ -1035,7 +1043,7 @@
libs/ui/src/lib/tags-selector/tags-selector.component.html
- 25
+ 23
@@ -1043,7 +1051,7 @@
Reportar anomalía en los datos
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 462
+ 463
@@ -1191,7 +1199,7 @@
libs/common/src/lib/routes/routes.ts
- 240
+ 235
@@ -1207,7 +1215,7 @@
libs/common/src/lib/routes/routes.ts
- 229
+ 224
@@ -1243,7 +1251,7 @@
Consumo Básico
libs/ui/src/lib/i18n.ts
- 93
+ 94
@@ -1303,7 +1311,7 @@
Servicios Públicos
libs/ui/src/lib/i18n.ts
- 101
+ 102
@@ -1447,7 +1455,7 @@
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 384
+ 395
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
@@ -1527,7 +1535,7 @@
Saldo en efectivo
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 43
+ 54
apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html
@@ -1543,7 +1551,7 @@
Plataforma
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 88
+ 112
apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html
@@ -1567,7 +1575,7 @@
Planificación financiera
libs/ui/src/lib/i18n.ts
- 108
+ 109
@@ -1695,7 +1703,7 @@
libs/common/src/lib/routes/routes.ts
- 245
+ 240
@@ -1739,7 +1747,15 @@
libs/common/src/lib/routes/routes.ts
- 271
+ 266
+
+
+
+ Invalid API key
+ Invalid API key
+
+ apps/client/src/app/components/admin-settings/admin-settings.component.html
+ 112
@@ -1759,12 +1775,16 @@
libs/common/src/lib/routes/routes.ts
- 276
+ 271
Overview
Visión general
+
+ apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
+ 41
+
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
114
@@ -1791,11 +1811,11 @@
libs/common/src/lib/routes/routes.ts
- 113
+ 108
libs/common/src/lib/routes/routes.ts
- 190
+ 185
@@ -1813,10 +1833,6 @@
apps/client/src/app/components/header/header.component.html
408
-
- apps/client/src/app/components/home-market/home-market.html
- 2
-
apps/client/src/app/components/markets/markets.html
2
@@ -1835,15 +1851,11 @@
libs/common/src/lib/routes/routes.ts
- 100
-
-
- libs/common/src/lib/routes/routes.ts
- 281
+ 276
libs/common/src/lib/routes/routes.ts
- 329
+ 324
@@ -1859,7 +1871,7 @@
libs/common/src/lib/routes/routes.ts
- 154
+ 149
@@ -1947,7 +1959,7 @@
libs/common/src/lib/routes/routes.ts
- 159
+ 154
@@ -1995,7 +2007,7 @@
Posiciones
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 100
+ 126
apps/client/src/app/components/home-holdings/home-holdings.html
@@ -2015,7 +2027,7 @@
libs/common/src/lib/routes/routes.ts
- 187
+ 182
libs/ui/src/lib/assistant/assistant.html
@@ -2087,7 +2099,7 @@
Consumo Discrecional
libs/ui/src/lib/i18n.ts
- 92
+ 93
@@ -2151,11 +2163,11 @@
Operaciones
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 84
+ 102
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 111
+ 137
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
@@ -2179,7 +2191,7 @@
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 350
+ 361
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
@@ -2191,7 +2203,7 @@
libs/common/src/lib/routes/routes.ts
- 149
+ 144
libs/ui/src/lib/accounts-table/accounts-table.component.html
@@ -2251,7 +2263,7 @@
libs/common/src/lib/routes/routes.ts
- 291
+ 286
@@ -2259,7 +2271,7 @@
Cartera
apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts
- 139
+ 140
apps/client/src/app/components/header/header.component.html
@@ -2275,7 +2287,7 @@
libs/common/src/lib/routes/routes.ts
- 172
+ 167
@@ -2311,7 +2323,7 @@
libs/common/src/lib/routes/routes.ts
- 301
+ 296
@@ -2355,7 +2367,7 @@
libs/common/src/lib/routes/routes.ts
- 352
+ 347
@@ -2679,7 +2691,7 @@
Interés
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 67
+ 78
apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html
@@ -2747,7 +2759,7 @@
Miedo
apps/client/src/app/components/markets/markets.component.ts
- 46
+ 58
libs/ui/src/lib/i18n.ts
@@ -2759,7 +2771,7 @@
Codicia
apps/client/src/app/components/markets/markets.component.ts
- 47
+ 59
libs/ui/src/lib/i18n.ts
@@ -2811,7 +2823,7 @@
apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts
- 151
+ 152
@@ -2911,7 +2923,7 @@
Importe total
apps/client/src/app/components/investment-chart/investment-chart.component.ts
- 143
+ 144
@@ -2935,7 +2947,7 @@
Tasa de ahorro
apps/client/src/app/components/investment-chart/investment-chart.component.ts
- 201
+ 193
@@ -3055,7 +3067,7 @@
Renta variable
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 55
+ 66
libs/ui/src/lib/i18n.ts
@@ -3079,7 +3091,7 @@
libs/ui/src/lib/i18n.ts
- 99
+ 100
@@ -3179,7 +3191,7 @@
libs/ui/src/lib/i18n.ts
- 98
+ 99
libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts
@@ -3243,7 +3255,7 @@
Servicios de Comunicación
libs/ui/src/lib/i18n.ts
- 91
+ 92
@@ -3375,7 +3387,7 @@
Dividendo
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 79
+ 90
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
@@ -3475,7 +3487,7 @@
Datos del mercado
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 406
+ 417
libs/common/src/lib/routes/routes.ts
@@ -3511,7 +3523,7 @@
libs/common/src/lib/routes/routes.ts
- 105
+ 100
@@ -4179,7 +4191,7 @@
Plataformas
apps/client/src/app/components/admin-settings/admin-settings.component.html
- 212
+ 221
@@ -4387,7 +4399,7 @@
libs/common/src/lib/routes/routes.ts
- 205
+ 200
@@ -4403,7 +4415,7 @@
libs/common/src/lib/routes/routes.ts
- 213
+ 208
@@ -4523,7 +4535,7 @@
Actualizar operación
libs/common/src/lib/routes/routes.ts
- 146
+ 141
@@ -4531,7 +4543,7 @@
Tecnología
libs/ui/src/lib/i18n.ts
- 100
+ 101
@@ -4575,7 +4587,7 @@
libs/common/src/lib/routes/routes.ts
- 349
+ 344
@@ -4751,7 +4763,7 @@
Web
libs/ui/src/lib/i18n.ts
- 120
+ 121
@@ -5219,7 +5231,7 @@
Materiales Básicos
libs/ui/src/lib/i18n.ts
- 90
+ 91
@@ -5403,7 +5415,7 @@
Añadir operación
libs/common/src/lib/routes/routes.ts
- 139
+ 134
@@ -5452,19 +5464,19 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 254
+ 249
libs/common/src/lib/routes/routes.ts
- 255
+ 250
libs/common/src/lib/routes/routes.ts
- 259
+ 254
libs/common/src/lib/routes/routes.ts
- 265
+ 260
@@ -5473,11 +5485,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 274
+ 269
libs/common/src/lib/routes/routes.ts
- 275
+ 270
@@ -5486,31 +5498,31 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 196
+ 191
libs/common/src/lib/routes/routes.ts
- 197
+ 192
libs/common/src/lib/routes/routes.ts
- 202
+ 197
libs/common/src/lib/routes/routes.ts
- 210
+ 205
libs/common/src/lib/routes/routes.ts
- 218
+ 213
libs/common/src/lib/routes/routes.ts
- 226
+ 221
libs/common/src/lib/routes/routes.ts
- 234
+ 229
@@ -5519,11 +5531,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 224
+ 219
libs/common/src/lib/routes/routes.ts
- 227
+ 222
@@ -5532,11 +5544,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 208
+ 203
libs/common/src/lib/routes/routes.ts
- 211
+ 206
@@ -5545,11 +5557,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 279
+ 274
libs/common/src/lib/routes/routes.ts
- 280
+ 275
@@ -5558,11 +5570,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 289
+ 284
libs/common/src/lib/routes/routes.ts
- 290
+ 285
@@ -5571,11 +5583,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 299
+ 294
libs/common/src/lib/routes/routes.ts
- 300
+ 295
@@ -5584,31 +5596,31 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 304
+ 299
libs/common/src/lib/routes/routes.ts
- 305
+ 300
libs/common/src/lib/routes/routes.ts
- 310
+ 305
libs/common/src/lib/routes/routes.ts
- 318
+ 313
libs/common/src/lib/routes/routes.ts
- 326
+ 321
libs/common/src/lib/routes/routes.ts
- 334
+ 329
libs/common/src/lib/routes/routes.ts
- 342
+ 337
@@ -5673,11 +5685,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 340
+ 335
libs/common/src/lib/routes/routes.ts
- 344
+ 339
@@ -5685,7 +5697,7 @@
Seguimiento de acciones
libs/ui/src/lib/i18n.ts
- 111
+ 112
@@ -5973,7 +5985,7 @@
Industriales
libs/ui/src/lib/i18n.ts
- 97
+ 98
@@ -6069,7 +6081,7 @@
Salud
libs/ui/src/lib/i18n.ts
- 96
+ 97
@@ -6109,7 +6121,7 @@
Saldos de efectivo
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 143
+ 169
@@ -6249,7 +6261,7 @@
Cerrar posición
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 449
+ 450
@@ -6453,7 +6465,7 @@
libs/common/src/lib/routes/routes.ts
- 260
+ 255
@@ -6465,7 +6477,7 @@
libs/common/src/lib/routes/routes.ts
- 268
+ 263
@@ -6474,11 +6486,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 263
+ 258
libs/common/src/lib/routes/routes.ts
- 266
+ 261
@@ -6524,6 +6536,10 @@
Activity
Operación
+
+ apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
+ 100
+
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
231
@@ -6598,7 +6614,7 @@
Internacionalización
libs/common/src/lib/routes/routes.ts
- 119
+ 114
@@ -6662,7 +6678,7 @@
Clonar operación
libs/common/src/lib/routes/routes.ts
- 134
+ 129
@@ -6742,7 +6758,7 @@
Presupuestos
libs/ui/src/lib/i18n.ts
- 104
+ 105
@@ -6818,7 +6834,7 @@
Family Office
libs/ui/src/lib/i18n.ts
- 107
+ 108
@@ -6898,7 +6914,7 @@
Gestión de patrimonios
libs/ui/src/lib/i18n.ts
- 113
+ 114
@@ -7094,7 +7110,7 @@
Informes fiscales
libs/ui/src/lib/i18n.ts
- 112
+ 113
@@ -7242,7 +7258,7 @@
Servicios Financieros
libs/ui/src/lib/i18n.ts
- 95
+ 96
@@ -7326,7 +7342,7 @@
Seguimiento de dividendos
libs/ui/src/lib/i18n.ts
- 105
+ 106
@@ -7370,7 +7386,7 @@
Configurar clave API
apps/client/src/app/components/admin-settings/admin-settings.component.html
- 188
+ 197
@@ -7386,7 +7402,7 @@
Investigación de inversiones
libs/ui/src/lib/i18n.ts
- 109
+ 110
@@ -7410,7 +7426,7 @@
libs/common/src/lib/routes/routes.ts
- 313
+ 308
@@ -7426,7 +7442,7 @@
libs/common/src/lib/routes/routes.ts
- 321
+ 316
@@ -7435,11 +7451,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 316
+ 311
libs/common/src/lib/routes/routes.ts
- 319
+ 314
@@ -7448,11 +7464,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 308
+ 303
libs/common/src/lib/routes/routes.ts
- 311
+ 306
@@ -7476,7 +7492,7 @@
de
apps/client/src/app/components/admin-settings/admin-settings.component.html
- 152
+ 157
@@ -7484,7 +7500,7 @@
solicitudes diarias
apps/client/src/app/components/admin-settings/admin-settings.component.html
- 154
+ 159
@@ -7492,7 +7508,7 @@
Eliminar clave API
apps/client/src/app/components/admin-settings/admin-settings.component.html
- 178
+ 187
@@ -7500,7 +7516,7 @@
¿Seguro que quieres eliminar la clave API?
apps/client/src/app/components/admin-settings/admin-settings.component.ts
- 143
+ 144
@@ -7668,7 +7684,7 @@
Seguimiento del patrimonio neto
libs/ui/src/lib/i18n.ts
- 110
+ 111
@@ -7676,7 +7692,7 @@
Por favor, ingresa tu clave API de Ghostfolio.
apps/client/src/app/components/admin-settings/admin-settings.component.ts
- 162
+ 163
@@ -7788,7 +7804,7 @@
Crear
libs/ui/src/lib/tags-selector/tags-selector.component.html
- 64
+ 62
@@ -7953,11 +7969,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 232
+ 227
libs/common/src/lib/routes/routes.ts
- 235
+ 230
@@ -7969,7 +7985,7 @@
libs/common/src/lib/routes/routes.ts
- 237
+ 232
@@ -8081,7 +8097,7 @@
libs/common/src/lib/routes/routes.ts
- 110
+ 105
@@ -8103,13 +8119,9 @@
Calculations are based on delayed market data and may not be displayed in real-time.
Los cálculos se basan en datos de mercado con retraso y es posible que no se muestren en tiempo real.
-
- apps/client/src/app/components/home-market/home-market.html
- 28
-
apps/client/src/app/components/markets/markets.html
- 54
+ 64
@@ -8118,11 +8130,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 200
+ 195
libs/common/src/lib/routes/routes.ts
- 203
+ 198
@@ -8130,7 +8142,7 @@
Seguimiento de ETFs
libs/ui/src/lib/i18n.ts
- 106
+ 107
@@ -8218,7 +8230,7 @@
libs/common/src/lib/routes/routes.ts
- 251
+ 246
@@ -8226,7 +8238,7 @@
Alternativa de software de código abierto a
libs/common/src/lib/routes/routes.ts
- 346
+ 341
@@ -8259,15 +8271,15 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 332
+ 327
libs/common/src/lib/routes/routes.ts
- 335
+ 330
libs/common/src/lib/routes/routes.ts
- 343
+ 338
@@ -8276,11 +8288,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 324
+ 319
libs/common/src/lib/routes/routes.ts
- 327
+ 322
@@ -8505,11 +8517,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 356
+ 351
libs/common/src/lib/routes/routes.ts
- 357
+ 352
@@ -8541,7 +8553,7 @@
Acciones
apps/client/src/app/components/markets/markets.component.ts
- 51
+ 54
apps/client/src/app/pages/features/features-page.html
@@ -8553,7 +8565,7 @@
Criptomonedas
apps/client/src/app/components/markets/markets.component.ts
- 52
+ 55
apps/client/src/app/pages/features/features-page.html
@@ -8565,7 +8577,7 @@
Gestionar perfil de activo
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 477
+ 478
diff --git a/apps/client/src/locales/messages.fr.xlf b/apps/client/src/locales/messages.fr.xlf
index 9cd47942a..f091a56df 100644
--- a/apps/client/src/locales/messages.fr.xlf
+++ b/apps/client/src/locales/messages.fr.xlf
@@ -102,7 +102,7 @@
Plateforme
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 88
+ 112
apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html
@@ -230,7 +230,7 @@
Balance Cash
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 43
+ 54
apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html
@@ -405,6 +405,14 @@
20
+
+ Unknown
+ Unknown
+
+ libs/ui/src/lib/i18n.ts
+ 88
+
+
Attempts
Tentatives
@@ -462,7 +470,7 @@
Profils d’Actifs
apps/client/src/app/components/admin-settings/admin-settings.component.html
- 123
+ 128
libs/ui/src/lib/assistant/assistant.html
@@ -826,7 +834,7 @@
Étiquettes
apps/client/src/app/components/admin-settings/admin-settings.component.html
- 218
+ 227
libs/ui/src/lib/tags-selector/tags-selector.component.html
@@ -834,7 +842,7 @@
libs/ui/src/lib/tags-selector/tags-selector.component.html
- 25
+ 23
@@ -982,7 +990,7 @@
Portefeuille
apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts
- 139
+ 140
apps/client/src/app/components/header/header.component.html
@@ -998,7 +1006,7 @@
libs/common/src/lib/routes/routes.ts
- 172
+ 167
@@ -1010,15 +1018,15 @@
apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts
- 151
+ 152
Current Market Mood
Sentiment actuel du marché
- apps/client/src/app/components/fear-and-greed-index/fear-and-greed-index.component.html
- 12
+ libs/ui/src/lib/fear-and-greed-index/fear-and-greed-index.component.html
+ 22
@@ -1082,7 +1090,7 @@
Peur
apps/client/src/app/components/markets/markets.component.ts
- 46
+ 58
libs/ui/src/lib/i18n.ts
@@ -1094,7 +1102,7 @@
Avidité
apps/client/src/app/components/markets/markets.component.ts
- 47
+ 59
libs/ui/src/lib/i18n.ts
@@ -1106,7 +1114,7 @@
derniers jours
apps/client/src/app/components/markets/markets.html
- 17
+ 24
@@ -1114,7 +1122,7 @@
Montant Total
apps/client/src/app/components/investment-chart/investment-chart.component.ts
- 143
+ 144
@@ -1130,7 +1138,7 @@
Taux d’Épargne
apps/client/src/app/components/investment-chart/investment-chart.component.ts
- 201
+ 193
@@ -1214,7 +1222,7 @@
Énergie
libs/ui/src/lib/i18n.ts
- 94
+ 95
@@ -1354,7 +1362,7 @@
Signaler une Erreur de Données
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 462
+ 463
@@ -1502,7 +1510,7 @@
libs/common/src/lib/routes/routes.ts
- 240
+ 235
@@ -1518,7 +1526,7 @@
libs/common/src/lib/routes/routes.ts
- 229
+ 224
@@ -1566,7 +1574,7 @@
Consommation de Base
libs/ui/src/lib/i18n.ts
- 93
+ 94
@@ -1626,7 +1634,7 @@
Services aux Collectivités
libs/ui/src/lib/i18n.ts
- 101
+ 102
@@ -1830,7 +1838,7 @@
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 384
+ 395
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
@@ -1878,7 +1886,7 @@
Planification Financière
libs/ui/src/lib/i18n.ts
- 108
+ 109
@@ -1886,7 +1894,7 @@
Données du marché
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 406
+ 417
libs/common/src/lib/routes/routes.ts
@@ -2030,7 +2038,7 @@
libs/common/src/lib/routes/routes.ts
- 245
+ 240
@@ -2074,7 +2082,15 @@
libs/common/src/lib/routes/routes.ts
- 271
+ 266
+
+
+
+ Invalid API key
+ Invalid API key
+
+ apps/client/src/app/components/admin-settings/admin-settings.component.html
+ 112
@@ -2094,7 +2110,7 @@
libs/common/src/lib/routes/routes.ts
- 276
+ 271
@@ -2102,7 +2118,7 @@
Positions
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 100
+ 126
apps/client/src/app/components/home-holdings/home-holdings.html
@@ -2122,7 +2138,7 @@
libs/common/src/lib/routes/routes.ts
- 187
+ 182
libs/ui/src/lib/assistant/assistant.html
@@ -2146,7 +2162,7 @@
libs/common/src/lib/routes/routes.ts
- 105
+ 100
@@ -2164,10 +2180,6 @@
apps/client/src/app/components/header/header.component.html
408
-
- apps/client/src/app/components/home-market/home-market.html
- 2
-
apps/client/src/app/components/markets/markets.html
2
@@ -2186,15 +2198,11 @@
libs/common/src/lib/routes/routes.ts
- 100
-
-
- libs/common/src/lib/routes/routes.ts
- 281
+ 276
libs/common/src/lib/routes/routes.ts
- 329
+ 324
@@ -2202,11 +2210,11 @@
Activités
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 84
+ 102
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 111
+ 137
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
@@ -2230,7 +2238,7 @@
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 350
+ 361
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
@@ -2242,7 +2250,7 @@
libs/common/src/lib/routes/routes.ts
- 149
+ 144
libs/ui/src/lib/accounts-table/accounts-table.component.html
@@ -2314,7 +2322,7 @@
Consommation Discrétionnaire
libs/ui/src/lib/i18n.ts
- 92
+ 93
@@ -2426,7 +2434,7 @@
libs/common/src/lib/routes/routes.ts
- 154
+ 149
@@ -2578,7 +2586,7 @@
libs/common/src/lib/routes/routes.ts
- 159
+ 154
@@ -2594,7 +2602,7 @@
Dividende
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 79
+ 90
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
@@ -2722,7 +2730,7 @@
libs/common/src/lib/routes/routes.ts
- 291
+ 286
@@ -2810,7 +2818,7 @@
libs/common/src/lib/routes/routes.ts
- 301
+ 296
@@ -2874,7 +2882,7 @@
libs/common/src/lib/routes/routes.ts
- 352
+ 347
@@ -2904,6 +2912,10 @@
Overview
Aperçu
+
+ apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
+ 41
+
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
114
@@ -2930,11 +2942,11 @@
libs/common/src/lib/routes/routes.ts
- 113
+ 108
libs/common/src/lib/routes/routes.ts
- 190
+ 185
@@ -3062,7 +3074,7 @@
Intérêt
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 67
+ 78
apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html
@@ -3234,7 +3246,7 @@
libs/ui/src/lib/i18n.ts
- 98
+ 99
libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts
@@ -3306,7 +3318,7 @@
Capital
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 55
+ 66
libs/ui/src/lib/i18n.ts
@@ -3330,7 +3342,7 @@
libs/ui/src/lib/i18n.ts
- 99
+ 100
@@ -3418,7 +3430,7 @@
Services de Communication
libs/ui/src/lib/i18n.ts
- 91
+ 92
@@ -4178,7 +4190,7 @@
Platformes
apps/client/src/app/components/admin-settings/admin-settings.component.html
- 212
+ 221
@@ -4386,7 +4398,7 @@
libs/common/src/lib/routes/routes.ts
- 205
+ 200
@@ -4402,7 +4414,7 @@
libs/common/src/lib/routes/routes.ts
- 213
+ 208
@@ -4522,7 +4534,7 @@
Update Activity
libs/common/src/lib/routes/routes.ts
- 146
+ 141
@@ -4530,7 +4542,7 @@
Technologie
libs/ui/src/lib/i18n.ts
- 100
+ 101
@@ -4574,7 +4586,7 @@
libs/common/src/lib/routes/routes.ts
- 349
+ 344
@@ -4750,7 +4762,7 @@
Web
libs/ui/src/lib/i18n.ts
- 120
+ 121
@@ -5218,7 +5230,7 @@
Matériaux de Base
libs/ui/src/lib/i18n.ts
- 90
+ 91
@@ -5402,7 +5414,7 @@
Add Activity
libs/common/src/lib/routes/routes.ts
- 139
+ 134
@@ -5451,19 +5463,19 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 254
+ 249
libs/common/src/lib/routes/routes.ts
- 255
+ 250
libs/common/src/lib/routes/routes.ts
- 259
+ 254
libs/common/src/lib/routes/routes.ts
- 265
+ 260
@@ -5472,11 +5484,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 274
+ 269
libs/common/src/lib/routes/routes.ts
- 275
+ 270
@@ -5485,31 +5497,31 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 196
+ 191
libs/common/src/lib/routes/routes.ts
- 197
+ 192
libs/common/src/lib/routes/routes.ts
- 202
+ 197
libs/common/src/lib/routes/routes.ts
- 210
+ 205
libs/common/src/lib/routes/routes.ts
- 218
+ 213
libs/common/src/lib/routes/routes.ts
- 226
+ 221
libs/common/src/lib/routes/routes.ts
- 234
+ 229
@@ -5518,11 +5530,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 224
+ 219
libs/common/src/lib/routes/routes.ts
- 227
+ 222
@@ -5531,11 +5543,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 208
+ 203
libs/common/src/lib/routes/routes.ts
- 211
+ 206
@@ -5544,11 +5556,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 279
+ 274
libs/common/src/lib/routes/routes.ts
- 280
+ 275
@@ -5557,11 +5569,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 289
+ 284
libs/common/src/lib/routes/routes.ts
- 290
+ 285
@@ -5570,11 +5582,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 299
+ 294
libs/common/src/lib/routes/routes.ts
- 300
+ 295
@@ -5583,31 +5595,31 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 304
+ 299
libs/common/src/lib/routes/routes.ts
- 305
+ 300
libs/common/src/lib/routes/routes.ts
- 310
+ 305
libs/common/src/lib/routes/routes.ts
- 318
+ 313
libs/common/src/lib/routes/routes.ts
- 326
+ 321
libs/common/src/lib/routes/routes.ts
- 334
+ 329
libs/common/src/lib/routes/routes.ts
- 342
+ 337
@@ -5672,11 +5684,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 340
+ 335
libs/common/src/lib/routes/routes.ts
- 344
+ 339
@@ -5684,7 +5696,7 @@
Suivi des Actions
libs/ui/src/lib/i18n.ts
- 111
+ 112
@@ -5972,7 +5984,7 @@
Industrie
libs/ui/src/lib/i18n.ts
- 97
+ 98
@@ -6068,7 +6080,7 @@
Santé
libs/ui/src/lib/i18n.ts
- 96
+ 97
@@ -6108,7 +6120,7 @@
Cash Balances
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 143
+ 169
@@ -6248,7 +6260,7 @@
Clôturer la Position
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 449
+ 450
@@ -6452,7 +6464,7 @@
libs/common/src/lib/routes/routes.ts
- 260
+ 255
@@ -6464,7 +6476,7 @@
libs/common/src/lib/routes/routes.ts
- 268
+ 263
@@ -6473,11 +6485,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 263
+ 258
libs/common/src/lib/routes/routes.ts
- 266
+ 261
@@ -6523,6 +6535,10 @@
Activity
Activitées
+
+ apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
+ 100
+
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
231
@@ -6597,7 +6613,7 @@
Internationalisation
libs/common/src/lib/routes/routes.ts
- 119
+ 114
@@ -6661,7 +6677,7 @@
Clone Activity
libs/common/src/lib/routes/routes.ts
- 134
+ 129
@@ -6741,7 +6757,7 @@
Budget
libs/ui/src/lib/i18n.ts
- 104
+ 105
@@ -6817,7 +6833,7 @@
Family Office
libs/ui/src/lib/i18n.ts
- 107
+ 108
@@ -6897,7 +6913,7 @@
Gestion de Patrimoine
libs/ui/src/lib/i18n.ts
- 113
+ 114
@@ -7093,7 +7109,7 @@
Déclaration Fiscale
libs/ui/src/lib/i18n.ts
- 112
+ 113
@@ -7241,7 +7257,7 @@
Services Financiers
libs/ui/src/lib/i18n.ts
- 95
+ 96
@@ -7325,7 +7341,7 @@
Suivi des Dividendes
libs/ui/src/lib/i18n.ts
- 105
+ 106
@@ -7369,7 +7385,7 @@
Définir clé API
apps/client/src/app/components/admin-settings/admin-settings.component.html
- 188
+ 197
@@ -7385,7 +7401,7 @@
Recherche d’Investissement
libs/ui/src/lib/i18n.ts
- 109
+ 110
@@ -7409,7 +7425,7 @@
libs/common/src/lib/routes/routes.ts
- 313
+ 308
@@ -7425,7 +7441,7 @@
libs/common/src/lib/routes/routes.ts
- 321
+ 316
@@ -7434,11 +7450,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 316
+ 311
libs/common/src/lib/routes/routes.ts
- 319
+ 314
@@ -7447,11 +7463,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 308
+ 303
libs/common/src/lib/routes/routes.ts
- 311
+ 306
@@ -7475,7 +7491,7 @@
sur
apps/client/src/app/components/admin-settings/admin-settings.component.html
- 152
+ 157
@@ -7483,7 +7499,7 @@
requêtes journalières
apps/client/src/app/components/admin-settings/admin-settings.component.html
- 154
+ 159
@@ -7491,7 +7507,7 @@
Retirer la clé API
apps/client/src/app/components/admin-settings/admin-settings.component.html
- 178
+ 187
@@ -7499,7 +7515,7 @@
Voulez-vous vraiment supprimer la clé API?
apps/client/src/app/components/admin-settings/admin-settings.component.ts
- 143
+ 144
@@ -7667,7 +7683,7 @@
Suivi du Patrimoine Net
libs/ui/src/lib/i18n.ts
- 110
+ 111
@@ -7675,7 +7691,7 @@
Veuillez saisir votre clé API Ghostfolio.
apps/client/src/app/components/admin-settings/admin-settings.component.ts
- 162
+ 163
@@ -7787,7 +7803,7 @@
Créer
libs/ui/src/lib/tags-selector/tags-selector.component.html
- 64
+ 62
@@ -7952,11 +7968,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 232
+ 227
libs/common/src/lib/routes/routes.ts
- 235
+ 230
@@ -7968,7 +7984,7 @@
libs/common/src/lib/routes/routes.ts
- 237
+ 232
@@ -8080,7 +8096,7 @@
libs/common/src/lib/routes/routes.ts
- 110
+ 105
@@ -8102,13 +8118,9 @@
Calculations are based on delayed market data and may not be displayed in real-time.
Les calculs sont basés sur des données de marché retardées et peuvent ne pas être affichés en temps réel.
-
- apps/client/src/app/components/home-market/home-market.html
- 28
-
apps/client/src/app/components/markets/markets.html
- 54
+ 64
@@ -8117,11 +8129,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 200
+ 195
libs/common/src/lib/routes/routes.ts
- 203
+ 198
@@ -8129,7 +8141,7 @@
Suivi des ETF
libs/ui/src/lib/i18n.ts
- 106
+ 107
@@ -8217,7 +8229,7 @@
libs/common/src/lib/routes/routes.ts
- 251
+ 246
@@ -8225,7 +8237,7 @@
Solutions open source alternatives à
libs/common/src/lib/routes/routes.ts
- 346
+ 341
@@ -8258,15 +8270,15 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 332
+ 327
libs/common/src/lib/routes/routes.ts
- 335
+ 330
libs/common/src/lib/routes/routes.ts
- 343
+ 338
@@ -8275,11 +8287,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 324
+ 319
libs/common/src/lib/routes/routes.ts
- 327
+ 322
@@ -8504,11 +8516,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 356
+ 351
libs/common/src/lib/routes/routes.ts
- 357
+ 352
@@ -8540,7 +8552,7 @@
Actions
apps/client/src/app/components/markets/markets.component.ts
- 51
+ 54
apps/client/src/app/pages/features/features-page.html
@@ -8552,7 +8564,7 @@
Crypto-monnaies
apps/client/src/app/components/markets/markets.component.ts
- 52
+ 55
apps/client/src/app/pages/features/features-page.html
@@ -8564,7 +8576,7 @@
Gérer le profil d’actif
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 477
+ 478
diff --git a/apps/client/src/locales/messages.it.xlf b/apps/client/src/locales/messages.it.xlf
index 9e4687a8b..fa0680d82 100644
--- a/apps/client/src/locales/messages.it.xlf
+++ b/apps/client/src/locales/messages.it.xlf
@@ -350,6 +350,14 @@
20
+
+ Unknown
+ Unknown
+
+ libs/ui/src/lib/i18n.ts
+ 88
+
+
Attempts
Tentativi
@@ -399,7 +407,7 @@
Profilo dell’asset
apps/client/src/app/components/admin-settings/admin-settings.component.html
- 123
+ 128
libs/ui/src/lib/assistant/assistant.html
@@ -702,8 +710,8 @@
Current Market Mood
Stato d’animo attuale del mercato
- apps/client/src/app/components/fear-and-greed-index/fear-and-greed-index.component.html
- 12
+ libs/ui/src/lib/fear-and-greed-index/fear-and-greed-index.component.html
+ 22
@@ -811,7 +819,7 @@
Ultimi giorni
apps/client/src/app/components/markets/markets.html
- 17
+ 24
@@ -895,7 +903,7 @@
Energy
libs/ui/src/lib/i18n.ts
- 94
+ 95
@@ -1027,7 +1035,7 @@
Tag
apps/client/src/app/components/admin-settings/admin-settings.component.html
- 218
+ 227
libs/ui/src/lib/tags-selector/tags-selector.component.html
@@ -1035,7 +1043,7 @@
libs/ui/src/lib/tags-selector/tags-selector.component.html
- 25
+ 23
@@ -1043,7 +1051,7 @@
Segnala un’anomalia dei dati
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 462
+ 463
@@ -1191,7 +1199,7 @@
libs/common/src/lib/routes/routes.ts
- 240
+ 235
@@ -1207,7 +1215,7 @@
libs/common/src/lib/routes/routes.ts
- 229
+ 224
@@ -1243,7 +1251,7 @@
Consumer Defensive
libs/ui/src/lib/i18n.ts
- 93
+ 94
@@ -1303,7 +1311,7 @@
Utilities
libs/ui/src/lib/i18n.ts
- 101
+ 102
@@ -1447,7 +1455,7 @@
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 384
+ 395
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
@@ -1527,7 +1535,7 @@
Saldo di cassa
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 43
+ 54
apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html
@@ -1543,7 +1551,7 @@
Piattaforma
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 88
+ 112
apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html
@@ -1567,7 +1575,7 @@
Financial Planning
libs/ui/src/lib/i18n.ts
- 108
+ 109
@@ -1695,7 +1703,7 @@
libs/common/src/lib/routes/routes.ts
- 245
+ 240
@@ -1739,7 +1747,15 @@
libs/common/src/lib/routes/routes.ts
- 271
+ 266
+
+
+
+ Invalid API key
+ Invalid API key
+
+ apps/client/src/app/components/admin-settings/admin-settings.component.html
+ 112
@@ -1759,12 +1775,16 @@
libs/common/src/lib/routes/routes.ts
- 276
+ 271
Overview
Panoramica
+
+ apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
+ 41
+
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
114
@@ -1791,11 +1811,11 @@
libs/common/src/lib/routes/routes.ts
- 113
+ 108
libs/common/src/lib/routes/routes.ts
- 190
+ 185
@@ -1813,10 +1833,6 @@
apps/client/src/app/components/header/header.component.html
408
-
- apps/client/src/app/components/home-market/home-market.html
- 2
-
apps/client/src/app/components/markets/markets.html
2
@@ -1835,15 +1851,11 @@
libs/common/src/lib/routes/routes.ts
- 100
-
-
- libs/common/src/lib/routes/routes.ts
- 281
+ 276
libs/common/src/lib/routes/routes.ts
- 329
+ 324
@@ -1859,7 +1871,7 @@
libs/common/src/lib/routes/routes.ts
- 154
+ 149
@@ -1947,7 +1959,7 @@
libs/common/src/lib/routes/routes.ts
- 159
+ 154
@@ -1995,7 +2007,7 @@
Partecipazioni
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 100
+ 126
apps/client/src/app/components/home-holdings/home-holdings.html
@@ -2015,7 +2027,7 @@
libs/common/src/lib/routes/routes.ts
- 187
+ 182
libs/ui/src/lib/assistant/assistant.html
@@ -2087,7 +2099,7 @@
Consumer Cyclical
libs/ui/src/lib/i18n.ts
- 92
+ 93
@@ -2151,11 +2163,11 @@
Attività
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 84
+ 102
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 111
+ 137
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
@@ -2179,7 +2191,7 @@
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 350
+ 361
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
@@ -2191,7 +2203,7 @@
libs/common/src/lib/routes/routes.ts
- 149
+ 144
libs/ui/src/lib/accounts-table/accounts-table.component.html
@@ -2251,7 +2263,7 @@
libs/common/src/lib/routes/routes.ts
- 291
+ 286
@@ -2259,7 +2271,7 @@
Portafoglio
apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts
- 139
+ 140
apps/client/src/app/components/header/header.component.html
@@ -2275,7 +2287,7 @@
libs/common/src/lib/routes/routes.ts
- 172
+ 167
@@ -2311,7 +2323,7 @@
libs/common/src/lib/routes/routes.ts
- 301
+ 296
@@ -2355,7 +2367,7 @@
libs/common/src/lib/routes/routes.ts
- 352
+ 347
@@ -2679,7 +2691,7 @@
Interesse
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 67
+ 78
apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html
@@ -2747,7 +2759,7 @@
Paura
apps/client/src/app/components/markets/markets.component.ts
- 46
+ 58
libs/ui/src/lib/i18n.ts
@@ -2759,7 +2771,7 @@
Avidità
apps/client/src/app/components/markets/markets.component.ts
- 47
+ 59
libs/ui/src/lib/i18n.ts
@@ -2811,7 +2823,7 @@
apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts
- 151
+ 152
@@ -2911,7 +2923,7 @@
Importo totale
apps/client/src/app/components/investment-chart/investment-chart.component.ts
- 143
+ 144
@@ -2935,7 +2947,7 @@
Tasso di risparmio
apps/client/src/app/components/investment-chart/investment-chart.component.ts
- 201
+ 193
@@ -3055,7 +3067,7 @@
Azione ordinaria
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 55
+ 66
libs/ui/src/lib/i18n.ts
@@ -3079,7 +3091,7 @@
libs/ui/src/lib/i18n.ts
- 99
+ 100
@@ -3179,7 +3191,7 @@
libs/ui/src/lib/i18n.ts
- 98
+ 99
libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts
@@ -3243,7 +3255,7 @@
Communication Services
libs/ui/src/lib/i18n.ts
- 91
+ 92
@@ -3375,7 +3387,7 @@
Dividendi
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 79
+ 90
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
@@ -3475,7 +3487,7 @@
Dati del mercato
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 406
+ 417
libs/common/src/lib/routes/routes.ts
@@ -3511,7 +3523,7 @@
libs/common/src/lib/routes/routes.ts
- 105
+ 100
@@ -4179,7 +4191,7 @@
Piattaforme
apps/client/src/app/components/admin-settings/admin-settings.component.html
- 212
+ 221
@@ -4387,7 +4399,7 @@
libs/common/src/lib/routes/routes.ts
- 205
+ 200
@@ -4403,7 +4415,7 @@
libs/common/src/lib/routes/routes.ts
- 213
+ 208
@@ -4523,7 +4535,7 @@
Update Activity
libs/common/src/lib/routes/routes.ts
- 146
+ 141
@@ -4531,7 +4543,7 @@
Technology
libs/ui/src/lib/i18n.ts
- 100
+ 101
@@ -4575,7 +4587,7 @@
libs/common/src/lib/routes/routes.ts
- 349
+ 344
@@ -4751,7 +4763,7 @@
Web
libs/ui/src/lib/i18n.ts
- 120
+ 121
@@ -5219,7 +5231,7 @@
Basic Materials
libs/ui/src/lib/i18n.ts
- 90
+ 91
@@ -5403,7 +5415,7 @@
Add Activity
libs/common/src/lib/routes/routes.ts
- 139
+ 134
@@ -5452,19 +5464,19 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 254
+ 249
libs/common/src/lib/routes/routes.ts
- 255
+ 250
libs/common/src/lib/routes/routes.ts
- 259
+ 254
libs/common/src/lib/routes/routes.ts
- 265
+ 260
@@ -5473,11 +5485,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 274
+ 269
libs/common/src/lib/routes/routes.ts
- 275
+ 270
@@ -5486,31 +5498,31 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 196
+ 191
libs/common/src/lib/routes/routes.ts
- 197
+ 192
libs/common/src/lib/routes/routes.ts
- 202
+ 197
libs/common/src/lib/routes/routes.ts
- 210
+ 205
libs/common/src/lib/routes/routes.ts
- 218
+ 213
libs/common/src/lib/routes/routes.ts
- 226
+ 221
libs/common/src/lib/routes/routes.ts
- 234
+ 229
@@ -5519,11 +5531,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 224
+ 219
libs/common/src/lib/routes/routes.ts
- 227
+ 222
@@ -5532,11 +5544,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 208
+ 203
libs/common/src/lib/routes/routes.ts
- 211
+ 206
@@ -5545,11 +5557,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 279
+ 274
libs/common/src/lib/routes/routes.ts
- 280
+ 275
@@ -5558,11 +5570,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 289
+ 284
libs/common/src/lib/routes/routes.ts
- 290
+ 285
@@ -5571,11 +5583,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 299
+ 294
libs/common/src/lib/routes/routes.ts
- 300
+ 295
@@ -5584,31 +5596,31 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 304
+ 299
libs/common/src/lib/routes/routes.ts
- 305
+ 300
libs/common/src/lib/routes/routes.ts
- 310
+ 305
libs/common/src/lib/routes/routes.ts
- 318
+ 313
libs/common/src/lib/routes/routes.ts
- 326
+ 321
libs/common/src/lib/routes/routes.ts
- 334
+ 329
libs/common/src/lib/routes/routes.ts
- 342
+ 337
@@ -5673,11 +5685,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 340
+ 335
libs/common/src/lib/routes/routes.ts
- 344
+ 339
@@ -5685,7 +5697,7 @@
Stock Tracking
libs/ui/src/lib/i18n.ts
- 111
+ 112
@@ -5973,7 +5985,7 @@
Industrials
libs/ui/src/lib/i18n.ts
- 97
+ 98
@@ -6069,7 +6081,7 @@
Healthcare
libs/ui/src/lib/i18n.ts
- 96
+ 97
@@ -6109,7 +6121,7 @@
Saldi di cassa
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 143
+ 169
@@ -6249,7 +6261,7 @@
Close Holding
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 449
+ 450
@@ -6453,7 +6465,7 @@
libs/common/src/lib/routes/routes.ts
- 260
+ 255
@@ -6465,7 +6477,7 @@
libs/common/src/lib/routes/routes.ts
- 268
+ 263
@@ -6474,11 +6486,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 263
+ 258
libs/common/src/lib/routes/routes.ts
- 266
+ 261
@@ -6524,6 +6536,10 @@
Activity
Attività
+
+ apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
+ 100
+
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
231
@@ -6598,7 +6614,7 @@
Internazionalizzazione
libs/common/src/lib/routes/routes.ts
- 119
+ 114
@@ -6662,7 +6678,7 @@
Clone Activity
libs/common/src/lib/routes/routes.ts
- 134
+ 129
@@ -6742,7 +6758,7 @@
Budgeting
libs/ui/src/lib/i18n.ts
- 104
+ 105
@@ -6818,7 +6834,7 @@
Ufficio familiare
libs/ui/src/lib/i18n.ts
- 107
+ 108
@@ -6898,7 +6914,7 @@
Gestione Patrimoniale
libs/ui/src/lib/i18n.ts
- 113
+ 114
@@ -7094,7 +7110,7 @@
Tax Reporting
libs/ui/src/lib/i18n.ts
- 112
+ 113
@@ -7242,7 +7258,7 @@
Financial Services
libs/ui/src/lib/i18n.ts
- 95
+ 96
@@ -7326,7 +7342,7 @@
Dividend Tracking
libs/ui/src/lib/i18n.ts
- 105
+ 106
@@ -7370,7 +7386,7 @@
Imposta API Key
apps/client/src/app/components/admin-settings/admin-settings.component.html
- 188
+ 197
@@ -7386,7 +7402,7 @@
Investment Research
libs/ui/src/lib/i18n.ts
- 109
+ 110
@@ -7410,7 +7426,7 @@
libs/common/src/lib/routes/routes.ts
- 313
+ 308
@@ -7426,7 +7442,7 @@
libs/common/src/lib/routes/routes.ts
- 321
+ 316
@@ -7435,11 +7451,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 316
+ 311
libs/common/src/lib/routes/routes.ts
- 319
+ 314
@@ -7448,11 +7464,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 308
+ 303
libs/common/src/lib/routes/routes.ts
- 311
+ 306
@@ -7476,7 +7492,7 @@
di
apps/client/src/app/components/admin-settings/admin-settings.component.html
- 152
+ 157
@@ -7484,7 +7500,7 @@
richieste giornaliere
apps/client/src/app/components/admin-settings/admin-settings.component.html
- 154
+ 159
@@ -7492,7 +7508,7 @@
Rimuovi API key
apps/client/src/app/components/admin-settings/admin-settings.component.html
- 178
+ 187
@@ -7500,7 +7516,7 @@
Vuoi davvero eliminare l’API key?
apps/client/src/app/components/admin-settings/admin-settings.component.ts
- 143
+ 144
@@ -7668,7 +7684,7 @@
Net Worth Tracking
libs/ui/src/lib/i18n.ts
- 110
+ 111
@@ -7676,7 +7692,7 @@
Inserisci la tua API key di Ghostfolio.
apps/client/src/app/components/admin-settings/admin-settings.component.ts
- 162
+ 163
@@ -7788,7 +7804,7 @@
Creare
libs/ui/src/lib/tags-selector/tags-selector.component.html
- 64
+ 62
@@ -7953,11 +7969,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 232
+ 227
libs/common/src/lib/routes/routes.ts
- 235
+ 230
@@ -7969,7 +7985,7 @@
libs/common/src/lib/routes/routes.ts
- 237
+ 232
@@ -8081,7 +8097,7 @@
libs/common/src/lib/routes/routes.ts
- 110
+ 105
@@ -8103,13 +8119,9 @@
Calculations are based on delayed market data and may not be displayed in real-time.
I calcoli sono basati su dati di mercato ritardati e potrebbero non essere visualizzati in tempo reale.
-
- apps/client/src/app/components/home-market/home-market.html
- 28
-
apps/client/src/app/components/markets/markets.html
- 54
+ 64
@@ -8118,11 +8130,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 200
+ 195
libs/common/src/lib/routes/routes.ts
- 203
+ 198
@@ -8130,7 +8142,7 @@
ETF Tracking
libs/ui/src/lib/i18n.ts
- 106
+ 107
@@ -8218,7 +8230,7 @@
libs/common/src/lib/routes/routes.ts
- 251
+ 246
@@ -8226,7 +8238,7 @@
L’alternativa open source a
libs/common/src/lib/routes/routes.ts
- 346
+ 341
@@ -8259,15 +8271,15 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 332
+ 327
libs/common/src/lib/routes/routes.ts
- 335
+ 330
libs/common/src/lib/routes/routes.ts
- 343
+ 338
@@ -8276,11 +8288,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 324
+ 319
libs/common/src/lib/routes/routes.ts
- 327
+ 322
@@ -8505,11 +8517,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 356
+ 351
libs/common/src/lib/routes/routes.ts
- 357
+ 352
@@ -8541,7 +8553,7 @@
Azioni
apps/client/src/app/components/markets/markets.component.ts
- 51
+ 54
apps/client/src/app/pages/features/features-page.html
@@ -8553,7 +8565,7 @@
criptovalute
apps/client/src/app/components/markets/markets.component.ts
- 52
+ 55
apps/client/src/app/pages/features/features-page.html
@@ -8565,7 +8577,7 @@
Gestisci profilo risorsa
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 477
+ 478
diff --git a/apps/client/src/locales/messages.ja.xlf b/apps/client/src/locales/messages.ja.xlf
index 1ccffa825..3507d24d2 100644
--- a/apps/client/src/locales/messages.ja.xlf
+++ b/apps/client/src/locales/messages.ja.xlf
@@ -8,31 +8,31 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 196
+ 191
libs/common/src/lib/routes/routes.ts
- 197
+ 192
libs/common/src/lib/routes/routes.ts
- 202
+ 197
libs/common/src/lib/routes/routes.ts
- 210
+ 205
libs/common/src/lib/routes/routes.ts
- 218
+ 213
libs/common/src/lib/routes/routes.ts
- 226
+ 221
libs/common/src/lib/routes/routes.ts
- 234
+ 229
@@ -41,19 +41,19 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 254
+ 249
libs/common/src/lib/routes/routes.ts
- 255
+ 250
libs/common/src/lib/routes/routes.ts
- 259
+ 254
libs/common/src/lib/routes/routes.ts
- 265
+ 260
@@ -62,11 +62,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 274
+ 269
libs/common/src/lib/routes/routes.ts
- 275
+ 270
@@ -75,11 +75,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 208
+ 203
libs/common/src/lib/routes/routes.ts
- 211
+ 206
@@ -88,11 +88,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 279
+ 274
libs/common/src/lib/routes/routes.ts
- 280
+ 275
@@ -101,11 +101,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 289
+ 284
libs/common/src/lib/routes/routes.ts
- 290
+ 285
@@ -114,11 +114,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 224
+ 219
libs/common/src/lib/routes/routes.ts
- 227
+ 222
@@ -127,11 +127,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 299
+ 294
libs/common/src/lib/routes/routes.ts
- 300
+ 295
@@ -140,31 +140,31 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 304
+ 299
libs/common/src/lib/routes/routes.ts
- 305
+ 300
libs/common/src/lib/routes/routes.ts
- 310
+ 305
libs/common/src/lib/routes/routes.ts
- 318
+ 313
libs/common/src/lib/routes/routes.ts
- 326
+ 321
libs/common/src/lib/routes/routes.ts
- 334
+ 329
libs/common/src/lib/routes/routes.ts
- 342
+ 337
@@ -312,7 +312,7 @@
現金残高
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 43
+ 54
apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html
@@ -328,7 +328,7 @@
プラットフォーム
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 88
+ 112
apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html
@@ -344,7 +344,7 @@
現金残高
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 143
+ 169
@@ -655,6 +655,14 @@
20
+
+ Unknown
+ Unknown
+
+ libs/ui/src/lib/i18n.ts
+ 88
+
+
Attempts
試み
@@ -976,7 +984,7 @@
Healthcare
libs/ui/src/lib/i18n.ts
- 96
+ 97
@@ -1100,7 +1108,7 @@
Update Activity
libs/common/src/lib/routes/routes.ts
- 146
+ 141
@@ -1108,7 +1116,7 @@
テクノロジー
libs/ui/src/lib/i18n.ts
- 100
+ 101
@@ -1180,7 +1188,7 @@
Industrials
libs/ui/src/lib/i18n.ts
- 97
+ 98
@@ -1216,7 +1224,7 @@
景気敏感消費財
libs/ui/src/lib/i18n.ts
- 92
+ 93
@@ -1424,7 +1432,7 @@
プラットフォーム
apps/client/src/app/components/admin-settings/admin-settings.component.html
- 212
+ 221
@@ -1432,7 +1440,7 @@
タグ
apps/client/src/app/components/admin-settings/admin-settings.component.html
- 218
+ 227
libs/ui/src/lib/tags-selector/tags-selector.component.html
@@ -1440,7 +1448,7 @@
libs/ui/src/lib/tags-selector/tags-selector.component.html
- 25
+ 23
@@ -1576,7 +1584,7 @@
ポートフォリオ
apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts
- 139
+ 140
apps/client/src/app/components/header/header.component.html
@@ -1592,7 +1600,7 @@
libs/common/src/lib/routes/routes.ts
- 172
+ 167
@@ -1604,15 +1612,15 @@
apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts
- 151
+ 152
Current Market Mood
現在の市場心理
- apps/client/src/app/components/fear-and-greed-index/fear-and-greed-index.component.html
- 12
+ libs/ui/src/lib/fear-and-greed-index/fear-and-greed-index.component.html
+ 22
@@ -1676,7 +1684,7 @@
恐怖
apps/client/src/app/components/markets/markets.component.ts
- 46
+ 58
libs/ui/src/lib/i18n.ts
@@ -1688,7 +1696,7 @@
Greed
apps/client/src/app/components/markets/markets.component.ts
- 47
+ 59
libs/ui/src/lib/i18n.ts
@@ -1700,7 +1708,7 @@
過去 日間
apps/client/src/app/components/markets/markets.html
- 17
+ 24
@@ -1808,7 +1816,7 @@
合計金額
apps/client/src/app/components/investment-chart/investment-chart.component.ts
- 143
+ 144
@@ -1824,7 +1832,7 @@
貯蓄率
apps/client/src/app/components/investment-chart/investment-chart.component.ts
- 201
+ 193
@@ -1908,7 +1916,7 @@
エネルギー
libs/ui/src/lib/i18n.ts
- 94
+ 95
@@ -2072,7 +2080,7 @@
データグリッチの報告
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 462
+ 463
@@ -2376,7 +2384,7 @@
消費者ディフェンシブ
libs/ui/src/lib/i18n.ts
- 93
+ 94
@@ -2448,7 +2456,7 @@
ユーティリティ
libs/ui/src/lib/i18n.ts
- 101
+ 102
@@ -2708,7 +2716,7 @@
libs/common/src/lib/routes/routes.ts
- 240
+ 235
@@ -2724,7 +2732,7 @@
libs/common/src/lib/routes/routes.ts
- 205
+ 200
@@ -2740,7 +2748,7 @@
libs/common/src/lib/routes/routes.ts
- 213
+ 208
@@ -2756,7 +2764,7 @@
libs/common/src/lib/routes/routes.ts
- 229
+ 224
@@ -2816,7 +2824,7 @@
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 384
+ 395
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
@@ -2872,7 +2880,7 @@
Financial Planning
libs/ui/src/lib/i18n.ts
- 108
+ 109
@@ -2920,7 +2928,7 @@
マーケットデータ
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 406
+ 417
libs/common/src/lib/routes/routes.ts
@@ -2958,6 +2966,10 @@
Overview
概要
+
+ apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
+ 41
+
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
114
@@ -2984,11 +2996,11 @@
libs/common/src/lib/routes/routes.ts
- 113
+ 108
libs/common/src/lib/routes/routes.ts
- 190
+ 185
@@ -3100,7 +3112,7 @@
libs/common/src/lib/routes/routes.ts
- 245
+ 240
@@ -3164,7 +3176,15 @@
libs/common/src/lib/routes/routes.ts
- 271
+ 266
+
+
+
+ Invalid API key
+ Invalid API key
+
+ apps/client/src/app/components/admin-settings/admin-settings.component.html
+ 112
@@ -3184,7 +3204,7 @@
libs/common/src/lib/routes/routes.ts
- 276
+ 271
@@ -3348,7 +3368,7 @@
保有資産
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 100
+ 126
apps/client/src/app/components/home-holdings/home-holdings.html
@@ -3368,7 +3388,7 @@
libs/common/src/lib/routes/routes.ts
- 187
+ 182
libs/ui/src/lib/assistant/assistant.html
@@ -3392,7 +3412,7 @@
libs/common/src/lib/routes/routes.ts
- 105
+ 100
@@ -3410,10 +3430,6 @@
apps/client/src/app/components/header/header.component.html
408
-
- apps/client/src/app/components/home-market/home-market.html
- 2
-
apps/client/src/app/components/markets/markets.html
2
@@ -3432,15 +3448,11 @@
libs/common/src/lib/routes/routes.ts
- 100
-
-
- libs/common/src/lib/routes/routes.ts
- 281
+ 276
libs/common/src/lib/routes/routes.ts
- 329
+ 324
@@ -3576,7 +3588,7 @@
基本材料
libs/ui/src/lib/i18n.ts
- 90
+ 91
@@ -3784,7 +3796,7 @@
Add Activity
libs/common/src/lib/routes/routes.ts
- 139
+ 134
@@ -3928,11 +3940,11 @@
アクティビティ
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 84
+ 102
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 111
+ 137
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
@@ -3956,7 +3968,7 @@
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 350
+ 361
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
@@ -3968,7 +3980,7 @@
libs/common/src/lib/routes/routes.ts
- 149
+ 144
libs/ui/src/lib/accounts-table/accounts-table.component.html
@@ -4236,7 +4248,7 @@
libs/common/src/lib/routes/routes.ts
- 154
+ 149
@@ -4412,7 +4424,7 @@
libs/common/src/lib/routes/routes.ts
- 159
+ 154
@@ -4428,7 +4440,7 @@
配当金
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 79
+ 90
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
@@ -4580,7 +4592,7 @@
libs/common/src/lib/routes/routes.ts
- 291
+ 286
@@ -4828,7 +4840,7 @@
libs/common/src/lib/routes/routes.ts
- 301
+ 296
@@ -4860,7 +4872,7 @@
libs/common/src/lib/routes/routes.ts
- 349
+ 344
@@ -4869,11 +4881,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 340
+ 335
libs/common/src/lib/routes/routes.ts
- 344
+ 339
@@ -5125,7 +5137,7 @@
Stock Tracking
libs/ui/src/lib/i18n.ts
- 111
+ 112
@@ -5149,7 +5161,7 @@
Web
libs/ui/src/lib/i18n.ts
- 120
+ 121
@@ -5193,7 +5205,7 @@
libs/common/src/lib/routes/routes.ts
- 352
+ 347
@@ -5333,7 +5345,7 @@
資産プロファイル
apps/client/src/app/components/admin-settings/admin-settings.component.html
- 123
+ 128
libs/ui/src/lib/assistant/assistant.html
@@ -5457,7 +5469,7 @@
利息
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 67
+ 78
apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html
@@ -5709,7 +5721,7 @@
libs/ui/src/lib/i18n.ts
- 98
+ 99
libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts
@@ -5913,7 +5925,7 @@
株式
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 55
+ 66
libs/ui/src/lib/i18n.ts
@@ -5937,7 +5949,7 @@
libs/ui/src/lib/i18n.ts
- 99
+ 100
@@ -6025,7 +6037,7 @@
通信サービス
libs/ui/src/lib/i18n.ts
- 91
+ 92
@@ -6261,7 +6273,7 @@
Close Holding
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 449
+ 450
@@ -6446,11 +6458,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 263
+ 258
libs/common/src/lib/routes/routes.ts
- 266
+ 261
@@ -6462,7 +6474,7 @@
libs/common/src/lib/routes/routes.ts
- 268
+ 263
@@ -6502,7 +6514,7 @@
libs/common/src/lib/routes/routes.ts
- 260
+ 255
@@ -6548,6 +6560,10 @@
Activity
アクティビティ
+
+ apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
+ 100
+
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
231
@@ -6622,7 +6638,7 @@
国際化
libs/common/src/lib/routes/routes.ts
- 119
+ 114
@@ -6686,7 +6702,7 @@
Clone Activity
libs/common/src/lib/routes/routes.ts
- 134
+ 129
@@ -6858,7 +6874,7 @@
Wealth Management
libs/ui/src/lib/i18n.ts
- 113
+ 114
@@ -6882,7 +6898,7 @@
Family Office
libs/ui/src/lib/i18n.ts
- 107
+ 108
@@ -6910,7 +6926,7 @@
Budgeting
libs/ui/src/lib/i18n.ts
- 104
+ 105
@@ -7174,7 +7190,7 @@
Tax Reporting
libs/ui/src/lib/i18n.ts
- 112
+ 113
@@ -7238,7 +7254,7 @@
Dividend Tracking
libs/ui/src/lib/i18n.ts
- 105
+ 106
@@ -7266,7 +7282,7 @@
Financial Services
libs/ui/src/lib/i18n.ts
- 95
+ 96
@@ -7386,7 +7402,7 @@
Set API key
apps/client/src/app/components/admin-settings/admin-settings.component.html
- 188
+ 197
@@ -7410,7 +7426,7 @@
Investment Research
libs/ui/src/lib/i18n.ts
- 109
+ 110
@@ -7434,7 +7450,7 @@
libs/common/src/lib/routes/routes.ts
- 313
+ 308
@@ -7443,11 +7459,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 308
+ 303
libs/common/src/lib/routes/routes.ts
- 311
+ 306
@@ -7463,7 +7479,7 @@
libs/common/src/lib/routes/routes.ts
- 321
+ 316
@@ -7472,11 +7488,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 316
+ 311
libs/common/src/lib/routes/routes.ts
- 319
+ 314
@@ -7508,7 +7524,7 @@
of
apps/client/src/app/components/admin-settings/admin-settings.component.html
- 152
+ 157
@@ -7516,7 +7532,7 @@
Do you really want to delete the API key?
apps/client/src/app/components/admin-settings/admin-settings.component.ts
- 143
+ 144
@@ -7524,7 +7540,7 @@
Remove API key
apps/client/src/app/components/admin-settings/admin-settings.component.html
- 178
+ 187
@@ -7532,7 +7548,7 @@
daily requests
apps/client/src/app/components/admin-settings/admin-settings.component.html
- 154
+ 159
@@ -7692,7 +7708,7 @@
Net Worth Tracking
libs/ui/src/lib/i18n.ts
- 110
+ 111
@@ -7700,7 +7716,7 @@
Please enter your Ghostfolio API key.
apps/client/src/app/components/admin-settings/admin-settings.component.ts
- 162
+ 163
@@ -7812,7 +7828,7 @@
Create
libs/ui/src/lib/tags-selector/tags-selector.component.html
- 64
+ 62
@@ -7972,7 +7988,7 @@
libs/common/src/lib/routes/routes.ts
- 237
+ 232
@@ -7981,11 +7997,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 232
+ 227
libs/common/src/lib/routes/routes.ts
- 235
+ 230
@@ -8081,7 +8097,7 @@
libs/common/src/lib/routes/routes.ts
- 110
+ 105
@@ -8103,13 +8119,9 @@
Calculations are based on delayed market data and may not be displayed in real-time.
Calculations are based on delayed market data and may not be displayed in real-time.
-
- apps/client/src/app/components/home-market/home-market.html
- 28
-
apps/client/src/app/components/markets/markets.html
- 54
+ 64
@@ -8118,11 +8130,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 200
+ 195
libs/common/src/lib/routes/routes.ts
- 203
+ 198
@@ -8138,7 +8150,7 @@
ETF Tracking
libs/ui/src/lib/i18n.ts
- 106
+ 107
@@ -8218,7 +8230,7 @@
libs/common/src/lib/routes/routes.ts
- 251
+ 246
@@ -8226,7 +8238,7 @@
Open Source Alternative to
libs/common/src/lib/routes/routes.ts
- 346
+ 341
@@ -8259,15 +8271,15 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 332
+ 327
libs/common/src/lib/routes/routes.ts
- 335
+ 330
libs/common/src/lib/routes/routes.ts
- 343
+ 338
@@ -8276,11 +8288,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 324
+ 319
libs/common/src/lib/routes/routes.ts
- 327
+ 322
@@ -8505,11 +8517,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 356
+ 351
libs/common/src/lib/routes/routes.ts
- 357
+ 352
@@ -8541,7 +8553,7 @@
Cryptocurrencies
apps/client/src/app/components/markets/markets.component.ts
- 52
+ 55
apps/client/src/app/pages/features/features-page.html
@@ -8553,7 +8565,7 @@
Stocks
apps/client/src/app/components/markets/markets.component.ts
- 51
+ 54
apps/client/src/app/pages/features/features-page.html
@@ -8565,7 +8577,7 @@
Manage Asset Profile
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 477
+ 478
diff --git a/apps/client/src/locales/messages.ko.xlf b/apps/client/src/locales/messages.ko.xlf
index ebda4cbf4..5efe7b365 100644
--- a/apps/client/src/locales/messages.ko.xlf
+++ b/apps/client/src/locales/messages.ko.xlf
@@ -8,31 +8,31 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 196
+ 191
libs/common/src/lib/routes/routes.ts
- 197
+ 192
libs/common/src/lib/routes/routes.ts
- 202
+ 197
libs/common/src/lib/routes/routes.ts
- 210
+ 205
libs/common/src/lib/routes/routes.ts
- 218
+ 213
libs/common/src/lib/routes/routes.ts
- 226
+ 221
libs/common/src/lib/routes/routes.ts
- 234
+ 229
@@ -41,19 +41,19 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 254
+ 249
libs/common/src/lib/routes/routes.ts
- 255
+ 250
libs/common/src/lib/routes/routes.ts
- 259
+ 254
libs/common/src/lib/routes/routes.ts
- 265
+ 260
@@ -62,11 +62,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 274
+ 269
libs/common/src/lib/routes/routes.ts
- 275
+ 270
@@ -75,11 +75,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 208
+ 203
libs/common/src/lib/routes/routes.ts
- 211
+ 206
@@ -88,11 +88,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 279
+ 274
libs/common/src/lib/routes/routes.ts
- 280
+ 275
@@ -101,11 +101,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 289
+ 284
libs/common/src/lib/routes/routes.ts
- 290
+ 285
@@ -114,11 +114,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 224
+ 219
libs/common/src/lib/routes/routes.ts
- 227
+ 222
@@ -127,11 +127,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 299
+ 294
libs/common/src/lib/routes/routes.ts
- 300
+ 295
@@ -140,31 +140,31 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 304
+ 299
libs/common/src/lib/routes/routes.ts
- 305
+ 300
libs/common/src/lib/routes/routes.ts
- 310
+ 305
libs/common/src/lib/routes/routes.ts
- 318
+ 313
libs/common/src/lib/routes/routes.ts
- 326
+ 321
libs/common/src/lib/routes/routes.ts
- 334
+ 329
libs/common/src/lib/routes/routes.ts
- 342
+ 337
@@ -312,7 +312,7 @@
현금 잔액
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 43
+ 54
apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html
@@ -328,7 +328,7 @@
플랫폼
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 88
+ 112
apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html
@@ -344,7 +344,7 @@
현금 잔액
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 143
+ 169
@@ -655,6 +655,14 @@
20
+
+ Unknown
+ Unknown
+
+ libs/ui/src/lib/i18n.ts
+ 88
+
+
Attempts
시도 횟수
@@ -976,7 +984,7 @@
헬스케어
libs/ui/src/lib/i18n.ts
- 96
+ 97
@@ -1100,7 +1108,7 @@
Update Activity
libs/common/src/lib/routes/routes.ts
- 146
+ 141
@@ -1108,7 +1116,7 @@
기술
libs/ui/src/lib/i18n.ts
- 100
+ 101
@@ -1180,7 +1188,7 @@
산업재
libs/ui/src/lib/i18n.ts
- 97
+ 98
@@ -1216,7 +1224,7 @@
임의소비재
libs/ui/src/lib/i18n.ts
- 92
+ 93
@@ -1424,7 +1432,7 @@
플랫폼
apps/client/src/app/components/admin-settings/admin-settings.component.html
- 212
+ 221
@@ -1432,7 +1440,7 @@
태그
apps/client/src/app/components/admin-settings/admin-settings.component.html
- 218
+ 227
libs/ui/src/lib/tags-selector/tags-selector.component.html
@@ -1440,7 +1448,7 @@
libs/ui/src/lib/tags-selector/tags-selector.component.html
- 25
+ 23
@@ -1576,7 +1584,7 @@
포트폴리오
apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts
- 139
+ 140
apps/client/src/app/components/header/header.component.html
@@ -1592,7 +1600,7 @@
libs/common/src/lib/routes/routes.ts
- 172
+ 167
@@ -1604,15 +1612,15 @@
apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts
- 151
+ 152
Current Market Mood
현재 시장 분위기
- apps/client/src/app/components/fear-and-greed-index/fear-and-greed-index.component.html
- 12
+ libs/ui/src/lib/fear-and-greed-index/fear-and-greed-index.component.html
+ 22
@@ -1676,7 +1684,7 @@
두려움
apps/client/src/app/components/markets/markets.component.ts
- 46
+ 58
libs/ui/src/lib/i18n.ts
@@ -1688,7 +1696,7 @@
탐욕
apps/client/src/app/components/markets/markets.component.ts
- 47
+ 59
libs/ui/src/lib/i18n.ts
@@ -1700,7 +1708,7 @@
지난 일
apps/client/src/app/components/markets/markets.html
- 17
+ 24
@@ -1808,7 +1816,7 @@
총액
apps/client/src/app/components/investment-chart/investment-chart.component.ts
- 143
+ 144
@@ -1824,7 +1832,7 @@
저축률
apps/client/src/app/components/investment-chart/investment-chart.component.ts
- 201
+ 193
@@ -1908,7 +1916,7 @@
에너지
libs/ui/src/lib/i18n.ts
- 94
+ 95
@@ -2072,7 +2080,7 @@
데이터 결함 보고
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 462
+ 463
@@ -2376,7 +2384,7 @@
필수소비재
libs/ui/src/lib/i18n.ts
- 93
+ 94
@@ -2448,7 +2456,7 @@
유틸리티
libs/ui/src/lib/i18n.ts
- 101
+ 102
@@ -2708,7 +2716,7 @@
libs/common/src/lib/routes/routes.ts
- 240
+ 235
@@ -2724,7 +2732,7 @@
libs/common/src/lib/routes/routes.ts
- 205
+ 200
@@ -2740,7 +2748,7 @@
libs/common/src/lib/routes/routes.ts
- 213
+ 208
@@ -2756,7 +2764,7 @@
libs/common/src/lib/routes/routes.ts
- 229
+ 224
@@ -2816,7 +2824,7 @@
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 384
+ 395
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
@@ -2872,7 +2880,7 @@
재무 설계
libs/ui/src/lib/i18n.ts
- 108
+ 109
@@ -2920,7 +2928,7 @@
시장 데이터
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 406
+ 417
libs/common/src/lib/routes/routes.ts
@@ -2958,6 +2966,10 @@
Overview
개요
+
+ apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
+ 41
+
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
114
@@ -2984,11 +2996,11 @@
libs/common/src/lib/routes/routes.ts
- 113
+ 108
libs/common/src/lib/routes/routes.ts
- 190
+ 185
@@ -3100,7 +3112,7 @@
libs/common/src/lib/routes/routes.ts
- 245
+ 240
@@ -3164,7 +3176,15 @@
libs/common/src/lib/routes/routes.ts
- 271
+ 266
+
+
+
+ Invalid API key
+ Invalid API key
+
+ apps/client/src/app/components/admin-settings/admin-settings.component.html
+ 112
@@ -3184,7 +3204,7 @@
libs/common/src/lib/routes/routes.ts
- 276
+ 271
@@ -3348,7 +3368,7 @@
보유 종목
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 100
+ 126
apps/client/src/app/components/home-holdings/home-holdings.html
@@ -3368,7 +3388,7 @@
libs/common/src/lib/routes/routes.ts
- 187
+ 182
libs/ui/src/lib/assistant/assistant.html
@@ -3392,7 +3412,7 @@
libs/common/src/lib/routes/routes.ts
- 105
+ 100
@@ -3410,10 +3430,6 @@
apps/client/src/app/components/header/header.component.html
408
-
- apps/client/src/app/components/home-market/home-market.html
- 2
-
apps/client/src/app/components/markets/markets.html
2
@@ -3432,15 +3448,11 @@
libs/common/src/lib/routes/routes.ts
- 100
-
-
- libs/common/src/lib/routes/routes.ts
- 281
+ 276
libs/common/src/lib/routes/routes.ts
- 329
+ 324
@@ -3576,7 +3588,7 @@
기초소재
libs/ui/src/lib/i18n.ts
- 90
+ 91
@@ -3776,7 +3788,7 @@
Add Activity
libs/common/src/lib/routes/routes.ts
- 139
+ 134
@@ -3920,11 +3932,11 @@
거래 내역
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 84
+ 102
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 111
+ 137
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
@@ -3948,7 +3960,7 @@
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 350
+ 361
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
@@ -3960,7 +3972,7 @@
libs/common/src/lib/routes/routes.ts
- 149
+ 144
libs/ui/src/lib/accounts-table/accounts-table.component.html
@@ -4228,7 +4240,7 @@
libs/common/src/lib/routes/routes.ts
- 154
+ 149
@@ -4404,7 +4416,7 @@
libs/common/src/lib/routes/routes.ts
- 159
+ 154
@@ -4420,7 +4432,7 @@
배당금
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 79
+ 90
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
@@ -4572,7 +4584,7 @@
libs/common/src/lib/routes/routes.ts
- 291
+ 286
@@ -4820,7 +4832,7 @@
libs/common/src/lib/routes/routes.ts
- 301
+ 296
@@ -4852,7 +4864,7 @@
libs/common/src/lib/routes/routes.ts
- 349
+ 344
@@ -4861,11 +4873,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 340
+ 335
libs/common/src/lib/routes/routes.ts
- 344
+ 339
@@ -5117,7 +5129,7 @@
주식 추적
libs/ui/src/lib/i18n.ts
- 111
+ 112
@@ -5141,7 +5153,7 @@
웹
libs/ui/src/lib/i18n.ts
- 120
+ 121
@@ -5185,7 +5197,7 @@
libs/common/src/lib/routes/routes.ts
- 352
+ 347
@@ -5325,7 +5337,7 @@
자산 프로필
apps/client/src/app/components/admin-settings/admin-settings.component.html
- 123
+ 128
libs/ui/src/lib/assistant/assistant.html
@@ -5449,7 +5461,7 @@
관심
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 67
+ 78
apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html
@@ -5701,7 +5713,7 @@
libs/ui/src/lib/i18n.ts
- 98
+ 99
libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts
@@ -5913,7 +5925,7 @@
주식
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 55
+ 66
libs/ui/src/lib/i18n.ts
@@ -5937,7 +5949,7 @@
libs/ui/src/lib/i18n.ts
- 99
+ 100
@@ -6025,7 +6037,7 @@
커뮤니케이션 서비스
libs/ui/src/lib/i18n.ts
- 91
+ 92
@@ -6261,7 +6273,7 @@
보유 포지션 종료
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 449
+ 450
@@ -6446,11 +6458,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 263
+ 258
libs/common/src/lib/routes/routes.ts
- 266
+ 261
@@ -6462,7 +6474,7 @@
libs/common/src/lib/routes/routes.ts
- 268
+ 263
@@ -6502,7 +6514,7 @@
libs/common/src/lib/routes/routes.ts
- 260
+ 255
@@ -6548,6 +6560,10 @@
Activity
거래
+
+ apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
+ 100
+
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
231
@@ -6622,7 +6638,7 @@
국제화
libs/common/src/lib/routes/routes.ts
- 119
+ 114
@@ -6686,7 +6702,7 @@
Clone Activity
libs/common/src/lib/routes/routes.ts
- 134
+ 129
@@ -6858,7 +6874,7 @@
자산관리
libs/ui/src/lib/i18n.ts
- 113
+ 114
@@ -6882,7 +6898,7 @@
패밀리오피스
libs/ui/src/lib/i18n.ts
- 107
+ 108
@@ -6910,7 +6926,7 @@
예산 편성
libs/ui/src/lib/i18n.ts
- 104
+ 105
@@ -7174,7 +7190,7 @@
세금 보고
libs/ui/src/lib/i18n.ts
- 112
+ 113
@@ -7238,7 +7254,7 @@
배당 추적
libs/ui/src/lib/i18n.ts
- 105
+ 106
@@ -7266,7 +7282,7 @@
금융 서비스
libs/ui/src/lib/i18n.ts
- 95
+ 96
@@ -7386,7 +7402,7 @@
API 키 설정
apps/client/src/app/components/admin-settings/admin-settings.component.html
- 188
+ 197
@@ -7410,7 +7426,7 @@
투자 리서치
libs/ui/src/lib/i18n.ts
- 109
+ 110
@@ -7434,7 +7450,7 @@
libs/common/src/lib/routes/routes.ts
- 313
+ 308
@@ -7443,11 +7459,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 308
+ 303
libs/common/src/lib/routes/routes.ts
- 311
+ 306
@@ -7463,7 +7479,7 @@
libs/common/src/lib/routes/routes.ts
- 321
+ 316
@@ -7472,11 +7488,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 316
+ 311
libs/common/src/lib/routes/routes.ts
- 319
+ 314
@@ -7508,7 +7524,7 @@
~의
apps/client/src/app/components/admin-settings/admin-settings.component.html
- 152
+ 157
@@ -7516,7 +7532,7 @@
API 키를 정말로 삭제하시겠습니까?
apps/client/src/app/components/admin-settings/admin-settings.component.ts
- 143
+ 144
@@ -7524,7 +7540,7 @@
API 키 제거
apps/client/src/app/components/admin-settings/admin-settings.component.html
- 178
+ 187
@@ -7532,7 +7548,7 @@
일일 요청
apps/client/src/app/components/admin-settings/admin-settings.component.html
- 154
+ 159
@@ -7692,7 +7708,7 @@
순자산 추적
libs/ui/src/lib/i18n.ts
- 110
+ 111
@@ -7700,7 +7716,7 @@
Ghostfolio API 키를 입력하세요.
apps/client/src/app/components/admin-settings/admin-settings.component.ts
- 162
+ 163
@@ -7812,7 +7828,7 @@
만들다
libs/ui/src/lib/tags-selector/tags-selector.component.html
- 64
+ 62
@@ -7972,7 +7988,7 @@
libs/common/src/lib/routes/routes.ts
- 237
+ 232
@@ -7981,11 +7997,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 232
+ 227
libs/common/src/lib/routes/routes.ts
- 235
+ 230
@@ -8081,7 +8097,7 @@
libs/common/src/lib/routes/routes.ts
- 110
+ 105
@@ -8103,13 +8119,9 @@
Calculations are based on delayed market data and may not be displayed in real-time.
계산은 지연된 시장 데이터를 기반으로 하며 실시간으로 표시되지 않을 수 있습니다.
-
- apps/client/src/app/components/home-market/home-market.html
- 28
-
apps/client/src/app/components/markets/markets.html
- 54
+ 64
@@ -8118,11 +8130,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 200
+ 195
libs/common/src/lib/routes/routes.ts
- 203
+ 198
@@ -8138,7 +8150,7 @@
ETF 추적
libs/ui/src/lib/i18n.ts
- 106
+ 107
@@ -8218,7 +8230,7 @@
libs/common/src/lib/routes/routes.ts
- 251
+ 246
@@ -8226,7 +8238,7 @@
오픈 소스 대안
libs/common/src/lib/routes/routes.ts
- 346
+ 341
@@ -8259,15 +8271,15 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 332
+ 327
libs/common/src/lib/routes/routes.ts
- 335
+ 330
libs/common/src/lib/routes/routes.ts
- 343
+ 338
@@ -8276,11 +8288,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 324
+ 319
libs/common/src/lib/routes/routes.ts
- 327
+ 322
@@ -8505,11 +8517,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 356
+ 351
libs/common/src/lib/routes/routes.ts
- 357
+ 352
@@ -8541,7 +8553,7 @@
암호화폐
apps/client/src/app/components/markets/markets.component.ts
- 52
+ 55
apps/client/src/app/pages/features/features-page.html
@@ -8553,7 +8565,7 @@
주식
apps/client/src/app/components/markets/markets.component.ts
- 51
+ 54
apps/client/src/app/pages/features/features-page.html
@@ -8565,7 +8577,7 @@
자산 프로필 관리
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 477
+ 478
diff --git a/apps/client/src/locales/messages.nl.xlf b/apps/client/src/locales/messages.nl.xlf
index 85c025f80..585a06f79 100644
--- a/apps/client/src/locales/messages.nl.xlf
+++ b/apps/client/src/locales/messages.nl.xlf
@@ -349,6 +349,14 @@
20
+
+ Unknown
+ Unknown
+
+ libs/ui/src/lib/i18n.ts
+ 88
+
+
Attempts
Pogingen
@@ -398,7 +406,7 @@
Activa Profiel
apps/client/src/app/components/admin-settings/admin-settings.component.html
- 123
+ 128
libs/ui/src/lib/assistant/assistant.html
@@ -701,8 +709,8 @@
Current Market Mood
Huidig marktsentiment
- apps/client/src/app/components/fear-and-greed-index/fear-and-greed-index.component.html
- 12
+ libs/ui/src/lib/fear-and-greed-index/fear-and-greed-index.component.html
+ 22
@@ -810,7 +818,7 @@
Laatste Dagen
apps/client/src/app/components/markets/markets.html
- 17
+ 24
@@ -894,7 +902,7 @@
Energie
libs/ui/src/lib/i18n.ts
- 94
+ 95
@@ -1026,7 +1034,7 @@
Tags
apps/client/src/app/components/admin-settings/admin-settings.component.html
- 218
+ 227
libs/ui/src/lib/tags-selector/tags-selector.component.html
@@ -1034,7 +1042,7 @@
libs/ui/src/lib/tags-selector/tags-selector.component.html
- 25
+ 23
@@ -1042,7 +1050,7 @@
Gegevensstoring melden
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 462
+ 463
@@ -1190,7 +1198,7 @@
libs/common/src/lib/routes/routes.ts
- 240
+ 235
@@ -1206,7 +1214,7 @@
libs/common/src/lib/routes/routes.ts
- 229
+ 224
@@ -1242,7 +1250,7 @@
Basisconsumptiegoederen
libs/ui/src/lib/i18n.ts
- 93
+ 94
@@ -1302,7 +1310,7 @@
Nutsbedrijven
libs/ui/src/lib/i18n.ts
- 101
+ 102
@@ -1446,7 +1454,7 @@
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 384
+ 395
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
@@ -1526,7 +1534,7 @@
Saldo
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 43
+ 54
apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html
@@ -1542,7 +1550,7 @@
Platform
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 88
+ 112
apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html
@@ -1566,7 +1574,7 @@
Financiële planning
libs/ui/src/lib/i18n.ts
- 108
+ 109
@@ -1694,7 +1702,7 @@
libs/common/src/lib/routes/routes.ts
- 245
+ 240
@@ -1738,7 +1746,15 @@
libs/common/src/lib/routes/routes.ts
- 271
+ 266
+
+
+
+ Invalid API key
+ Invalid API key
+
+ apps/client/src/app/components/admin-settings/admin-settings.component.html
+ 112
@@ -1758,12 +1774,16 @@
libs/common/src/lib/routes/routes.ts
- 276
+ 271
Overview
Overzicht
+
+ apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
+ 41
+
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
114
@@ -1790,11 +1810,11 @@
libs/common/src/lib/routes/routes.ts
- 113
+ 108
libs/common/src/lib/routes/routes.ts
- 190
+ 185
@@ -1812,10 +1832,6 @@
apps/client/src/app/components/header/header.component.html
408
-
- apps/client/src/app/components/home-market/home-market.html
- 2
-
apps/client/src/app/components/markets/markets.html
2
@@ -1834,15 +1850,11 @@
libs/common/src/lib/routes/routes.ts
- 100
-
-
- libs/common/src/lib/routes/routes.ts
- 281
+ 276
libs/common/src/lib/routes/routes.ts
- 329
+ 324
@@ -1858,7 +1870,7 @@
libs/common/src/lib/routes/routes.ts
- 154
+ 149
@@ -1946,7 +1958,7 @@
libs/common/src/lib/routes/routes.ts
- 159
+ 154
@@ -1994,7 +2006,7 @@
Posities
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 100
+ 126
apps/client/src/app/components/home-holdings/home-holdings.html
@@ -2014,7 +2026,7 @@
libs/common/src/lib/routes/routes.ts
- 187
+ 182
libs/ui/src/lib/assistant/assistant.html
@@ -2086,7 +2098,7 @@
Cyclische consumptiegoederen
libs/ui/src/lib/i18n.ts
- 92
+ 93
@@ -2150,11 +2162,11 @@
Activiteiten
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 84
+ 102
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 111
+ 137
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
@@ -2178,7 +2190,7 @@
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 350
+ 361
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
@@ -2190,7 +2202,7 @@
libs/common/src/lib/routes/routes.ts
- 149
+ 144
libs/ui/src/lib/accounts-table/accounts-table.component.html
@@ -2250,7 +2262,7 @@
libs/common/src/lib/routes/routes.ts
- 291
+ 286
@@ -2258,7 +2270,7 @@
Portefeuille
apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts
- 139
+ 140
apps/client/src/app/components/header/header.component.html
@@ -2274,7 +2286,7 @@
libs/common/src/lib/routes/routes.ts
- 172
+ 167
@@ -2310,7 +2322,7 @@
libs/common/src/lib/routes/routes.ts
- 301
+ 296
@@ -2354,7 +2366,7 @@
libs/common/src/lib/routes/routes.ts
- 352
+ 347
@@ -2678,7 +2690,7 @@
Rente
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 67
+ 78
apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html
@@ -2746,7 +2758,7 @@
Angst
apps/client/src/app/components/markets/markets.component.ts
- 46
+ 58
libs/ui/src/lib/i18n.ts
@@ -2758,7 +2770,7 @@
Hebzucht
apps/client/src/app/components/markets/markets.component.ts
- 47
+ 59
libs/ui/src/lib/i18n.ts
@@ -2810,7 +2822,7 @@
apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts
- 151
+ 152
@@ -2910,7 +2922,7 @@
Totaalbedrag
apps/client/src/app/components/investment-chart/investment-chart.component.ts
- 143
+ 144
@@ -2934,7 +2946,7 @@
Spaarrente
apps/client/src/app/components/investment-chart/investment-chart.component.ts
- 201
+ 193
@@ -3054,7 +3066,7 @@
Equity
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 55
+ 66
libs/ui/src/lib/i18n.ts
@@ -3078,7 +3090,7 @@
libs/ui/src/lib/i18n.ts
- 99
+ 100
@@ -3178,7 +3190,7 @@
libs/ui/src/lib/i18n.ts
- 98
+ 99
libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts
@@ -3242,7 +3254,7 @@
Communicatiediensten
libs/ui/src/lib/i18n.ts
- 91
+ 92
@@ -3374,7 +3386,7 @@
Dividend
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 79
+ 90
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
@@ -3474,7 +3486,7 @@
Marktgegevens
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 406
+ 417
libs/common/src/lib/routes/routes.ts
@@ -3510,7 +3522,7 @@
libs/common/src/lib/routes/routes.ts
- 105
+ 100
@@ -4178,7 +4190,7 @@
Platforms
apps/client/src/app/components/admin-settings/admin-settings.component.html
- 212
+ 221
@@ -4386,7 +4398,7 @@
libs/common/src/lib/routes/routes.ts
- 205
+ 200
@@ -4402,7 +4414,7 @@
libs/common/src/lib/routes/routes.ts
- 213
+ 208
@@ -4522,7 +4534,7 @@
Update Activity
libs/common/src/lib/routes/routes.ts
- 146
+ 141
@@ -4530,7 +4542,7 @@
Technologie
libs/ui/src/lib/i18n.ts
- 100
+ 101
@@ -4574,7 +4586,7 @@
libs/common/src/lib/routes/routes.ts
- 349
+ 344
@@ -4750,7 +4762,7 @@
Web
libs/ui/src/lib/i18n.ts
- 120
+ 121
@@ -5218,7 +5230,7 @@
Basismaterialen
libs/ui/src/lib/i18n.ts
- 90
+ 91
@@ -5402,7 +5414,7 @@
Add Activity
libs/common/src/lib/routes/routes.ts
- 139
+ 134
@@ -5451,19 +5463,19 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 254
+ 249
libs/common/src/lib/routes/routes.ts
- 255
+ 250
libs/common/src/lib/routes/routes.ts
- 259
+ 254
libs/common/src/lib/routes/routes.ts
- 265
+ 260
@@ -5472,11 +5484,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 274
+ 269
libs/common/src/lib/routes/routes.ts
- 275
+ 270
@@ -5485,31 +5497,31 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 196
+ 191
libs/common/src/lib/routes/routes.ts
- 197
+ 192
libs/common/src/lib/routes/routes.ts
- 202
+ 197
libs/common/src/lib/routes/routes.ts
- 210
+ 205
libs/common/src/lib/routes/routes.ts
- 218
+ 213
libs/common/src/lib/routes/routes.ts
- 226
+ 221
libs/common/src/lib/routes/routes.ts
- 234
+ 229
@@ -5518,11 +5530,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 224
+ 219
libs/common/src/lib/routes/routes.ts
- 227
+ 222
@@ -5531,11 +5543,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 208
+ 203
libs/common/src/lib/routes/routes.ts
- 211
+ 206
@@ -5544,11 +5556,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 279
+ 274
libs/common/src/lib/routes/routes.ts
- 280
+ 275
@@ -5557,11 +5569,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 289
+ 284
libs/common/src/lib/routes/routes.ts
- 290
+ 285
@@ -5570,11 +5582,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 299
+ 294
libs/common/src/lib/routes/routes.ts
- 300
+ 295
@@ -5583,31 +5595,31 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 304
+ 299
libs/common/src/lib/routes/routes.ts
- 305
+ 300
libs/common/src/lib/routes/routes.ts
- 310
+ 305
libs/common/src/lib/routes/routes.ts
- 318
+ 313
libs/common/src/lib/routes/routes.ts
- 326
+ 321
libs/common/src/lib/routes/routes.ts
- 334
+ 329
libs/common/src/lib/routes/routes.ts
- 342
+ 337
@@ -5672,11 +5684,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 340
+ 335
libs/common/src/lib/routes/routes.ts
- 344
+ 339
@@ -5684,7 +5696,7 @@
Aandelen volgen
libs/ui/src/lib/i18n.ts
- 111
+ 112
@@ -5972,7 +5984,7 @@
Industrie
libs/ui/src/lib/i18n.ts
- 97
+ 98
@@ -6068,7 +6080,7 @@
Gezondheidszorg
libs/ui/src/lib/i18n.ts
- 96
+ 97
@@ -6108,7 +6120,7 @@
Contant Saldo
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 143
+ 169
@@ -6248,7 +6260,7 @@
Sluit Holding
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 449
+ 450
@@ -6452,7 +6464,7 @@
libs/common/src/lib/routes/routes.ts
- 260
+ 255
@@ -6464,7 +6476,7 @@
libs/common/src/lib/routes/routes.ts
- 268
+ 263
@@ -6473,11 +6485,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 263
+ 258
libs/common/src/lib/routes/routes.ts
- 266
+ 261
@@ -6523,6 +6535,10 @@
Activity
Activiteit
+
+ apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
+ 100
+
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
231
@@ -6597,7 +6613,7 @@
Internationalizering
libs/common/src/lib/routes/routes.ts
- 119
+ 114
@@ -6661,7 +6677,7 @@
Clone Activity
libs/common/src/lib/routes/routes.ts
- 134
+ 129
@@ -6741,7 +6757,7 @@
Budgetteren
libs/ui/src/lib/i18n.ts
- 104
+ 105
@@ -6817,7 +6833,7 @@
Familiekantoor
libs/ui/src/lib/i18n.ts
- 107
+ 108
@@ -6897,7 +6913,7 @@
Vermogensbeheer
libs/ui/src/lib/i18n.ts
- 113
+ 114
@@ -7093,7 +7109,7 @@
Belastingrapportage
libs/ui/src/lib/i18n.ts
- 112
+ 113
@@ -7241,7 +7257,7 @@
Financiële diensten
libs/ui/src/lib/i18n.ts
- 95
+ 96
@@ -7325,7 +7341,7 @@
Dividend volgen
libs/ui/src/lib/i18n.ts
- 105
+ 106
@@ -7369,7 +7385,7 @@
API-sleutel instellen
apps/client/src/app/components/admin-settings/admin-settings.component.html
- 188
+ 197
@@ -7385,7 +7401,7 @@
Beleggingsonderzoek
libs/ui/src/lib/i18n.ts
- 109
+ 110
@@ -7409,7 +7425,7 @@
libs/common/src/lib/routes/routes.ts
- 313
+ 308
@@ -7425,7 +7441,7 @@
libs/common/src/lib/routes/routes.ts
- 321
+ 316
@@ -7434,11 +7450,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 316
+ 311
libs/common/src/lib/routes/routes.ts
- 319
+ 314
@@ -7447,11 +7463,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 308
+ 303
libs/common/src/lib/routes/routes.ts
- 311
+ 306
@@ -7475,7 +7491,7 @@
van
apps/client/src/app/components/admin-settings/admin-settings.component.html
- 152
+ 157
@@ -7483,7 +7499,7 @@
dagelijkse verzoeken
apps/client/src/app/components/admin-settings/admin-settings.component.html
- 154
+ 159
@@ -7491,7 +7507,7 @@
Verwijder API-sleutel
apps/client/src/app/components/admin-settings/admin-settings.component.html
- 178
+ 187
@@ -7499,7 +7515,7 @@
Wilt u de API-sleutel echt verwijderen?
apps/client/src/app/components/admin-settings/admin-settings.component.ts
- 143
+ 144
@@ -7667,7 +7683,7 @@
Netto waarde volgen
libs/ui/src/lib/i18n.ts
- 110
+ 111
@@ -7675,7 +7691,7 @@
Voer uw Ghostfolio API-sleutel in.
apps/client/src/app/components/admin-settings/admin-settings.component.ts
- 162
+ 163
@@ -7787,7 +7803,7 @@
Nieuw
libs/ui/src/lib/tags-selector/tags-selector.component.html
- 64
+ 62
@@ -7952,11 +7968,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 232
+ 227
libs/common/src/lib/routes/routes.ts
- 235
+ 230
@@ -7968,7 +7984,7 @@
libs/common/src/lib/routes/routes.ts
- 237
+ 232
@@ -8080,7 +8096,7 @@
libs/common/src/lib/routes/routes.ts
- 110
+ 105
@@ -8102,13 +8118,9 @@
Calculations are based on delayed market data and may not be displayed in real-time.
Berekeningen zijn gebaseerd op vertraagde marktgegevens en worden mogelijk niet in realtime weergegeven.
-
- apps/client/src/app/components/home-market/home-market.html
- 28
-
apps/client/src/app/components/markets/markets.html
- 54
+ 64
@@ -8117,11 +8129,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 200
+ 195
libs/common/src/lib/routes/routes.ts
- 203
+ 198
@@ -8129,7 +8141,7 @@
ETF’s volgen
libs/ui/src/lib/i18n.ts
- 106
+ 107
@@ -8217,7 +8229,7 @@
libs/common/src/lib/routes/routes.ts
- 251
+ 246
@@ -8225,7 +8237,7 @@
Open Source alternatief voor
libs/common/src/lib/routes/routes.ts
- 346
+ 341
@@ -8258,15 +8270,15 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 332
+ 327
libs/common/src/lib/routes/routes.ts
- 335
+ 330
libs/common/src/lib/routes/routes.ts
- 343
+ 338
@@ -8275,11 +8287,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 324
+ 319
libs/common/src/lib/routes/routes.ts
- 327
+ 322
@@ -8504,11 +8516,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 356
+ 351
libs/common/src/lib/routes/routes.ts
- 357
+ 352
@@ -8540,7 +8552,7 @@
Aandelen
apps/client/src/app/components/markets/markets.component.ts
- 51
+ 54
apps/client/src/app/pages/features/features-page.html
@@ -8552,7 +8564,7 @@
Cryptovaluta
apps/client/src/app/components/markets/markets.component.ts
- 52
+ 55
apps/client/src/app/pages/features/features-page.html
@@ -8564,7 +8576,7 @@
Beheer activaprofiel
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 477
+ 478
diff --git a/apps/client/src/locales/messages.pl.xlf b/apps/client/src/locales/messages.pl.xlf
index 83a3a78b3..d07646ecd 100644
--- a/apps/client/src/locales/messages.pl.xlf
+++ b/apps/client/src/locales/messages.pl.xlf
@@ -7,31 +7,31 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 196
+ 191
libs/common/src/lib/routes/routes.ts
- 197
+ 192
libs/common/src/lib/routes/routes.ts
- 202
+ 197
libs/common/src/lib/routes/routes.ts
- 210
+ 205
libs/common/src/lib/routes/routes.ts
- 218
+ 213
libs/common/src/lib/routes/routes.ts
- 226
+ 221
libs/common/src/lib/routes/routes.ts
- 234
+ 229
@@ -40,19 +40,19 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 254
+ 249
libs/common/src/lib/routes/routes.ts
- 255
+ 250
libs/common/src/lib/routes/routes.ts
- 259
+ 254
libs/common/src/lib/routes/routes.ts
- 265
+ 260
@@ -61,11 +61,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 274
+ 269
libs/common/src/lib/routes/routes.ts
- 275
+ 270
@@ -74,11 +74,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 208
+ 203
libs/common/src/lib/routes/routes.ts
- 211
+ 206
@@ -87,11 +87,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 279
+ 274
libs/common/src/lib/routes/routes.ts
- 280
+ 275
@@ -100,11 +100,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 289
+ 284
libs/common/src/lib/routes/routes.ts
- 290
+ 285
@@ -113,11 +113,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 224
+ 219
libs/common/src/lib/routes/routes.ts
- 227
+ 222
@@ -126,11 +126,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 299
+ 294
libs/common/src/lib/routes/routes.ts
- 300
+ 295
@@ -139,31 +139,31 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 304
+ 299
libs/common/src/lib/routes/routes.ts
- 305
+ 300
libs/common/src/lib/routes/routes.ts
- 310
+ 305
libs/common/src/lib/routes/routes.ts
- 318
+ 313
libs/common/src/lib/routes/routes.ts
- 326
+ 321
libs/common/src/lib/routes/routes.ts
- 334
+ 329
libs/common/src/lib/routes/routes.ts
- 342
+ 337
@@ -311,7 +311,7 @@
Saldo Gotówkowe
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 43
+ 54
apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html
@@ -327,7 +327,7 @@
Platforma
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 88
+ 112
apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html
@@ -646,6 +646,14 @@
20
+
+ Unknown
+ Unknown
+
+ libs/ui/src/lib/i18n.ts
+ 88
+
+
Attempts
Próby
@@ -951,7 +959,7 @@
Healthcare
libs/ui/src/lib/i18n.ts
- 96
+ 97
@@ -1067,7 +1075,7 @@
Update Activity
libs/common/src/lib/routes/routes.ts
- 146
+ 141
@@ -1075,7 +1083,7 @@
Technology
libs/ui/src/lib/i18n.ts
- 100
+ 101
@@ -1147,7 +1155,7 @@
Industrials
libs/ui/src/lib/i18n.ts
- 97
+ 98
@@ -1183,7 +1191,7 @@
Consumer Cyclical
libs/ui/src/lib/i18n.ts
- 92
+ 93
@@ -1391,7 +1399,7 @@
Platformy
apps/client/src/app/components/admin-settings/admin-settings.component.html
- 212
+ 221
@@ -1399,7 +1407,7 @@
Tagi
apps/client/src/app/components/admin-settings/admin-settings.component.html
- 218
+ 227
libs/ui/src/lib/tags-selector/tags-selector.component.html
@@ -1407,7 +1415,7 @@
libs/ui/src/lib/tags-selector/tags-selector.component.html
- 25
+ 23
@@ -1543,7 +1551,7 @@
Portfel
apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts
- 139
+ 140
apps/client/src/app/components/header/header.component.html
@@ -1559,7 +1567,7 @@
libs/common/src/lib/routes/routes.ts
- 172
+ 167
@@ -1571,15 +1579,15 @@
apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts
- 151
+ 152
Current Market Mood
Obecny Nastrój Rynkowy
- apps/client/src/app/components/fear-and-greed-index/fear-and-greed-index.component.html
- 12
+ libs/ui/src/lib/fear-and-greed-index/fear-and-greed-index.component.html
+ 22
@@ -1643,7 +1651,7 @@
Zagrożenie
apps/client/src/app/components/markets/markets.component.ts
- 46
+ 58
libs/ui/src/lib/i18n.ts
@@ -1655,7 +1663,7 @@
Zachłanność
apps/client/src/app/components/markets/markets.component.ts
- 47
+ 59
libs/ui/src/lib/i18n.ts
@@ -1667,7 +1675,7 @@
Ostatnie Dni
apps/client/src/app/components/markets/markets.html
- 17
+ 24
@@ -1775,7 +1783,7 @@
Całkowita Kwota
apps/client/src/app/components/investment-chart/investment-chart.component.ts
- 143
+ 144
@@ -1791,7 +1799,7 @@
Stopa Oszczędności
apps/client/src/app/components/investment-chart/investment-chart.component.ts
- 201
+ 193
@@ -1875,7 +1883,7 @@
Energy
libs/ui/src/lib/i18n.ts
- 94
+ 95
@@ -2039,7 +2047,7 @@
Zgłoś Błąd Danych
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 462
+ 463
@@ -2343,7 +2351,7 @@
Consumer Defensive
libs/ui/src/lib/i18n.ts
- 93
+ 94
@@ -2415,7 +2423,7 @@
Utilities
libs/ui/src/lib/i18n.ts
- 101
+ 102
@@ -2675,7 +2683,7 @@
libs/common/src/lib/routes/routes.ts
- 240
+ 235
@@ -2691,7 +2699,7 @@
libs/common/src/lib/routes/routes.ts
- 205
+ 200
@@ -2707,7 +2715,7 @@
libs/common/src/lib/routes/routes.ts
- 213
+ 208
@@ -2723,7 +2731,7 @@
libs/common/src/lib/routes/routes.ts
- 229
+ 224
@@ -2783,7 +2791,7 @@
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 384
+ 395
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
@@ -2839,7 +2847,7 @@
Financial Planning
libs/ui/src/lib/i18n.ts
- 108
+ 109
@@ -2887,7 +2895,7 @@
Dane Rynkowe
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 406
+ 417
libs/common/src/lib/routes/routes.ts
@@ -2925,6 +2933,10 @@
Overview
Przegląd
+
+ apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
+ 41
+
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
114
@@ -2951,11 +2963,11 @@
libs/common/src/lib/routes/routes.ts
- 113
+ 108
libs/common/src/lib/routes/routes.ts
- 190
+ 185
@@ -3067,7 +3079,7 @@
libs/common/src/lib/routes/routes.ts
- 245
+ 240
@@ -3131,7 +3143,15 @@
libs/common/src/lib/routes/routes.ts
- 271
+ 266
+
+
+
+ Invalid API key
+ Invalid API key
+
+ apps/client/src/app/components/admin-settings/admin-settings.component.html
+ 112
@@ -3151,7 +3171,7 @@
libs/common/src/lib/routes/routes.ts
- 276
+ 271
@@ -3315,7 +3335,7 @@
Inwestycje
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 100
+ 126
apps/client/src/app/components/home-holdings/home-holdings.html
@@ -3335,7 +3355,7 @@
libs/common/src/lib/routes/routes.ts
- 187
+ 182
libs/ui/src/lib/assistant/assistant.html
@@ -3359,7 +3379,7 @@
libs/common/src/lib/routes/routes.ts
- 105
+ 100
@@ -3377,10 +3397,6 @@
apps/client/src/app/components/header/header.component.html
408
-
- apps/client/src/app/components/home-market/home-market.html
- 2
-
apps/client/src/app/components/markets/markets.html
2
@@ -3399,15 +3415,11 @@
libs/common/src/lib/routes/routes.ts
- 100
-
-
- libs/common/src/lib/routes/routes.ts
- 281
+ 276
libs/common/src/lib/routes/routes.ts
- 329
+ 324
@@ -3543,7 +3555,7 @@
Basic Materials
libs/ui/src/lib/i18n.ts
- 90
+ 91
@@ -3743,7 +3755,7 @@
Add Activity
libs/common/src/lib/routes/routes.ts
- 139
+ 134
@@ -3887,11 +3899,11 @@
Aktywności
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 84
+ 102
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 111
+ 137
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
@@ -3915,7 +3927,7 @@
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 350
+ 361
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
@@ -3927,7 +3939,7 @@
libs/common/src/lib/routes/routes.ts
- 149
+ 144
libs/ui/src/lib/accounts-table/accounts-table.component.html
@@ -4195,7 +4207,7 @@
libs/common/src/lib/routes/routes.ts
- 154
+ 149
@@ -4371,7 +4383,7 @@
libs/common/src/lib/routes/routes.ts
- 159
+ 154
@@ -4387,7 +4399,7 @@
Dywidenda
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 79
+ 90
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
@@ -4539,7 +4551,7 @@
libs/common/src/lib/routes/routes.ts
- 291
+ 286
@@ -4787,7 +4799,7 @@
libs/common/src/lib/routes/routes.ts
- 301
+ 296
@@ -4819,7 +4831,7 @@
libs/common/src/lib/routes/routes.ts
- 349
+ 344
@@ -4828,11 +4840,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 340
+ 335
libs/common/src/lib/routes/routes.ts
- 344
+ 339
@@ -5072,7 +5084,7 @@
Stock Tracking
libs/ui/src/lib/i18n.ts
- 111
+ 112
@@ -5096,7 +5108,7 @@
Web
libs/ui/src/lib/i18n.ts
- 120
+ 121
@@ -5140,7 +5152,7 @@
libs/common/src/lib/routes/routes.ts
- 352
+ 347
@@ -5272,7 +5284,7 @@
Profile aktywów
apps/client/src/app/components/admin-settings/admin-settings.component.html
- 123
+ 128
libs/ui/src/lib/assistant/assistant.html
@@ -5372,7 +5384,7 @@
Odsetki
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 67
+ 78
apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html
@@ -5624,7 +5636,7 @@
libs/ui/src/lib/i18n.ts
- 98
+ 99
libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts
@@ -5836,7 +5848,7 @@
Kapitał
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 55
+ 66
libs/ui/src/lib/i18n.ts
@@ -5860,7 +5872,7 @@
libs/ui/src/lib/i18n.ts
- 99
+ 100
@@ -5948,7 +5960,7 @@
Communication Services
libs/ui/src/lib/i18n.ts
- 91
+ 92
@@ -6108,7 +6120,7 @@
Salda Gotówkowe
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 143
+ 169
@@ -6248,7 +6260,7 @@
Zamknij pozycję
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 449
+ 450
@@ -6452,7 +6464,7 @@
libs/common/src/lib/routes/routes.ts
- 260
+ 255
@@ -6464,7 +6476,7 @@
libs/common/src/lib/routes/routes.ts
- 268
+ 263
@@ -6473,11 +6485,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 263
+ 258
libs/common/src/lib/routes/routes.ts
- 266
+ 261
@@ -6523,6 +6535,10 @@
Activity
Aktywność
+
+ apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
+ 100
+
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
231
@@ -6597,7 +6613,7 @@
Internacjonalizacja
libs/common/src/lib/routes/routes.ts
- 119
+ 114
@@ -6661,7 +6677,7 @@
Clone Activity
libs/common/src/lib/routes/routes.ts
- 134
+ 129
@@ -6741,7 +6757,7 @@
Budżetowanie
libs/ui/src/lib/i18n.ts
- 104
+ 105
@@ -6817,7 +6833,7 @@
Biuro Rodzinne
libs/ui/src/lib/i18n.ts
- 107
+ 108
@@ -6897,7 +6913,7 @@
Zarządzanie Majątkiem
libs/ui/src/lib/i18n.ts
- 113
+ 114
@@ -7093,7 +7109,7 @@
Tax Reporting
libs/ui/src/lib/i18n.ts
- 112
+ 113
@@ -7241,7 +7257,7 @@
Financial Services
libs/ui/src/lib/i18n.ts
- 95
+ 96
@@ -7325,7 +7341,7 @@
Dividend Tracking
libs/ui/src/lib/i18n.ts
- 105
+ 106
@@ -7369,7 +7385,7 @@
Skonfiguruj klucz API
apps/client/src/app/components/admin-settings/admin-settings.component.html
- 188
+ 197
@@ -7385,7 +7401,7 @@
Investment Research
libs/ui/src/lib/i18n.ts
- 109
+ 110
@@ -7409,7 +7425,7 @@
libs/common/src/lib/routes/routes.ts
- 313
+ 308
@@ -7425,7 +7441,7 @@
libs/common/src/lib/routes/routes.ts
- 321
+ 316
@@ -7434,11 +7450,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 316
+ 311
libs/common/src/lib/routes/routes.ts
- 319
+ 314
@@ -7447,11 +7463,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 308
+ 303
libs/common/src/lib/routes/routes.ts
- 311
+ 306
@@ -7475,7 +7491,7 @@
z
apps/client/src/app/components/admin-settings/admin-settings.component.html
- 152
+ 157
@@ -7483,7 +7499,7 @@
codzienne żądania
apps/client/src/app/components/admin-settings/admin-settings.component.html
- 154
+ 159
@@ -7491,7 +7507,7 @@
Usuń klucz API
apps/client/src/app/components/admin-settings/admin-settings.component.html
- 178
+ 187
@@ -7499,7 +7515,7 @@
Czy na pewno chcesz usunąć klucz API??
apps/client/src/app/components/admin-settings/admin-settings.component.ts
- 143
+ 144
@@ -7667,7 +7683,7 @@
Net Worth Tracking
libs/ui/src/lib/i18n.ts
- 110
+ 111
@@ -7675,7 +7691,7 @@
Wprowadź swój klucz API Ghostfolio.
apps/client/src/app/components/admin-settings/admin-settings.component.ts
- 162
+ 163
@@ -7787,7 +7803,7 @@
Stwórz
libs/ui/src/lib/tags-selector/tags-selector.component.html
- 64
+ 62
@@ -7952,11 +7968,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 232
+ 227
libs/common/src/lib/routes/routes.ts
- 235
+ 230
@@ -7968,7 +7984,7 @@
libs/common/src/lib/routes/routes.ts
- 237
+ 232
@@ -8080,7 +8096,7 @@
libs/common/src/lib/routes/routes.ts
- 110
+ 105
@@ -8102,13 +8118,9 @@
Calculations are based on delayed market data and may not be displayed in real-time.
Obliczenia opierają się na opóźnionych danych rynkowych i mogą nie być wyświetlane w czasie rzeczywistym.
-
- apps/client/src/app/components/home-market/home-market.html
- 28
-
apps/client/src/app/components/markets/markets.html
- 54
+ 64
@@ -8117,11 +8129,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 200
+ 195
libs/common/src/lib/routes/routes.ts
- 203
+ 198
@@ -8129,7 +8141,7 @@
ETF Tracking
libs/ui/src/lib/i18n.ts
- 106
+ 107
@@ -8217,7 +8229,7 @@
libs/common/src/lib/routes/routes.ts
- 251
+ 246
@@ -8225,7 +8237,7 @@
Alternatywa Open Source dla
libs/common/src/lib/routes/routes.ts
- 346
+ 341
@@ -8258,15 +8270,15 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 332
+ 327
libs/common/src/lib/routes/routes.ts
- 335
+ 330
libs/common/src/lib/routes/routes.ts
- 343
+ 338
@@ -8275,11 +8287,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 324
+ 319
libs/common/src/lib/routes/routes.ts
- 327
+ 322
@@ -8504,11 +8516,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 356
+ 351
libs/common/src/lib/routes/routes.ts
- 357
+ 352
@@ -8540,7 +8552,7 @@
Akcje
apps/client/src/app/components/markets/markets.component.ts
- 51
+ 54
apps/client/src/app/pages/features/features-page.html
@@ -8552,7 +8564,7 @@
Kryptowaluty
apps/client/src/app/components/markets/markets.component.ts
- 52
+ 55
apps/client/src/app/pages/features/features-page.html
@@ -8564,7 +8576,7 @@
Zarządzaj profilem aktywów
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 477
+ 478
diff --git a/apps/client/src/locales/messages.pt.xlf b/apps/client/src/locales/messages.pt.xlf
index 9ab235194..8aa2ecf93 100644
--- a/apps/client/src/locales/messages.pt.xlf
+++ b/apps/client/src/locales/messages.pt.xlf
@@ -102,7 +102,7 @@
Plataforma
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 88
+ 112
apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html
@@ -230,7 +230,7 @@
Saldo disponível em dinheiro
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 43
+ 54
apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html
@@ -405,6 +405,14 @@
20
+
+ Unknown
+ Unknown
+
+ libs/ui/src/lib/i18n.ts
+ 88
+
+
Attempts
Tentativas
@@ -462,7 +470,7 @@
Perfil de Ativos
apps/client/src/app/components/admin-settings/admin-settings.component.html
- 123
+ 128
libs/ui/src/lib/assistant/assistant.html
@@ -826,7 +834,7 @@
Portefólio
apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts
- 139
+ 140
apps/client/src/app/components/header/header.component.html
@@ -842,7 +850,7 @@
libs/common/src/lib/routes/routes.ts
- 172
+ 167
@@ -854,15 +862,15 @@
apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts
- 151
+ 152
Current Market Mood
Tom do Mercado Atual
- apps/client/src/app/components/fear-and-greed-index/fear-and-greed-index.component.html
- 12
+ libs/ui/src/lib/fear-and-greed-index/fear-and-greed-index.component.html
+ 22
@@ -926,7 +934,7 @@
Medo
apps/client/src/app/components/markets/markets.component.ts
- 46
+ 58
libs/ui/src/lib/i18n.ts
@@ -938,7 +946,7 @@
Ganância
apps/client/src/app/components/markets/markets.component.ts
- 47
+ 59
libs/ui/src/lib/i18n.ts
@@ -950,7 +958,7 @@
Últimos Dias
apps/client/src/app/components/markets/markets.html
- 17
+ 24
@@ -966,7 +974,7 @@
Valor Total
apps/client/src/app/components/investment-chart/investment-chart.component.ts
- 143
+ 144
@@ -982,7 +990,7 @@
Taxa de Poupança
apps/client/src/app/components/investment-chart/investment-chart.component.ts
- 201
+ 193
@@ -1066,7 +1074,7 @@
Energy
libs/ui/src/lib/i18n.ts
- 94
+ 95
@@ -1282,7 +1290,7 @@
Marcadores
apps/client/src/app/components/admin-settings/admin-settings.component.html
- 218
+ 227
libs/ui/src/lib/tags-selector/tags-selector.component.html
@@ -1290,7 +1298,7 @@
libs/ui/src/lib/tags-selector/tags-selector.component.html
- 25
+ 23
@@ -1298,7 +1306,7 @@
Dados do Relatório com Problema
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 462
+ 463
@@ -1482,7 +1490,7 @@
libs/common/src/lib/routes/routes.ts
- 240
+ 235
@@ -1498,7 +1506,7 @@
libs/common/src/lib/routes/routes.ts
- 229
+ 224
@@ -1546,7 +1554,7 @@
Consumer Defensive
libs/ui/src/lib/i18n.ts
- 93
+ 94
@@ -1606,7 +1614,7 @@
Utilities
libs/ui/src/lib/i18n.ts
- 101
+ 102
@@ -1822,7 +1830,7 @@
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 384
+ 395
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
@@ -1870,7 +1878,7 @@
Financial Planning
libs/ui/src/lib/i18n.ts
- 108
+ 109
@@ -1998,7 +2006,7 @@
libs/common/src/lib/routes/routes.ts
- 245
+ 240
@@ -2042,7 +2050,15 @@
libs/common/src/lib/routes/routes.ts
- 271
+ 266
+
+
+
+ Invalid API key
+ Invalid API key
+
+ apps/client/src/app/components/admin-settings/admin-settings.component.html
+ 112
@@ -2062,12 +2078,16 @@
libs/common/src/lib/routes/routes.ts
- 276
+ 271
Overview
Visão geral
+
+ apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
+ 41
+
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
114
@@ -2094,11 +2114,11 @@
libs/common/src/lib/routes/routes.ts
- 113
+ 108
libs/common/src/lib/routes/routes.ts
- 190
+ 185
@@ -2116,10 +2136,6 @@
apps/client/src/app/components/header/header.component.html
408
-
- apps/client/src/app/components/home-market/home-market.html
- 2
-
apps/client/src/app/components/markets/markets.html
2
@@ -2138,15 +2154,11 @@
libs/common/src/lib/routes/routes.ts
- 100
-
-
- libs/common/src/lib/routes/routes.ts
- 281
+ 276
libs/common/src/lib/routes/routes.ts
- 329
+ 324
@@ -2154,11 +2166,11 @@
Atividades
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 84
+ 102
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 111
+ 137
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
@@ -2182,7 +2194,7 @@
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 350
+ 361
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
@@ -2194,7 +2206,7 @@
libs/common/src/lib/routes/routes.ts
- 149
+ 144
libs/ui/src/lib/accounts-table/accounts-table.component.html
@@ -2266,7 +2278,7 @@
Consumer Cyclical
libs/ui/src/lib/i18n.ts
- 92
+ 93
@@ -2378,7 +2390,7 @@
libs/common/src/lib/routes/routes.ts
- 154
+ 149
@@ -2530,7 +2542,7 @@
libs/common/src/lib/routes/routes.ts
- 159
+ 154
@@ -2594,7 +2606,7 @@
Posições
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 100
+ 126
apps/client/src/app/components/home-holdings/home-holdings.html
@@ -2614,7 +2626,7 @@
libs/common/src/lib/routes/routes.ts
- 187
+ 182
libs/ui/src/lib/assistant/assistant.html
@@ -2650,7 +2662,7 @@
libs/common/src/lib/routes/routes.ts
- 291
+ 286
@@ -2738,7 +2750,7 @@
libs/common/src/lib/routes/routes.ts
- 301
+ 296
@@ -2802,7 +2814,7 @@
libs/common/src/lib/routes/routes.ts
- 352
+ 347
@@ -2954,7 +2966,7 @@
Juros
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 67
+ 78
apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html
@@ -3062,7 +3074,7 @@
libs/ui/src/lib/i18n.ts
- 98
+ 99
libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts
@@ -3134,7 +3146,7 @@
Ações
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 55
+ 66
libs/ui/src/lib/i18n.ts
@@ -3158,7 +3170,7 @@
libs/ui/src/lib/i18n.ts
- 99
+ 100
@@ -3246,7 +3258,7 @@
Communication Services
libs/ui/src/lib/i18n.ts
- 91
+ 92
@@ -3386,7 +3398,7 @@
Dados de Mercado
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 406
+ 417
libs/common/src/lib/routes/routes.ts
@@ -3410,7 +3422,7 @@
libs/common/src/lib/routes/routes.ts
- 105
+ 100
@@ -3450,7 +3462,7 @@
Dividendos
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 79
+ 90
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
@@ -4178,7 +4190,7 @@
Plataformas
apps/client/src/app/components/admin-settings/admin-settings.component.html
- 212
+ 221
@@ -4386,7 +4398,7 @@
libs/common/src/lib/routes/routes.ts
- 205
+ 200
@@ -4402,7 +4414,7 @@
libs/common/src/lib/routes/routes.ts
- 213
+ 208
@@ -4522,7 +4534,7 @@
Update Activity
libs/common/src/lib/routes/routes.ts
- 146
+ 141
@@ -4530,7 +4542,7 @@
Technology
libs/ui/src/lib/i18n.ts
- 100
+ 101
@@ -4574,7 +4586,7 @@
libs/common/src/lib/routes/routes.ts
- 349
+ 344
@@ -4750,7 +4762,7 @@
Web
libs/ui/src/lib/i18n.ts
- 120
+ 121
@@ -5218,7 +5230,7 @@
Basic Materials
libs/ui/src/lib/i18n.ts
- 90
+ 91
@@ -5402,7 +5414,7 @@
Add Activity
libs/common/src/lib/routes/routes.ts
- 139
+ 134
@@ -5451,19 +5463,19 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 254
+ 249
libs/common/src/lib/routes/routes.ts
- 255
+ 250
libs/common/src/lib/routes/routes.ts
- 259
+ 254
libs/common/src/lib/routes/routes.ts
- 265
+ 260
@@ -5472,11 +5484,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 274
+ 269
libs/common/src/lib/routes/routes.ts
- 275
+ 270
@@ -5485,31 +5497,31 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 196
+ 191
libs/common/src/lib/routes/routes.ts
- 197
+ 192
libs/common/src/lib/routes/routes.ts
- 202
+ 197
libs/common/src/lib/routes/routes.ts
- 210
+ 205
libs/common/src/lib/routes/routes.ts
- 218
+ 213
libs/common/src/lib/routes/routes.ts
- 226
+ 221
libs/common/src/lib/routes/routes.ts
- 234
+ 229
@@ -5518,11 +5530,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 224
+ 219
libs/common/src/lib/routes/routes.ts
- 227
+ 222
@@ -5531,11 +5543,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 208
+ 203
libs/common/src/lib/routes/routes.ts
- 211
+ 206
@@ -5544,11 +5556,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 279
+ 274
libs/common/src/lib/routes/routes.ts
- 280
+ 275
@@ -5557,11 +5569,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 289
+ 284
libs/common/src/lib/routes/routes.ts
- 290
+ 285
@@ -5570,11 +5582,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 299
+ 294
libs/common/src/lib/routes/routes.ts
- 300
+ 295
@@ -5583,31 +5595,31 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 304
+ 299
libs/common/src/lib/routes/routes.ts
- 305
+ 300
libs/common/src/lib/routes/routes.ts
- 310
+ 305
libs/common/src/lib/routes/routes.ts
- 318
+ 313
libs/common/src/lib/routes/routes.ts
- 326
+ 321
libs/common/src/lib/routes/routes.ts
- 334
+ 329
libs/common/src/lib/routes/routes.ts
- 342
+ 337
@@ -5672,11 +5684,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 340
+ 335
libs/common/src/lib/routes/routes.ts
- 344
+ 339
@@ -5684,7 +5696,7 @@
Stock Tracking
libs/ui/src/lib/i18n.ts
- 111
+ 112
@@ -5972,7 +5984,7 @@
Industrials
libs/ui/src/lib/i18n.ts
- 97
+ 98
@@ -6068,7 +6080,7 @@
Healthcare
libs/ui/src/lib/i18n.ts
- 96
+ 97
@@ -6108,7 +6120,7 @@
Saldos de caixa
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 143
+ 169
@@ -6248,7 +6260,7 @@
Close Holding
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 449
+ 450
@@ -6452,7 +6464,7 @@
libs/common/src/lib/routes/routes.ts
- 260
+ 255
@@ -6464,7 +6476,7 @@
libs/common/src/lib/routes/routes.ts
- 268
+ 263
@@ -6473,11 +6485,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 263
+ 258
libs/common/src/lib/routes/routes.ts
- 266
+ 261
@@ -6523,6 +6535,10 @@
Activity
Atividade
+
+ apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
+ 100
+
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
231
@@ -6597,7 +6613,7 @@
Internacionalização
libs/common/src/lib/routes/routes.ts
- 119
+ 114
@@ -6661,7 +6677,7 @@
Clone Activity
libs/common/src/lib/routes/routes.ts
- 134
+ 129
@@ -6741,7 +6757,7 @@
Orçamento
libs/ui/src/lib/i18n.ts
- 104
+ 105
@@ -6817,7 +6833,7 @@
Escritório Familiar
libs/ui/src/lib/i18n.ts
- 107
+ 108
@@ -6897,7 +6913,7 @@
Gestão de patrimônio
libs/ui/src/lib/i18n.ts
- 113
+ 114
@@ -7093,7 +7109,7 @@
Tax Reporting
libs/ui/src/lib/i18n.ts
- 112
+ 113
@@ -7241,7 +7257,7 @@
Financial Services
libs/ui/src/lib/i18n.ts
- 95
+ 96
@@ -7325,7 +7341,7 @@
Dividend Tracking
libs/ui/src/lib/i18n.ts
- 105
+ 106
@@ -7369,7 +7385,7 @@
Definir chave de API
apps/client/src/app/components/admin-settings/admin-settings.component.html
- 188
+ 197
@@ -7385,7 +7401,7 @@
Investment Research
libs/ui/src/lib/i18n.ts
- 109
+ 110
@@ -7409,7 +7425,7 @@
libs/common/src/lib/routes/routes.ts
- 313
+ 308
@@ -7425,7 +7441,7 @@
libs/common/src/lib/routes/routes.ts
- 321
+ 316
@@ -7434,11 +7450,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 316
+ 311
libs/common/src/lib/routes/routes.ts
- 319
+ 314
@@ -7447,11 +7463,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 308
+ 303
libs/common/src/lib/routes/routes.ts
- 311
+ 306
@@ -7475,7 +7491,7 @@
de
apps/client/src/app/components/admin-settings/admin-settings.component.html
- 152
+ 157
@@ -7483,7 +7499,7 @@
solicitações diárias
apps/client/src/app/components/admin-settings/admin-settings.component.html
- 154
+ 159
@@ -7491,7 +7507,7 @@
Remover chave de API
apps/client/src/app/components/admin-settings/admin-settings.component.html
- 178
+ 187
@@ -7499,7 +7515,7 @@
Você realmente deseja excluir a chave de API?
apps/client/src/app/components/admin-settings/admin-settings.component.ts
- 143
+ 144
@@ -7667,7 +7683,7 @@
Net Worth Tracking
libs/ui/src/lib/i18n.ts
- 110
+ 111
@@ -7675,7 +7691,7 @@
Please enter your Ghostfolio API key.
apps/client/src/app/components/admin-settings/admin-settings.component.ts
- 162
+ 163
@@ -7787,7 +7803,7 @@
Criar
libs/ui/src/lib/tags-selector/tags-selector.component.html
- 64
+ 62
@@ -7952,11 +7968,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 232
+ 227
libs/common/src/lib/routes/routes.ts
- 235
+ 230
@@ -7968,7 +7984,7 @@
libs/common/src/lib/routes/routes.ts
- 237
+ 232
@@ -8080,7 +8096,7 @@
libs/common/src/lib/routes/routes.ts
- 110
+ 105
@@ -8102,13 +8118,9 @@
Calculations are based on delayed market data and may not be displayed in real-time.
Calculations are based on delayed market data and may not be displayed in real-time.
-
- apps/client/src/app/components/home-market/home-market.html
- 28
-
apps/client/src/app/components/markets/markets.html
- 54
+ 64
@@ -8117,11 +8129,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 200
+ 195
libs/common/src/lib/routes/routes.ts
- 203
+ 198
@@ -8129,7 +8141,7 @@
ETF Tracking
libs/ui/src/lib/i18n.ts
- 106
+ 107
@@ -8217,7 +8229,7 @@
libs/common/src/lib/routes/routes.ts
- 251
+ 246
@@ -8225,7 +8237,7 @@
Alternativa de software livre ao
libs/common/src/lib/routes/routes.ts
- 346
+ 341
@@ -8258,15 +8270,15 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 332
+ 327
libs/common/src/lib/routes/routes.ts
- 335
+ 330
libs/common/src/lib/routes/routes.ts
- 343
+ 338
@@ -8275,11 +8287,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 324
+ 319
libs/common/src/lib/routes/routes.ts
- 327
+ 322
@@ -8504,11 +8516,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 356
+ 351
libs/common/src/lib/routes/routes.ts
- 357
+ 352
@@ -8540,7 +8552,7 @@
Stocks
apps/client/src/app/components/markets/markets.component.ts
- 51
+ 54
apps/client/src/app/pages/features/features-page.html
@@ -8552,7 +8564,7 @@
Criptomoedas
apps/client/src/app/components/markets/markets.component.ts
- 52
+ 55
apps/client/src/app/pages/features/features-page.html
@@ -8564,7 +8576,7 @@
Gerenciar perfil de ativos
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 477
+ 478
diff --git a/apps/client/src/locales/messages.tr.xlf b/apps/client/src/locales/messages.tr.xlf
index 1415f480d..8630fea58 100644
--- a/apps/client/src/locales/messages.tr.xlf
+++ b/apps/client/src/locales/messages.tr.xlf
@@ -7,31 +7,31 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 196
+ 191
libs/common/src/lib/routes/routes.ts
- 197
+ 192
libs/common/src/lib/routes/routes.ts
- 202
+ 197
libs/common/src/lib/routes/routes.ts
- 210
+ 205
libs/common/src/lib/routes/routes.ts
- 218
+ 213
libs/common/src/lib/routes/routes.ts
- 226
+ 221
libs/common/src/lib/routes/routes.ts
- 234
+ 229
@@ -40,19 +40,19 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 254
+ 249
libs/common/src/lib/routes/routes.ts
- 255
+ 250
libs/common/src/lib/routes/routes.ts
- 259
+ 254
libs/common/src/lib/routes/routes.ts
- 265
+ 260
@@ -61,11 +61,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 274
+ 269
libs/common/src/lib/routes/routes.ts
- 275
+ 270
@@ -74,11 +74,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 208
+ 203
libs/common/src/lib/routes/routes.ts
- 211
+ 206
@@ -87,11 +87,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 279
+ 274
libs/common/src/lib/routes/routes.ts
- 280
+ 275
@@ -100,11 +100,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 289
+ 284
libs/common/src/lib/routes/routes.ts
- 290
+ 285
@@ -113,11 +113,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 224
+ 219
libs/common/src/lib/routes/routes.ts
- 227
+ 222
@@ -126,11 +126,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 299
+ 294
libs/common/src/lib/routes/routes.ts
- 300
+ 295
@@ -139,31 +139,31 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 304
+ 299
libs/common/src/lib/routes/routes.ts
- 305
+ 300
libs/common/src/lib/routes/routes.ts
- 310
+ 305
libs/common/src/lib/routes/routes.ts
- 318
+ 313
libs/common/src/lib/routes/routes.ts
- 326
+ 321
libs/common/src/lib/routes/routes.ts
- 334
+ 329
libs/common/src/lib/routes/routes.ts
- 342
+ 337
@@ -283,7 +283,7 @@
Nakit Bakiye
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 43
+ 54
apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html
@@ -299,7 +299,7 @@
Platform
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 88
+ 112
apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html
@@ -586,6 +586,14 @@
20
+
+ Unknown
+ Unknown
+
+ libs/ui/src/lib/i18n.ts
+ 88
+
+
Attempts
Deneme
@@ -643,7 +651,7 @@
Varlık Profili
apps/client/src/app/components/admin-settings/admin-settings.component.html
- 123
+ 128
libs/ui/src/lib/assistant/assistant.html
@@ -987,7 +995,7 @@
Update Activity
libs/common/src/lib/routes/routes.ts
- 146
+ 141
@@ -995,7 +1003,7 @@
Technology
libs/ui/src/lib/i18n.ts
- 100
+ 101
@@ -1079,7 +1087,7 @@
Consumer Cyclical
libs/ui/src/lib/i18n.ts
- 92
+ 93
@@ -1127,7 +1135,7 @@
Etiketler
apps/client/src/app/components/admin-settings/admin-settings.component.html
- 218
+ 227
libs/ui/src/lib/tags-selector/tags-selector.component.html
@@ -1135,7 +1143,7 @@
libs/ui/src/lib/tags-selector/tags-selector.component.html
- 25
+ 23
@@ -1287,7 +1295,7 @@
Platformlar
apps/client/src/app/components/admin-settings/admin-settings.component.html
- 212
+ 221
@@ -1391,7 +1399,7 @@
Portföy
apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts
- 139
+ 140
apps/client/src/app/components/header/header.component.html
@@ -1407,7 +1415,7 @@
libs/common/src/lib/routes/routes.ts
- 172
+ 167
@@ -1419,15 +1427,15 @@
apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts
- 151
+ 152
Current Market Mood
Piyasa Psikolojisi
- apps/client/src/app/components/fear-and-greed-index/fear-and-greed-index.component.html
- 12
+ libs/ui/src/lib/fear-and-greed-index/fear-and-greed-index.component.html
+ 22
@@ -1491,7 +1499,7 @@
Korku
apps/client/src/app/components/markets/markets.component.ts
- 46
+ 58
libs/ui/src/lib/i18n.ts
@@ -1503,7 +1511,7 @@
Açgözlülük
apps/client/src/app/components/markets/markets.component.ts
- 47
+ 59
libs/ui/src/lib/i18n.ts
@@ -1515,7 +1523,7 @@
Son Gün
apps/client/src/app/components/markets/markets.html
- 17
+ 24
@@ -1623,7 +1631,7 @@
Toplam Tutar
apps/client/src/app/components/investment-chart/investment-chart.component.ts
- 143
+ 144
@@ -1639,7 +1647,7 @@
Tasarruf Oranı
apps/client/src/app/components/investment-chart/investment-chart.component.ts
- 201
+ 193
@@ -1723,7 +1731,7 @@
Energy
libs/ui/src/lib/i18n.ts
- 94
+ 95
@@ -1887,7 +1895,7 @@
Rapor Veri Sorunu
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 462
+ 463
@@ -2203,7 +2211,7 @@
libs/common/src/lib/routes/routes.ts
- 240
+ 235
@@ -2219,7 +2227,7 @@
libs/common/src/lib/routes/routes.ts
- 205
+ 200
@@ -2235,7 +2243,7 @@
libs/common/src/lib/routes/routes.ts
- 213
+ 208
@@ -2251,7 +2259,7 @@
libs/common/src/lib/routes/routes.ts
- 229
+ 224
@@ -2311,7 +2319,7 @@
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 384
+ 395
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
@@ -2359,7 +2367,7 @@
Financial Planning
libs/ui/src/lib/i18n.ts
- 108
+ 109
@@ -2383,7 +2391,7 @@
Piyasa Verileri
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 406
+ 417
libs/common/src/lib/routes/routes.ts
@@ -2421,6 +2429,10 @@
Overview
Özet
+
+ apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
+ 41
+
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
114
@@ -2447,11 +2459,11 @@
libs/common/src/lib/routes/routes.ts
- 113
+ 108
libs/common/src/lib/routes/routes.ts
- 190
+ 185
@@ -2563,7 +2575,7 @@
libs/common/src/lib/routes/routes.ts
- 245
+ 240
@@ -2627,7 +2639,15 @@
libs/common/src/lib/routes/routes.ts
- 271
+ 266
+
+
+
+ Invalid API key
+ Invalid API key
+
+ apps/client/src/app/components/admin-settings/admin-settings.component.html
+ 112
@@ -2647,7 +2667,7 @@
libs/common/src/lib/routes/routes.ts
- 276
+ 271
@@ -2823,7 +2843,7 @@
Varlıklar
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 100
+ 126
apps/client/src/app/components/home-holdings/home-holdings.html
@@ -2843,7 +2863,7 @@
libs/common/src/lib/routes/routes.ts
- 187
+ 182
libs/ui/src/lib/assistant/assistant.html
@@ -2867,7 +2887,7 @@
libs/common/src/lib/routes/routes.ts
- 105
+ 100
@@ -2885,10 +2905,6 @@
apps/client/src/app/components/header/header.component.html
408
-
- apps/client/src/app/components/home-market/home-market.html
- 2
-
apps/client/src/app/components/markets/markets.html
2
@@ -2907,15 +2923,11 @@
libs/common/src/lib/routes/routes.ts
- 100
-
-
- libs/common/src/lib/routes/routes.ts
- 281
+ 276
libs/common/src/lib/routes/routes.ts
- 329
+ 324
@@ -3027,7 +3039,7 @@
Basic Materials
libs/ui/src/lib/i18n.ts
- 90
+ 91
@@ -3227,7 +3239,7 @@
Add Activity
libs/common/src/lib/routes/routes.ts
- 139
+ 134
@@ -3311,11 +3323,11 @@
İşlemler
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 84
+ 102
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 111
+ 137
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
@@ -3339,7 +3351,7 @@
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 350
+ 361
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
@@ -3351,7 +3363,7 @@
libs/common/src/lib/routes/routes.ts
- 149
+ 144
libs/ui/src/lib/accounts-table/accounts-table.component.html
@@ -3603,7 +3615,7 @@
libs/common/src/lib/routes/routes.ts
- 154
+ 149
@@ -3779,7 +3791,7 @@
libs/common/src/lib/routes/routes.ts
- 159
+ 154
@@ -3795,7 +3807,7 @@
Temettü
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 79
+ 90
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
@@ -3947,7 +3959,7 @@
libs/common/src/lib/routes/routes.ts
- 291
+ 286
@@ -4195,7 +4207,7 @@
libs/common/src/lib/routes/routes.ts
- 301
+ 296
@@ -4247,7 +4259,7 @@
libs/common/src/lib/routes/routes.ts
- 349
+ 344
@@ -4256,11 +4268,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 340
+ 335
libs/common/src/lib/routes/routes.ts
- 344
+ 339
@@ -4492,7 +4504,7 @@
Stock Tracking
libs/ui/src/lib/i18n.ts
- 111
+ 112
@@ -4516,7 +4528,7 @@
Web
libs/ui/src/lib/i18n.ts
- 120
+ 121
@@ -4560,7 +4572,7 @@
libs/common/src/lib/routes/routes.ts
- 352
+ 347
@@ -4636,7 +4648,7 @@
Consumer Defensive
libs/ui/src/lib/i18n.ts
- 93
+ 94
@@ -4708,7 +4720,7 @@
Utilities
libs/ui/src/lib/i18n.ts
- 101
+ 102
@@ -5060,7 +5072,7 @@
Faiz
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 67
+ 78
apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html
@@ -5312,7 +5324,7 @@
libs/ui/src/lib/i18n.ts
- 98
+ 99
libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts
@@ -5508,7 +5520,7 @@
Menkul Kıymet
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 55
+ 66
libs/ui/src/lib/i18n.ts
@@ -5532,7 +5544,7 @@
libs/ui/src/lib/i18n.ts
- 99
+ 100
@@ -5620,7 +5632,7 @@
Communication Services
libs/ui/src/lib/i18n.ts
- 91
+ 92
@@ -5972,7 +5984,7 @@
Industrials
libs/ui/src/lib/i18n.ts
- 97
+ 98
@@ -6068,7 +6080,7 @@
Healthcare
libs/ui/src/lib/i18n.ts
- 96
+ 97
@@ -6108,7 +6120,7 @@
Nakit Bakiyeleri
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 143
+ 169
@@ -6248,7 +6260,7 @@
Close Holding
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 449
+ 450
@@ -6452,7 +6464,7 @@
libs/common/src/lib/routes/routes.ts
- 260
+ 255
@@ -6464,7 +6476,7 @@
libs/common/src/lib/routes/routes.ts
- 268
+ 263
@@ -6473,11 +6485,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 263
+ 258
libs/common/src/lib/routes/routes.ts
- 266
+ 261
@@ -6523,6 +6535,10 @@
Activity
Etkinlik
+
+ apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
+ 100
+
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
231
@@ -6597,7 +6613,7 @@
İnternasyonalizasyon
libs/common/src/lib/routes/routes.ts
- 119
+ 114
@@ -6661,7 +6677,7 @@
Clone Activity
libs/common/src/lib/routes/routes.ts
- 134
+ 129
@@ -6741,7 +6757,7 @@
Bütçeleme
libs/ui/src/lib/i18n.ts
- 104
+ 105
@@ -6817,7 +6833,7 @@
Aile Ofisi
libs/ui/src/lib/i18n.ts
- 107
+ 108
@@ -6897,7 +6913,7 @@
Zenginlik Yönetimi
libs/ui/src/lib/i18n.ts
- 113
+ 114
@@ -7093,7 +7109,7 @@
Tax Reporting
libs/ui/src/lib/i18n.ts
- 112
+ 113
@@ -7241,7 +7257,7 @@
Financial Services
libs/ui/src/lib/i18n.ts
- 95
+ 96
@@ -7325,7 +7341,7 @@
Dividend Tracking
libs/ui/src/lib/i18n.ts
- 105
+ 106
@@ -7369,7 +7385,7 @@
API anahtarını ayarla
apps/client/src/app/components/admin-settings/admin-settings.component.html
- 188
+ 197
@@ -7385,7 +7401,7 @@
Investment Research
libs/ui/src/lib/i18n.ts
- 109
+ 110
@@ -7409,7 +7425,7 @@
libs/common/src/lib/routes/routes.ts
- 313
+ 308
@@ -7425,7 +7441,7 @@
libs/common/src/lib/routes/routes.ts
- 321
+ 316
@@ -7434,11 +7450,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 316
+ 311
libs/common/src/lib/routes/routes.ts
- 319
+ 314
@@ -7447,11 +7463,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 308
+ 303
libs/common/src/lib/routes/routes.ts
- 311
+ 306
@@ -7475,7 +7491,7 @@
ın
apps/client/src/app/components/admin-settings/admin-settings.component.html
- 152
+ 157
@@ -7483,7 +7499,7 @@
günlük istekler
apps/client/src/app/components/admin-settings/admin-settings.component.html
- 154
+ 159
@@ -7491,7 +7507,7 @@
API anahtarını kaldır
apps/client/src/app/components/admin-settings/admin-settings.component.html
- 178
+ 187
@@ -7499,7 +7515,7 @@
API anahtarını silmek istediğinize emin misiniz?
apps/client/src/app/components/admin-settings/admin-settings.component.ts
- 143
+ 144
@@ -7667,7 +7683,7 @@
Net Worth Tracking
libs/ui/src/lib/i18n.ts
- 110
+ 111
@@ -7675,7 +7691,7 @@
Lütfen Ghostfolio API anahtarınızı girin.
apps/client/src/app/components/admin-settings/admin-settings.component.ts
- 162
+ 163
@@ -7787,7 +7803,7 @@
Oluştur
libs/ui/src/lib/tags-selector/tags-selector.component.html
- 64
+ 62
@@ -7952,11 +7968,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 232
+ 227
libs/common/src/lib/routes/routes.ts
- 235
+ 230
@@ -7968,7 +7984,7 @@
libs/common/src/lib/routes/routes.ts
- 237
+ 232
@@ -8080,7 +8096,7 @@
libs/common/src/lib/routes/routes.ts
- 110
+ 105
@@ -8102,13 +8118,9 @@
Calculations are based on delayed market data and may not be displayed in real-time.
Hesaplamalar gecikmeli piyasa verilerine dayanmaktadır ve gerçek zamanlı olarak görüntülenemeyebilir.
-
- apps/client/src/app/components/home-market/home-market.html
- 28
-
apps/client/src/app/components/markets/markets.html
- 54
+ 64
@@ -8117,11 +8129,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 200
+ 195
libs/common/src/lib/routes/routes.ts
- 203
+ 198
@@ -8129,7 +8141,7 @@
ETF Tracking
libs/ui/src/lib/i18n.ts
- 106
+ 107
@@ -8217,7 +8229,7 @@
libs/common/src/lib/routes/routes.ts
- 251
+ 246
@@ -8225,7 +8237,7 @@
Açık Kaynak Alternatifi
libs/common/src/lib/routes/routes.ts
- 346
+ 341
@@ -8258,15 +8270,15 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 332
+ 327
libs/common/src/lib/routes/routes.ts
- 335
+ 330
libs/common/src/lib/routes/routes.ts
- 343
+ 338
@@ -8275,11 +8287,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 324
+ 319
libs/common/src/lib/routes/routes.ts
- 327
+ 322
@@ -8504,11 +8516,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 356
+ 351
libs/common/src/lib/routes/routes.ts
- 357
+ 352
@@ -8540,7 +8552,7 @@
Stocks
apps/client/src/app/components/markets/markets.component.ts
- 51
+ 54
apps/client/src/app/pages/features/features-page.html
@@ -8552,7 +8564,7 @@
Cryptocurrencies
apps/client/src/app/components/markets/markets.component.ts
- 52
+ 55
apps/client/src/app/pages/features/features-page.html
@@ -8564,7 +8576,7 @@
Manage Asset Profile
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 477
+ 478
diff --git a/apps/client/src/locales/messages.uk.xlf b/apps/client/src/locales/messages.uk.xlf
index cee14053c..fa110490a 100644
--- a/apps/client/src/locales/messages.uk.xlf
+++ b/apps/client/src/locales/messages.uk.xlf
@@ -1,6 +1,14 @@
+
+ Invalid API key
+ Invalid API key
+
+ apps/client/src/app/components/admin-settings/admin-settings.component.html
+ 112
+
+
Features
Функції
@@ -18,7 +26,7 @@
libs/common/src/lib/routes/routes.ts
- 276
+ 271
@@ -26,7 +34,7 @@
Інтернаціоналізація
libs/common/src/lib/routes/routes.ts
- 119
+ 114
@@ -107,31 +115,31 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 196
+ 191
libs/common/src/lib/routes/routes.ts
- 197
+ 192
libs/common/src/lib/routes/routes.ts
- 202
+ 197
libs/common/src/lib/routes/routes.ts
- 210
+ 205
libs/common/src/lib/routes/routes.ts
- 218
+ 213
libs/common/src/lib/routes/routes.ts
- 226
+ 221
libs/common/src/lib/routes/routes.ts
- 234
+ 229
@@ -140,11 +148,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 208
+ 203
libs/common/src/lib/routes/routes.ts
- 211
+ 206
@@ -153,11 +161,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 224
+ 219
libs/common/src/lib/routes/routes.ts
- 227
+ 222
@@ -166,19 +174,19 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 254
+ 249
libs/common/src/lib/routes/routes.ts
- 255
+ 250
libs/common/src/lib/routes/routes.ts
- 259
+ 254
libs/common/src/lib/routes/routes.ts
- 265
+ 260
@@ -187,11 +195,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 274
+ 269
libs/common/src/lib/routes/routes.ts
- 275
+ 270
@@ -200,11 +208,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 279
+ 274
libs/common/src/lib/routes/routes.ts
- 280
+ 275
@@ -213,11 +221,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 289
+ 284
libs/common/src/lib/routes/routes.ts
- 290
+ 285
@@ -226,11 +234,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 299
+ 294
libs/common/src/lib/routes/routes.ts
- 300
+ 295
@@ -239,31 +247,31 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 304
+ 299
libs/common/src/lib/routes/routes.ts
- 305
+ 300
libs/common/src/lib/routes/routes.ts
- 310
+ 305
libs/common/src/lib/routes/routes.ts
- 318
+ 313
libs/common/src/lib/routes/routes.ts
- 326
+ 321
libs/common/src/lib/routes/routes.ts
- 334
+ 329
libs/common/src/lib/routes/routes.ts
- 342
+ 337
@@ -359,7 +367,7 @@
Податкова звітність
libs/ui/src/lib/i18n.ts
- 112
+ 113
@@ -399,7 +407,7 @@
Баланс готівки
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 43
+ 54
apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html
@@ -415,7 +423,7 @@
Платформа
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 88
+ 112
apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html
@@ -431,7 +439,7 @@
Баланс готівки
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 143
+ 169
@@ -786,6 +794,14 @@
96
+
+ Unknown
+ Unknown
+
+ libs/ui/src/lib/i18n.ts
+ 88
+
+
Attempts
Спроби
@@ -1179,7 +1195,7 @@
Update Activity
libs/common/src/lib/routes/routes.ts
- 146
+ 141
@@ -1187,7 +1203,7 @@
Технологія
libs/ui/src/lib/i18n.ts
- 100
+ 101
@@ -1295,7 +1311,7 @@
Промисловість
libs/ui/src/lib/i18n.ts
- 97
+ 98
@@ -1339,7 +1355,7 @@
Споживчі товари циклічного попиту
libs/ui/src/lib/i18n.ts
- 92
+ 93
@@ -1559,7 +1575,7 @@
з
apps/client/src/app/components/admin-settings/admin-settings.component.html
- 152
+ 157
@@ -1567,7 +1583,7 @@
щоденних запитів
apps/client/src/app/components/admin-settings/admin-settings.component.html
- 154
+ 159
@@ -1575,7 +1591,7 @@
Вилучити ключ API
apps/client/src/app/components/admin-settings/admin-settings.component.html
- 178
+ 187
@@ -1583,7 +1599,7 @@
Встановити ключ API
apps/client/src/app/components/admin-settings/admin-settings.component.html
- 188
+ 197
@@ -1591,7 +1607,7 @@
Платформи
apps/client/src/app/components/admin-settings/admin-settings.component.html
- 212
+ 221
@@ -1599,7 +1615,7 @@
Теги
apps/client/src/app/components/admin-settings/admin-settings.component.html
- 218
+ 227
libs/ui/src/lib/tags-selector/tags-selector.component.html
@@ -1607,7 +1623,7 @@
libs/ui/src/lib/tags-selector/tags-selector.component.html
- 25
+ 23
@@ -1615,7 +1631,7 @@
Ви дійсно хочете видалити ключ API?
apps/client/src/app/components/admin-settings/admin-settings.component.ts
- 143
+ 144
@@ -1623,7 +1639,7 @@
Відстеження чистого капіталу
libs/ui/src/lib/i18n.ts
- 110
+ 111
@@ -1631,7 +1647,7 @@
Будь ласка, введіть ваш ключ API Ghostfolio.
apps/client/src/app/components/admin-settings/admin-settings.component.ts
- 162
+ 163
@@ -1819,7 +1835,7 @@
Портфель
apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts
- 139
+ 140
apps/client/src/app/components/header/header.component.html
@@ -1835,7 +1851,7 @@
libs/common/src/lib/routes/routes.ts
- 172
+ 167
@@ -1847,15 +1863,15 @@
apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts
- 151
+ 152
Current Market Mood
Поточний ринковий настрій
- apps/client/src/app/components/fear-and-greed-index/fear-and-greed-index.component.html
- 12
+ libs/ui/src/lib/fear-and-greed-index/fear-and-greed-index.component.html
+ 22
@@ -2013,6 +2029,10 @@
Activity
Активність
+
+ apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
+ 100
+
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
231
@@ -2023,7 +2043,7 @@
Повідомити про збій даних
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 462
+ 463
@@ -2071,7 +2091,7 @@
Страх
apps/client/src/app/components/markets/markets.component.ts
- 46
+ 58
libs/ui/src/lib/i18n.ts
@@ -2083,7 +2103,7 @@
Жадібність
apps/client/src/app/components/markets/markets.component.ts
- 47
+ 59
libs/ui/src/lib/i18n.ts
@@ -2095,7 +2115,7 @@
Останні днів
apps/client/src/app/components/markets/markets.html
- 17
+ 24
@@ -2203,7 +2223,7 @@
Загальна сума
apps/client/src/app/components/investment-chart/investment-chart.component.ts
- 143
+ 144
@@ -2219,7 +2239,7 @@
Ставка заощаджень
apps/client/src/app/components/investment-chart/investment-chart.component.ts
- 201
+ 193
@@ -2263,7 +2283,7 @@
Енергетика
libs/ui/src/lib/i18n.ts
- 94
+ 95
@@ -2655,7 +2675,7 @@
Інвестиційні дослідження
libs/ui/src/lib/i18n.ts
- 109
+ 110
@@ -2895,7 +2915,7 @@
Споживчі товари першої необхідності
libs/ui/src/lib/i18n.ts
- 93
+ 94
@@ -2991,7 +3011,7 @@
Clone Activity
libs/common/src/lib/routes/routes.ts
- 134
+ 129
@@ -3015,7 +3035,7 @@
Комунальні послуги
libs/ui/src/lib/i18n.ts
- 101
+ 102
@@ -3295,7 +3315,7 @@
libs/common/src/lib/routes/routes.ts
- 240
+ 235
@@ -3311,7 +3331,7 @@
libs/common/src/lib/routes/routes.ts
- 205
+ 200
@@ -3327,7 +3347,7 @@
libs/common/src/lib/routes/routes.ts
- 213
+ 208
@@ -3343,7 +3363,7 @@
libs/common/src/lib/routes/routes.ts
- 229
+ 224
@@ -3403,7 +3423,7 @@
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 384
+ 395
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
@@ -3459,7 +3479,7 @@
Фінансове планування
libs/ui/src/lib/i18n.ts
- 108
+ 109
@@ -3519,7 +3539,7 @@
Ринкові дані
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 406
+ 417
libs/common/src/lib/routes/routes.ts
@@ -3557,6 +3577,10 @@
Overview
Огляд
+
+ apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
+ 41
+
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
114
@@ -3583,11 +3607,11 @@
libs/common/src/lib/routes/routes.ts
- 113
+ 108
libs/common/src/lib/routes/routes.ts
- 190
+ 185
@@ -3707,7 +3731,7 @@
libs/common/src/lib/routes/routes.ts
- 245
+ 240
@@ -3771,7 +3795,7 @@
libs/common/src/lib/routes/routes.ts
- 271
+ 266
@@ -3791,7 +3815,7 @@
libs/common/src/lib/routes/routes.ts
- 260
+ 255
@@ -3803,7 +3827,7 @@
libs/common/src/lib/routes/routes.ts
- 268
+ 263
@@ -3812,11 +3836,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 263
+ 258
libs/common/src/lib/routes/routes.ts
- 266
+ 261
@@ -3980,7 +4004,7 @@
Активи
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 100
+ 126
apps/client/src/app/components/home-holdings/home-holdings.html
@@ -4000,7 +4024,7 @@
libs/common/src/lib/routes/routes.ts
- 187
+ 182
libs/ui/src/lib/assistant/assistant.html
@@ -4024,7 +4048,7 @@
libs/common/src/lib/routes/routes.ts
- 105
+ 100
@@ -4042,10 +4066,6 @@
apps/client/src/app/components/header/header.component.html
408
-
- apps/client/src/app/components/home-market/home-market.html
- 2
-
apps/client/src/app/components/markets/markets.html
2
@@ -4064,15 +4084,11 @@
libs/common/src/lib/routes/routes.ts
- 100
-
-
- libs/common/src/lib/routes/routes.ts
- 281
+ 276
libs/common/src/lib/routes/routes.ts
- 329
+ 324
@@ -4216,7 +4232,7 @@
Основні матеріали
libs/ui/src/lib/i18n.ts
- 90
+ 91
@@ -4416,7 +4432,7 @@
Add Activity
libs/common/src/lib/routes/routes.ts
- 139
+ 134
@@ -4568,11 +4584,11 @@
Активності
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 84
+ 102
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 111
+ 137
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
@@ -4596,7 +4612,7 @@
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 350
+ 361
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
@@ -4608,7 +4624,7 @@
libs/common/src/lib/routes/routes.ts
- 149
+ 144
libs/ui/src/lib/accounts-table/accounts-table.component.html
@@ -4912,7 +4928,7 @@
libs/common/src/lib/routes/routes.ts
- 154
+ 149
@@ -5104,7 +5120,7 @@
libs/common/src/lib/routes/routes.ts
- 159
+ 154
@@ -5120,7 +5136,7 @@
Дивіденди
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 79
+ 90
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
@@ -5188,7 +5204,7 @@
Закрити позицію
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 449
+ 450
@@ -5356,7 +5372,7 @@
libs/common/src/lib/routes/routes.ts
- 291
+ 286
@@ -5632,7 +5648,7 @@
libs/common/src/lib/routes/routes.ts
- 301
+ 296
@@ -5668,7 +5684,7 @@
libs/common/src/lib/routes/routes.ts
- 313
+ 308
@@ -5684,7 +5700,7 @@
libs/common/src/lib/routes/routes.ts
- 321
+ 316
@@ -5693,11 +5709,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 316
+ 311
libs/common/src/lib/routes/routes.ts
- 319
+ 314
@@ -5706,11 +5722,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 308
+ 303
libs/common/src/lib/routes/routes.ts
- 311
+ 306
@@ -5722,7 +5738,7 @@
libs/common/src/lib/routes/routes.ts
- 349
+ 344
@@ -5731,11 +5747,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 340
+ 335
libs/common/src/lib/routes/routes.ts
- 344
+ 339
@@ -5803,7 +5819,7 @@
Бюджетування
libs/ui/src/lib/i18n.ts
- 104
+ 105
@@ -5879,7 +5895,7 @@
Сімейний офіс
libs/ui/src/lib/i18n.ts
- 107
+ 108
@@ -5959,7 +5975,7 @@
Управління багатством
libs/ui/src/lib/i18n.ts
- 113
+ 114
@@ -6175,7 +6191,7 @@
Фінансові послуги
libs/ui/src/lib/i18n.ts
- 95
+ 96
@@ -6275,7 +6291,7 @@
Відстеження дивідендів
libs/ui/src/lib/i18n.ts
- 105
+ 106
@@ -6323,7 +6339,7 @@
Відстеження акцій
libs/ui/src/lib/i18n.ts
- 111
+ 112
@@ -6347,7 +6363,7 @@
Веб
libs/ui/src/lib/i18n.ts
- 120
+ 121
@@ -6379,7 +6395,7 @@
libs/common/src/lib/routes/routes.ts
- 352
+ 347
@@ -6623,7 +6639,7 @@
Профілі активів
apps/client/src/app/components/admin-settings/admin-settings.component.html
- 123
+ 128
libs/ui/src/lib/assistant/assistant.html
@@ -6696,7 +6712,7 @@
contact us
- зв'яжіться з нами
+ зв'яжіться з нами
apps/client/src/app/pages/pricing/pricing-page.html
336
@@ -6779,7 +6795,7 @@
Відсотки
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 67
+ 78
apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html
@@ -6820,10 +6836,10 @@
Healthcare
- Охорона здоров'я
+ Охорона здоров'я
libs/ui/src/lib/i18n.ts
- 96
+ 97
@@ -7171,7 +7187,7 @@
libs/ui/src/lib/i18n.ts
- 98
+ 99
libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts
@@ -7407,7 +7423,7 @@
Капітал
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 55
+ 66
libs/ui/src/lib/i18n.ts
@@ -7439,7 +7455,7 @@
libs/ui/src/lib/i18n.ts
- 99
+ 100
@@ -7527,7 +7543,7 @@
Комунікаційні послуги
libs/ui/src/lib/i18n.ts
- 91
+ 92
@@ -7787,7 +7803,7 @@
Створити
libs/ui/src/lib/tags-selector/tags-selector.component.html
- 64
+ 62
@@ -7952,11 +7968,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 232
+ 227
libs/common/src/lib/routes/routes.ts
- 235
+ 230
@@ -7968,7 +7984,7 @@
libs/common/src/lib/routes/routes.ts
- 237
+ 232
@@ -8080,7 +8096,7 @@
libs/common/src/lib/routes/routes.ts
- 110
+ 105
@@ -8102,13 +8118,9 @@
Calculations are based on delayed market data and may not be displayed in real-time.
Розрахунки базуються на затриманих ринкових даних і можуть не відображатися в реальному часі.
-
- apps/client/src/app/components/home-market/home-market.html
- 28
-
apps/client/src/app/components/markets/markets.html
- 54
+ 64
@@ -8117,11 +8129,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 200
+ 195
libs/common/src/lib/routes/routes.ts
- 203
+ 198
@@ -8129,7 +8141,7 @@
Відстеження ETF
libs/ui/src/lib/i18n.ts
- 106
+ 107
@@ -8217,7 +8229,7 @@
libs/common/src/lib/routes/routes.ts
- 251
+ 246
@@ -8225,7 +8237,7 @@
Альтернатива з відкритим кодом для
libs/common/src/lib/routes/routes.ts
- 346
+ 341
@@ -8258,15 +8270,15 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 332
+ 327
libs/common/src/lib/routes/routes.ts
- 335
+ 330
libs/common/src/lib/routes/routes.ts
- 343
+ 338
@@ -8275,11 +8287,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 324
+ 319
libs/common/src/lib/routes/routes.ts
- 327
+ 322
@@ -8504,11 +8516,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 356
+ 351
libs/common/src/lib/routes/routes.ts
- 357
+ 352
@@ -8540,7 +8552,7 @@
Акції
apps/client/src/app/components/markets/markets.component.ts
- 51
+ 54
apps/client/src/app/pages/features/features-page.html
@@ -8552,7 +8564,7 @@
Криптовалюти
apps/client/src/app/components/markets/markets.component.ts
- 52
+ 55
apps/client/src/app/pages/features/features-page.html
@@ -8564,7 +8576,7 @@
Керувати профілем активу
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 477
+ 478
diff --git a/apps/client/src/locales/messages.xlf b/apps/client/src/locales/messages.xlf
index 4cfa2ab2f..528c478ca 100644
--- a/apps/client/src/locales/messages.xlf
+++ b/apps/client/src/locales/messages.xlf
@@ -7,31 +7,31 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 196
+ 191
libs/common/src/lib/routes/routes.ts
- 197
+ 192
libs/common/src/lib/routes/routes.ts
- 202
+ 197
libs/common/src/lib/routes/routes.ts
- 210
+ 205
libs/common/src/lib/routes/routes.ts
- 218
+ 213
libs/common/src/lib/routes/routes.ts
- 226
+ 221
libs/common/src/lib/routes/routes.ts
- 234
+ 229
@@ -39,19 +39,19 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 254
+ 249
libs/common/src/lib/routes/routes.ts
- 255
+ 250
libs/common/src/lib/routes/routes.ts
- 259
+ 254
libs/common/src/lib/routes/routes.ts
- 265
+ 260
@@ -59,11 +59,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 274
+ 269
libs/common/src/lib/routes/routes.ts
- 275
+ 270
@@ -71,11 +71,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 208
+ 203
libs/common/src/lib/routes/routes.ts
- 211
+ 206
@@ -83,11 +83,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 279
+ 274
libs/common/src/lib/routes/routes.ts
- 280
+ 275
@@ -95,11 +95,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 289
+ 284
libs/common/src/lib/routes/routes.ts
- 290
+ 285
@@ -107,11 +107,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 224
+ 219
libs/common/src/lib/routes/routes.ts
- 227
+ 222
@@ -119,11 +119,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 299
+ 294
libs/common/src/lib/routes/routes.ts
- 300
+ 295
@@ -131,31 +131,31 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 304
+ 299
libs/common/src/lib/routes/routes.ts
- 305
+ 300
libs/common/src/lib/routes/routes.ts
- 310
+ 305
libs/common/src/lib/routes/routes.ts
- 318
+ 313
libs/common/src/lib/routes/routes.ts
- 326
+ 321
libs/common/src/lib/routes/routes.ts
- 334
+ 329
libs/common/src/lib/routes/routes.ts
- 342
+ 337
@@ -290,7 +290,7 @@
Cash Balance
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 43
+ 54
apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html
@@ -305,7 +305,7 @@
Platform
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 88
+ 112
apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html
@@ -320,7 +320,7 @@
Cash Balances
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 143
+ 169
@@ -618,6 +618,13 @@
20
+
+ Unknown
+
+ libs/ui/src/lib/i18n.ts
+ 88
+
+
Attempts
@@ -905,7 +912,7 @@
Healthcare
libs/ui/src/lib/i18n.ts
- 96
+ 97
@@ -1019,14 +1026,14 @@
Update Activity
libs/common/src/lib/routes/routes.ts
- 146
+ 141
Technology
libs/ui/src/lib/i18n.ts
- 100
+ 101
@@ -1091,7 +1098,7 @@
Industrials
libs/ui/src/lib/i18n.ts
- 97
+ 98
@@ -1124,7 +1131,7 @@
Consumer Cyclical
libs/ui/src/lib/i18n.ts
- 92
+ 93
@@ -1308,14 +1315,14 @@
Platforms
apps/client/src/app/components/admin-settings/admin-settings.component.html
- 212
+ 221
Tags
apps/client/src/app/components/admin-settings/admin-settings.component.html
- 218
+ 227
libs/ui/src/lib/tags-selector/tags-selector.component.html
@@ -1323,7 +1330,7 @@
libs/ui/src/lib/tags-selector/tags-selector.component.html
- 25
+ 23
@@ -1444,7 +1451,7 @@
Portfolio
apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts
- 139
+ 140
apps/client/src/app/components/header/header.component.html
@@ -1460,7 +1467,7 @@
libs/common/src/lib/routes/routes.ts
- 172
+ 167
@@ -1471,14 +1478,14 @@
apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts
- 151
+ 152
Current Market Mood
- apps/client/src/app/components/fear-and-greed-index/fear-and-greed-index.component.html
- 12
+ libs/ui/src/lib/fear-and-greed-index/fear-and-greed-index.component.html
+ 22
@@ -1537,7 +1544,7 @@
Fear
apps/client/src/app/components/markets/markets.component.ts
- 46
+ 58
libs/ui/src/lib/i18n.ts
@@ -1548,7 +1555,7 @@
Greed
apps/client/src/app/components/markets/markets.component.ts
- 47
+ 59
libs/ui/src/lib/i18n.ts
@@ -1559,7 +1566,7 @@
Last Days
apps/client/src/app/components/markets/markets.html
- 17
+ 24
@@ -1654,7 +1661,7 @@
Total Amount
apps/client/src/app/components/investment-chart/investment-chart.component.ts
- 143
+ 144
@@ -1668,7 +1675,7 @@
Savings Rate
apps/client/src/app/components/investment-chart/investment-chart.component.ts
- 201
+ 193
@@ -1748,7 +1755,7 @@
Energy
libs/ui/src/lib/i18n.ts
- 94
+ 95
@@ -1895,7 +1902,7 @@
Report Data Glitch
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 462
+ 463
@@ -2174,7 +2181,7 @@
Consumer Defensive
libs/ui/src/lib/i18n.ts
- 93
+ 94
@@ -2238,7 +2245,7 @@
Utilities
libs/ui/src/lib/i18n.ts
- 101
+ 102
@@ -2472,7 +2479,7 @@
libs/common/src/lib/routes/routes.ts
- 240
+ 235
@@ -2487,7 +2494,7 @@
libs/common/src/lib/routes/routes.ts
- 205
+ 200
@@ -2502,7 +2509,7 @@
libs/common/src/lib/routes/routes.ts
- 213
+ 208
@@ -2517,7 +2524,7 @@
libs/common/src/lib/routes/routes.ts
- 229
+ 224
@@ -2572,7 +2579,7 @@
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 384
+ 395
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
@@ -2623,7 +2630,7 @@
Financial Planning
libs/ui/src/lib/i18n.ts
- 108
+ 109
@@ -2666,7 +2673,7 @@
Market Data
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 406
+ 417
libs/common/src/lib/routes/routes.ts
@@ -2701,6 +2708,10 @@
Overview
+
+ apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
+ 41
+
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
114
@@ -2727,11 +2738,11 @@
libs/common/src/lib/routes/routes.ts
- 113
+ 108
libs/common/src/lib/routes/routes.ts
- 190
+ 185
@@ -2842,7 +2853,7 @@
libs/common/src/lib/routes/routes.ts
- 245
+ 240
@@ -2900,7 +2911,14 @@
libs/common/src/lib/routes/routes.ts
- 271
+ 266
+
+
+
+ Invalid API key
+
+ apps/client/src/app/components/admin-settings/admin-settings.component.html
+ 112
@@ -2919,7 +2937,7 @@
libs/common/src/lib/routes/routes.ts
- 276
+ 271
@@ -3066,7 +3084,7 @@
Holdings
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 100
+ 126
apps/client/src/app/components/home-holdings/home-holdings.html
@@ -3086,7 +3104,7 @@
libs/common/src/lib/routes/routes.ts
- 187
+ 182
libs/ui/src/lib/assistant/assistant.html
@@ -3108,7 +3126,7 @@
libs/common/src/lib/routes/routes.ts
- 105
+ 100
@@ -3125,10 +3143,6 @@
apps/client/src/app/components/header/header.component.html
408
-
- apps/client/src/app/components/home-market/home-market.html
- 2
-
apps/client/src/app/components/markets/markets.html
2
@@ -3147,15 +3161,11 @@
libs/common/src/lib/routes/routes.ts
- 100
-
-
- libs/common/src/lib/routes/routes.ts
- 281
+ 276
libs/common/src/lib/routes/routes.ts
- 329
+ 324
@@ -3275,7 +3285,7 @@
Basic Materials
libs/ui/src/lib/i18n.ts
- 90
+ 91
@@ -3457,7 +3467,7 @@
Add Activity
libs/common/src/lib/routes/routes.ts
- 139
+ 134
@@ -3584,11 +3594,11 @@
Activities
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 84
+ 102
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 111
+ 137
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
@@ -3612,7 +3622,7 @@
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 350
+ 361
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
@@ -3624,7 +3634,7 @@
libs/common/src/lib/routes/routes.ts
- 149
+ 144
libs/ui/src/lib/accounts-table/accounts-table.component.html
@@ -3864,7 +3874,7 @@
libs/common/src/lib/routes/routes.ts
- 154
+ 149
@@ -4021,7 +4031,7 @@
libs/common/src/lib/routes/routes.ts
- 159
+ 154
@@ -4035,7 +4045,7 @@
Dividend
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 79
+ 90
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
@@ -4174,7 +4184,7 @@
libs/common/src/lib/routes/routes.ts
- 291
+ 286
@@ -4396,7 +4406,7 @@
libs/common/src/lib/routes/routes.ts
- 301
+ 296
@@ -4425,7 +4435,7 @@
libs/common/src/lib/routes/routes.ts
- 349
+ 344
@@ -4433,11 +4443,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 340
+ 335
libs/common/src/lib/routes/routes.ts
- 344
+ 339
@@ -4665,7 +4675,7 @@
Stock Tracking
libs/ui/src/lib/i18n.ts
- 111
+ 112
@@ -4686,7 +4696,7 @@
Web
libs/ui/src/lib/i18n.ts
- 120
+ 121
@@ -4727,7 +4737,7 @@
libs/common/src/lib/routes/routes.ts
- 352
+ 347
@@ -4852,7 +4862,7 @@
Asset Profiles
apps/client/src/app/components/admin-settings/admin-settings.component.html
- 123
+ 128
libs/ui/src/lib/assistant/assistant.html
@@ -4961,7 +4971,7 @@
Interest
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 67
+ 78
apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html
@@ -5195,7 +5205,7 @@
libs/ui/src/lib/i18n.ts
- 98
+ 99
libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts
@@ -5380,7 +5390,7 @@
Equity
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 55
+ 66
libs/ui/src/lib/i18n.ts
@@ -5402,7 +5412,7 @@
libs/ui/src/lib/i18n.ts
- 99
+ 100
@@ -5479,7 +5489,7 @@
Communication Services
libs/ui/src/lib/i18n.ts
- 91
+ 92
@@ -5691,7 +5701,7 @@
Close Holding
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 449
+ 450
@@ -5857,11 +5867,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 263
+ 258
libs/common/src/lib/routes/routes.ts
- 266
+ 261
@@ -5872,7 +5882,7 @@
libs/common/src/lib/routes/routes.ts
- 268
+ 263
@@ -5908,7 +5918,7 @@
libs/common/src/lib/routes/routes.ts
- 260
+ 255
@@ -5948,6 +5958,10 @@
Activity
+
+ apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
+ 100
+
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
231
@@ -6013,7 +6027,7 @@
Internationalization
libs/common/src/lib/routes/routes.ts
- 119
+ 114
@@ -6069,7 +6083,7 @@
Clone Activity
libs/common/src/lib/routes/routes.ts
- 134
+ 129
@@ -6226,7 +6240,7 @@
Wealth Management
libs/ui/src/lib/i18n.ts
- 113
+ 114
@@ -6247,7 +6261,7 @@
Family Office
libs/ui/src/lib/i18n.ts
- 107
+ 108
@@ -6272,7 +6286,7 @@
Budgeting
libs/ui/src/lib/i18n.ts
- 104
+ 105
@@ -6515,7 +6529,7 @@
Tax Reporting
libs/ui/src/lib/i18n.ts
- 112
+ 113
@@ -6572,7 +6586,7 @@
Dividend Tracking
libs/ui/src/lib/i18n.ts
- 105
+ 106
@@ -6597,7 +6611,7 @@
Financial Services
libs/ui/src/lib/i18n.ts
- 95
+ 96
@@ -6705,7 +6719,7 @@
Set API key
apps/client/src/app/components/admin-settings/admin-settings.component.html
- 188
+ 197
@@ -6726,7 +6740,7 @@
Investment Research
libs/ui/src/lib/i18n.ts
- 109
+ 110
@@ -6748,7 +6762,7 @@
libs/common/src/lib/routes/routes.ts
- 313
+ 308
@@ -6756,11 +6770,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 308
+ 303
libs/common/src/lib/routes/routes.ts
- 311
+ 306
@@ -6775,7 +6789,7 @@
libs/common/src/lib/routes/routes.ts
- 321
+ 316
@@ -6783,11 +6797,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 316
+ 311
libs/common/src/lib/routes/routes.ts
- 319
+ 314
@@ -6815,28 +6829,28 @@
of
apps/client/src/app/components/admin-settings/admin-settings.component.html
- 152
+ 157
Do you really want to delete the API key?
apps/client/src/app/components/admin-settings/admin-settings.component.ts
- 143
+ 144
Remove API key
apps/client/src/app/components/admin-settings/admin-settings.component.html
- 178
+ 187
daily requests
apps/client/src/app/components/admin-settings/admin-settings.component.html
- 154
+ 159
@@ -6982,14 +6996,14 @@
Net Worth Tracking
libs/ui/src/lib/i18n.ts
- 110
+ 111
Please enter your Ghostfolio API key.
apps/client/src/app/components/admin-settings/admin-settings.component.ts
- 162
+ 163
@@ -7087,7 +7101,7 @@
Create
libs/ui/src/lib/tags-selector/tags-selector.component.html
- 64
+ 62
@@ -7231,7 +7245,7 @@
libs/common/src/lib/routes/routes.ts
- 237
+ 232
@@ -7239,11 +7253,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 232
+ 227
libs/common/src/lib/routes/routes.ts
- 235
+ 230
@@ -7328,7 +7342,7 @@
libs/common/src/lib/routes/routes.ts
- 110
+ 105
@@ -7347,13 +7361,9 @@
Calculations are based on delayed market data and may not be displayed in real-time.
-
- apps/client/src/app/components/home-market/home-market.html
- 28
-
apps/client/src/app/components/markets/markets.html
- 54
+ 64
@@ -7361,11 +7371,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 200
+ 195
libs/common/src/lib/routes/routes.ts
- 203
+ 198
@@ -7379,7 +7389,7 @@
ETF Tracking
libs/ui/src/lib/i18n.ts
- 106
+ 107
@@ -7450,14 +7460,14 @@
libs/common/src/lib/routes/routes.ts
- 251
+ 246
Open Source Alternative to
libs/common/src/lib/routes/routes.ts
- 346
+ 341
@@ -7486,15 +7496,15 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 332
+ 327
libs/common/src/lib/routes/routes.ts
- 335
+ 330
libs/common/src/lib/routes/routes.ts
- 343
+ 338
@@ -7502,11 +7512,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 324
+ 319
libs/common/src/lib/routes/routes.ts
- 327
+ 322
@@ -7704,11 +7714,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 356
+ 351
libs/common/src/lib/routes/routes.ts
- 357
+ 352
@@ -7736,7 +7746,7 @@
Cryptocurrencies
apps/client/src/app/components/markets/markets.component.ts
- 52
+ 55
apps/client/src/app/pages/features/features-page.html
@@ -7747,7 +7757,7 @@
Stocks
apps/client/src/app/components/markets/markets.component.ts
- 51
+ 54
apps/client/src/app/pages/features/features-page.html
@@ -7758,7 +7768,7 @@
Manage Asset Profile
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 477
+ 478
diff --git a/apps/client/src/locales/messages.zh.xlf b/apps/client/src/locales/messages.zh.xlf
index ed360263d..9cb1e72ba 100644
--- a/apps/client/src/locales/messages.zh.xlf
+++ b/apps/client/src/locales/messages.zh.xlf
@@ -8,31 +8,31 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 196
+ 191
libs/common/src/lib/routes/routes.ts
- 197
+ 192
libs/common/src/lib/routes/routes.ts
- 202
+ 197
libs/common/src/lib/routes/routes.ts
- 210
+ 205
libs/common/src/lib/routes/routes.ts
- 218
+ 213
libs/common/src/lib/routes/routes.ts
- 226
+ 221
libs/common/src/lib/routes/routes.ts
- 234
+ 229
@@ -41,19 +41,19 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 254
+ 249
libs/common/src/lib/routes/routes.ts
- 255
+ 250
libs/common/src/lib/routes/routes.ts
- 259
+ 254
libs/common/src/lib/routes/routes.ts
- 265
+ 260
@@ -62,11 +62,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 274
+ 269
libs/common/src/lib/routes/routes.ts
- 275
+ 270
@@ -75,11 +75,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 208
+ 203
libs/common/src/lib/routes/routes.ts
- 211
+ 206
@@ -88,11 +88,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 279
+ 274
libs/common/src/lib/routes/routes.ts
- 280
+ 275
@@ -101,11 +101,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 289
+ 284
libs/common/src/lib/routes/routes.ts
- 290
+ 285
@@ -114,11 +114,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 224
+ 219
libs/common/src/lib/routes/routes.ts
- 227
+ 222
@@ -127,11 +127,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 299
+ 294
libs/common/src/lib/routes/routes.ts
- 300
+ 295
@@ -140,31 +140,31 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 304
+ 299
libs/common/src/lib/routes/routes.ts
- 305
+ 300
libs/common/src/lib/routes/routes.ts
- 310
+ 305
libs/common/src/lib/routes/routes.ts
- 318
+ 313
libs/common/src/lib/routes/routes.ts
- 326
+ 321
libs/common/src/lib/routes/routes.ts
- 334
+ 329
libs/common/src/lib/routes/routes.ts
- 342
+ 337
@@ -312,7 +312,7 @@
现金余额
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 43
+ 54
apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html
@@ -328,7 +328,7 @@
平台
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 88
+ 112
apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html
@@ -344,7 +344,7 @@
现金余额
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 143
+ 169
@@ -655,6 +655,14 @@
20
+
+ Unknown
+ Unknown
+
+ libs/ui/src/lib/i18n.ts
+ 88
+
+
Attempts
尝试次数
@@ -960,7 +968,7 @@
Healthcare
libs/ui/src/lib/i18n.ts
- 96
+ 97
@@ -1076,7 +1084,7 @@
Update Activity
libs/common/src/lib/routes/routes.ts
- 146
+ 141
@@ -1084,7 +1092,7 @@
Technology
libs/ui/src/lib/i18n.ts
- 100
+ 101
@@ -1156,7 +1164,7 @@
Industrials
libs/ui/src/lib/i18n.ts
- 97
+ 98
@@ -1192,7 +1200,7 @@
Consumer Cyclical
libs/ui/src/lib/i18n.ts
- 92
+ 93
@@ -1400,7 +1408,7 @@
平台
apps/client/src/app/components/admin-settings/admin-settings.component.html
- 212
+ 221
@@ -1408,7 +1416,7 @@
标签
apps/client/src/app/components/admin-settings/admin-settings.component.html
- 218
+ 227
libs/ui/src/lib/tags-selector/tags-selector.component.html
@@ -1416,7 +1424,7 @@
libs/ui/src/lib/tags-selector/tags-selector.component.html
- 25
+ 23
@@ -1552,7 +1560,7 @@
投资组合
apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts
- 139
+ 140
apps/client/src/app/components/header/header.component.html
@@ -1568,7 +1576,7 @@
libs/common/src/lib/routes/routes.ts
- 172
+ 167
@@ -1580,15 +1588,15 @@
apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts
- 151
+ 152
Current Market Mood
当前市场情绪
- apps/client/src/app/components/fear-and-greed-index/fear-and-greed-index.component.html
- 12
+ libs/ui/src/lib/fear-and-greed-index/fear-and-greed-index.component.html
+ 22
@@ -1652,7 +1660,7 @@
恐惧
apps/client/src/app/components/markets/markets.component.ts
- 46
+ 58
libs/ui/src/lib/i18n.ts
@@ -1664,7 +1672,7 @@
贪婪
apps/client/src/app/components/markets/markets.component.ts
- 47
+ 59
libs/ui/src/lib/i18n.ts
@@ -1676,7 +1684,7 @@
最后的 天
apps/client/src/app/components/markets/markets.html
- 17
+ 24
@@ -1784,7 +1792,7 @@
总金额
apps/client/src/app/components/investment-chart/investment-chart.component.ts
- 143
+ 144
@@ -1800,7 +1808,7 @@
储蓄率
apps/client/src/app/components/investment-chart/investment-chart.component.ts
- 201
+ 193
@@ -1884,7 +1892,7 @@
Energy
libs/ui/src/lib/i18n.ts
- 94
+ 95
@@ -2048,7 +2056,7 @@
报告数据故障
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 462
+ 463
@@ -2352,7 +2360,7 @@
Consumer Defensive
libs/ui/src/lib/i18n.ts
- 93
+ 94
@@ -2424,7 +2432,7 @@
Utilities
libs/ui/src/lib/i18n.ts
- 101
+ 102
@@ -2684,7 +2692,7 @@
libs/common/src/lib/routes/routes.ts
- 240
+ 235
@@ -2700,7 +2708,7 @@
libs/common/src/lib/routes/routes.ts
- 205
+ 200
@@ -2716,7 +2724,7 @@
libs/common/src/lib/routes/routes.ts
- 213
+ 208
@@ -2732,7 +2740,7 @@
libs/common/src/lib/routes/routes.ts
- 229
+ 224
@@ -2792,7 +2800,7 @@
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 384
+ 395
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
@@ -2848,7 +2856,7 @@
Financial Planning
libs/ui/src/lib/i18n.ts
- 108
+ 109
@@ -2896,7 +2904,7 @@
市场数据
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 406
+ 417
libs/common/src/lib/routes/routes.ts
@@ -2934,6 +2942,10 @@
Overview
概述
+
+ apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
+ 41
+
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
114
@@ -2960,11 +2972,11 @@
libs/common/src/lib/routes/routes.ts
- 113
+ 108
libs/common/src/lib/routes/routes.ts
- 190
+ 185
@@ -3076,7 +3088,7 @@
libs/common/src/lib/routes/routes.ts
- 245
+ 240
@@ -3140,7 +3152,15 @@
libs/common/src/lib/routes/routes.ts
- 271
+ 266
+
+
+
+ Invalid API key
+ Invalid API key
+
+ apps/client/src/app/components/admin-settings/admin-settings.component.html
+ 112
@@ -3160,7 +3180,7 @@
libs/common/src/lib/routes/routes.ts
- 276
+ 271
@@ -3324,7 +3344,7 @@
持仓
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 100
+ 126
apps/client/src/app/components/home-holdings/home-holdings.html
@@ -3344,7 +3364,7 @@
libs/common/src/lib/routes/routes.ts
- 187
+ 182
libs/ui/src/lib/assistant/assistant.html
@@ -3368,7 +3388,7 @@
libs/common/src/lib/routes/routes.ts
- 105
+ 100
@@ -3386,10 +3406,6 @@
apps/client/src/app/components/header/header.component.html
408
-
- apps/client/src/app/components/home-market/home-market.html
- 2
-
apps/client/src/app/components/markets/markets.html
2
@@ -3408,15 +3424,11 @@
libs/common/src/lib/routes/routes.ts
- 100
-
-
- libs/common/src/lib/routes/routes.ts
- 281
+ 276
libs/common/src/lib/routes/routes.ts
- 329
+ 324
@@ -3552,7 +3564,7 @@
Basic Materials
libs/ui/src/lib/i18n.ts
- 90
+ 91
@@ -3760,7 +3772,7 @@
Add Activity
libs/common/src/lib/routes/routes.ts
- 139
+ 134
@@ -3904,11 +3916,11 @@
活动
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 84
+ 102
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 111
+ 137
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
@@ -3932,7 +3944,7 @@
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 350
+ 361
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
@@ -3944,7 +3956,7 @@
libs/common/src/lib/routes/routes.ts
- 149
+ 144
libs/ui/src/lib/accounts-table/accounts-table.component.html
@@ -4212,7 +4224,7 @@
libs/common/src/lib/routes/routes.ts
- 154
+ 149
@@ -4388,7 +4400,7 @@
libs/common/src/lib/routes/routes.ts
- 159
+ 154
@@ -4404,7 +4416,7 @@
股息
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 79
+ 90
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
@@ -4556,7 +4568,7 @@
libs/common/src/lib/routes/routes.ts
- 291
+ 286
@@ -4804,7 +4816,7 @@
libs/common/src/lib/routes/routes.ts
- 301
+ 296
@@ -4836,7 +4848,7 @@
libs/common/src/lib/routes/routes.ts
- 349
+ 344
@@ -4845,11 +4857,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 340
+ 335
libs/common/src/lib/routes/routes.ts
- 344
+ 339
@@ -5101,7 +5113,7 @@
Stock Tracking
libs/ui/src/lib/i18n.ts
- 111
+ 112
@@ -5125,7 +5137,7 @@
Web
libs/ui/src/lib/i18n.ts
- 120
+ 121
@@ -5169,7 +5181,7 @@
libs/common/src/lib/routes/routes.ts
- 352
+ 347
@@ -5309,7 +5321,7 @@
资产概况
apps/client/src/app/components/admin-settings/admin-settings.component.html
- 123
+ 128
libs/ui/src/lib/assistant/assistant.html
@@ -5433,7 +5445,7 @@
利息
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 67
+ 78
apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html
@@ -5685,7 +5697,7 @@
libs/ui/src/lib/i18n.ts
- 98
+ 99
libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts
@@ -5889,7 +5901,7 @@
股权
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 55
+ 66
libs/ui/src/lib/i18n.ts
@@ -5913,7 +5925,7 @@
libs/ui/src/lib/i18n.ts
- 99
+ 100
@@ -6001,7 +6013,7 @@
Communication Services
libs/ui/src/lib/i18n.ts
- 91
+ 92
@@ -6237,7 +6249,7 @@
关闭持仓
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 449
+ 450
@@ -6422,11 +6434,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 263
+ 258
libs/common/src/lib/routes/routes.ts
- 266
+ 261
@@ -6438,7 +6450,7 @@
libs/common/src/lib/routes/routes.ts
- 268
+ 263
@@ -6478,7 +6490,7 @@
libs/common/src/lib/routes/routes.ts
- 260
+ 255
@@ -6524,6 +6536,10 @@
Activity
活动
+
+ apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
+ 100
+
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
231
@@ -6598,7 +6614,7 @@
国际化
libs/common/src/lib/routes/routes.ts
- 119
+ 114
@@ -6662,7 +6678,7 @@
Clone Activity
libs/common/src/lib/routes/routes.ts
- 134
+ 129
@@ -6742,7 +6758,7 @@
预算管理
libs/ui/src/lib/i18n.ts
- 104
+ 105
@@ -6818,7 +6834,7 @@
家族办公室
libs/ui/src/lib/i18n.ts
- 107
+ 108
@@ -6898,7 +6914,7 @@
财富管理
libs/ui/src/lib/i18n.ts
- 113
+ 114
@@ -7094,7 +7110,7 @@
Tax Reporting
libs/ui/src/lib/i18n.ts
- 112
+ 113
@@ -7242,7 +7258,7 @@
Financial Services
libs/ui/src/lib/i18n.ts
- 95
+ 96
@@ -7326,7 +7342,7 @@
Dividend Tracking
libs/ui/src/lib/i18n.ts
- 105
+ 106
@@ -7370,7 +7386,7 @@
设置 API 密钥
apps/client/src/app/components/admin-settings/admin-settings.component.html
- 188
+ 197
@@ -7386,7 +7402,7 @@
Investment Research
libs/ui/src/lib/i18n.ts
- 109
+ 110
@@ -7410,7 +7426,7 @@
libs/common/src/lib/routes/routes.ts
- 313
+ 308
@@ -7426,7 +7442,7 @@
libs/common/src/lib/routes/routes.ts
- 321
+ 316
@@ -7435,11 +7451,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 316
+ 311
libs/common/src/lib/routes/routes.ts
- 319
+ 314
@@ -7448,11 +7464,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 308
+ 303
libs/common/src/lib/routes/routes.ts
- 311
+ 306
@@ -7476,7 +7492,7 @@
的
apps/client/src/app/components/admin-settings/admin-settings.component.html
- 152
+ 157
@@ -7484,7 +7500,7 @@
每日请求
apps/client/src/app/components/admin-settings/admin-settings.component.html
- 154
+ 159
@@ -7492,7 +7508,7 @@
移除 API 密钥
apps/client/src/app/components/admin-settings/admin-settings.component.html
- 178
+ 187
@@ -7500,7 +7516,7 @@
您确定要删除此 API 密钥吗?
apps/client/src/app/components/admin-settings/admin-settings.component.ts
- 143
+ 144
@@ -7668,7 +7684,7 @@
Net Worth Tracking
libs/ui/src/lib/i18n.ts
- 110
+ 111
@@ -7676,7 +7692,7 @@
请输入您的 Ghostfolio API 密钥。
apps/client/src/app/components/admin-settings/admin-settings.component.ts
- 162
+ 163
@@ -7788,7 +7804,7 @@
创建
libs/ui/src/lib/tags-selector/tags-selector.component.html
- 64
+ 62
@@ -7953,11 +7969,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 232
+ 227
libs/common/src/lib/routes/routes.ts
- 235
+ 230
@@ -7969,7 +7985,7 @@
libs/common/src/lib/routes/routes.ts
- 237
+ 232
@@ -8081,7 +8097,7 @@
libs/common/src/lib/routes/routes.ts
- 110
+ 105
@@ -8103,13 +8119,9 @@
Calculations are based on delayed market data and may not be displayed in real-time.
计算基于延迟的市场数据,可能无法实时显示。
-
- apps/client/src/app/components/home-market/home-market.html
- 28
-
apps/client/src/app/components/markets/markets.html
- 54
+ 64
@@ -8118,11 +8130,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 200
+ 195
libs/common/src/lib/routes/routes.ts
- 203
+ 198
@@ -8130,7 +8142,7 @@
ETF Tracking
libs/ui/src/lib/i18n.ts
- 106
+ 107
@@ -8218,7 +8230,7 @@
libs/common/src/lib/routes/routes.ts
- 251
+ 246
@@ -8226,7 +8238,7 @@
开源替代方案
libs/common/src/lib/routes/routes.ts
- 346
+ 341
@@ -8259,15 +8271,15 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 332
+ 327
libs/common/src/lib/routes/routes.ts
- 335
+ 330
libs/common/src/lib/routes/routes.ts
- 343
+ 338
@@ -8276,11 +8288,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 324
+ 319
libs/common/src/lib/routes/routes.ts
- 327
+ 322
@@ -8505,11 +8517,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 356
+ 351
libs/common/src/lib/routes/routes.ts
- 357
+ 352
@@ -8541,7 +8553,7 @@
股票
apps/client/src/app/components/markets/markets.component.ts
- 51
+ 54
apps/client/src/app/pages/features/features-page.html
@@ -8553,7 +8565,7 @@
加密货币
apps/client/src/app/components/markets/markets.component.ts
- 52
+ 55
apps/client/src/app/pages/features/features-page.html
@@ -8565,7 +8577,7 @@
管理资产概况
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 477
+ 478
From 0e76040edce1a1f7e1a8d446ffdfbb2b8731b875 Mon Sep 17 00:00:00 2001
From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com>
Date: Fri, 31 Jul 2026 17:15:16 +0200
Subject: [PATCH 21/86] Task/improve language localization for DE (20260731)
(#7479)
* Add translations
* Update changelog
---
CHANGELOG.md | 6 ++++++
apps/client/src/locales/messages.de.xlf | 4 ++--
2 files changed, 8 insertions(+), 2 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 098969146..8d345c73c 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
+
+### Changed
+
+- Improved the language localization for German (`de`)
+
## 3.37.0 - 2026-07-30
### Added
diff --git a/apps/client/src/locales/messages.de.xlf b/apps/client/src/locales/messages.de.xlf
index 4fe442267..0378b1068 100644
--- a/apps/client/src/locales/messages.de.xlf
+++ b/apps/client/src/locales/messages.de.xlf
@@ -351,7 +351,7 @@
Unknown
- Unknown
+ Unbekannt
libs/ui/src/lib/i18n.ts
88
@@ -1767,7 +1767,7 @@
Invalid API key
- Invalid API key
+ Ungültiger API-Schlüssel
apps/client/src/app/components/admin-settings/admin-settings.component.html
112
From 543818c35867ee1bbd849bdc688a89516a1a1e84 Mon Sep 17 00:00:00 2001
From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com>
Date: Fri, 31 Jul 2026 17:27:14 +0200
Subject: [PATCH 22/86] Task/improve style of empty state in Fear & Greed Index
component (#7486)
* Improve style of empty state
* Update changelog
---
CHANGELOG.md | 1 +
.../fear-and-greed-index.component.html | 7 ++++---
2 files changed, 5 insertions(+), 3 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 8d345c73c..852e6f377 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
### Changed
+- Improved the style of the empty state in the _Fear & Greed Index_ component
- Improved the language localization for German (`de`)
## 3.37.0 - 2026-07-30
diff --git a/libs/ui/src/lib/fear-and-greed-index/fear-and-greed-index.component.html b/libs/ui/src/lib/fear-and-greed-index/fear-and-greed-index.component.html
index e441c53f6..02eed4442 100644
--- a/libs/ui/src/lib/fear-and-greed-index/fear-and-greed-index.component.html
+++ b/libs/ui/src/lib/fear-and-greed-index/fear-and-greed-index.component.html
@@ -12,10 +12,11 @@
{{ fearAndGreedIndexText() }}
+ @let value = fearAndGreedIndex() | number: '1.0-0';
{{
- (fearAndGreedIndex() | number: '1.0-0') ?? placeholder
- }} {{
+ value ?? placeholder
+ }} /100
From 5aaa1f13c4af833e9fd72eba24695084e411776e Mon Sep 17 00:00:00 2001
From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com>
Date: Fri, 31 Jul 2026 17:50:45 +0200
Subject: [PATCH 23/86] Task/improve styling of type filter in activities table
component (#7482)
* Improve styling
* Update changelog
---
CHANGELOG.md | 1 +
.../activities-table.component.html | 4 ++-
.../activities-table.component.scss | 9 +++++++
.../activities-table.component.stories.ts | 25 +++++++++++++++++++
4 files changed, 38 insertions(+), 1 deletion(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 852e6f377..477048f59 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -10,6 +10,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
### Changed
- Improved the style of the empty state in the _Fear & Greed Index_ component
+- Improved the style of the type filter in the activities table component (experimental)
- Improved the language localization for German (`de`)
## 3.37.0 - 2026-07-30
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 91a67d1cb..3d91852a0 100644
--- a/libs/ui/src/lib/activities-table/activities-table.component.html
+++ b/libs/ui/src/lib/activities-table/activities-table.component.html
@@ -1,4 +1,6 @@
-
+
@if (hasPermissionToFilterByType) {
diff --git a/libs/ui/src/lib/activities-table/activities-table.component.scss b/libs/ui/src/lib/activities-table/activities-table.component.scss
index 5d4e87f30..4e98f726e 100644
--- a/libs/ui/src/lib/activities-table/activities-table.component.scss
+++ b/libs/ui/src/lib/activities-table/activities-table.component.scss
@@ -1,3 +1,12 @@
+@use '@angular/material' as mat;
+
:host {
display: block;
+
+ @include mat.form-field-overrides(
+ (
+ container-height: 2rem,
+ container-vertical-padding: 0.33rem
+ )
+ );
}
diff --git a/libs/ui/src/lib/activities-table/activities-table.component.stories.ts b/libs/ui/src/lib/activities-table/activities-table.component.stories.ts
index 57a8f18b6..057747cf1 100644
--- a/libs/ui/src/lib/activities-table/activities-table.component.stories.ts
+++ b/libs/ui/src/lib/activities-table/activities-table.component.stories.ts
@@ -494,3 +494,28 @@ export const Actions: Story = {
totalItems: activities.length
}
};
+
+export const Toolbar: Story = {
+ args: {
+ dataSource,
+ baseCurrency: 'USD',
+ deviceType: 'desktop',
+ hasActivities: true,
+ hasPermissionToCreateActivity: true,
+ hasPermissionToDeleteActivity: true,
+ hasPermissionToExportActivities: true,
+ hasPermissionToFilterByType: true,
+ hasPermissionToOpenDetails: false,
+ locale: 'en-US',
+ pageIndex: 0,
+ pageSize: 10,
+ showAccountColumn: true,
+ showActions: false,
+ showCheckbox: false,
+ showNameColumn: true,
+ sortColumn: 'date',
+ sortDirection: 'desc',
+ sortDisabled: false,
+ totalItems: activities.length
+ }
+};
From df2e96fc6f8447c6e0dc9081e01ee8edb44dba67 Mon Sep 17 00:00:00 2001
From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com>
Date: Fri, 31 Jul 2026 18:20:57 +0200
Subject: [PATCH 24/86] Task/improve performance of property service by caching
properties (#7484)
* Improve performance by caching properties in memory
* Update changelog
---
CHANGELOG.md | 1 +
apps/api/src/app/admin/admin.service.ts | 7 +-
apps/api/src/app/health/health.service.ts | 4 +-
.../subscription/subscription.controller.ts | 4 +-
.../services/benchmark/benchmark.service.ts | 6 +-
.../src/services/property/property.service.ts | 70 +++++++++++++++++--
6 files changed, 80 insertions(+), 12 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 477048f59..d5c6481e3 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -11,6 +11,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- Improved the style of the empty state in the _Fear & Greed Index_ component
- Improved the style of the type filter in the activities table component (experimental)
+- Improved the performance of the property service by caching the properties in memory
- Improved the language localization for German (`de`)
## 3.37.0 - 2026-07-30
diff --git a/apps/api/src/app/admin/admin.service.ts b/apps/api/src/app/admin/admin.service.ts
index 26a4e06f4..4c608e0fd 100644
--- a/apps/api/src/app/admin/admin.service.ts
+++ b/apps/api/src/app/admin/admin.service.ts
@@ -107,8 +107,11 @@ export class AdminService {
await this.marketDataService.deleteMany({ dataSource, symbol });
const currency = getCurrencyFromSymbol(symbol);
- const customCurrencies =
- await this.propertyService.getByKey(PROPERTY_CURRENCIES);
+
+ const customCurrencies = await this.propertyService.getByKey(
+ PROPERTY_CURRENCIES,
+ { skipCache: true }
+ );
if (customCurrencies.includes(currency)) {
const updatedCustomCurrencies = customCurrencies.filter(
diff --git a/apps/api/src/app/health/health.service.ts b/apps/api/src/app/health/health.service.ts
index f08f33a1e..42a0be61b 100644
--- a/apps/api/src/app/health/health.service.ts
+++ b/apps/api/src/app/health/health.service.ts
@@ -26,7 +26,9 @@ export class HealthService {
public async isDatabaseHealthy() {
try {
- await this.propertyService.getByKey(PROPERTY_CURRENCIES);
+ await this.propertyService.getByKey(PROPERTY_CURRENCIES, {
+ skipCache: true
+ });
return true;
} catch {
diff --git a/apps/api/src/app/subscription/subscription.controller.ts b/apps/api/src/app/subscription/subscription.controller.ts
index 4018e4753..a70fe8791 100644
--- a/apps/api/src/app/subscription/subscription.controller.ts
+++ b/apps/api/src/app/subscription/subscription.controller.ts
@@ -54,7 +54,9 @@ export class SubscriptionController {
}
let coupons =
- (await this.propertyService.getByKey(PROPERTY_COUPONS)) ?? [];
+ (await this.propertyService.getByKey(PROPERTY_COUPONS, {
+ skipCache: true
+ })) ?? [];
const coupon = coupons.find((currentCoupon) => {
return currentCoupon.code === couponCode;
diff --git a/apps/api/src/services/benchmark/benchmark.service.ts b/apps/api/src/services/benchmark/benchmark.service.ts
index 17e729f9f..993e0f0aa 100644
--- a/apps/api/src/services/benchmark/benchmark.service.ts
+++ b/apps/api/src/services/benchmark/benchmark.service.ts
@@ -159,7 +159,8 @@ export class BenchmarkService {
let benchmarks =
(await this.propertyService.getByKey(
- PROPERTY_BENCHMARKS
+ PROPERTY_BENCHMARKS,
+ { skipCache: true }
)) ?? [];
benchmarks.push({ symbolProfileId: assetProfile.id });
@@ -196,7 +197,8 @@ export class BenchmarkService {
let benchmarks =
(await this.propertyService.getByKey(
- PROPERTY_BENCHMARKS
+ PROPERTY_BENCHMARKS,
+ { skipCache: true }
)) ?? [];
benchmarks = benchmarks.filter(({ symbolProfileId }) => {
diff --git a/apps/api/src/services/property/property.service.ts b/apps/api/src/services/property/property.service.ts
index 80643482f..6d8130bbc 100644
--- a/apps/api/src/services/property/property.service.ts
+++ b/apps/api/src/services/property/property.service.ts
@@ -6,27 +6,39 @@ import {
import { PropertyKey } from '@ghostfolio/common/types';
import { Injectable } from '@nestjs/common';
+import { Property } from '@prisma/client';
+import { addMilliseconds, isBefore } from 'date-fns';
+import ms from 'ms';
import { PropertyValue } from './interfaces/interfaces';
@Injectable()
export class PropertyService {
+ private static readonly CACHE_TTL = ms('1 minute');
+
+ private cachedProperties: Promise;
+ private cachedPropertiesExpiresAt: Date;
+
public constructor(private readonly prismaService: PrismaService) {}
public async delete({ key }: { key: PropertyKey }) {
- return this.prismaService.property.delete({
+ const property = await this.prismaService.property.delete({
where: { key }
});
+
+ this.invalidateCache();
+
+ return property;
}
- public async get() {
+ public async get({ skipCache = false } = {}) {
const response: {
[key: string]: PropertyValue;
} = {
[PROPERTY_CURRENCIES]: []
};
- const properties = await this.prismaService.property.findMany();
+ const properties = await this.getProperties({ skipCache });
for (const property of properties) {
let value = property.value;
@@ -41,8 +53,11 @@ export class PropertyService {
return response;
}
- public async getByKey(aKey: PropertyKey) {
- const properties = await this.get();
+ public async getByKey(
+ aKey: PropertyKey,
+ { skipCache = false } = {}
+ ) {
+ const properties = await this.get({ skipCache });
return properties[aKey] as TValue;
}
@@ -53,10 +68,53 @@ export class PropertyService {
}
public async put({ key, value }: { key: PropertyKey; value: string }) {
- return this.prismaService.property.upsert({
+ const property = await this.prismaService.property.upsert({
create: { key, value },
update: { value },
where: { key }
});
+
+ this.invalidateCache();
+
+ return property;
+ }
+
+ /**
+ * Returns the properties from the in-memory cache, falling back to the
+ * database. Callers which write back a modified property must set
+ * skipCache to avoid basing the write on a stale read.
+ */
+ private async getProperties({ skipCache = false } = {}) {
+ if (skipCache) {
+ return this.prismaService.property.findMany();
+ }
+
+ if (
+ this.cachedProperties &&
+ isBefore(new Date(), this.cachedPropertiesExpiresAt)
+ ) {
+ return this.cachedProperties;
+ }
+
+ const properties = this.prismaService.property.findMany().catch((error) => {
+ if (this.cachedProperties === properties) {
+ this.invalidateCache();
+ }
+
+ throw error;
+ });
+
+ this.cachedProperties = properties;
+ this.cachedPropertiesExpiresAt = addMilliseconds(
+ new Date(),
+ PropertyService.CACHE_TTL
+ );
+
+ return this.cachedProperties;
+ }
+
+ private invalidateCache() {
+ this.cachedProperties = undefined;
+ this.cachedPropertiesExpiresAt = undefined;
}
}
From 1770350516c05dddf817f6d727dcdb409f8a873f Mon Sep 17 00:00:00 2001
From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com>
Date: Fri, 31 Jul 2026 18:21:48 +0200
Subject: [PATCH 25/86] Bugfix/static portfolio analysis rules for portfolio
with no holdings (#7466)
* Fix static portfolio analysis rules for portfolio with no holdings
* Update changelog
---
CHANGELOG.md | 14 ++
.../src/app/portfolio/portfolio.service.ts | 208 +++++++++---------
2 files changed, 117 insertions(+), 105 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index d5c6481e3..d14f77f5e 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -14,6 +14,20 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- Improved the performance of the property service by caching the properties in memory
- Improved the language localization for German (`de`)
+### Fixed
+
+- Fixed the static portfolio analysis rule for a portfolio with no holdings: _Asset Class Cluster Risks_ (Equity)
+- Fixed the static portfolio analysis rule for a portfolio with no holdings: _Asset Class Cluster Risks_ (Fixed Income)
+- Fixed the static portfolio analysis rule for a portfolio with no holdings: _Currency Cluster Risks_ (Investment)
+- Fixed the static portfolio analysis rule for a portfolio with no holdings: _Currency Cluster Risks_ (Investment: Base Currency)
+- Fixed the static portfolio analysis rule for a portfolio with no holdings: _Economic Market Cluster Risks_ (Developed Markets)
+- Fixed the static portfolio analysis rule for a portfolio with no holdings: _Economic Market Cluster Risks_ (Emerging Markets)
+- Fixed the static portfolio analysis rule for a portfolio with no holdings: _Regional Market Cluster Risks_ (Asia-Pacific)
+- Fixed the static portfolio analysis rule for a portfolio with no holdings: _Regional Market Cluster Risks_ (Emerging Markets)
+- Fixed the static portfolio analysis rule for a portfolio with no holdings: _Regional Market Cluster Risks_ (Europe)
+- Fixed the static portfolio analysis rule for a portfolio with no holdings: _Regional Market Cluster Risks_ (Japan)
+- Fixed the static portfolio analysis rule for a portfolio with no holdings: _Regional Market Cluster Risks_ (North America)
+
## 3.37.0 - 2026-07-30
### Added
diff --git a/apps/api/src/app/portfolio/portfolio.service.ts b/apps/api/src/app/portfolio/portfolio.service.ts
index 6a3c1f145..d1aff3811 100644
--- a/apps/api/src/app/portfolio/portfolio.service.ts
+++ b/apps/api/src/app/portfolio/portfolio.service.ts
@@ -1126,6 +1126,8 @@ export class PortfolioService {
withSummary: true
});
+ const hasOpenHoldings = Object.keys(holdings).length > 0;
+
const marketsAdvancedTotalInBaseCurrency = getSum(
Object.values(marketsAdvanced).map(({ valueInBaseCurrency }) => {
return new Big(valueInBaseCurrency);
@@ -1185,26 +1187,25 @@ export class PortfolioService {
id: 'rule.currencyClusterRisk.category',
languageCode: userSettings.language
}),
- rules:
- summary.activityCount > 0
- ? await this.rulesService.evaluate(
- [
- new CurrencyClusterRiskBaseCurrencyCurrentInvestment(
- this.exchangeRateDataService,
- this.i18nService,
- Object.values(holdings),
- userSettings.language
- ),
- new CurrencyClusterRiskCurrentInvestment(
- this.exchangeRateDataService,
- this.i18nService,
- Object.values(holdings),
- userSettings.language
- )
- ],
- userSettings
- )
- : undefined
+ rules: hasOpenHoldings
+ ? await this.rulesService.evaluate(
+ [
+ new CurrencyClusterRiskBaseCurrencyCurrentInvestment(
+ this.exchangeRateDataService,
+ this.i18nService,
+ Object.values(holdings),
+ userSettings.language
+ ),
+ new CurrencyClusterRiskCurrentInvestment(
+ this.exchangeRateDataService,
+ this.i18nService,
+ Object.values(holdings),
+ userSettings.language
+ )
+ ],
+ userSettings
+ )
+ : undefined
},
{
key: 'assetClassClusterRisk',
@@ -1212,26 +1213,25 @@ export class PortfolioService {
id: 'rule.assetClassClusterRisk.category',
languageCode: userSettings.language
}),
- rules:
- summary.activityCount > 0
- ? await this.rulesService.evaluate(
- [
- new AssetClassClusterRiskEquity(
- this.exchangeRateDataService,
- this.i18nService,
- userSettings.language,
- Object.values(holdings)
- ),
- new AssetClassClusterRiskFixedIncome(
- this.exchangeRateDataService,
- this.i18nService,
- userSettings.language,
- Object.values(holdings)
- )
- ],
- userSettings
- )
- : undefined
+ rules: hasOpenHoldings
+ ? await this.rulesService.evaluate(
+ [
+ new AssetClassClusterRiskEquity(
+ this.exchangeRateDataService,
+ this.i18nService,
+ userSettings.language,
+ Object.values(holdings)
+ ),
+ new AssetClassClusterRiskFixedIncome(
+ this.exchangeRateDataService,
+ this.i18nService,
+ userSettings.language,
+ Object.values(holdings)
+ )
+ ],
+ userSettings
+ )
+ : undefined
},
{
key: 'accountClusterRisk',
@@ -1266,28 +1266,27 @@ export class PortfolioService {
id: 'rule.economicMarketClusterRisk.category',
languageCode: userSettings.language
}),
- rules:
- summary.activityCount > 0
- ? await this.rulesService.evaluate(
- [
- new EconomicMarketClusterRiskDevelopedMarkets(
- this.exchangeRateDataService,
- this.i18nService,
- marketsTotalInBaseCurrency,
- markets.developedMarkets.valueInBaseCurrency,
- userSettings.language
- ),
- new EconomicMarketClusterRiskEmergingMarkets(
- this.exchangeRateDataService,
- this.i18nService,
- marketsTotalInBaseCurrency,
- markets.emergingMarkets.valueInBaseCurrency,
- userSettings.language
- )
- ],
- userSettings
- )
- : undefined
+ rules: hasOpenHoldings
+ ? await this.rulesService.evaluate(
+ [
+ new EconomicMarketClusterRiskDevelopedMarkets(
+ this.exchangeRateDataService,
+ this.i18nService,
+ marketsTotalInBaseCurrency,
+ markets.developedMarkets.valueInBaseCurrency,
+ userSettings.language
+ ),
+ new EconomicMarketClusterRiskEmergingMarkets(
+ this.exchangeRateDataService,
+ this.i18nService,
+ marketsTotalInBaseCurrency,
+ markets.emergingMarkets.valueInBaseCurrency,
+ userSettings.language
+ )
+ ],
+ userSettings
+ )
+ : undefined
},
{
key: 'regionalMarketClusterRisk',
@@ -1295,49 +1294,48 @@ export class PortfolioService {
id: 'rule.regionalMarketClusterRisk.category',
languageCode: userSettings.language
}),
- rules:
- summary.activityCount > 0
- ? await this.rulesService.evaluate(
- [
- new RegionalMarketClusterRiskAsiaPacific(
- this.exchangeRateDataService,
- this.i18nService,
- userSettings.language,
- marketsAdvancedTotalInBaseCurrency,
- marketsAdvanced.asiaPacific.valueInBaseCurrency
- ),
- new RegionalMarketClusterRiskEmergingMarkets(
- this.exchangeRateDataService,
- this.i18nService,
- userSettings.language,
- marketsAdvancedTotalInBaseCurrency,
- marketsAdvanced.emergingMarkets.valueInBaseCurrency
- ),
- new RegionalMarketClusterRiskEurope(
- this.exchangeRateDataService,
- this.i18nService,
- userSettings.language,
- marketsAdvancedTotalInBaseCurrency,
- marketsAdvanced.europe.valueInBaseCurrency
- ),
- new RegionalMarketClusterRiskJapan(
- this.exchangeRateDataService,
- this.i18nService,
- userSettings.language,
- marketsAdvancedTotalInBaseCurrency,
- marketsAdvanced.japan.valueInBaseCurrency
- ),
- new RegionalMarketClusterRiskNorthAmerica(
- this.exchangeRateDataService,
- this.i18nService,
- userSettings.language,
- marketsAdvancedTotalInBaseCurrency,
- marketsAdvanced.northAmerica.valueInBaseCurrency
- )
- ],
- userSettings
- )
- : undefined
+ rules: hasOpenHoldings
+ ? await this.rulesService.evaluate(
+ [
+ new RegionalMarketClusterRiskAsiaPacific(
+ this.exchangeRateDataService,
+ this.i18nService,
+ userSettings.language,
+ marketsAdvancedTotalInBaseCurrency,
+ marketsAdvanced.asiaPacific.valueInBaseCurrency
+ ),
+ new RegionalMarketClusterRiskEmergingMarkets(
+ this.exchangeRateDataService,
+ this.i18nService,
+ userSettings.language,
+ marketsAdvancedTotalInBaseCurrency,
+ marketsAdvanced.emergingMarkets.valueInBaseCurrency
+ ),
+ new RegionalMarketClusterRiskEurope(
+ this.exchangeRateDataService,
+ this.i18nService,
+ userSettings.language,
+ marketsAdvancedTotalInBaseCurrency,
+ marketsAdvanced.europe.valueInBaseCurrency
+ ),
+ new RegionalMarketClusterRiskJapan(
+ this.exchangeRateDataService,
+ this.i18nService,
+ userSettings.language,
+ marketsAdvancedTotalInBaseCurrency,
+ marketsAdvanced.japan.valueInBaseCurrency
+ ),
+ new RegionalMarketClusterRiskNorthAmerica(
+ this.exchangeRateDataService,
+ this.i18nService,
+ userSettings.language,
+ marketsAdvancedTotalInBaseCurrency,
+ marketsAdvanced.northAmerica.valueInBaseCurrency
+ )
+ ],
+ userSettings
+ )
+ : undefined
},
{
key: 'fees',
From bf923f1afe27705c2f758a68445ea81d127a4be5 Mon Sep 17 00:00:00 2001
From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com>
Date: Fri, 31 Jul 2026 19:22:56 +0200
Subject: [PATCH 26/86] Task/improve style of tabs in various dialogs on mobile
(#7481)
* Improve tabs style
* Update changelog
---
CHANGELOG.md | 3 +++
.../account-detail-dialog/account-detail-dialog.html | 1 +
.../asset-profile-dialog/asset-profile-dialog.html | 1 +
.../holding-detail-dialog/holding-detail-dialog.html | 1 +
apps/client/src/styles.scss | 11 +++++++++++
5 files changed, 17 insertions(+)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index d14f77f5e..62cbee836 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -9,6 +9,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
### Changed
+- Improved the style of the tabs in the account detail dialog on mobile
+- Improved the style of the tabs in the holding detail dialog on mobile
+- Improved the style of the tabs in the asset profile dialog of the admin control panel on mobile
- Improved the style of the empty state in the _Fear & Greed Index_ component
- Improved the style of the type filter in the activities table component (experimental)
- Improved the performance of the property service by caching the properties in memory
diff --git a/apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html b/apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
index 32a11717f..ff39f23b3 100644
--- a/apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
+++ b/apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
@@ -33,6 +33,7 @@
diff --git a/apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html b/apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
index c9abdeeb7..f0b914b1c 100644
--- a/apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
+++ b/apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
@@ -105,6 +105,7 @@
diff --git a/apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html b/apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
index 464f0b6b2..c4f53497f 100644
--- a/apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
+++ b/apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
@@ -39,6 +39,7 @@
diff --git a/apps/client/src/styles.scss b/apps/client/src/styles.scss
index 6ef55cb32..739af30ae 100644
--- a/apps/client/src/styles.scss
+++ b/apps/client/src/styles.scss
@@ -411,6 +411,17 @@ ngx-skeleton-loader {
.mdc-dialog__content {
--mat-dialog-supporting-text-color: rgba(var(--dark-primary-text));
}
+
+ @media (max-width: 575.98px) {
+ // Tabs fill the available width on mobile
+ .mat-mdc-tab-group {
+ .mat-mdc-tab {
+ flex-grow: 1;
+ min-width: unset;
+ padding: 0 0.5rem;
+ }
+ }
+ }
}
.mat-mdc-fab,
From eb62190c74b47b731702add1eae1abba7983b5dc Mon Sep 17 00:00:00 2001
From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com>
Date: Fri, 31 Jul 2026 19:32:28 +0200
Subject: [PATCH 27/86] Task/add activity count to delete menu item and
confirmation dialog of activities table component (#7489)
* Add activity count to delete menu and confirmation dialog
* Update changelog
---
CHANGELOG.md | 2 ++
.../activities-table.component.html | 13 +++++++++----
.../activities-table/activities-table.component.ts | 12 +++++++++++-
3 files changed, 22 insertions(+), 5 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 62cbee836..421a1bd6c 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -13,6 +13,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- Improved the style of the tabs in the holding detail dialog on mobile
- Improved the style of the tabs in the asset profile dialog of the admin control panel on mobile
- Improved the style of the empty state in the _Fear & Greed Index_ component
+- Added the activity count to the delete menu item of the activities table
+- Added the activity count to the deletion confirmation dialog of the activities table
- Improved the style of the type filter in the activities table component (experimental)
- Improved the performance of the property service by caching the properties in memory
- Improved the language localization for German (`de`)
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 3d91852a0..1ff8496a9 100644
--- a/libs/ui/src/lib/activities-table/activities-table.component.html
+++ b/libs/ui/src/lib/activities-table/activities-table.component.html
@@ -84,14 +84,19 @@
- Delete Activities
+ @if (canDeleteActivities()) {
+ Delete {{ totalItems > 1 ? totalItems : '' }}
+ {totalItems, plural, =1 {Activity} other {Activities}}
+ } @else {
+ Delete Activities
+ }
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 573c8c93a..a4e7403a7 100644
--- a/libs/ui/src/lib/activities-table/activities-table.component.ts
+++ b/libs/ui/src/lib/activities-table/activities-table.component.ts
@@ -282,6 +282,13 @@ export class GfActivitiesTableComponent implements AfterViewInit, OnInit {
);
}
+ public canDeleteActivities() {
+ return (
+ (this.dataSource()?.data.length ?? 0) > 0 &&
+ this.hasPermissionToDeleteActivity
+ );
+ }
+
public isExcludedFromAnalysis(activity: Activity) {
return (
(activity.account && isAccountExcluded(activity.account)) ??
@@ -314,7 +321,10 @@ export class GfActivitiesTableComponent implements AfterViewInit, OnInit {
this.activitiesDeleted.emit();
},
confirmType: ConfirmationDialogType.Warn,
- title: $localize`Do you really want to delete these activities?`
+ title:
+ this.totalItems === 1
+ ? $localize`Do you really want to delete this activity?`
+ : $localize`Do you really want to delete these ${this.totalItems}:count: activities?`
});
}
From 81e4abbfeb8affcfbf25d189ef4ace300011685b Mon Sep 17 00:00:00 2001
From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com>
Date: Fri, 31 Jul 2026 19:41:24 +0200
Subject: [PATCH 28/86] Feature/add daily request limit (#7487)
Add daily request limit
---
apps/api/src/app/auth/api-key.strategy.ts | 7 ++
apps/api/src/app/auth/jwt.strategy.ts | 7 ++
.../app/portfolio/portfolio.service.spec.ts | 1 +
apps/api/src/app/user/user.service.ts | 70 +++++++++++++++++--
libs/common/src/lib/config.ts | 3 +
5 files changed, 84 insertions(+), 4 deletions(-)
diff --git a/apps/api/src/app/auth/api-key.strategy.ts b/apps/api/src/app/auth/api-key.strategy.ts
index f9937aaa7..232a272bc 100644
--- a/apps/api/src/app/auth/api-key.strategy.ts
+++ b/apps/api/src/app/auth/api-key.strategy.ts
@@ -35,6 +35,13 @@ export class ApiKeyStrategy extends PassportStrategy(
);
}
+ if (await this.userService.isDailyRequestLimitExceeded({ user })) {
+ throw new HttpException(
+ getReasonPhrase(StatusCodes.TOO_MANY_REQUESTS),
+ StatusCodes.TOO_MANY_REQUESTS
+ );
+ }
+
await this.prismaService.analytics.upsert({
create: { user: { connect: { id: user.id } } },
update: {
diff --git a/apps/api/src/app/auth/jwt.strategy.ts b/apps/api/src/app/auth/jwt.strategy.ts
index c70e8fb60..189389a86 100644
--- a/apps/api/src/app/auth/jwt.strategy.ts
+++ b/apps/api/src/app/auth/jwt.strategy.ts
@@ -42,6 +42,13 @@ export class JwtStrategy extends PassportStrategy(Strategy, 'jwt') {
);
}
+ if (await this.userService.isDailyRequestLimitExceeded({ user })) {
+ throw new HttpException(
+ getReasonPhrase(StatusCodes.TOO_MANY_REQUESTS),
+ StatusCodes.TOO_MANY_REQUESTS
+ );
+ }
+
const country =
countriesAndTimezones.getCountryForTimezone(timezone)?.id;
diff --git a/apps/api/src/app/portfolio/portfolio.service.spec.ts b/apps/api/src/app/portfolio/portfolio.service.spec.ts
index c16590cce..d85258f7e 100644
--- a/apps/api/src/app/portfolio/portfolio.service.spec.ts
+++ b/apps/api/src/app/portfolio/portfolio.service.spec.ts
@@ -92,6 +92,7 @@ describe('PortfolioService', () => {
null,
null,
null,
+ null,
null
);
diff --git a/apps/api/src/app/user/user.service.ts b/apps/api/src/app/user/user.service.ts
index 7f3631c54..febc967d2 100644
--- a/apps/api/src/app/user/user.service.ts
+++ b/apps/api/src/app/user/user.service.ts
@@ -31,9 +31,12 @@ import {
DEFAULT_LOCALE,
PROPERTY_API_KEY_GHOSTFOLIO,
PROPERTY_IS_READ_ONLY_MODE,
+ PROPERTY_MAX_DAILY_REQUESTS,
PROPERTY_REFERRAL_PARTNERS,
PROPERTY_SYSTEM_MESSAGE,
- TAG_ID_EXCLUDE_FROM_ANALYSIS
+ TAG_ID_EXCLUDE_FROM_ANALYSIS,
+ THROTTLE_DAILY_KEY,
+ THROTTLE_DAILY_TTL
} from '@ghostfolio/common/config';
import { SubscriptionType } from '@ghostfolio/common/enums';
import {
@@ -50,15 +53,18 @@ import {
import { UserWithSettings } from '@ghostfolio/common/types';
import { PerformanceCalculationType } from '@ghostfolio/common/types/performance-calculation-type.type';
-import { Injectable } from '@nestjs/common';
+import { Injectable, Logger } from '@nestjs/common';
import { EventEmitter2 } from '@nestjs/event-emitter';
+import { InjectThrottlerStorage, ThrottlerStorage } from '@nestjs/throttler';
import { Prisma, Role, Settings, User } from '@prisma/client';
import { differenceInDays, subDays } from 'date-fns';
-import { without } from 'lodash';
+import { isNil, without } from 'lodash';
import { createHmac } from 'node:crypto';
@Injectable()
export class UserService {
+ private readonly logger = new Logger(UserService.name);
+
public constructor(
private readonly activitiesService: ActivitiesService,
private readonly configurationService: ConfigurationService,
@@ -67,7 +73,9 @@ export class UserService {
private readonly prismaService: PrismaService,
private readonly propertyService: PropertyService,
private readonly subscriptionService: SubscriptionService,
- private readonly tagService: TagService
+ private readonly tagService: TagService,
+ @InjectThrottlerStorage()
+ private readonly throttlerStorage: ThrottlerStorage
) {}
public async count(args?: Prisma.UserCountArgs) {
@@ -228,6 +236,38 @@ export class UserService {
return usersWithAdminRole.length > 0;
}
+ public async isDailyRequestLimitExceeded({
+ user
+ }: {
+ user: UserWithSettings;
+ }) {
+ if (user.subscription?.type === SubscriptionType.Premium) {
+ return false;
+ }
+
+ const maxDailyRequests = await this.getMaxDailyRequests();
+
+ if (maxDailyRequests === undefined) {
+ return false;
+ }
+
+ try {
+ const { isBlocked } = await this.throttlerStorage.increment(
+ `${THROTTLE_DAILY_KEY}-${user.id}`,
+ THROTTLE_DAILY_TTL,
+ maxDailyRequests,
+ THROTTLE_DAILY_TTL,
+ THROTTLE_DAILY_KEY
+ );
+
+ return isBlocked;
+ } catch (error) {
+ this.logger.error(error);
+
+ return false;
+ }
+ }
+
public async user(
userWhereUniqueInput: Prisma.UserWhereUniqueInput
): Promise {
@@ -782,4 +822,26 @@ export class UserService {
return settings;
}
+
+ private async getMaxDailyRequests() {
+ const value = await this.propertyService.getByKey(
+ PROPERTY_MAX_DAILY_REQUESTS
+ );
+
+ if (isNil(value) || value === '') {
+ return undefined;
+ }
+
+ const maxDailyRequests = Number(value);
+
+ if (!Number.isInteger(maxDailyRequests) || maxDailyRequests < 0) {
+ this.logger.warn(
+ `The property ${PROPERTY_MAX_DAILY_REQUESTS} is not a non-negative integer ("${value}"), the daily request limit is not applied`
+ );
+
+ return undefined;
+ }
+
+ return maxDailyRequests;
+ }
}
diff --git a/libs/common/src/lib/config.ts b/libs/common/src/lib/config.ts
index 6b070755f..890c29fbb 100644
--- a/libs/common/src/lib/config.ts
+++ b/libs/common/src/lib/config.ts
@@ -253,6 +253,7 @@ export const PROPERTY_DEMO_USER_ID = 'DEMO_USER_ID';
export const PROPERTY_IS_DATA_GATHERING_ENABLED = 'IS_DATA_GATHERING_ENABLED';
export const PROPERTY_IS_READ_ONLY_MODE = 'IS_READ_ONLY_MODE';
export const PROPERTY_IS_USER_SIGNUP_ENABLED = 'IS_USER_SIGNUP_ENABLED';
+export const PROPERTY_MAX_DAILY_REQUESTS = 'MAX_DAILY_REQUESTS';
export const PROPERTY_OPENROUTER_MODEL = 'OPENROUTER_MODEL';
export const PROPERTY_OPENROUTER_MODEL_WEB_FETCH = 'OPENROUTER_MODEL_WEB_FETCH';
export const PROPERTY_PROXY_ROUTES = 'PROXY_ROUTES';
@@ -326,6 +327,8 @@ export const TAG_ID_EXCLUDE_FROM_ANALYSIS =
'f2e868af-8333-459f-b161-cbc6544c24bd';
export const TAG_ID_DEMO = 'efa08cb3-9b9d-4974-ac68-db13a19c4874';
+export const THROTTLE_DAILY_KEY = 'daily';
+export const THROTTLE_DAILY_TTL = ms('1 day');
export const THROTTLE_DEFAULT_LIMIT = 10;
export const THROTTLE_DEFAULT_TTL = ms('1 minute');
export const THROTTLE_SIGNUP_LIMIT = 5;
From 0a01d4234a947bc4edebbf9f64257fbc2fbbc094 Mon Sep 17 00:00:00 2001
From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com>
Date: Fri, 31 Jul 2026 19:50:09 +0200
Subject: [PATCH 29/86] Bugfix/daily requests check in Ghostfolio data provider
(#7485)
Fix daily requests check
---
.../ghostfolio/ghostfolio.controller.ts | 12 ++++++------
.../data-providers/ghostfolio/ghostfolio.service.ts | 8 ++++++--
apps/api/src/app/user/user.service.ts | 2 +-
3 files changed, 13 insertions(+), 9 deletions(-)
diff --git a/apps/api/src/app/endpoints/data-providers/ghostfolio/ghostfolio.controller.ts b/apps/api/src/app/endpoints/data-providers/ghostfolio/ghostfolio.controller.ts
index 5d6979acc..6e5f48d63 100644
--- a/apps/api/src/app/endpoints/data-providers/ghostfolio/ghostfolio.controller.ts
+++ b/apps/api/src/app/endpoints/data-providers/ghostfolio/ghostfolio.controller.ts
@@ -51,7 +51,7 @@ export class GhostfolioController {
const maxDailyRequests = await this.ghostfolioService.getMaxDailyRequests();
if (
- this.request.user.dataProviderGhostfolioDailyRequests > maxDailyRequests
+ this.request.user.dataProviderGhostfolioDailyRequests >= maxDailyRequests
) {
throw new HttpException(
getReasonPhrase(StatusCodes.TOO_MANY_REQUESTS),
@@ -95,7 +95,7 @@ export class GhostfolioController {
const maxDailyRequests = await this.ghostfolioService.getMaxDailyRequests();
if (
- this.request.user.dataProviderGhostfolioDailyRequests > maxDailyRequests
+ this.request.user.dataProviderGhostfolioDailyRequests >= maxDailyRequests
) {
throw new HttpException(
getReasonPhrase(StatusCodes.TOO_MANY_REQUESTS),
@@ -135,7 +135,7 @@ export class GhostfolioController {
const maxDailyRequests = await this.ghostfolioService.getMaxDailyRequests();
if (
- this.request.user.dataProviderGhostfolioDailyRequests > maxDailyRequests
+ this.request.user.dataProviderGhostfolioDailyRequests >= maxDailyRequests
) {
throw new HttpException(
getReasonPhrase(StatusCodes.TOO_MANY_REQUESTS),
@@ -176,7 +176,7 @@ export class GhostfolioController {
const maxDailyRequests = await this.ghostfolioService.getMaxDailyRequests();
if (
- this.request.user.dataProviderGhostfolioDailyRequests > maxDailyRequests
+ this.request.user.dataProviderGhostfolioDailyRequests >= maxDailyRequests
) {
throw new HttpException(
getReasonPhrase(StatusCodes.TOO_MANY_REQUESTS),
@@ -215,7 +215,7 @@ export class GhostfolioController {
const maxDailyRequests = await this.ghostfolioService.getMaxDailyRequests();
if (
- this.request.user.dataProviderGhostfolioDailyRequests > maxDailyRequests
+ this.request.user.dataProviderGhostfolioDailyRequests >= maxDailyRequests
) {
throw new HttpException(
getReasonPhrase(StatusCodes.TOO_MANY_REQUESTS),
@@ -252,7 +252,7 @@ export class GhostfolioController {
const maxDailyRequests = await this.ghostfolioService.getMaxDailyRequests();
if (
- this.request.user.dataProviderGhostfolioDailyRequests > maxDailyRequests
+ this.request.user.dataProviderGhostfolioDailyRequests >= maxDailyRequests
) {
throw new HttpException(
getReasonPhrase(StatusCodes.TOO_MANY_REQUESTS),
diff --git a/apps/api/src/app/endpoints/data-providers/ghostfolio/ghostfolio.service.ts b/apps/api/src/app/endpoints/data-providers/ghostfolio/ghostfolio.service.ts
index 2c22f0c10..31d20b99e 100644
--- a/apps/api/src/app/endpoints/data-providers/ghostfolio/ghostfolio.service.ts
+++ b/apps/api/src/app/endpoints/data-providers/ghostfolio/ghostfolio.service.ts
@@ -326,8 +326,12 @@ export class GhostfolioService {
}
public async incrementDailyRequests({ userId }: { userId: string }) {
- await this.prismaService.analytics.update({
- data: {
+ await this.prismaService.analytics.upsert({
+ create: {
+ dataProviderGhostfolioDailyRequests: 1,
+ user: { connect: { id: userId } }
+ },
+ update: {
dataProviderGhostfolioDailyRequests: { increment: 1 }
},
where: { userId }
diff --git a/apps/api/src/app/user/user.service.ts b/apps/api/src/app/user/user.service.ts
index febc967d2..b706e4702 100644
--- a/apps/api/src/app/user/user.service.ts
+++ b/apps/api/src/app/user/user.service.ts
@@ -326,7 +326,7 @@ export class UserService {
updatedAt,
activityCount: analytics?.activityCount,
dataProviderGhostfolioDailyRequests:
- analytics?.dataProviderGhostfolioDailyRequests
+ analytics?.dataProviderGhostfolioDailyRequests ?? 0
};
if (user.settings) {
From 9b3f7eff5fe55ffb0288a6546960901b08bbd1b7 Mon Sep 17 00:00:00 2001
From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com>
Date: Fri, 31 Jul 2026 19:51:45 +0200
Subject: [PATCH 30/86] Task/improve search log output for unsupported queries
(#7480)
* Improve search log output for unsupported queries
* Update changelog
---
CHANGELOG.md | 2 ++
.../data-providers/ghostfolio/ghostfolio.service.ts | 13 +++++++------
.../services/data-provider/data-provider.service.ts | 7 +++++--
.../yahoo-finance/yahoo-finance.service.ts | 6 +++++-
libs/common/src/lib/config.ts | 2 ++
libs/common/src/lib/helper.ts | 5 +++++
libs/ui/src/lib/assistant/assistant.component.ts | 9 +++++----
.../symbol-autocomplete.component.ts | 8 ++++++--
8 files changed, 37 insertions(+), 15 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 421a1bd6c..83ff99150 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -16,6 +16,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- Added the activity count to the delete menu item of the activities table
- Added the activity count to the deletion confirmation dialog of the activities table
- Improved the style of the type filter in the activities table component (experimental)
+- Improved the search functionality by trimming the query
+- Improved the log output in the search functionality of the _Yahoo Finance_ service for unsupported queries
- Improved the performance of the property service by caching the properties in memory
- Improved the language localization for German (`de`)
diff --git a/apps/api/src/app/endpoints/data-providers/ghostfolio/ghostfolio.service.ts b/apps/api/src/app/endpoints/data-providers/ghostfolio/ghostfolio.service.ts
index 31d20b99e..b858688c2 100644
--- a/apps/api/src/app/endpoints/data-providers/ghostfolio/ghostfolio.service.ts
+++ b/apps/api/src/app/endpoints/data-providers/ghostfolio/ghostfolio.service.ts
@@ -17,7 +17,10 @@ import {
DERIVED_CURRENCIES
} from '@ghostfolio/common/config';
import { PROPERTY_DATA_SOURCES_GHOSTFOLIO_DATA_PROVIDER_MAX_REQUESTS } from '@ghostfolio/common/config';
-import { getAssetProfileIdentifier } from '@ghostfolio/common/helper';
+import {
+ getAssetProfileIdentifier,
+ isValidSearchQuery
+} from '@ghostfolio/common/helper';
import {
DataProviderGhostfolioAssetProfileResponse,
DataProviderHistoricalResponse,
@@ -344,7 +347,9 @@ export class GhostfolioService {
}: GetSearchParams): Promise {
const results: LookupResponse = { items: [] };
- if (!query) {
+ query = query?.trim();
+
+ if (!isValidSearchQuery(query)) {
return results;
}
@@ -352,10 +357,6 @@ export class GhostfolioService {
let lookupItems: LookupItem[] = [];
const promises: Promise<{ items: LookupItem[] }>[] = [];
- if (query?.length < 2) {
- return { items: lookupItems };
- }
-
for (const dataProviderService of this.getDataProviderServices()) {
promises.push(
dataProviderService.search({
diff --git a/apps/api/src/services/data-provider/data-provider.service.ts b/apps/api/src/services/data-provider/data-provider.service.ts
index e8d5f5030..4c273f2da 100644
--- a/apps/api/src/services/data-provider/data-provider.service.ts
+++ b/apps/api/src/services/data-provider/data-provider.service.ts
@@ -20,7 +20,8 @@ import {
getCurrencyFromSymbol,
getStartOfUtcDate,
isCurrency,
- isDerivedCurrency
+ isDerivedCurrency,
+ isValidSearchQuery
} from '@ghostfolio/common/helper';
import {
AssetProfileIdentifier,
@@ -838,7 +839,9 @@ export class DataProviderService implements OnModuleInit {
let lookupItems: LookupItem[] = [];
const promises: Promise[] = [];
- if (query?.length < 2) {
+ query = query?.trim();
+
+ if (!isValidSearchQuery(query)) {
return { items: lookupItems };
}
diff --git a/apps/api/src/services/data-provider/yahoo-finance/yahoo-finance.service.ts b/apps/api/src/services/data-provider/yahoo-finance/yahoo-finance.service.ts
index 52fb5d5a8..364354f6b 100644
--- a/apps/api/src/services/data-provider/yahoo-finance/yahoo-finance.service.ts
+++ b/apps/api/src/services/data-provider/yahoo-finance/yahoo-finance.service.ts
@@ -330,7 +330,11 @@ export class YahooFinanceService implements DataProviderInterface {
});
}
} catch (error) {
- this.logger.error(error);
+ if (error?.name === 'BadRequestError') {
+ this.logger.warn(`Could not search for "${query}": ${error.message}`);
+ } else {
+ this.logger.error(error);
+ }
}
return { items };
diff --git a/libs/common/src/lib/config.ts b/libs/common/src/lib/config.ts
index 890c29fbb..08fb99e28 100644
--- a/libs/common/src/lib/config.ts
+++ b/libs/common/src/lib/config.ts
@@ -288,6 +288,8 @@ export const REPLACE_NAME_PARTS = [
'Xtrackers (IE) Plc -'
];
+export const SEARCH_QUERY_MINIMUM_LENGTH = 2;
+
export const SECTORS = [
'Basic Materials',
'Communication Services',
diff --git a/libs/common/src/lib/helper.ts b/libs/common/src/lib/helper.ts
index b2a3ab419..98f097b44 100644
--- a/libs/common/src/lib/helper.ts
+++ b/libs/common/src/lib/helper.ts
@@ -41,6 +41,7 @@ import {
DERIVED_CURRENCIES,
ghostfolioFearAndGreedIndexSymbolCryptocurrencies,
ghostfolioFearAndGreedIndexSymbolStocks,
+ SEARCH_QUERY_MINIMUM_LENGTH,
TAG_ID_EXCLUDE_FROM_ANALYSIS
} from './config';
import {
@@ -509,6 +510,10 @@ export function isRootCurrency(aCurrency: string) {
});
}
+export function isValidSearchQuery(aQuery: string) {
+ return aQuery?.trim().length >= SEARCH_QUERY_MINIMUM_LENGTH;
+}
+
export function parseDate(date: string): Date | undefined {
if (!date) {
return undefined;
diff --git a/libs/ui/src/lib/assistant/assistant.component.ts b/libs/ui/src/lib/assistant/assistant.component.ts
index 471420937..9ef6c9f1c 100644
--- a/libs/ui/src/lib/assistant/assistant.component.ts
+++ b/libs/ui/src/lib/assistant/assistant.component.ts
@@ -202,6 +202,11 @@ export class GfAssistantComponent implements OnChanges, OnDestroy, OnInit {
this.searchFormControl.valueChanges
.pipe(
map((searchTerm) => {
+ return searchTerm?.trim();
+ }),
+ debounceTime(300),
+ distinctUntilChanged(),
+ tap(() => {
this.isLoading = {
accounts: true,
assetProfiles: true,
@@ -216,11 +221,7 @@ export class GfAssistantComponent implements OnChanges, OnDestroy, OnInit {
};
this.changeDetectorRef.markForCheck();
-
- return searchTerm?.trim();
}),
- debounceTime(300),
- distinctUntilChanged(),
switchMap((searchTerm) => {
const results = {
accounts: [],
diff --git a/libs/ui/src/lib/symbol-autocomplete/symbol-autocomplete.component.ts b/libs/ui/src/lib/symbol-autocomplete/symbol-autocomplete.component.ts
index cab911ef2..704c4ed44 100644
--- a/libs/ui/src/lib/symbol-autocomplete/symbol-autocomplete.component.ts
+++ b/libs/ui/src/lib/symbol-autocomplete/symbol-autocomplete.component.ts
@@ -41,6 +41,7 @@ import {
debounceTime,
distinctUntilChanged,
filter,
+ map,
switchMap
} from 'rxjs/operators';
@@ -128,6 +129,9 @@ export class GfSymbolAutocompleteComponent
this.control.valueChanges
.pipe(
+ map((query) => {
+ return isString(query) ? query.trim() : query;
+ }),
filter((query) => {
if (query?.length === 0) {
this.showDefaultOptions();
@@ -137,13 +141,13 @@ export class GfSymbolAutocompleteComponent
return isString(query);
}),
+ debounceTime(400),
+ distinctUntilChanged(),
tap(() => {
this.isLoading = true;
this.changeDetectorRef.markForCheck();
}),
- debounceTime(400),
- distinctUntilChanged(),
takeUntilDestroyed(this.destroyRef),
switchMap((query: string) => {
return this.dataService.fetchSymbols({
From 031b3b68c7493383c7dcf27a68e40cc159c97a99 Mon Sep 17 00:00:00 2001
From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com>
Date: Fri, 31 Jul 2026 21:38:03 +0200
Subject: [PATCH 31/86] Bugfix/deletion of activities to respect activity type
and date range filter (#7492)
* Respect activity type and date range filter
* Update changelog
---
CHANGELOG.md | 9 ++
.../app/activities/activities-filter.dto.ts | 43 ++++++++++
.../app/activities/activities.controller.ts | 83 ++++++++++---------
.../src/app/activities/activities.service.ts | 9 ++
.../src/app/activities/get-activities.dto.ts | 27 ++++++
apps/api/src/app/export/export.controller.ts | 39 ++++-----
apps/api/src/app/export/export.service.ts | 6 ++
apps/api/src/app/export/get-export.dto.ts | 14 ++++
apps/client/src/app/app.component.ts | 5 +-
.../activities/activities-page.component.ts | 33 +++++---
.../common/src/lib/calculation-helper.spec.ts | 24 +++++-
libs/common/src/lib/calculation-helper.ts | 13 ++-
libs/common/src/lib/config.ts | 14 ++++
libs/common/src/lib/types/date-range.type.ts | 12 +--
.../activities-table.component.html | 11 ++-
.../activities-table.component.ts | 7 ++
libs/ui/src/lib/services/data.service.ts | 34 ++++++--
17 files changed, 292 insertions(+), 91 deletions(-)
create mode 100644 apps/api/src/app/activities/activities-filter.dto.ts
create mode 100644 apps/api/src/app/activities/get-activities.dto.ts
create mode 100644 apps/api/src/app/export/get-export.dto.ts
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 83ff99150..1843d4627 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -7,6 +7,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
## Unreleased
+### Added
+
+- Added support for the date range filter in the export functionality
+- Added support for the date range filter on the portfolio activities page
+
### Changed
- Improved the style of the tabs in the account detail dialog on mobile
@@ -19,10 +24,14 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- Improved the search functionality by trimming the query
- Improved the log output in the search functionality of the _Yahoo Finance_ service for unsupported queries
- Improved the performance of the property service by caching the properties in memory
+- Improved the validation of the query parameters in the activities endpoints
- Improved the language localization for German (`de`)
### Fixed
+- Fixed the calendar year date range in time zones with a negative _UTC_ offset
+- Fixed the deletion of activities to respect the activity type filter on the activities page (experimental)
+- Fixed the deletion of activities to respect the date range filter on the activities page
- Fixed the static portfolio analysis rule for a portfolio with no holdings: _Asset Class Cluster Risks_ (Equity)
- Fixed the static portfolio analysis rule for a portfolio with no holdings: _Asset Class Cluster Risks_ (Fixed Income)
- Fixed the static portfolio analysis rule for a portfolio with no holdings: _Currency Cluster Risks_ (Investment)
diff --git a/apps/api/src/app/activities/activities-filter.dto.ts b/apps/api/src/app/activities/activities-filter.dto.ts
new file mode 100644
index 000000000..e5a22c020
--- /dev/null
+++ b/apps/api/src/app/activities/activities-filter.dto.ts
@@ -0,0 +1,43 @@
+import { DATE_RANGES } from '@ghostfolio/common/config';
+import { DateRange } from '@ghostfolio/common/types';
+
+import { Type as ActivityType } from '@prisma/client';
+import { Transform, TransformFnParams } from 'class-transformer';
+import { IsEnum, IsOptional, IsString, Matches } from 'class-validator';
+import { isString } from 'lodash';
+
+// A named date range or a calendar year like '2024', '2023', '2022', etc.
+const DATE_RANGE_PATTERN = new RegExp(`^(${DATE_RANGES.join('|')}|\\d{4})$`);
+
+export class ActivitiesFilterDto {
+ @IsOptional()
+ @IsString()
+ accounts?: string;
+
+ @IsEnum(ActivityType, { each: true })
+ @IsOptional()
+ @Transform(({ value }: TransformFnParams) => {
+ return isString(value) ? value.split(',') : value;
+ })
+ activityTypes?: ActivityType[];
+
+ @IsOptional()
+ @IsString()
+ assetClasses?: string;
+
+ @IsOptional()
+ @IsString()
+ dataSource?: string;
+
+ @IsOptional()
+ @Matches(DATE_RANGE_PATTERN)
+ range?: DateRange;
+
+ @IsOptional()
+ @IsString()
+ symbol?: string;
+
+ @IsOptional()
+ @IsString()
+ tags?: string;
+}
diff --git a/apps/api/src/app/activities/activities.controller.ts b/apps/api/src/app/activities/activities.controller.ts
index 21dabc639..daade2a59 100644
--- a/apps/api/src/app/activities/activities.controller.ts
+++ b/apps/api/src/app/activities/activities.controller.ts
@@ -18,7 +18,7 @@ import {
ActivityResponse
} from '@ghostfolio/common/interfaces';
import { permissions } from '@ghostfolio/common/permissions';
-import type { DateRange, RequestWithUser } from '@ghostfolio/common/types';
+import type { RequestWithUser } from '@ghostfolio/common/types';
import {
Body,
@@ -29,7 +29,6 @@ import {
HttpException,
Inject,
Param,
- ParseIntPipe,
Post,
Put,
Query,
@@ -38,11 +37,13 @@ import {
} from '@nestjs/common';
import { REQUEST } from '@nestjs/core';
import { AuthGuard } from '@nestjs/passport';
-import { Order, Prisma, Type as ActivityType } from '@prisma/client';
+import { Order } from '@prisma/client';
import { parseISO } from 'date-fns';
import { StatusCodes, getReasonPhrase } from 'http-status-codes';
+import { ActivitiesFilterDto } from './activities-filter.dto';
import { ActivitiesService } from './activities.service';
+import { GetActivitiesDto } from './get-activities.dto';
@Controller('activities')
export class ActivitiesController {
@@ -60,22 +61,38 @@ export class ActivitiesController {
@UseGuards(AuthGuard('jwt'), HasPermissionGuard)
@UseInterceptors(TransformDataSourceInRequestInterceptor)
public async deleteActivities(
- @Query('accounts') filterByAccounts?: string,
- @Query('assetClasses') filterByAssetClasses?: string,
- @Query('dataSource') filterByDataSource?: string,
- @Query('symbol') filterBySymbol?: string,
- @Query('tags') filterByTags?: string
+ @Headers(HEADER_KEY_IMPERSONATION.toLowerCase()) impersonationId: string,
+ @Query() query: ActivitiesFilterDto
): Promise {
+ if (impersonationId) {
+ throw new HttpException(
+ getReasonPhrase(StatusCodes.FORBIDDEN),
+ StatusCodes.FORBIDDEN
+ );
+ }
+
+ let endDate: Date;
+ let startDate: Date;
+
+ if (query.range) {
+ ({ endDate, startDate } = getIntervalFromDateRange({
+ dateRange: query.range
+ }));
+ }
+
const filters = this.apiService.buildFiltersFromQueryParams({
- filterByAccounts,
- filterByAssetClasses,
- filterByDataSource,
- filterBySymbol,
- filterByTags
+ filterByAccounts: query.accounts,
+ filterByAssetClasses: query.assetClasses,
+ filterByDataSource: query.dataSource,
+ filterBySymbol: query.symbol,
+ filterByTags: query.tags
});
return this.activitiesService.deleteActivities({
+ endDate,
filters,
+ startDate,
+ types: query.activityTypes,
userId: this.request.user.id
});
}
@@ -108,51 +125,41 @@ export class ActivitiesController {
@UseInterceptors(TransformDataSourceInResponseInterceptor)
public async getAllActivities(
@Headers(HEADER_KEY_IMPERSONATION.toLowerCase()) impersonationId: string,
- @Query('accounts') filterByAccounts?: string,
- @Query('activityTypes') filterByTypes?: string,
- @Query('assetClasses') filterByAssetClasses?: string,
- @Query('dataSource') filterByDataSource?: string,
- @Query('range') dateRange?: DateRange,
- @Query('skip', new ParseIntPipe({ optional: true })) skip?: number,
- @Query('sortColumn') sortColumn?: string,
- @Query('sortDirection') sortDirection?: Prisma.SortOrder,
- @Query('symbol') filterBySymbol?: string,
- @Query('tags') filterByTags?: string,
- @Query('take', new ParseIntPipe({ optional: true })) take?: number
+ @Query() query: GetActivitiesDto
): Promise {
let endDate: Date;
let startDate: Date;
- if (dateRange) {
- ({ endDate, startDate } = getIntervalFromDateRange({ dateRange }));
+ if (query.range) {
+ ({ endDate, startDate } = getIntervalFromDateRange({
+ dateRange: query.range
+ }));
}
const filters = this.apiService.buildFiltersFromQueryParams({
- filterByAccounts,
- filterByAssetClasses,
- filterByDataSource,
- filterBySymbol,
- filterByTags
+ filterByAccounts: query.accounts,
+ filterByAssetClasses: query.assetClasses,
+ filterByDataSource: query.dataSource,
+ filterBySymbol: query.symbol,
+ filterByTags: query.tags
});
const impersonationUserId =
await this.impersonationService.validateImpersonationId(impersonationId);
- const types = (filterByTypes?.split(',') as ActivityType[]) ?? [];
-
const userCurrency = this.request.user.settings.settings.baseCurrency;
const { activities, count } = await this.activitiesService.getActivities({
endDate,
filters,
- skip,
- sortColumn,
- sortDirection,
startDate,
- take,
- types,
userCurrency,
includeDrafts: true,
+ skip: query.skip,
+ sortColumn: query.sortColumn,
+ sortDirection: query.sortDirection,
+ take: query.take,
+ types: query.activityTypes,
userId: impersonationUserId || this.request.user.id,
withExcludedAccountsAndActivities: true
});
diff --git a/apps/api/src/app/activities/activities.service.ts b/apps/api/src/app/activities/activities.service.ts
index 7d6e822c5..da3e99312 100644
--- a/apps/api/src/app/activities/activities.service.ts
+++ b/apps/api/src/app/activities/activities.service.ts
@@ -361,14 +361,23 @@ export class ActivitiesService {
}
public async deleteActivities({
+ endDate,
filters,
+ startDate,
+ types,
userId
}: {
+ endDate?: Date;
filters?: Filter[];
+ startDate?: Date;
+ types?: ActivityType[];
userId: string;
}): Promise {
const { activities } = await this.getActivities({
+ endDate,
filters,
+ startDate,
+ types,
userId,
includeDrafts: true,
userCurrency: undefined,
diff --git a/apps/api/src/app/activities/get-activities.dto.ts b/apps/api/src/app/activities/get-activities.dto.ts
new file mode 100644
index 000000000..0430a89c1
--- /dev/null
+++ b/apps/api/src/app/activities/get-activities.dto.ts
@@ -0,0 +1,27 @@
+import { Prisma } from '@prisma/client';
+import { Type } from 'class-transformer';
+import { IsIn, IsInt, IsOptional, Min } from 'class-validator';
+
+import { ActivitiesFilterDto } from './activities-filter.dto';
+
+export class GetActivitiesDto extends ActivitiesFilterDto {
+ @IsInt()
+ @IsOptional()
+ @Min(0)
+ @Type(() => Number)
+ skip?: number;
+
+ @IsIn(Object.values(Prisma.OrderScalarFieldEnum))
+ @IsOptional()
+ sortColumn?: keyof typeof Prisma.OrderScalarFieldEnum;
+
+ @IsIn(['asc', 'desc'] as Prisma.SortOrder[])
+ @IsOptional()
+ sortDirection?: Prisma.SortOrder;
+
+ @IsInt()
+ @IsOptional()
+ @Min(0)
+ @Type(() => Number)
+ take?: number;
+}
diff --git a/apps/api/src/app/export/export.controller.ts b/apps/api/src/app/export/export.controller.ts
index 4f4f4e6dd..f503088d4 100644
--- a/apps/api/src/app/export/export.controller.ts
+++ b/apps/api/src/app/export/export.controller.ts
@@ -2,6 +2,7 @@ import { HasPermissionGuard } from '@ghostfolio/api/guards/has-permission.guard'
import { TransformDataSourceInRequestInterceptor } from '@ghostfolio/api/interceptors/transform-data-source-in-request/transform-data-source-in-request.interceptor';
import { TransformDataSourceInResponseInterceptor } from '@ghostfolio/api/interceptors/transform-data-source-in-response/transform-data-source-in-response.interceptor';
import { ApiService } from '@ghostfolio/api/services/api/api.service';
+import { getIntervalFromDateRange } from '@ghostfolio/common/calculation-helper';
import { ExportResponse } from '@ghostfolio/common/interfaces';
import type { RequestWithUser } from '@ghostfolio/common/types';
@@ -15,9 +16,9 @@ import {
} from '@nestjs/common';
import { REQUEST } from '@nestjs/core';
import { AuthGuard } from '@nestjs/passport';
-import { Type as ActivityType } from '@prisma/client';
import { ExportService } from './export.service';
+import { GetExportDto } from './get-export.dto';
@Controller('export')
export class ExportController {
@@ -31,30 +32,30 @@ export class ExportController {
@UseGuards(AuthGuard('jwt'), HasPermissionGuard)
@UseInterceptors(TransformDataSourceInRequestInterceptor)
@UseInterceptors(TransformDataSourceInResponseInterceptor)
- public async export(
- @Query('accounts') filterByAccounts?: string,
- @Query('activityIds') filterByActivityIds?: string,
- @Query('activityTypes') filterByTypes?: string,
- @Query('assetClasses') filterByAssetClasses?: string,
- @Query('dataSource') filterByDataSource?: string,
- @Query('symbol') filterBySymbol?: string,
- @Query('tags') filterByTags?: string
- ): Promise {
- const activityIds = filterByActivityIds?.split(',') ?? [];
- const activityTypes = (filterByTypes?.split(',') as ActivityType[]) ?? [];
+ public async export(@Query() query: GetExportDto): Promise {
+ let endDate: Date;
+ let startDate: Date;
+
+ if (query.range) {
+ ({ endDate, startDate } = getIntervalFromDateRange({
+ dateRange: query.range
+ }));
+ }
const filters = this.apiService.buildFiltersFromQueryParams({
- filterByAccounts,
- filterByAssetClasses,
- filterByDataSource,
- filterBySymbol,
- filterByTags
+ filterByAccounts: query.accounts,
+ filterByAssetClasses: query.assetClasses,
+ filterByDataSource: query.dataSource,
+ filterBySymbol: query.symbol,
+ filterByTags: query.tags
});
return this.exportService.export({
- activityIds,
- activityTypes,
+ endDate,
filters,
+ startDate,
+ activityIds: query.activityIds,
+ activityTypes: query.activityTypes,
userId: this.request.user.id,
userSettings: this.request.user.settings.settings
});
diff --git a/apps/api/src/app/export/export.service.ts b/apps/api/src/app/export/export.service.ts
index a94479562..6e920553b 100644
--- a/apps/api/src/app/export/export.service.ts
+++ b/apps/api/src/app/export/export.service.ts
@@ -25,13 +25,17 @@ export class ExportService {
public async export({
activityIds,
activityTypes,
+ endDate,
filters,
+ startDate,
userId,
userSettings
}: {
activityIds?: string[];
activityTypes?: ActivityType[];
+ endDate?: Date;
filters?: Filter[];
+ startDate?: Date;
userId: string;
userSettings: UserSettings;
}): Promise {
@@ -41,7 +45,9 @@ export class ExportService {
const platformsMap: { [platformId: string]: Platform } = {};
let { activities } = await this.activitiesService.getActivities({
+ endDate,
filters,
+ startDate,
userId,
includeDrafts: true,
sortColumn: 'date',
diff --git a/apps/api/src/app/export/get-export.dto.ts b/apps/api/src/app/export/get-export.dto.ts
new file mode 100644
index 000000000..5fc3c81ba
--- /dev/null
+++ b/apps/api/src/app/export/get-export.dto.ts
@@ -0,0 +1,14 @@
+import { ActivitiesFilterDto } from '@ghostfolio/api/app/activities/activities-filter.dto';
+
+import { Transform, TransformFnParams } from 'class-transformer';
+import { IsOptional, IsUUID } from 'class-validator';
+import { isString } from 'lodash';
+
+export class GetExportDto extends ActivitiesFilterDto {
+ @IsOptional()
+ @IsUUID(undefined, { each: true })
+ @Transform(({ value }: TransformFnParams) => {
+ return isString(value) ? value.split(',') : value;
+ })
+ activityIds?: string[];
+}
diff --git a/apps/client/src/app/app.component.ts b/apps/client/src/app/app.component.ts
index ff67daf5e..fd17bcd6e 100644
--- a/apps/client/src/app/app.component.ts
+++ b/apps/client/src/app/app.component.ts
@@ -135,7 +135,10 @@ export class GfAppComponent implements OnInit {
this.currentSubRoute ===
internalRoutes.home.subRoutes?.holdings.path) ||
(this.currentRoute === internalRoutes.portfolio.path &&
- !this.currentSubRoute)) &&
+ !this.currentSubRoute) ||
+ (this.currentRoute === internalRoutes.portfolio.path &&
+ this.currentSubRoute ===
+ internalRoutes.portfolio.subRoutes?.activities.path)) &&
this.user?.settings?.viewMode !== 'ZEN'
) {
this.hasPermissionToChangeDateRange = true;
diff --git a/apps/client/src/app/pages/portfolio/activities/activities-page.component.ts b/apps/client/src/app/pages/portfolio/activities/activities-page.component.ts
index 3362dc5d5..87da2fb84 100644
--- a/apps/client/src/app/pages/portfolio/activities/activities-page.component.ts
+++ b/apps/client/src/app/pages/portfolio/activities/activities-page.component.ts
@@ -10,7 +10,6 @@ import {
} from '@ghostfolio/common/interfaces';
import { hasPermission, permissions } from '@ghostfolio/common/permissions';
import { internalRoutes } from '@ghostfolio/common/routes/routes';
-import { DateRange } from '@ghostfolio/common/types';
import { GfActivitiesTableComponent } from '@ghostfolio/ui/activities-table';
import { GfFabComponent } from '@ghostfolio/ui/fab';
import { DataService } from '@ghostfolio/ui/services';
@@ -92,8 +91,14 @@ export class GfActivitiesPageComponent implements OnInit {
.pipe(takeUntilDestroyed(this.destroyRef))
.subscribe((state) => {
if (state?.user) {
+ const previousDateRange = this.getDateRange();
+
this.updateUser(state.user);
+ if (previousDateRange !== this.getDateRange()) {
+ this.pageIndex = 0;
+ }
+
this.fetchActivities();
this.changeDetectorRef.markForCheck();
@@ -120,7 +125,11 @@ export class GfActivitiesPageComponent implements OnInit {
protected onDeleteActivities() {
this.dataService
.deleteActivities({
- filters: this.userService.getFilters()
+ activityTypes: this.activityTypesFilter.length
+ ? this.activityTypesFilter
+ : undefined,
+ filters: this.userService.getFilters(),
+ range: this.getDateRange()
})
.pipe(takeUntilDestroyed(this.destroyRef))
.subscribe(() => {
@@ -159,7 +168,8 @@ export class GfActivitiesPageComponent implements OnInit {
activityTypes: this.activityTypesFilter.length
? this.activityTypesFilter
: undefined,
- filters: this.userService.getFilters()
+ filters: this.userService.getFilters(),
+ range: this.getDateRange()
};
}
@@ -277,16 +287,13 @@ export class GfActivitiesPageComponent implements OnInit {
this.dataSource = undefined;
this.totalItems = undefined;
- const dateRange = this.user?.settings?.dateRange;
- const range = this.isCalendarYear(dateRange) ? dateRange : undefined;
-
this.dataService
.fetchActivities({
- range,
activityTypes: this.activityTypesFilter.length
? this.activityTypesFilter
: undefined,
filters: this.userService.getFilters(),
+ range: this.getDateRange(),
skip: this.pageIndex * this.pageSize,
sortColumn: this.sortColumn,
sortDirection: this.sortDirection,
@@ -311,12 +318,16 @@ export class GfActivitiesPageComponent implements OnInit {
});
}
- private isCalendarYear(dateRange?: DateRange) {
- if (!dateRange) {
- return false;
+ private getDateRange() {
+ const dateRange = this.user?.settings?.dateRange;
+
+ // Omit the date ranges which do not apply to activities: '1d' spans today
+ // only, while 'max' would exclude drafts dated in the future
+ if (!dateRange || ['1d', 'max'].includes(dateRange)) {
+ return undefined;
}
- return /^\d{4}$/.test(dateRange);
+ return dateRange;
}
private updateUser(aUser: User) {
diff --git a/libs/common/src/lib/calculation-helper.spec.ts b/libs/common/src/lib/calculation-helper.spec.ts
index 69621ec0a..75a24edba 100644
--- a/libs/common/src/lib/calculation-helper.spec.ts
+++ b/libs/common/src/lib/calculation-helper.spec.ts
@@ -1,8 +1,30 @@
import { Big } from 'big.js';
+import { format } from 'date-fns';
-import { getAnnualizedPerformancePercent } from './calculation-helper';
+import {
+ getAnnualizedPerformancePercent,
+ getIntervalFromDateRange
+} from './calculation-helper';
+import { DATE_FORMAT } from './helper';
describe('CalculationHelper', () => {
+ describe('interval from date range', () => {
+ it('Get interval of a calendar year', async () => {
+ const { endDate, startDate } = getIntervalFromDateRange({
+ dateRange: '2024'
+ });
+
+ // The boundaries are expressed in the local time zone, therefore the
+ // calendar days must hold independently of the time zone the tests run in
+ expect(format(startDate, DATE_FORMAT)).toEqual('2023-12-31');
+ expect(format(endDate, DATE_FORMAT)).toEqual('2024-12-31');
+
+ // The start date is exclusive, hence the first instant of the year is
+ // part of the interval
+ expect(startDate.getTime()).toEqual(new Date(2024, 0, 1).getTime() - 1);
+ });
+ });
+
describe('annualized performance percentage', () => {
it('Get annualized performance', async () => {
expect(
diff --git a/libs/common/src/lib/calculation-helper.ts b/libs/common/src/lib/calculation-helper.ts
index 2097fa52a..d49663d6c 100644
--- a/libs/common/src/lib/calculation-helper.ts
+++ b/libs/common/src/lib/calculation-helper.ts
@@ -7,6 +7,7 @@ import {
startOfWeek,
startOfYear,
subDays,
+ subMilliseconds,
subYears
} from 'date-fns';
import { isFinite, isNumber } from 'lodash';
@@ -75,10 +76,16 @@ export function getIntervalFromDateRange(params: {
break;
case 'max':
break;
- default:
+ default: {
// '2024', '2023', '2022', etc.
- endDate = endOfYear(new Date(dateRange));
- startDate = max([startDate, new Date(dateRange)]);
+ const yearStartDate = new Date(Number(dateRange), 0, 1);
+
+ // Derive the boundaries of the calendar year in the local time zone, as
+ // the consumers apply local time zone semantics. As the start date is
+ // exclusive, the last millisecond of the preceding year is used.
+ endDate = endOfYear(yearStartDate);
+ startDate = max([startDate, subMilliseconds(yearStartDate, 1)]);
+ }
}
return { endDate, startDate };
diff --git a/libs/common/src/lib/config.ts b/libs/common/src/lib/config.ts
index 08fb99e28..bb4ace0c5 100644
--- a/libs/common/src/lib/config.ts
+++ b/libs/common/src/lib/config.ts
@@ -67,6 +67,20 @@ export const DATA_GATHERING_QUEUE_PRIORITY_MEDIUM = Math.round(
DATA_GATHERING_QUEUE_PRIORITY_LOW / 2
);
+/**
+ * The named date ranges, complemented by the calendar years like '2024',
+ * '2023', '2022', etc.
+ */
+export const DATE_RANGES = [
+ '1d',
+ '1y',
+ '5y',
+ 'max',
+ 'mtd',
+ 'wtd',
+ 'ytd'
+] as const;
+
export const PORTFOLIO_SNAPSHOT_COMPUTATION_QUEUE =
'PORTFOLIO_SNAPSHOT_COMPUTATION_QUEUE';
export const PORTFOLIO_SNAPSHOT_COMPUTATION_QUEUE_PRIORITY_HIGH = 1;
diff --git a/libs/common/src/lib/types/date-range.type.ts b/libs/common/src/lib/types/date-range.type.ts
index 09fa3c15b..5c25cfe39 100644
--- a/libs/common/src/lib/types/date-range.type.ts
+++ b/libs/common/src/lib/types/date-range.type.ts
@@ -1,9 +1,3 @@
-export type DateRange =
- | '1d'
- | '1y'
- | '5y'
- | 'max'
- | 'mtd'
- | 'wtd'
- | 'ytd'
- | string; // '2024', '2023', '2022', etc.
+import type { DATE_RANGES } from '../config';
+
+export type DateRange = (typeof DATE_RANGES)[number] | string; // '2024', '2023', '2022', etc.
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 1ff8496a9..ffcc77832 100644
--- a/libs/ui/src/lib/activities-table/activities-table.component.html
+++ b/libs/ui/src/lib/activities-table/activities-table.component.html
@@ -58,12 +58,19 @@
- Export Activities
+ @if (canExportActivities()) {
+ Export {{ totalItems > 1 ? totalItems : '' }}
+ {totalItems, plural, =1 {Activity} other {Activities}}
+ } @else {
+ Export Activities
+ }
}
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 a4e7403a7..6fac6d162 100644
--- a/libs/ui/src/lib/activities-table/activities-table.component.ts
+++ b/libs/ui/src/lib/activities-table/activities-table.component.ts
@@ -289,6 +289,13 @@ export class GfActivitiesTableComponent implements AfterViewInit, OnInit {
);
}
+ public canExportActivities() {
+ return (
+ (this.dataSource()?.data.length ?? 0) > 0 &&
+ this.hasPermissionToExportActivities
+ );
+ }
+
public isExcludedFromAnalysis(activity: Activity) {
return (
(activity.account && isAccountExcluded(activity.account)) ??
diff --git a/libs/ui/src/lib/services/data.service.ts b/libs/ui/src/lib/services/data.service.ts
index 23c654ae6..870719702 100644
--- a/libs/ui/src/lib/services/data.service.ts
+++ b/libs/ui/src/lib/services/data.service.ts
@@ -329,8 +329,24 @@ export class DataService {
return this.http.delete(`/api/v1/account-balance/${aId}`);
}
- public deleteActivities({ filters }: { filters?: Filter[] }) {
- const params = this.buildFiltersAsQueryParams({ filters });
+ public deleteActivities({
+ activityTypes,
+ filters,
+ range
+ }: {
+ activityTypes?: string[];
+ filters?: Filter[];
+ range?: DateRange;
+ }) {
+ let params = this.buildFiltersAsQueryParams({ filters });
+
+ if (activityTypes?.length) {
+ params = params.append('activityTypes', activityTypes.join(','));
+ }
+
+ if (range) {
+ params = params.append('range', range);
+ }
return this.http.delete('/api/v1/activities', { params });
}
@@ -459,11 +475,13 @@ export class DataService {
public fetchExport({
activityIds,
activityTypes,
- filters
+ filters,
+ range
}: {
activityIds?: string[];
activityTypes?: string[];
filters?: Filter[];
+ range?: DateRange;
} = {}) {
let params = this.buildFiltersAsQueryParams({ filters });
@@ -475,6 +493,10 @@ export class DataService {
params = params.append('activityTypes', activityTypes.join(','));
}
+ if (range) {
+ params = params.append('range', range);
+ }
+
return this.http.get('/api/v1/export', {
params
});
@@ -509,8 +531,7 @@ export class DataService {
public fetchInfo(): InfoItem {
const info = cloneDeep((window as any).info);
const utmSource = window.localStorage.getItem('utm_source') as
- | 'ios'
- | 'trusted-web-activity';
+ 'ios' | 'trusted-web-activity';
info.globalPermissions = filterGlobalPermissions(
info.globalPermissions,
@@ -949,8 +970,7 @@ export class DataService {
public updateInfo() {
this.http.get('/api/v1/info').subscribe((info) => {
const utmSource = window.localStorage.getItem('utm_source') as
- | 'ios'
- | 'trusted-web-activity';
+ 'ios' | 'trusted-web-activity';
info.globalPermissions = filterGlobalPermissions(
info.globalPermissions,
From 94c30862931caadc5465c2bd76dbcc465f9bb645 Mon Sep 17 00:00:00 2001
From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com>
Date: Fri, 31 Jul 2026 21:39:52 +0200
Subject: [PATCH 32/86] Release 3.38.0 (#7494)
---
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 1843d4627..3fe881b94 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
+## 3.38.0 - 2026-07-31
### Added
diff --git a/package-lock.json b/package-lock.json
index f43ed2cbf..04a7da5a3 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,12 +1,12 @@
{
"name": "ghostfolio",
- "version": "3.37.0",
+ "version": "3.38.0",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "ghostfolio",
- "version": "3.37.0",
+ "version": "3.38.0",
"hasInstallScript": true,
"license": "AGPL-3.0",
"dependencies": {
diff --git a/package.json b/package.json
index b0ca3ea20..c2bc56d4a 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "ghostfolio",
- "version": "3.37.0",
+ "version": "3.38.0",
"homepage": "https://ghostfol.io",
"license": "AGPL-3.0",
"repository": "https://github.com/ghostfolio/ghostfolio",
From 5ccd1dece560f962042a975a7c99f24446222a8c Mon Sep 17 00:00:00 2001
From: "github-actions[bot]"
<41898282+github-actions[bot]@users.noreply.github.com>
Date: Fri, 31 Jul 2026 22:26:24 +0200
Subject: [PATCH 33/86] Task/update locales (#7488)
Co-authored-by: github-actions[bot]
---
apps/client/src/locales/messages.ca.xlf | 296 +++++++++++++-----------
apps/client/src/locales/messages.de.xlf | 296 +++++++++++++-----------
apps/client/src/locales/messages.es.xlf | 296 +++++++++++++-----------
apps/client/src/locales/messages.fr.xlf | 296 +++++++++++++-----------
apps/client/src/locales/messages.it.xlf | 296 +++++++++++++-----------
apps/client/src/locales/messages.ja.xlf | 296 +++++++++++++-----------
apps/client/src/locales/messages.ko.xlf | 296 +++++++++++++-----------
apps/client/src/locales/messages.nl.xlf | 296 +++++++++++++-----------
apps/client/src/locales/messages.pl.xlf | 296 +++++++++++++-----------
apps/client/src/locales/messages.pt.xlf | 296 +++++++++++++-----------
apps/client/src/locales/messages.tr.xlf | 296 +++++++++++++-----------
apps/client/src/locales/messages.uk.xlf | 296 +++++++++++++-----------
apps/client/src/locales/messages.xlf | 292 ++++++++++++-----------
apps/client/src/locales/messages.zh.xlf | 296 +++++++++++++-----------
14 files changed, 2265 insertions(+), 1875 deletions(-)
diff --git a/apps/client/src/locales/messages.ca.xlf b/apps/client/src/locales/messages.ca.xlf
index a7bb8abdd..b760aa9a3 100644
--- a/apps/client/src/locales/messages.ca.xlf
+++ b/apps/client/src/locales/messages.ca.xlf
@@ -383,7 +383,7 @@
Balanç de Caixa
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 54
+ 55
apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html
@@ -399,7 +399,7 @@
Plataforma
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 112
+ 113
apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html
@@ -415,7 +415,7 @@
Balanç de Caixa
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 169
+ 170
@@ -439,7 +439,7 @@
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 332
+ 333
apps/client/src/app/components/admin-platform/admin-platform.component.html
@@ -475,7 +475,7 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 161
+ 175
libs/ui/src/lib/benchmark/benchmark.component.html
@@ -515,11 +515,11 @@
Divisa
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 216
+ 217
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 339
+ 340
apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html
@@ -539,7 +539,7 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 303
+ 317
@@ -575,11 +575,11 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 284
+ 298
libs/ui/src/lib/activities-table/activities-table.component.html
- 320
+ 334
libs/ui/src/lib/holdings-table/holdings-table.component.html
@@ -619,7 +619,7 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 483
+ 497
@@ -659,7 +659,7 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 513
+ 527
libs/ui/src/lib/benchmark/benchmark.component.html
@@ -703,11 +703,11 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 5
+ 7
libs/ui/src/lib/activities-table/activities-table.component.html
- 183
+ 197
@@ -727,7 +727,7 @@
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 486
+ 487
@@ -743,7 +743,7 @@
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 197
+ 198
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
@@ -867,7 +867,7 @@
Find an account...
libs/ui/src/lib/assistant/assistant.component.ts
- 447
+ 448
@@ -883,7 +883,7 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 192
+ 206
libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html
@@ -907,7 +907,7 @@
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 113
+ 114
libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html
@@ -983,11 +983,11 @@
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 235
+ 236
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 221
+ 222
libs/ui/src/lib/holdings-table/holdings-table.component.html
@@ -999,7 +999,7 @@
Data Gathering Frequency
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 467
+ 468
@@ -1139,11 +1139,11 @@
Sector
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 280
+ 281
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 270
+ 271
@@ -1151,7 +1151,7 @@
País
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 295
+ 296
apps/client/src/app/components/admin-users/admin-users.html
@@ -1159,7 +1159,7 @@
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 284
+ 285
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
@@ -1171,15 +1171,15 @@
Sectors
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 301
+ 302
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 420
+ 421
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 290
+ 291
apps/client/src/app/pages/public/public-page.html
@@ -1191,15 +1191,15 @@
Països
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 311
+ 312
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 431
+ 432
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 302
+ 303
@@ -1207,7 +1207,7 @@
Mapatge de Símbols
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 409
+ 410
@@ -1247,7 +1247,7 @@
Configuració del Proveïdor de Dades
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 509
+ 510
@@ -1255,7 +1255,7 @@
Prova
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 606
+ 607
@@ -1263,11 +1263,11 @@
Url
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 442
+ 443
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 588
+ 589
apps/client/src/app/components/admin-platform/admin-platform.component.html
@@ -1291,7 +1291,7 @@
Notes
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 455
+ 456
apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html
@@ -1307,7 +1307,7 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 370
+ 384
@@ -1347,7 +1347,7 @@
Nom, símbol o ISIN
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 133
+ 134
apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html
@@ -1447,7 +1447,7 @@
Recollida de Dades
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 629
+ 630
apps/client/src/app/components/admin-overview/admin-overview.html
@@ -1459,7 +1459,7 @@
Find a holding...
libs/ui/src/lib/assistant/assistant.component.ts
- 448
+ 449
@@ -1743,7 +1743,7 @@
Punt de Referència
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 401
+ 402
apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts
@@ -1755,7 +1755,7 @@
Sentiment del Mercat
libs/ui/src/lib/fear-and-greed-index/fear-and-greed-index.component.html
- 22
+ 23
@@ -1835,7 +1835,7 @@
Preu Mínim
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 131
+ 132
@@ -1843,7 +1843,7 @@
Preu Màxim
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 149
+ 150
@@ -1851,7 +1851,7 @@
Quantitat
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 159
+ 160
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
@@ -1859,7 +1859,7 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 213
+ 227
libs/ui/src/lib/holdings-table/holdings-table.component.html
@@ -1871,7 +1871,7 @@
Rendiment del Dividend
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 198
+ 199
@@ -1879,7 +1879,7 @@
Comissions
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 210
+ 211
apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html
@@ -1891,11 +1891,11 @@
Activitat
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 100
+ 101
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 231
+ 232
@@ -1903,7 +1903,7 @@
Informar d’un Problema amb les Dades
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 463
+ 464
@@ -2135,7 +2135,7 @@
o
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 167
+ 168
apps/client/src/app/components/admin-settings/admin-settings.component.html
@@ -2467,7 +2467,7 @@
libs/ui/src/lib/assistant/assistant.component.ts
- 365
+ 366
@@ -2479,7 +2479,7 @@
libs/ui/src/lib/assistant/assistant.component.ts
- 377
+ 378
@@ -2491,7 +2491,7 @@
libs/ui/src/lib/assistant/assistant.component.ts
- 387
+ 388
@@ -2511,7 +2511,7 @@
libs/ui/src/lib/assistant/assistant.component.ts
- 409
+ 410
@@ -2531,7 +2531,7 @@
libs/ui/src/lib/assistant/assistant.component.ts
- 415
+ 416
@@ -2695,7 +2695,7 @@
Jump to a page...
libs/ui/src/lib/assistant/assistant.component.ts
- 449
+ 450
@@ -2719,7 +2719,7 @@
Include in
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 399
+ 400
@@ -2791,7 +2791,7 @@
Localització
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 547
+ 548
apps/client/src/app/components/user-account-settings/user-account-settings.html
@@ -3135,7 +3135,7 @@
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 395
+ 396
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
@@ -3251,7 +3251,7 @@
Dades de mercat
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 417
+ 418
libs/common/src/lib/routes/routes.ts
@@ -3291,11 +3291,11 @@
Visió general
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 41
+ 42
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 114
+ 115
apps/client/src/app/components/header/header.component.html
@@ -3307,7 +3307,7 @@
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 47
+ 48
apps/client/src/app/pages/admin/admin-page.component.ts
@@ -3708,7 +3708,7 @@
Explotacions
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 126
+ 127
apps/client/src/app/components/home-holdings/home-holdings.html
@@ -3760,7 +3760,7 @@
Mercats
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 403
+ 404
apps/client/src/app/components/footer/footer.component.html
@@ -3963,6 +3963,14 @@
84
+
+ Do you really want to delete these activities?
+ Do you really want to delete these activities?
+
+ libs/ui/src/lib/activities-table/activities-table.component.ts
+ 334
+
+
Why Ghostfolio ?
Per què Ghostfolio ?
@@ -4212,7 +4220,7 @@
Convert to
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 174
+ 175
@@ -4288,15 +4296,15 @@
Activitats
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 102
+ 103
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 137
+ 138
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 244
+ 245
apps/client/src/app/components/admin-overview/admin-overview.html
@@ -4312,11 +4320,11 @@
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 233
+ 234
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 361
+ 362
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
@@ -4412,7 +4420,7 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 237
+ 251
@@ -4424,11 +4432,11 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 28
+ 30
libs/ui/src/lib/activities-table/activities-table.component.html
- 406
+ 420
@@ -4440,11 +4448,11 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 52
+ 54
libs/ui/src/lib/activities-table/activities-table.component.html
- 420
+ 434
@@ -4796,11 +4804,11 @@
Dividend
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 90
+ 91
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 188
+ 189
apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html
@@ -4864,7 +4872,7 @@
Close Holding
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 450
+ 451
@@ -5689,11 +5697,11 @@
Activitats d’exportació
libs/ui/src/lib/activities-table/activities-table.component.html
- 64
+ 72
libs/ui/src/lib/activities-table/activities-table.component.html
- 434
+ 448
@@ -5701,11 +5709,11 @@
Exporta esborranys com a ICS
libs/ui/src/lib/activities-table/activities-table.component.html
- 77
+ 86
libs/ui/src/lib/activities-table/activities-table.component.html
- 447
+ 461
@@ -5713,7 +5721,7 @@
Suprimeix les activitats
libs/ui/src/lib/activities-table/activities-table.component.html
- 92
+ 105
@@ -5721,7 +5729,7 @@
Esborrany
libs/ui/src/lib/activities-table/activities-table.component.html
- 167
+ 181
@@ -5729,7 +5737,7 @@
Clonar
libs/ui/src/lib/activities-table/activities-table.component.html
- 492
+ 506
@@ -5737,15 +5745,7 @@
Exporta l’esborrany com a ICS
libs/ui/src/lib/activities-table/activities-table.component.html
- 502
-
-
-
- Do you really want to delete these activities?
- De veritat vols suprimir aquestes activitats?
-
- libs/ui/src/lib/activities-table/activities-table.component.ts
- 317
+ 516
@@ -5753,7 +5753,11 @@
Realment vols suprimir aquesta activitat?
libs/ui/src/lib/activities-table/activities-table.component.ts
- 327
+ 333
+
+
+ libs/ui/src/lib/activities-table/activities-table.component.ts
+ 344
@@ -5761,7 +5765,7 @@
Setmana fins avui
libs/ui/src/lib/assistant/assistant.component.ts
- 369
+ 370
@@ -5773,7 +5777,7 @@
libs/ui/src/lib/assistant/assistant.component.ts
- 369
+ 370
@@ -5781,7 +5785,7 @@
Mes fins a la data
libs/ui/src/lib/assistant/assistant.component.ts
- 373
+ 374
@@ -5793,7 +5797,7 @@
libs/ui/src/lib/assistant/assistant.component.ts
- 373
+ 374
@@ -5809,7 +5813,7 @@
Any fins a la data
libs/ui/src/lib/assistant/assistant.component.ts
- 377
+ 378
@@ -5829,7 +5833,7 @@
libs/ui/src/lib/assistant/assistant.component.ts
- 387
+ 388
@@ -5841,7 +5845,7 @@
libs/ui/src/lib/assistant/assistant.component.ts
- 409
+ 410
@@ -6005,7 +6009,7 @@
Interès
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 78
+ 79
apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html
@@ -6073,7 +6077,7 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 335
+ 349
libs/ui/src/lib/i18n.ts
@@ -6101,15 +6105,15 @@
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 253
+ 254
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 349
+ 350
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 244
+ 245
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
@@ -6133,15 +6137,15 @@
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 262
+ 263
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 365
+ 366
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 253
+ 254
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
@@ -6333,7 +6337,7 @@
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 186
+ 187
apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html
@@ -6341,13 +6345,21 @@
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 322
+ 323
libs/ui/src/lib/i18n.ts
35
+
+ Export
+ Export
+
+ libs/ui/src/lib/activities-table/activities-table.component.html
+ 68
+
+
Tag
Etiqueta
@@ -6417,7 +6429,7 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 261
+ 275
libs/ui/src/lib/i18n.ts
@@ -6477,7 +6489,7 @@
Patrimoni
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 66
+ 67
libs/ui/src/lib/i18n.ts
@@ -6637,7 +6649,7 @@
Invested Capital
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 173
+ 174
apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html
@@ -6921,7 +6933,7 @@
View Holding
libs/ui/src/lib/activities-table/activities-table.component.html
- 473
+ 487
@@ -6977,11 +6989,11 @@
Cancel
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 162
+ 163
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 634
+ 635
apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html
@@ -7033,7 +7045,7 @@
Close
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 636
+ 637
apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html
@@ -7125,7 +7137,7 @@
Change with currency effect Change
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 63
+ 64
@@ -7141,7 +7153,7 @@
Performance with currency effect Performance
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 83
+ 84
@@ -7287,6 +7299,10 @@
apps/client/src/app/components/admin-market-data/admin-market-data.html
270
+
+ libs/ui/src/lib/activities-table/activities-table.component.html
+ 101
+
cannot be self-hosted
@@ -7607,7 +7623,7 @@
Save
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 645
+ 646
apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html
@@ -7739,7 +7755,7 @@
Default Market Price
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 519
+ 520
@@ -7747,7 +7763,7 @@
Mode
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 556
+ 557
@@ -7763,7 +7779,7 @@
Selector
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 572
+ 573
@@ -7771,7 +7787,7 @@
HTTP Request Headers
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 532
+ 533
@@ -8016,7 +8032,7 @@
Apply
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 154
+ 155
@@ -8107,6 +8123,18 @@
142
+
+ {VAR_PLURAL, plural, =1 {Activity} other {Activities}}
+ {VAR_PLURAL, plural, =1 {Activity} other {Activities}}
+
+ libs/ui/src/lib/activities-table/activities-table.component.html
+ 69
+
+
+ libs/ui/src/lib/activities-table/activities-table.component.html
+ 102
+
+
Log out
Log out
@@ -8576,7 +8604,7 @@
Manage Asset Profile
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 478
+ 479
@@ -8604,7 +8632,7 @@
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 101
+ 102
diff --git a/apps/client/src/locales/messages.de.xlf b/apps/client/src/locales/messages.de.xlf
index 0378b1068..2765b0b4c 100644
--- a/apps/client/src/locales/messages.de.xlf
+++ b/apps/client/src/locales/messages.de.xlf
@@ -66,11 +66,11 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 5
+ 7
libs/ui/src/lib/activities-table/activities-table.component.html
- 183
+ 197
@@ -114,7 +114,7 @@
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 332
+ 333
apps/client/src/app/components/admin-platform/admin-platform.component.html
@@ -150,7 +150,7 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 161
+ 175
libs/ui/src/lib/benchmark/benchmark.component.html
@@ -210,11 +210,11 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 284
+ 298
libs/ui/src/lib/activities-table/activities-table.component.html
- 320
+ 334
libs/ui/src/lib/holdings-table/holdings-table.component.html
@@ -254,7 +254,7 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 483
+ 497
@@ -294,7 +294,7 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 513
+ 527
libs/ui/src/lib/benchmark/benchmark.component.html
@@ -338,7 +338,7 @@
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 197
+ 198
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
@@ -422,7 +422,7 @@
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 486
+ 487
@@ -462,7 +462,7 @@
Finde ein Konto...
libs/ui/src/lib/assistant/assistant.component.ts
- 447
+ 448
@@ -478,7 +478,7 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 192
+ 206
libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html
@@ -502,7 +502,7 @@
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 113
+ 114
libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html
@@ -518,11 +518,11 @@
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 235
+ 236
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 221
+ 222
libs/ui/src/lib/holdings-table/holdings-table.component.html
@@ -726,7 +726,7 @@
Aktuelle Marktstimmung
libs/ui/src/lib/fear-and-greed-index/fear-and-greed-index.component.html
- 22
+ 23
@@ -870,7 +870,7 @@
oder
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 167
+ 168
apps/client/src/app/components/admin-settings/admin-settings.component.html
@@ -1014,15 +1014,15 @@
Sektoren
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 301
+ 302
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 420
+ 421
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 290
+ 291
apps/client/src/app/pages/public/public-page.html
@@ -1034,15 +1034,15 @@
Länder
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 311
+ 312
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 431
+ 432
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 302
+ 303
@@ -1066,7 +1066,7 @@
Datenfehler melden
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 463
+ 464
@@ -1114,7 +1114,7 @@
libs/ui/src/lib/assistant/assistant.component.ts
- 365
+ 366
@@ -1126,7 +1126,7 @@
libs/ui/src/lib/assistant/assistant.component.ts
- 377
+ 378
@@ -1138,7 +1138,7 @@
libs/ui/src/lib/assistant/assistant.component.ts
- 387
+ 388
@@ -1158,7 +1158,7 @@
libs/ui/src/lib/assistant/assistant.component.ts
- 409
+ 410
@@ -1178,7 +1178,7 @@
libs/ui/src/lib/assistant/assistant.component.ts
- 415
+ 416
@@ -1358,7 +1358,7 @@
Lokalität
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 547
+ 548
apps/client/src/app/components/user-account-settings/user-account-settings.html
@@ -1470,7 +1470,7 @@
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 395
+ 396
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
@@ -1518,11 +1518,11 @@
Währung
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 216
+ 217
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 339
+ 340
apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html
@@ -1542,7 +1542,7 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 303
+ 317
@@ -1550,7 +1550,7 @@
Cash-Bestand
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 54
+ 55
apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html
@@ -1566,7 +1566,7 @@
Plattform
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 112
+ 113
apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html
@@ -1798,11 +1798,11 @@
Übersicht
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 41
+ 42
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 114
+ 115
apps/client/src/app/components/header/header.component.html
@@ -1814,7 +1814,7 @@
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 47
+ 48
apps/client/src/app/pages/admin/admin-page.component.ts
@@ -1838,7 +1838,7 @@
Märkte
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 403
+ 404
apps/client/src/app/components/footer/footer.component.html
@@ -2022,7 +2022,7 @@
Positionen
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 126
+ 127
apps/client/src/app/components/home-holdings/home-holdings.html
@@ -2094,7 +2094,7 @@
Name, Symbol oder ISIN
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 133
+ 134
apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html
@@ -2122,7 +2122,7 @@
Anzahl
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 159
+ 160
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
@@ -2130,7 +2130,7 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 213
+ 227
libs/ui/src/lib/holdings-table/holdings-table.component.html
@@ -2146,7 +2146,7 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 237
+ 251
@@ -2154,7 +2154,7 @@
Kommentar
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 455
+ 456
apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html
@@ -2170,7 +2170,7 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 370
+ 384
@@ -2178,15 +2178,15 @@
Aktivitäten
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 102
+ 103
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 137
+ 138
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 244
+ 245
apps/client/src/app/components/admin-overview/admin-overview.html
@@ -2202,11 +2202,11 @@
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 233
+ 234
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 361
+ 362
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
@@ -2414,7 +2414,7 @@
Geplant
libs/ui/src/lib/activities-table/activities-table.component.html
- 167
+ 181
@@ -2426,11 +2426,11 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 28
+ 30
libs/ui/src/lib/activities-table/activities-table.component.html
- 406
+ 420
@@ -2438,11 +2438,11 @@
Aktivitäten exportieren
libs/ui/src/lib/activities-table/activities-table.component.html
- 64
+ 72
libs/ui/src/lib/activities-table/activities-table.component.html
- 434
+ 448
@@ -2450,11 +2450,11 @@
Geplante Aktivitäten als ICS exportieren
libs/ui/src/lib/activities-table/activities-table.component.html
- 77
+ 86
libs/ui/src/lib/activities-table/activities-table.component.html
- 447
+ 461
@@ -2462,7 +2462,7 @@
Kopieren
libs/ui/src/lib/activities-table/activities-table.component.html
- 492
+ 506
@@ -2470,7 +2470,7 @@
Geplante Aktivität als ICS exportieren
libs/ui/src/lib/activities-table/activities-table.component.html
- 502
+ 516
@@ -2478,7 +2478,11 @@
Möchtest du diese Aktivität wirklich löschen?
libs/ui/src/lib/activities-table/activities-table.component.ts
- 327
+ 333
+
+
+ libs/ui/src/lib/activities-table/activities-table.component.ts
+ 344
@@ -2578,7 +2582,7 @@
Minimum Preis
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 131
+ 132
@@ -2586,7 +2590,7 @@
Maximum Preis
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 149
+ 150
@@ -2602,11 +2606,11 @@
Sektor
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 280
+ 281
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 270
+ 271
@@ -2614,7 +2618,7 @@
Land
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 295
+ 296
apps/client/src/app/components/admin-users/admin-users.html
@@ -2622,7 +2626,7 @@
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 284
+ 285
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
@@ -2714,7 +2718,7 @@
Verzinsung
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 78
+ 79
apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html
@@ -2854,7 +2858,7 @@
Benchmark
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 401
+ 402
apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts
@@ -2974,7 +2978,7 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 335
+ 349
libs/ui/src/lib/i18n.ts
@@ -2994,15 +2998,15 @@
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 253
+ 254
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 349
+ 350
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 244
+ 245
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
@@ -3030,7 +3034,7 @@
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 186
+ 187
apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html
@@ -3038,13 +3042,21 @@
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 322
+ 323
libs/ui/src/lib/i18n.ts
35
+
+ Export
+ Export
+
+ libs/ui/src/lib/activities-table/activities-table.component.html
+ 68
+
+
Tag
Tag
@@ -3082,7 +3094,7 @@
Beteiligungskapital
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 66
+ 67
libs/ui/src/lib/i18n.ts
@@ -3302,7 +3314,7 @@
Investiertes Kapital
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 173
+ 174
apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html
@@ -3362,7 +3374,7 @@
Häufigkeit der Datensynchronisierung
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 467
+ 468
@@ -3386,7 +3398,7 @@
Symbol Zuordnung
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 409
+ 410
@@ -3410,11 +3422,11 @@
Dividenden
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 90
+ 91
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 188
+ 189
apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html
@@ -3446,15 +3458,15 @@
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 262
+ 263
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 365
+ 366
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 253
+ 254
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
@@ -3502,7 +3514,7 @@
Marktdaten
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 417
+ 418
libs/common/src/lib/routes/routes.ts
@@ -3578,11 +3590,11 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 52
+ 54
libs/ui/src/lib/activities-table/activities-table.component.html
- 420
+ 434
@@ -3954,7 +3966,7 @@
Gebühren
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 210
+ 211
apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html
@@ -4125,14 +4137,6 @@
254
-
- Do you really want to delete these activities?
- Möchtest du diese Aktivitäten wirklich löschen?
-
- libs/ui/src/lib/activities-table/activities-table.component.ts
- 317
-
-
By ETF Provider
Nach ETF-Anbieter
@@ -4178,11 +4182,11 @@
Url
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 442
+ 443
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 588
+ 589
apps/client/src/app/components/admin-platform/admin-platform.component.html
@@ -4590,7 +4594,7 @@
Scraper Konfiguration
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 509
+ 510
@@ -5281,6 +5285,14 @@
84
+
+ Do you really want to delete these activities?
+ Do you really want to delete these activities?
+
+ libs/ui/src/lib/activities-table/activities-table.component.ts
+ 334
+
+
Why Ghostfolio ?
Warum Ghostfolio ?
@@ -5780,7 +5792,7 @@
In umwandeln
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 174
+ 175
@@ -5852,7 +5864,7 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 261
+ 275
libs/ui/src/lib/i18n.ts
@@ -6144,7 +6156,7 @@
Cash-Bestände
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 169
+ 170
@@ -6188,7 +6200,7 @@
Test
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 606
+ 607
@@ -6284,7 +6296,7 @@
Position abschliessen
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 450
+ 451
@@ -6324,7 +6336,7 @@
Seit Wochenbeginn
libs/ui/src/lib/assistant/assistant.component.ts
- 369
+ 370
@@ -6336,7 +6348,7 @@
libs/ui/src/lib/assistant/assistant.component.ts
- 369
+ 370
@@ -6344,7 +6356,7 @@
Seit Monatsbeginn
libs/ui/src/lib/assistant/assistant.component.ts
- 373
+ 374
@@ -6356,7 +6368,7 @@
libs/ui/src/lib/assistant/assistant.component.ts
- 373
+ 374
@@ -6372,7 +6384,7 @@
Seit Jahresbeginn
libs/ui/src/lib/assistant/assistant.component.ts
- 377
+ 378
@@ -6428,7 +6440,7 @@
libs/ui/src/lib/assistant/assistant.component.ts
- 387
+ 388
@@ -6440,7 +6452,7 @@
libs/ui/src/lib/assistant/assistant.component.ts
- 409
+ 410
@@ -6456,7 +6468,7 @@
Finanzmarktdaten synchronisieren
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 629
+ 630
apps/client/src/app/components/admin-overview/admin-overview.html
@@ -6468,7 +6480,7 @@
Finde eine Position...
libs/ui/src/lib/assistant/assistant.component.ts
- 448
+ 449
@@ -6561,11 +6573,11 @@
Aktivität
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 100
+ 101
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 231
+ 232
@@ -6573,7 +6585,7 @@
Dividendenrendite
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 198
+ 199
@@ -6629,7 +6641,7 @@
Aktivitäten löschen
libs/ui/src/lib/activities-table/activities-table.component.html
- 92
+ 105
@@ -6653,7 +6665,7 @@
Springe zu einer Seite...
libs/ui/src/lib/assistant/assistant.component.ts
- 449
+ 450
@@ -6709,7 +6721,7 @@
Berücksichtigen in
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 399
+ 400
@@ -6945,7 +6957,7 @@
Position ansehen
libs/ui/src/lib/activities-table/activities-table.component.html
- 473
+ 487
@@ -7001,11 +7013,11 @@
Abbrechen
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 162
+ 163
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 634
+ 635
apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html
@@ -7057,7 +7069,7 @@
Schliessen
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 636
+ 637
apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html
@@ -7149,7 +7161,7 @@
Änderung mit Währungseffekt Änderung
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 63
+ 64
@@ -7165,7 +7177,7 @@
Performance mit Währungseffekt Performance
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 83
+ 84
@@ -7311,6 +7323,10 @@
apps/client/src/app/components/admin-market-data/admin-market-data.html
270
+
+ libs/ui/src/lib/activities-table/activities-table.component.html
+ 101
+
cannot be self-hosted
@@ -7631,7 +7647,7 @@
Speichern
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 645
+ 646
apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html
@@ -7763,7 +7779,7 @@
Standardmarktpreis
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 519
+ 520
@@ -7771,7 +7787,7 @@
Modus
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 556
+ 557
@@ -7787,7 +7803,7 @@
Selektor
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 572
+ 573
@@ -7795,7 +7811,7 @@
HTTP Request-Headers
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 532
+ 533
@@ -8040,7 +8056,7 @@
Übernehmen
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 154
+ 155
@@ -8107,6 +8123,18 @@
142
+
+ {VAR_PLURAL, plural, =1 {Activity} other {Activities}}
+ {VAR_PLURAL, plural, =1 {Activity} other {Activities}}
+
+ libs/ui/src/lib/activities-table/activities-table.component.html
+ 69
+
+
+ libs/ui/src/lib/activities-table/activities-table.component.html
+ 102
+
+
Log out
Ausloggen
@@ -8576,7 +8604,7 @@
Anlageprofil verwalten
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 478
+ 479
@@ -8604,7 +8632,7 @@
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 101
+ 102
diff --git a/apps/client/src/locales/messages.es.xlf b/apps/client/src/locales/messages.es.xlf
index 87c434b2c..81e2e9968 100644
--- a/apps/client/src/locales/messages.es.xlf
+++ b/apps/client/src/locales/messages.es.xlf
@@ -67,11 +67,11 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 5
+ 7
libs/ui/src/lib/activities-table/activities-table.component.html
- 183
+ 197
@@ -115,7 +115,7 @@
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 332
+ 333
apps/client/src/app/components/admin-platform/admin-platform.component.html
@@ -151,7 +151,7 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 161
+ 175
libs/ui/src/lib/benchmark/benchmark.component.html
@@ -211,11 +211,11 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 284
+ 298
libs/ui/src/lib/activities-table/activities-table.component.html
- 320
+ 334
libs/ui/src/lib/holdings-table/holdings-table.component.html
@@ -255,7 +255,7 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 483
+ 497
@@ -295,7 +295,7 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 513
+ 527
libs/ui/src/lib/benchmark/benchmark.component.html
@@ -339,7 +339,7 @@
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 197
+ 198
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
@@ -423,7 +423,7 @@
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 486
+ 487
@@ -463,7 +463,7 @@
Buscar una cuenta...
libs/ui/src/lib/assistant/assistant.component.ts
- 447
+ 448
@@ -479,7 +479,7 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 192
+ 206
libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html
@@ -503,7 +503,7 @@
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 113
+ 114
libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html
@@ -519,11 +519,11 @@
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 235
+ 236
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 221
+ 222
libs/ui/src/lib/holdings-table/holdings-table.component.html
@@ -711,7 +711,7 @@
Sentimiento del mercado
libs/ui/src/lib/fear-and-greed-index/fear-and-greed-index.component.html
- 22
+ 23
@@ -855,7 +855,7 @@
o
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 167
+ 168
apps/client/src/app/components/admin-settings/admin-settings.component.html
@@ -999,15 +999,15 @@
Sectores
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 301
+ 302
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 420
+ 421
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 290
+ 291
apps/client/src/app/pages/public/public-page.html
@@ -1019,15 +1019,15 @@
Países
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 311
+ 312
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 431
+ 432
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 302
+ 303
@@ -1051,7 +1051,7 @@
Reportar anomalía en los datos
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 463
+ 464
@@ -1099,7 +1099,7 @@
libs/ui/src/lib/assistant/assistant.component.ts
- 365
+ 366
@@ -1111,7 +1111,7 @@
libs/ui/src/lib/assistant/assistant.component.ts
- 377
+ 378
@@ -1123,7 +1123,7 @@
libs/ui/src/lib/assistant/assistant.component.ts
- 387
+ 388
@@ -1143,7 +1143,7 @@
libs/ui/src/lib/assistant/assistant.component.ts
- 409
+ 410
@@ -1163,7 +1163,7 @@
libs/ui/src/lib/assistant/assistant.component.ts
- 415
+ 416
@@ -1343,7 +1343,7 @@
Configuración regional
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 547
+ 548
apps/client/src/app/components/user-account-settings/user-account-settings.html
@@ -1455,7 +1455,7 @@
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 395
+ 396
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
@@ -1503,11 +1503,11 @@
Divisa
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 216
+ 217
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 339
+ 340
apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html
@@ -1527,7 +1527,7 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 303
+ 317
@@ -1535,7 +1535,7 @@
Saldo en efectivo
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 54
+ 55
apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html
@@ -1551,7 +1551,7 @@
Plataforma
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 112
+ 113
apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html
@@ -1783,11 +1783,11 @@
Visión general
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 41
+ 42
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 114
+ 115
apps/client/src/app/components/header/header.component.html
@@ -1799,7 +1799,7 @@
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 47
+ 48
apps/client/src/app/pages/admin/admin-page.component.ts
@@ -1823,7 +1823,7 @@
Mercados
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 403
+ 404
apps/client/src/app/components/footer/footer.component.html
@@ -2007,7 +2007,7 @@
Posiciones
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 126
+ 127
apps/client/src/app/components/home-holdings/home-holdings.html
@@ -2079,7 +2079,7 @@
Nombre, símbolo o ISIN
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 133
+ 134
apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html
@@ -2107,7 +2107,7 @@
Cantidad
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 159
+ 160
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
@@ -2115,7 +2115,7 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 213
+ 227
libs/ui/src/lib/holdings-table/holdings-table.component.html
@@ -2131,7 +2131,7 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 237
+ 251
@@ -2139,7 +2139,7 @@
Nota
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 455
+ 456
apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html
@@ -2155,7 +2155,7 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 370
+ 384
@@ -2163,15 +2163,15 @@
Operaciones
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 102
+ 103
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 137
+ 138
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 244
+ 245
apps/client/src/app/components/admin-overview/admin-overview.html
@@ -2187,11 +2187,11 @@
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 233
+ 234
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 361
+ 362
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
@@ -2399,7 +2399,7 @@
Borrador
libs/ui/src/lib/activities-table/activities-table.component.html
- 167
+ 181
@@ -2411,11 +2411,11 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 28
+ 30
libs/ui/src/lib/activities-table/activities-table.component.html
- 406
+ 420
@@ -2423,11 +2423,11 @@
Exportar operaciones
libs/ui/src/lib/activities-table/activities-table.component.html
- 64
+ 72
libs/ui/src/lib/activities-table/activities-table.component.html
- 434
+ 448
@@ -2435,11 +2435,11 @@
Exportar borrador como ICS
libs/ui/src/lib/activities-table/activities-table.component.html
- 77
+ 86
libs/ui/src/lib/activities-table/activities-table.component.html
- 447
+ 461
@@ -2447,7 +2447,7 @@
Clonar
libs/ui/src/lib/activities-table/activities-table.component.html
- 492
+ 506
@@ -2455,7 +2455,7 @@
Exportar borrador como ICS
libs/ui/src/lib/activities-table/activities-table.component.html
- 502
+ 516
@@ -2463,7 +2463,11 @@
¿Seguro que quieres eliminar esta operación?
libs/ui/src/lib/activities-table/activities-table.component.ts
- 327
+ 333
+
+
+ libs/ui/src/lib/activities-table/activities-table.component.ts
+ 344
@@ -2595,7 +2599,7 @@
Precio máximo
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 149
+ 150
@@ -2635,11 +2639,11 @@
Sector
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 280
+ 281
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 270
+ 271
@@ -2647,7 +2651,7 @@
País
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 295
+ 296
apps/client/src/app/components/admin-users/admin-users.html
@@ -2655,7 +2659,7 @@
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 284
+ 285
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
@@ -2667,7 +2671,7 @@
Precio mínimo
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 131
+ 132
@@ -2691,7 +2695,7 @@
Interés
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 78
+ 79
apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html
@@ -2819,7 +2823,7 @@
Índice de referencia
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 401
+ 402
apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts
@@ -2959,7 +2963,7 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 335
+ 349
libs/ui/src/lib/i18n.ts
@@ -2979,15 +2983,15 @@
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 253
+ 254
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 349
+ 350
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 244
+ 245
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
@@ -3015,7 +3019,7 @@
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 186
+ 187
apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html
@@ -3023,13 +3027,21 @@
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 322
+ 323
libs/ui/src/lib/i18n.ts
35
+
+ Export
+ Export
+
+ libs/ui/src/lib/activities-table/activities-table.component.html
+ 68
+
+
Tag
Etiqueta
@@ -3067,7 +3079,7 @@
Renta variable
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 66
+ 67
libs/ui/src/lib/i18n.ts
@@ -3287,7 +3299,7 @@
Capital invertido
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 173
+ 174
apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html
@@ -3347,7 +3359,7 @@
Frecuencia de recopilación de datos
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 467
+ 468
@@ -3371,7 +3383,7 @@
Mapeo de símbolos
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 409
+ 410
@@ -3387,11 +3399,11 @@
Dividendo
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 90
+ 91
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 188
+ 189
apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html
@@ -3431,15 +3443,15 @@
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 262
+ 263
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 365
+ 366
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 253
+ 254
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
@@ -3487,7 +3499,7 @@
Datos del mercado
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 417
+ 418
libs/common/src/lib/routes/routes.ts
@@ -3563,11 +3575,11 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 52
+ 54
libs/ui/src/lib/activities-table/activities-table.component.html
- 420
+ 434
@@ -3939,7 +3951,7 @@
Comisiones
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 210
+ 211
apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html
@@ -4102,14 +4114,6 @@
254
-
- Do you really want to delete these activities?
- ¿Seguro que quieres eliminar estas operaciones?
-
- libs/ui/src/lib/activities-table/activities-table.component.ts
- 317
-
-
By ETF Provider
Por proveedor de ETF
@@ -4155,11 +4159,11 @@
Url
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 442
+ 443
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 588
+ 589
apps/client/src/app/components/admin-platform/admin-platform.component.html
@@ -4567,7 +4571,7 @@
Configuración del scraper
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 509
+ 510
@@ -5258,6 +5262,14 @@
84
+
+ Do you really want to delete these activities?
+ Do you really want to delete these activities?
+
+ libs/ui/src/lib/activities-table/activities-table.component.ts
+ 334
+
+
Why Ghostfolio ?
¿Por qué Ghostfolio ?
@@ -5757,7 +5769,7 @@
Convertir a
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 174
+ 175
@@ -5829,7 +5841,7 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 261
+ 275
libs/ui/src/lib/i18n.ts
@@ -6121,7 +6133,7 @@
Saldos de efectivo
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 169
+ 170
@@ -6165,7 +6177,7 @@
Prueba
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 606
+ 607
@@ -6261,7 +6273,7 @@
Cerrar posición
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 450
+ 451
@@ -6301,7 +6313,7 @@
Semana hasta la fecha
libs/ui/src/lib/assistant/assistant.component.ts
- 369
+ 370
@@ -6313,7 +6325,7 @@
libs/ui/src/lib/assistant/assistant.component.ts
- 369
+ 370
@@ -6321,7 +6333,7 @@
Mes hasta la fecha
libs/ui/src/lib/assistant/assistant.component.ts
- 373
+ 374
@@ -6333,7 +6345,7 @@
libs/ui/src/lib/assistant/assistant.component.ts
- 373
+ 374
@@ -6349,7 +6361,7 @@
Año hasta la fecha
libs/ui/src/lib/assistant/assistant.component.ts
- 377
+ 378
@@ -6405,7 +6417,7 @@
libs/ui/src/lib/assistant/assistant.component.ts
- 387
+ 388
@@ -6417,7 +6429,7 @@
libs/ui/src/lib/assistant/assistant.component.ts
- 409
+ 410
@@ -6433,7 +6445,7 @@
Recopilación de datos
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 629
+ 630
apps/client/src/app/components/admin-overview/admin-overview.html
@@ -6445,7 +6457,7 @@
Buscar una posición...
libs/ui/src/lib/assistant/assistant.component.ts
- 448
+ 449
@@ -6538,11 +6550,11 @@
Operación
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 100
+ 101
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 231
+ 232
@@ -6550,7 +6562,7 @@
Rendimiento por dividendo
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 198
+ 199
@@ -6606,7 +6618,7 @@
Eliminar operaciones
libs/ui/src/lib/activities-table/activities-table.component.html
- 92
+ 105
@@ -6630,7 +6642,7 @@
Saltar a una página...
libs/ui/src/lib/assistant/assistant.component.ts
- 449
+ 450
@@ -6686,7 +6698,7 @@
Incluir en
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 399
+ 400
@@ -6922,7 +6934,7 @@
Ver posición
libs/ui/src/lib/activities-table/activities-table.component.html
- 473
+ 487
@@ -6978,11 +6990,11 @@
Cancelar
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 162
+ 163
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 634
+ 635
apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html
@@ -7034,7 +7046,7 @@
Cerrar
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 636
+ 637
apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html
@@ -7126,7 +7138,7 @@
Cambio con el efecto de la divisa Cambio
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 63
+ 64
@@ -7142,7 +7154,7 @@
Rendimiento con el efecto de la divisa Rendimiento
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 83
+ 84
@@ -7288,6 +7300,10 @@
apps/client/src/app/components/admin-market-data/admin-market-data.html
270
+
+ libs/ui/src/lib/activities-table/activities-table.component.html
+ 101
+
cannot be self-hosted
@@ -7608,7 +7624,7 @@
Guardar
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 645
+ 646
apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html
@@ -7740,7 +7756,7 @@
Precio de mercado por defecto
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 519
+ 520
@@ -7748,7 +7764,7 @@
Modo
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 556
+ 557
@@ -7764,7 +7780,7 @@
Selector
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 572
+ 573
@@ -7772,7 +7788,7 @@
Encabezados de solicitud HTTP
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 532
+ 533
@@ -8017,7 +8033,7 @@
Aplicar
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 154
+ 155
@@ -8108,6 +8124,18 @@
142
+
+ {VAR_PLURAL, plural, =1 {Activity} other {Activities}}
+ {VAR_PLURAL, plural, =1 {Activity} other {Activities}}
+
+ libs/ui/src/lib/activities-table/activities-table.component.html
+ 69
+
+
+ libs/ui/src/lib/activities-table/activities-table.component.html
+ 102
+
+
Log out
Cerrar sesión
@@ -8577,7 +8605,7 @@
Gestionar perfil de activo
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 478
+ 479
@@ -8605,7 +8633,7 @@
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 101
+ 102
diff --git a/apps/client/src/locales/messages.fr.xlf b/apps/client/src/locales/messages.fr.xlf
index f091a56df..8d4f182bf 100644
--- a/apps/client/src/locales/messages.fr.xlf
+++ b/apps/client/src/locales/messages.fr.xlf
@@ -58,11 +58,11 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 5
+ 7
libs/ui/src/lib/activities-table/activities-table.component.html
- 183
+ 197
@@ -102,7 +102,7 @@
Plateforme
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 112
+ 113
apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html
@@ -122,7 +122,7 @@
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 332
+ 333
apps/client/src/app/components/admin-platform/admin-platform.component.html
@@ -158,7 +158,7 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 161
+ 175
libs/ui/src/lib/benchmark/benchmark.component.html
@@ -198,11 +198,11 @@
Devise
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 216
+ 217
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 339
+ 340
apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html
@@ -222,7 +222,7 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 303
+ 317
@@ -230,7 +230,7 @@
Balance Cash
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 54
+ 55
apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html
@@ -274,11 +274,11 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 284
+ 298
libs/ui/src/lib/activities-table/activities-table.component.html
- 320
+ 334
libs/ui/src/lib/holdings-table/holdings-table.component.html
@@ -318,7 +318,7 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 483
+ 497
@@ -358,7 +358,7 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 513
+ 527
libs/ui/src/lib/benchmark/benchmark.component.html
@@ -394,7 +394,7 @@
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 197
+ 198
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
@@ -486,7 +486,7 @@
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 486
+ 487
@@ -526,7 +526,7 @@
Rechercher un compte...
libs/ui/src/lib/assistant/assistant.component.ts
- 447
+ 448
@@ -542,7 +542,7 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 192
+ 206
libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html
@@ -566,7 +566,7 @@
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 113
+ 114
libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html
@@ -590,11 +590,11 @@
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 235
+ 236
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 221
+ 222
libs/ui/src/lib/holdings-table/holdings-table.component.html
@@ -606,7 +606,7 @@
Fréquence de collecte des données
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 467
+ 468
@@ -694,11 +694,11 @@
Secteur
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 280
+ 281
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 270
+ 271
@@ -706,7 +706,7 @@
Pays
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 295
+ 296
apps/client/src/app/components/admin-users/admin-users.html
@@ -714,7 +714,7 @@
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 284
+ 285
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
@@ -726,15 +726,15 @@
Secteurs
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 301
+ 302
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 420
+ 421
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 290
+ 291
apps/client/src/app/pages/public/public-page.html
@@ -746,15 +746,15 @@
Pays
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 311
+ 312
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 431
+ 432
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 302
+ 303
@@ -762,7 +762,7 @@
Équivalence de Symboles
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 409
+ 410
@@ -770,7 +770,7 @@
Note
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 455
+ 456
apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html
@@ -786,7 +786,7 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 370
+ 384
@@ -1014,7 +1014,7 @@
Référence
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 401
+ 402
apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts
@@ -1026,7 +1026,7 @@
Sentiment actuel du marché
libs/ui/src/lib/fear-and-greed-index/fear-and-greed-index.component.html
- 22
+ 23
@@ -1174,7 +1174,7 @@
ou
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 167
+ 168
apps/client/src/app/components/admin-settings/admin-settings.component.html
@@ -1326,7 +1326,7 @@
Prix Minimum
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 131
+ 132
@@ -1334,7 +1334,7 @@
Prix Maximum
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 149
+ 150
@@ -1342,7 +1342,7 @@
Quantité
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 159
+ 160
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
@@ -1350,7 +1350,7 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 213
+ 227
libs/ui/src/lib/holdings-table/holdings-table.component.html
@@ -1362,7 +1362,7 @@
Signaler une Erreur de Données
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 463
+ 464
@@ -1374,7 +1374,7 @@
libs/ui/src/lib/assistant/assistant.component.ts
- 365
+ 366
@@ -1386,7 +1386,7 @@
libs/ui/src/lib/assistant/assistant.component.ts
- 377
+ 378
@@ -1398,7 +1398,7 @@
libs/ui/src/lib/assistant/assistant.component.ts
- 387
+ 388
@@ -1418,7 +1418,7 @@
libs/ui/src/lib/assistant/assistant.component.ts
- 409
+ 410
@@ -1438,7 +1438,7 @@
libs/ui/src/lib/assistant/assistant.component.ts
- 415
+ 416
@@ -1674,7 +1674,7 @@
Paramètres régionaux
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 547
+ 548
apps/client/src/app/components/user-account-settings/user-account-settings.html
@@ -1838,7 +1838,7 @@
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 395
+ 396
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
@@ -1894,7 +1894,7 @@
Données du marché
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 417
+ 418
libs/common/src/lib/routes/routes.ts
@@ -2118,7 +2118,7 @@
Positions
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 126
+ 127
apps/client/src/app/components/home-holdings/home-holdings.html
@@ -2170,7 +2170,7 @@
Marchés
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 403
+ 404
apps/client/src/app/components/footer/footer.component.html
@@ -2210,15 +2210,15 @@
Activités
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 102
+ 103
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 137
+ 138
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 244
+ 245
apps/client/src/app/components/admin-overview/admin-overview.html
@@ -2234,11 +2234,11 @@
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 233
+ 234
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 361
+ 362
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
@@ -2302,7 +2302,7 @@
Nom, symbole, ou ISIN
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 133
+ 134
apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html
@@ -2334,7 +2334,7 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 237
+ 251
@@ -2602,11 +2602,11 @@
Dividende
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 90
+ 91
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 188
+ 189
apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html
@@ -2914,11 +2914,11 @@
Aperçu
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 41
+ 42
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 114
+ 115
apps/client/src/app/components/header/header.component.html
@@ -2930,7 +2930,7 @@
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 47
+ 48
apps/client/src/app/pages/admin/admin-page.component.ts
@@ -2954,7 +2954,7 @@
Brouillon
libs/ui/src/lib/activities-table/activities-table.component.html
- 167
+ 181
@@ -2966,11 +2966,11 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 28
+ 30
libs/ui/src/lib/activities-table/activities-table.component.html
- 406
+ 420
@@ -2978,11 +2978,11 @@
Exporter Activités
libs/ui/src/lib/activities-table/activities-table.component.html
- 64
+ 72
libs/ui/src/lib/activities-table/activities-table.component.html
- 434
+ 448
@@ -2990,11 +2990,11 @@
Exporter Brouillons sous ICS
libs/ui/src/lib/activities-table/activities-table.component.html
- 77
+ 86
libs/ui/src/lib/activities-table/activities-table.component.html
- 447
+ 461
@@ -3002,7 +3002,7 @@
Dupliquer
libs/ui/src/lib/activities-table/activities-table.component.html
- 492
+ 506
@@ -3010,7 +3010,7 @@
Exporter Brouillon sous ICS
libs/ui/src/lib/activities-table/activities-table.component.html
- 502
+ 516
@@ -3018,7 +3018,11 @@
Voulez-vous vraiment supprimer cette activité ?
libs/ui/src/lib/activities-table/activities-table.component.ts
- 327
+ 333
+
+
+ libs/ui/src/lib/activities-table/activities-table.component.ts
+ 344
@@ -3074,7 +3078,7 @@
Intérêt
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 78
+ 79
apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html
@@ -3142,7 +3146,7 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 335
+ 349
libs/ui/src/lib/i18n.ts
@@ -3162,15 +3166,15 @@
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 253
+ 254
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 349
+ 350
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 244
+ 245
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
@@ -3194,15 +3198,15 @@
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 262
+ 263
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 365
+ 366
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 253
+ 254
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
@@ -3266,7 +3270,7 @@
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 186
+ 187
apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html
@@ -3274,13 +3278,21 @@
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 322
+ 323
libs/ui/src/lib/i18n.ts
35
+
+ Export
+ Export
+
+ libs/ui/src/lib/activities-table/activities-table.component.html
+ 68
+
+
Tag
Étiquette
@@ -3318,7 +3330,7 @@
Capital
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 66
+ 67
libs/ui/src/lib/i18n.ts
@@ -3470,7 +3482,7 @@
Invested Capital
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 173
+ 174
apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html
@@ -3562,11 +3574,11 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 52
+ 54
libs/ui/src/lib/activities-table/activities-table.component.html
- 420
+ 434
@@ -3938,7 +3950,7 @@
Frais
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 210
+ 211
apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html
@@ -4101,14 +4113,6 @@
254
-
- Do you really want to delete these activities?
- Voulez-vous vraiment supprimer toutes vos activités ?
-
- libs/ui/src/lib/activities-table/activities-table.component.ts
- 317
-
-
By ETF Provider
Par Émetteur d’ETF
@@ -4154,11 +4158,11 @@
Lien
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 442
+ 443
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 588
+ 589
apps/client/src/app/components/admin-platform/admin-platform.component.html
@@ -4566,7 +4570,7 @@
Configuration du Scraper
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 509
+ 510
@@ -5257,6 +5261,14 @@
84
+
+ Do you really want to delete these activities?
+ Do you really want to delete these activities?
+
+ libs/ui/src/lib/activities-table/activities-table.component.ts
+ 334
+
+
Why Ghostfolio ?
Pourquoi Ghostfolio ?
@@ -5756,7 +5768,7 @@
Convert to
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 174
+ 175
@@ -5828,7 +5840,7 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 261
+ 275
libs/ui/src/lib/i18n.ts
@@ -6120,7 +6132,7 @@
Cash Balances
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 169
+ 170
@@ -6164,7 +6176,7 @@
Test
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 606
+ 607
@@ -6260,7 +6272,7 @@
Clôturer la Position
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 450
+ 451
@@ -6300,7 +6312,7 @@
Week to date
libs/ui/src/lib/assistant/assistant.component.ts
- 369
+ 370
@@ -6312,7 +6324,7 @@
libs/ui/src/lib/assistant/assistant.component.ts
- 369
+ 370
@@ -6320,7 +6332,7 @@
Month to date
libs/ui/src/lib/assistant/assistant.component.ts
- 373
+ 374
@@ -6332,7 +6344,7 @@
libs/ui/src/lib/assistant/assistant.component.ts
- 373
+ 374
@@ -6348,7 +6360,7 @@
Year to date
libs/ui/src/lib/assistant/assistant.component.ts
- 377
+ 378
@@ -6404,7 +6416,7 @@
libs/ui/src/lib/assistant/assistant.component.ts
- 387
+ 388
@@ -6416,7 +6428,7 @@
libs/ui/src/lib/assistant/assistant.component.ts
- 409
+ 410
@@ -6432,7 +6444,7 @@
Collecter les données
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 629
+ 630
apps/client/src/app/components/admin-overview/admin-overview.html
@@ -6444,7 +6456,7 @@
Rechercher une position...
libs/ui/src/lib/assistant/assistant.component.ts
- 448
+ 449
@@ -6537,11 +6549,11 @@
Activitées
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 100
+ 101
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 231
+ 232
@@ -6549,7 +6561,7 @@
Rendement en Dividende
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 198
+ 199
@@ -6605,7 +6617,7 @@
Supprimer les Activitées
libs/ui/src/lib/activities-table/activities-table.component.html
- 92
+ 105
@@ -6629,7 +6641,7 @@
Aller à une page...
libs/ui/src/lib/assistant/assistant.component.ts
- 449
+ 450
@@ -6685,7 +6697,7 @@
Inclure dans
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 399
+ 400
@@ -6921,7 +6933,7 @@
Voir la Position
libs/ui/src/lib/activities-table/activities-table.component.html
- 473
+ 487
@@ -6977,11 +6989,11 @@
Annuler
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 162
+ 163
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 634
+ 635
apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html
@@ -7033,7 +7045,7 @@
Fermer
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 636
+ 637
apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html
@@ -7125,7 +7137,7 @@
Variation avec taux de change appliqué Variation
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 63
+ 64
@@ -7141,7 +7153,7 @@
Performance avec taux de change appliqué Performance
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 83
+ 84
@@ -7287,6 +7299,10 @@
apps/client/src/app/components/admin-market-data/admin-market-data.html
270
+
+ libs/ui/src/lib/activities-table/activities-table.component.html
+ 101
+
cannot be self-hosted
@@ -7607,7 +7623,7 @@
Sauvegarder
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 645
+ 646
apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html
@@ -7739,7 +7755,7 @@
Prix du marché par défaut
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 519
+ 520
@@ -7747,7 +7763,7 @@
Mode
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 556
+ 557
@@ -7763,7 +7779,7 @@
Selecteur
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 572
+ 573
@@ -7771,7 +7787,7 @@
En-têtes de requête HTTP
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 532
+ 533
@@ -8016,7 +8032,7 @@
Appliquer
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 154
+ 155
@@ -8107,6 +8123,18 @@
142
+
+ {VAR_PLURAL, plural, =1 {Activity} other {Activities}}
+ {VAR_PLURAL, plural, =1 {Activity} other {Activities}}
+
+ libs/ui/src/lib/activities-table/activities-table.component.html
+ 69
+
+
+ libs/ui/src/lib/activities-table/activities-table.component.html
+ 102
+
+
Log out
Se déconnecter
@@ -8576,7 +8604,7 @@
Gérer le profil d’actif
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 478
+ 479
@@ -8604,7 +8632,7 @@
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 101
+ 102
diff --git a/apps/client/src/locales/messages.it.xlf b/apps/client/src/locales/messages.it.xlf
index fa0680d82..92dc8372a 100644
--- a/apps/client/src/locales/messages.it.xlf
+++ b/apps/client/src/locales/messages.it.xlf
@@ -67,11 +67,11 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 5
+ 7
libs/ui/src/lib/activities-table/activities-table.component.html
- 183
+ 197
@@ -115,7 +115,7 @@
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 332
+ 333
apps/client/src/app/components/admin-platform/admin-platform.component.html
@@ -151,7 +151,7 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 161
+ 175
libs/ui/src/lib/benchmark/benchmark.component.html
@@ -211,11 +211,11 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 284
+ 298
libs/ui/src/lib/activities-table/activities-table.component.html
- 320
+ 334
libs/ui/src/lib/holdings-table/holdings-table.component.html
@@ -255,7 +255,7 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 483
+ 497
@@ -295,7 +295,7 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 513
+ 527
libs/ui/src/lib/benchmark/benchmark.component.html
@@ -339,7 +339,7 @@
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 197
+ 198
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
@@ -423,7 +423,7 @@
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 486
+ 487
@@ -463,7 +463,7 @@
Find an account...
libs/ui/src/lib/assistant/assistant.component.ts
- 447
+ 448
@@ -479,7 +479,7 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 192
+ 206
libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html
@@ -503,7 +503,7 @@
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 113
+ 114
libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html
@@ -519,11 +519,11 @@
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 235
+ 236
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 221
+ 222
libs/ui/src/lib/holdings-table/holdings-table.component.html
@@ -711,7 +711,7 @@
Stato d’animo attuale del mercato
libs/ui/src/lib/fear-and-greed-index/fear-and-greed-index.component.html
- 22
+ 23
@@ -855,7 +855,7 @@
oppure
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 167
+ 168
apps/client/src/app/components/admin-settings/admin-settings.component.html
@@ -999,15 +999,15 @@
Settori
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 301
+ 302
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 420
+ 421
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 290
+ 291
apps/client/src/app/pages/public/public-page.html
@@ -1019,15 +1019,15 @@
Paesi
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 311
+ 312
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 431
+ 432
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 302
+ 303
@@ -1051,7 +1051,7 @@
Segnala un’anomalia dei dati
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 463
+ 464
@@ -1099,7 +1099,7 @@
libs/ui/src/lib/assistant/assistant.component.ts
- 365
+ 366
@@ -1111,7 +1111,7 @@
libs/ui/src/lib/assistant/assistant.component.ts
- 377
+ 378
@@ -1123,7 +1123,7 @@
libs/ui/src/lib/assistant/assistant.component.ts
- 387
+ 388
@@ -1143,7 +1143,7 @@
libs/ui/src/lib/assistant/assistant.component.ts
- 409
+ 410
@@ -1163,7 +1163,7 @@
libs/ui/src/lib/assistant/assistant.component.ts
- 415
+ 416
@@ -1343,7 +1343,7 @@
Locale
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 547
+ 548
apps/client/src/app/components/user-account-settings/user-account-settings.html
@@ -1455,7 +1455,7 @@
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 395
+ 396
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
@@ -1503,11 +1503,11 @@
Valuta
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 216
+ 217
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 339
+ 340
apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html
@@ -1527,7 +1527,7 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 303
+ 317
@@ -1535,7 +1535,7 @@
Saldo di cassa
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 54
+ 55
apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html
@@ -1551,7 +1551,7 @@
Piattaforma
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 112
+ 113
apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html
@@ -1783,11 +1783,11 @@
Panoramica
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 41
+ 42
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 114
+ 115
apps/client/src/app/components/header/header.component.html
@@ -1799,7 +1799,7 @@
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 47
+ 48
apps/client/src/app/pages/admin/admin-page.component.ts
@@ -1823,7 +1823,7 @@
Mercati
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 403
+ 404
apps/client/src/app/components/footer/footer.component.html
@@ -2007,7 +2007,7 @@
Partecipazioni
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 126
+ 127
apps/client/src/app/components/home-holdings/home-holdings.html
@@ -2079,7 +2079,7 @@
Nome, simbolo o ISIN
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 133
+ 134
apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html
@@ -2107,7 +2107,7 @@
Quantità
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 159
+ 160
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
@@ -2115,7 +2115,7 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 213
+ 227
libs/ui/src/lib/holdings-table/holdings-table.component.html
@@ -2131,7 +2131,7 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 237
+ 251
@@ -2139,7 +2139,7 @@
Nota
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 455
+ 456
apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html
@@ -2155,7 +2155,7 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 370
+ 384
@@ -2163,15 +2163,15 @@
Attività
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 102
+ 103
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 137
+ 138
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 244
+ 245
apps/client/src/app/components/admin-overview/admin-overview.html
@@ -2187,11 +2187,11 @@
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 233
+ 234
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 361
+ 362
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
@@ -2399,7 +2399,7 @@
Bozza
libs/ui/src/lib/activities-table/activities-table.component.html
- 167
+ 181
@@ -2411,11 +2411,11 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 28
+ 30
libs/ui/src/lib/activities-table/activities-table.component.html
- 406
+ 420
@@ -2423,11 +2423,11 @@
Esporta le attività
libs/ui/src/lib/activities-table/activities-table.component.html
- 64
+ 72
libs/ui/src/lib/activities-table/activities-table.component.html
- 434
+ 448
@@ -2435,11 +2435,11 @@
Esporta le bozze come ICS
libs/ui/src/lib/activities-table/activities-table.component.html
- 77
+ 86
libs/ui/src/lib/activities-table/activities-table.component.html
- 447
+ 461
@@ -2447,7 +2447,7 @@
Clona
libs/ui/src/lib/activities-table/activities-table.component.html
- 492
+ 506
@@ -2455,7 +2455,7 @@
Esporta la bozza come ICS
libs/ui/src/lib/activities-table/activities-table.component.html
- 502
+ 516
@@ -2463,7 +2463,11 @@
Vuoi davvero eliminare questa attività?
libs/ui/src/lib/activities-table/activities-table.component.ts
- 327
+ 333
+
+
+ libs/ui/src/lib/activities-table/activities-table.component.ts
+ 344
@@ -2595,7 +2599,7 @@
Prezzo massimo
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 149
+ 150
@@ -2635,11 +2639,11 @@
Settore
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 280
+ 281
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 270
+ 271
@@ -2647,7 +2651,7 @@
Paese
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 295
+ 296
apps/client/src/app/components/admin-users/admin-users.html
@@ -2655,7 +2659,7 @@
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 284
+ 285
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
@@ -2667,7 +2671,7 @@
Prezzo minimo
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 131
+ 132
@@ -2691,7 +2695,7 @@
Interesse
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 78
+ 79
apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html
@@ -2819,7 +2823,7 @@
Benchmark
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 401
+ 402
apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts
@@ -2959,7 +2963,7 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 335
+ 349
libs/ui/src/lib/i18n.ts
@@ -2979,15 +2983,15 @@
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 253
+ 254
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 349
+ 350
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 244
+ 245
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
@@ -3015,7 +3019,7 @@
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 186
+ 187
apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html
@@ -3023,13 +3027,21 @@
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 322
+ 323
libs/ui/src/lib/i18n.ts
35
+
+ Export
+ Export
+
+ libs/ui/src/lib/activities-table/activities-table.component.html
+ 68
+
+
Tag
Etichetta
@@ -3067,7 +3079,7 @@
Azione ordinaria
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 66
+ 67
libs/ui/src/lib/i18n.ts
@@ -3287,7 +3299,7 @@
Invested Capital
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 173
+ 174
apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html
@@ -3347,7 +3359,7 @@
Data Gathering Frequency
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 467
+ 468
@@ -3371,7 +3383,7 @@
Mappatura dei simboli
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 409
+ 410
@@ -3387,11 +3399,11 @@
Dividendi
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 90
+ 91
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 188
+ 189
apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html
@@ -3431,15 +3443,15 @@
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 262
+ 263
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 365
+ 366
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 253
+ 254
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
@@ -3487,7 +3499,7 @@
Dati del mercato
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 417
+ 418
libs/common/src/lib/routes/routes.ts
@@ -3563,11 +3575,11 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 52
+ 54
libs/ui/src/lib/activities-table/activities-table.component.html
- 420
+ 434
@@ -3939,7 +3951,7 @@
Commissioni
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 210
+ 211
apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html
@@ -4102,14 +4114,6 @@
254
-
- Do you really want to delete these activities?
- Vuoi davvero eliminare tutte le tue attività?
-
- libs/ui/src/lib/activities-table/activities-table.component.ts
- 317
-
-
By ETF Provider
Per fornitore di ETF
@@ -4155,11 +4159,11 @@
Url
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 442
+ 443
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 588
+ 589
apps/client/src/app/components/admin-platform/admin-platform.component.html
@@ -4567,7 +4571,7 @@
Configurazione dello scraper
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 509
+ 510
@@ -5258,6 +5262,14 @@
84
+
+ Do you really want to delete these activities?
+ Do you really want to delete these activities?
+
+ libs/ui/src/lib/activities-table/activities-table.component.ts
+ 334
+
+
Why Ghostfolio ?
Perché Ghostfolio ?
@@ -5757,7 +5769,7 @@
Convert to
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 174
+ 175
@@ -5829,7 +5841,7 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 261
+ 275
libs/ui/src/lib/i18n.ts
@@ -6121,7 +6133,7 @@
Saldi di cassa
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 169
+ 170
@@ -6165,7 +6177,7 @@
Prova
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 606
+ 607
@@ -6261,7 +6273,7 @@
Close Holding
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 450
+ 451
@@ -6301,7 +6313,7 @@
Da inizio settimana
libs/ui/src/lib/assistant/assistant.component.ts
- 369
+ 370
@@ -6313,7 +6325,7 @@
libs/ui/src/lib/assistant/assistant.component.ts
- 369
+ 370
@@ -6321,7 +6333,7 @@
Da inizio mese
libs/ui/src/lib/assistant/assistant.component.ts
- 373
+ 374
@@ -6333,7 +6345,7 @@
libs/ui/src/lib/assistant/assistant.component.ts
- 373
+ 374
@@ -6349,7 +6361,7 @@
Da inizio anno
libs/ui/src/lib/assistant/assistant.component.ts
- 377
+ 378
@@ -6405,7 +6417,7 @@
libs/ui/src/lib/assistant/assistant.component.ts
- 387
+ 388
@@ -6417,7 +6429,7 @@
libs/ui/src/lib/assistant/assistant.component.ts
- 409
+ 410
@@ -6433,7 +6445,7 @@
Raccolta Dati
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 629
+ 630
apps/client/src/app/components/admin-overview/admin-overview.html
@@ -6445,7 +6457,7 @@
Find a holding...
libs/ui/src/lib/assistant/assistant.component.ts
- 448
+ 449
@@ -6538,11 +6550,11 @@
Attività
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 100
+ 101
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 231
+ 232
@@ -6550,7 +6562,7 @@
Rendimento da Dividendi
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 198
+ 199
@@ -6606,7 +6618,7 @@
Elimina le attività
libs/ui/src/lib/activities-table/activities-table.component.html
- 92
+ 105
@@ -6630,7 +6642,7 @@
Jump to a page...
libs/ui/src/lib/assistant/assistant.component.ts
- 449
+ 450
@@ -6686,7 +6698,7 @@
Include in
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 399
+ 400
@@ -6922,7 +6934,7 @@
View Holding
libs/ui/src/lib/activities-table/activities-table.component.html
- 473
+ 487
@@ -6978,11 +6990,11 @@
Annulla
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 162
+ 163
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 634
+ 635
apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html
@@ -7034,7 +7046,7 @@
Chiudi
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 636
+ 637
apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html
@@ -7126,7 +7138,7 @@
Cambio con effetto valuta Cambia
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 63
+ 64
@@ -7142,7 +7154,7 @@
Prestazioni con effetto valuta Prestazioni
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 83
+ 84
@@ -7288,6 +7300,10 @@
apps/client/src/app/components/admin-market-data/admin-market-data.html
270
+
+ libs/ui/src/lib/activities-table/activities-table.component.html
+ 101
+
cannot be self-hosted
@@ -7608,7 +7624,7 @@
Salva
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 645
+ 646
apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html
@@ -7740,7 +7756,7 @@
Prezzo di mercato predefinito
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 519
+ 520
@@ -7748,7 +7764,7 @@
Modalità
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 556
+ 557
@@ -7764,7 +7780,7 @@
Selettore
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 572
+ 573
@@ -7772,7 +7788,7 @@
Intestazioni della richiesta HTTP
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 532
+ 533
@@ -8017,7 +8033,7 @@
Applica
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 154
+ 155
@@ -8108,6 +8124,18 @@
142
+
+ {VAR_PLURAL, plural, =1 {Activity} other {Activities}}
+ {VAR_PLURAL, plural, =1 {Activity} other {Activities}}
+
+ libs/ui/src/lib/activities-table/activities-table.component.html
+ 69
+
+
+ libs/ui/src/lib/activities-table/activities-table.component.html
+ 102
+
+
Log out
Esci
@@ -8577,7 +8605,7 @@
Gestisci profilo risorsa
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 478
+ 479
@@ -8605,7 +8633,7 @@
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 101
+ 102
diff --git a/apps/client/src/locales/messages.ja.xlf b/apps/client/src/locales/messages.ja.xlf
index 3507d24d2..14781a583 100644
--- a/apps/client/src/locales/messages.ja.xlf
+++ b/apps/client/src/locales/messages.ja.xlf
@@ -268,11 +268,11 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 5
+ 7
libs/ui/src/lib/activities-table/activities-table.component.html
- 183
+ 197
@@ -312,7 +312,7 @@
現金残高
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 54
+ 55
apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html
@@ -328,7 +328,7 @@
プラットフォーム
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 112
+ 113
apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html
@@ -344,7 +344,7 @@
現金残高
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 169
+ 170
@@ -368,7 +368,7 @@
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 332
+ 333
apps/client/src/app/components/admin-platform/admin-platform.component.html
@@ -404,7 +404,7 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 161
+ 175
libs/ui/src/lib/benchmark/benchmark.component.html
@@ -444,11 +444,11 @@
通貨
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 216
+ 217
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 339
+ 340
apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html
@@ -468,7 +468,7 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 303
+ 317
@@ -504,11 +504,11 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 284
+ 298
libs/ui/src/lib/activities-table/activities-table.component.html
- 320
+ 334
libs/ui/src/lib/holdings-table/holdings-table.component.html
@@ -548,7 +548,7 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 483
+ 497
@@ -588,7 +588,7 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 513
+ 527
libs/ui/src/lib/benchmark/benchmark.component.html
@@ -628,7 +628,7 @@
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 486
+ 487
@@ -644,7 +644,7 @@
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 197
+ 198
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
@@ -752,7 +752,7 @@
アカウントを検索...
libs/ui/src/lib/assistant/assistant.component.ts
- 447
+ 448
@@ -768,7 +768,7 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 192
+ 206
libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html
@@ -792,7 +792,7 @@
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 113
+ 114
libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html
@@ -872,11 +872,11 @@
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 235
+ 236
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 221
+ 222
libs/ui/src/lib/holdings-table/holdings-table.component.html
@@ -888,7 +888,7 @@
データ収集頻度
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 467
+ 468
@@ -1032,11 +1032,11 @@
セクター
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 280
+ 281
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 270
+ 271
@@ -1044,7 +1044,7 @@
国
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 295
+ 296
apps/client/src/app/components/admin-users/admin-users.html
@@ -1052,7 +1052,7 @@
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 284
+ 285
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
@@ -1064,15 +1064,15 @@
セクター
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 301
+ 302
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 420
+ 421
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 290
+ 291
apps/client/src/app/pages/public/public-page.html
@@ -1084,15 +1084,15 @@
国
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 311
+ 312
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 431
+ 432
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 302
+ 303
@@ -1100,7 +1100,7 @@
シンボルマッピング
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 409
+ 410
@@ -1140,7 +1140,7 @@
スクレイパーの設定
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 509
+ 510
@@ -1148,7 +1148,7 @@
メモ
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 455
+ 456
apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html
@@ -1164,7 +1164,7 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 370
+ 384
@@ -1204,7 +1204,7 @@
名称、シンボル、またはISIN
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 133
+ 134
apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html
@@ -1364,11 +1364,11 @@
Url
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 442
+ 443
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 588
+ 589
apps/client/src/app/components/admin-platform/admin-platform.component.html
@@ -1608,7 +1608,7 @@
ベンチマーク
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 401
+ 402
apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts
@@ -1620,7 +1620,7 @@
現在の市場心理
libs/ui/src/lib/fear-and-greed-index/fear-and-greed-index.component.html
- 22
+ 23
@@ -1868,7 +1868,7 @@
または
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 167
+ 168
apps/client/src/app/components/admin-settings/admin-settings.component.html
@@ -1948,7 +1948,7 @@
手数料
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 210
+ 211
apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html
@@ -2044,7 +2044,7 @@
最低価格
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 131
+ 132
@@ -2052,7 +2052,7 @@
最高価格
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 149
+ 150
@@ -2060,7 +2060,7 @@
数量
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 159
+ 160
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
@@ -2068,7 +2068,7 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 213
+ 227
libs/ui/src/lib/holdings-table/holdings-table.component.html
@@ -2080,7 +2080,7 @@
データグリッチの報告
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 463
+ 464
@@ -2260,7 +2260,7 @@
libs/ui/src/lib/assistant/assistant.component.ts
- 365
+ 366
@@ -2272,7 +2272,7 @@
libs/ui/src/lib/assistant/assistant.component.ts
- 377
+ 378
@@ -2284,7 +2284,7 @@
libs/ui/src/lib/assistant/assistant.component.ts
- 387
+ 388
@@ -2304,7 +2304,7 @@
libs/ui/src/lib/assistant/assistant.component.ts
- 409
+ 410
@@ -2324,7 +2324,7 @@
libs/ui/src/lib/assistant/assistant.component.ts
- 415
+ 416
@@ -2504,7 +2504,7 @@
ロケール
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 547
+ 548
apps/client/src/app/components/user-account-settings/user-account-settings.html
@@ -2824,7 +2824,7 @@
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 395
+ 396
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
@@ -2928,7 +2928,7 @@
マーケットデータ
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 417
+ 418
libs/common/src/lib/routes/routes.ts
@@ -2968,11 +2968,11 @@
概要
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 41
+ 42
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 114
+ 115
apps/client/src/app/components/header/header.component.html
@@ -2984,7 +2984,7 @@
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 47
+ 48
apps/client/src/app/pages/admin/admin-page.component.ts
@@ -3368,7 +3368,7 @@
保有資産
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 126
+ 127
apps/client/src/app/components/home-holdings/home-holdings.html
@@ -3420,7 +3420,7 @@
マーケット
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 403
+ 404
apps/client/src/app/components/footer/footer.component.html
@@ -3615,6 +3615,14 @@
84
+
+ Do you really want to delete these activities?
+ Do you really want to delete these activities?
+
+ libs/ui/src/lib/activities-table/activities-table.component.ts
+ 334
+
+
Why Ghostfolio ?
なぜ Ghostfolio なのか?
@@ -3864,7 +3872,7 @@
Convert to
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 174
+ 175
@@ -3940,15 +3948,15 @@
アクティビティ
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 102
+ 103
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 137
+ 138
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 244
+ 245
apps/client/src/app/components/admin-overview/admin-overview.html
@@ -3964,11 +3972,11 @@
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 233
+ 234
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 361
+ 362
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
@@ -3987,14 +3995,6 @@
126
-
- Do you really want to delete these activities?
- 本当にこれらのアクティビティを削除したいですか?
-
- libs/ui/src/lib/activities-table/activities-table.component.ts
- 317
-
-
Update activity
アクティビティを更新
@@ -4072,7 +4072,7 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 237
+ 251
@@ -4084,11 +4084,11 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 28
+ 30
libs/ui/src/lib/activities-table/activities-table.component.html
- 406
+ 420
@@ -4100,11 +4100,11 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 52
+ 54
libs/ui/src/lib/activities-table/activities-table.component.html
- 420
+ 434
@@ -4440,11 +4440,11 @@
配当金
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 90
+ 91
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 188
+ 189
apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html
@@ -5289,11 +5289,11 @@
アクティビティをエクスポート
libs/ui/src/lib/activities-table/activities-table.component.html
- 64
+ 72
libs/ui/src/lib/activities-table/activities-table.component.html
- 434
+ 448
@@ -5301,11 +5301,11 @@
ドラフトをICSとしてエクスポート
libs/ui/src/lib/activities-table/activities-table.component.html
- 77
+ 86
libs/ui/src/lib/activities-table/activities-table.component.html
- 447
+ 461
@@ -5313,7 +5313,7 @@
ドラフト
libs/ui/src/lib/activities-table/activities-table.component.html
- 167
+ 181
@@ -5321,7 +5321,7 @@
クローン
libs/ui/src/lib/activities-table/activities-table.component.html
- 492
+ 506
@@ -5329,7 +5329,7 @@
ドラフトをICSとしてエクスポート
libs/ui/src/lib/activities-table/activities-table.component.html
- 502
+ 516
@@ -5337,7 +5337,11 @@
本当にこのアクティビティを削除したいですか?
libs/ui/src/lib/activities-table/activities-table.component.ts
- 327
+ 333
+
+
+ libs/ui/src/lib/activities-table/activities-table.component.ts
+ 344
@@ -5469,7 +5473,7 @@
利息
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 78
+ 79
apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html
@@ -5537,7 +5541,7 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 335
+ 349
libs/ui/src/lib/i18n.ts
@@ -5565,15 +5569,15 @@
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 253
+ 254
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 349
+ 350
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 244
+ 245
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
@@ -5597,15 +5601,15 @@
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 262
+ 263
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 365
+ 366
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 253
+ 254
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
@@ -5781,7 +5785,7 @@
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 186
+ 187
apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html
@@ -5789,13 +5793,21 @@
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 322
+ 323
libs/ui/src/lib/i18n.ts
35
+
+ Export
+ Export
+
+ libs/ui/src/lib/activities-table/activities-table.component.html
+ 68
+
+
Tag
タグ
@@ -5865,7 +5877,7 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 261
+ 275
libs/ui/src/lib/i18n.ts
@@ -5925,7 +5937,7 @@
株式
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 66
+ 67
libs/ui/src/lib/i18n.ts
@@ -6077,7 +6089,7 @@
Invested Capital
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 173
+ 174
apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html
@@ -6197,7 +6209,7 @@
テスト
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 606
+ 607
@@ -6273,7 +6285,7 @@
Close Holding
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 450
+ 451
@@ -6325,7 +6337,7 @@
年初来
libs/ui/src/lib/assistant/assistant.component.ts
- 377
+ 378
@@ -6333,7 +6345,7 @@
週初来
libs/ui/src/lib/assistant/assistant.component.ts
- 369
+ 370
@@ -6341,7 +6353,7 @@
月初来
libs/ui/src/lib/assistant/assistant.component.ts
- 373
+ 374
@@ -6353,7 +6365,7 @@
libs/ui/src/lib/assistant/assistant.component.ts
- 373
+ 374
@@ -6373,7 +6385,7 @@
libs/ui/src/lib/assistant/assistant.component.ts
- 369
+ 370
@@ -6429,7 +6441,7 @@
libs/ui/src/lib/assistant/assistant.component.ts
- 387
+ 388
@@ -6441,7 +6453,7 @@
libs/ui/src/lib/assistant/assistant.component.ts
- 409
+ 410
@@ -6482,7 +6494,7 @@
データ収集
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 629
+ 630
apps/client/src/app/components/admin-overview/admin-overview.html
@@ -6494,7 +6506,7 @@
保有資産を検索...
libs/ui/src/lib/assistant/assistant.component.ts
- 448
+ 449
@@ -6562,11 +6574,11 @@
アクティビティ
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 100
+ 101
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 231
+ 232
@@ -6574,7 +6586,7 @@
配当利回り
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 198
+ 199
@@ -6630,7 +6642,7 @@
アクティビティを削除する
libs/ui/src/lib/activities-table/activities-table.component.html
- 92
+ 105
@@ -6662,7 +6674,7 @@
ページにジャンプ...
libs/ui/src/lib/assistant/assistant.component.ts
- 449
+ 450
@@ -6710,7 +6722,7 @@
Include in
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 399
+ 400
@@ -6882,7 +6894,7 @@
View Holding
libs/ui/src/lib/activities-table/activities-table.component.html
- 473
+ 487
@@ -6970,11 +6982,11 @@
キャンセル
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 162
+ 163
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 634
+ 635
apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html
@@ -7050,7 +7062,7 @@
Close
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 636
+ 637
apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html
@@ -7174,7 +7186,7 @@
Performance with currency effect Performance
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 83
+ 84
@@ -7198,7 +7210,7 @@
Change with currency effect Change
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 63
+ 64
@@ -7312,6 +7324,10 @@
apps/client/src/app/components/admin-market-data/admin-market-data.html
270
+
+ libs/ui/src/lib/activities-table/activities-table.component.html
+ 101
+
cannot be self-hosted
@@ -7632,7 +7648,7 @@
保存
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 645
+ 646
apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html
@@ -7748,7 +7764,7 @@
Mode
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 556
+ 557
@@ -7764,7 +7780,7 @@
Default Market Price
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 519
+ 520
@@ -7772,7 +7788,7 @@
Selector
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 572
+ 573
@@ -7796,7 +7812,7 @@
HTTP Request Headers
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 532
+ 533
@@ -8041,7 +8057,7 @@
Apply
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 154
+ 155
@@ -8108,6 +8124,18 @@
142
+
+ {VAR_PLURAL, plural, =1 {Activity} other {Activities}}
+ {VAR_PLURAL, plural, =1 {Activity} other {Activities}}
+
+ libs/ui/src/lib/activities-table/activities-table.component.html
+ 69
+
+
+ libs/ui/src/lib/activities-table/activities-table.component.html
+ 102
+
+
Log out
Log out
@@ -8577,7 +8605,7 @@
Manage Asset Profile
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 478
+ 479
@@ -8605,7 +8633,7 @@
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 101
+ 102
diff --git a/apps/client/src/locales/messages.ko.xlf b/apps/client/src/locales/messages.ko.xlf
index 5efe7b365..5ee8c49b7 100644
--- a/apps/client/src/locales/messages.ko.xlf
+++ b/apps/client/src/locales/messages.ko.xlf
@@ -268,11 +268,11 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 5
+ 7
libs/ui/src/lib/activities-table/activities-table.component.html
- 183
+ 197
@@ -312,7 +312,7 @@
현금 잔액
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 54
+ 55
apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html
@@ -328,7 +328,7 @@
플랫폼
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 112
+ 113
apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html
@@ -344,7 +344,7 @@
현금 잔액
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 169
+ 170
@@ -368,7 +368,7 @@
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 332
+ 333
apps/client/src/app/components/admin-platform/admin-platform.component.html
@@ -404,7 +404,7 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 161
+ 175
libs/ui/src/lib/benchmark/benchmark.component.html
@@ -444,11 +444,11 @@
통화
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 216
+ 217
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 339
+ 340
apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html
@@ -468,7 +468,7 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 303
+ 317
@@ -504,11 +504,11 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 284
+ 298
libs/ui/src/lib/activities-table/activities-table.component.html
- 320
+ 334
libs/ui/src/lib/holdings-table/holdings-table.component.html
@@ -548,7 +548,7 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 483
+ 497
@@ -588,7 +588,7 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 513
+ 527
libs/ui/src/lib/benchmark/benchmark.component.html
@@ -628,7 +628,7 @@
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 486
+ 487
@@ -644,7 +644,7 @@
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 197
+ 198
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
@@ -752,7 +752,7 @@
계좌 검색...
libs/ui/src/lib/assistant/assistant.component.ts
- 447
+ 448
@@ -768,7 +768,7 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 192
+ 206
libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html
@@ -792,7 +792,7 @@
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 113
+ 114
libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html
@@ -872,11 +872,11 @@
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 235
+ 236
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 221
+ 222
libs/ui/src/lib/holdings-table/holdings-table.component.html
@@ -888,7 +888,7 @@
데이터 수집 빈도
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 467
+ 468
@@ -1032,11 +1032,11 @@
섹터
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 280
+ 281
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 270
+ 271
@@ -1044,7 +1044,7 @@
국가
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 295
+ 296
apps/client/src/app/components/admin-users/admin-users.html
@@ -1052,7 +1052,7 @@
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 284
+ 285
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
@@ -1064,15 +1064,15 @@
섹터
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 301
+ 302
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 420
+ 421
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 290
+ 291
apps/client/src/app/pages/public/public-page.html
@@ -1084,15 +1084,15 @@
국가
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 311
+ 312
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 431
+ 432
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 302
+ 303
@@ -1100,7 +1100,7 @@
심볼 매핑
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 409
+ 410
@@ -1140,7 +1140,7 @@
스크래퍼 설정
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 509
+ 510
@@ -1148,7 +1148,7 @@
메모
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 455
+ 456
apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html
@@ -1164,7 +1164,7 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 370
+ 384
@@ -1204,7 +1204,7 @@
이름, 심볼 또는 ISIN
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 133
+ 134
apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html
@@ -1364,11 +1364,11 @@
링크
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 442
+ 443
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 588
+ 589
apps/client/src/app/components/admin-platform/admin-platform.component.html
@@ -1608,7 +1608,7 @@
기준
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 401
+ 402
apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts
@@ -1620,7 +1620,7 @@
현재 시장 분위기
libs/ui/src/lib/fear-and-greed-index/fear-and-greed-index.component.html
- 22
+ 23
@@ -1868,7 +1868,7 @@
또는
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 167
+ 168
apps/client/src/app/components/admin-settings/admin-settings.component.html
@@ -1948,7 +1948,7 @@
수수료
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 210
+ 211
apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html
@@ -2044,7 +2044,7 @@
최저가
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 131
+ 132
@@ -2052,7 +2052,7 @@
최고가
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 149
+ 150
@@ -2060,7 +2060,7 @@
수량
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 159
+ 160
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
@@ -2068,7 +2068,7 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 213
+ 227
libs/ui/src/lib/holdings-table/holdings-table.component.html
@@ -2080,7 +2080,7 @@
데이터 결함 보고
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 463
+ 464
@@ -2260,7 +2260,7 @@
libs/ui/src/lib/assistant/assistant.component.ts
- 365
+ 366
@@ -2272,7 +2272,7 @@
libs/ui/src/lib/assistant/assistant.component.ts
- 377
+ 378
@@ -2284,7 +2284,7 @@
libs/ui/src/lib/assistant/assistant.component.ts
- 387
+ 388
@@ -2304,7 +2304,7 @@
libs/ui/src/lib/assistant/assistant.component.ts
- 409
+ 410
@@ -2324,7 +2324,7 @@
libs/ui/src/lib/assistant/assistant.component.ts
- 415
+ 416
@@ -2504,7 +2504,7 @@
장소
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 547
+ 548
apps/client/src/app/components/user-account-settings/user-account-settings.html
@@ -2824,7 +2824,7 @@
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 395
+ 396
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
@@ -2928,7 +2928,7 @@
시장 데이터
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 417
+ 418
libs/common/src/lib/routes/routes.ts
@@ -2968,11 +2968,11 @@
개요
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 41
+ 42
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 114
+ 115
apps/client/src/app/components/header/header.component.html
@@ -2984,7 +2984,7 @@
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 47
+ 48
apps/client/src/app/pages/admin/admin-page.component.ts
@@ -3368,7 +3368,7 @@
보유 종목
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 126
+ 127
apps/client/src/app/components/home-holdings/home-holdings.html
@@ -3420,7 +3420,7 @@
시장
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 403
+ 404
apps/client/src/app/components/footer/footer.component.html
@@ -3615,6 +3615,14 @@
84
+
+ Do you really want to delete these activities?
+ Do you really want to delete these activities?
+
+ libs/ui/src/lib/activities-table/activities-table.component.ts
+ 334
+
+
Why Ghostfolio ?
왜 Ghostfolio 인가요?
@@ -3856,7 +3864,7 @@
Convert to
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 174
+ 175
@@ -3932,15 +3940,15 @@
거래 내역
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 102
+ 103
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 137
+ 138
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 244
+ 245
apps/client/src/app/components/admin-overview/admin-overview.html
@@ -3956,11 +3964,11 @@
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 233
+ 234
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 361
+ 362
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
@@ -3979,14 +3987,6 @@
126
-
- Do you really want to delete these activities?
- 정말로 이 거래들을 삭제하시겠습니까?
-
- libs/ui/src/lib/activities-table/activities-table.component.ts
- 317
-
-
Update activity
거래 수정
@@ -4064,7 +4064,7 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 237
+ 251
@@ -4076,11 +4076,11 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 28
+ 30
libs/ui/src/lib/activities-table/activities-table.component.html
- 406
+ 420
@@ -4092,11 +4092,11 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 52
+ 54
libs/ui/src/lib/activities-table/activities-table.component.html
- 420
+ 434
@@ -4432,11 +4432,11 @@
배당금
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 90
+ 91
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 188
+ 189
apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html
@@ -5281,11 +5281,11 @@
거래 내역 내보내기
libs/ui/src/lib/activities-table/activities-table.component.html
- 64
+ 72
libs/ui/src/lib/activities-table/activities-table.component.html
- 434
+ 448
@@ -5293,11 +5293,11 @@
초안을 달력 파일로 내보내기
libs/ui/src/lib/activities-table/activities-table.component.html
- 77
+ 86
libs/ui/src/lib/activities-table/activities-table.component.html
- 447
+ 461
@@ -5305,7 +5305,7 @@
초안
libs/ui/src/lib/activities-table/activities-table.component.html
- 167
+ 181
@@ -5313,7 +5313,7 @@
클론
libs/ui/src/lib/activities-table/activities-table.component.html
- 492
+ 506
@@ -5321,7 +5321,7 @@
초안을 달력 파일로 내보내기
libs/ui/src/lib/activities-table/activities-table.component.html
- 502
+ 516
@@ -5329,7 +5329,11 @@
정말로 이 거래를 삭제하시겠습니까?
libs/ui/src/lib/activities-table/activities-table.component.ts
- 327
+ 333
+
+
+ libs/ui/src/lib/activities-table/activities-table.component.ts
+ 344
@@ -5461,7 +5465,7 @@
관심
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 78
+ 79
apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html
@@ -5529,7 +5533,7 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 335
+ 349
libs/ui/src/lib/i18n.ts
@@ -5557,15 +5561,15 @@
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 253
+ 254
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 349
+ 350
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 244
+ 245
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
@@ -5589,15 +5593,15 @@
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 262
+ 263
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 365
+ 366
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 253
+ 254
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
@@ -5781,7 +5785,7 @@
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 186
+ 187
apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html
@@ -5789,13 +5793,21 @@
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 322
+ 323
libs/ui/src/lib/i18n.ts
35
+
+ Export
+ Export
+
+ libs/ui/src/lib/activities-table/activities-table.component.html
+ 68
+
+
Tag
꼬리표
@@ -5865,7 +5877,7 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 261
+ 275
libs/ui/src/lib/i18n.ts
@@ -5925,7 +5937,7 @@
주식
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 66
+ 67
libs/ui/src/lib/i18n.ts
@@ -6077,7 +6089,7 @@
Invested Capital
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 173
+ 174
apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html
@@ -6197,7 +6209,7 @@
시험
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 606
+ 607
@@ -6273,7 +6285,7 @@
보유 포지션 종료
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 450
+ 451
@@ -6325,7 +6337,7 @@
연초 현재
libs/ui/src/lib/assistant/assistant.component.ts
- 377
+ 378
@@ -6333,7 +6345,7 @@
이번주 현재까지
libs/ui/src/lib/assistant/assistant.component.ts
- 369
+ 370
@@ -6341,7 +6353,7 @@
월간 누계
libs/ui/src/lib/assistant/assistant.component.ts
- 373
+ 374
@@ -6353,7 +6365,7 @@
libs/ui/src/lib/assistant/assistant.component.ts
- 373
+ 374
@@ -6373,7 +6385,7 @@
libs/ui/src/lib/assistant/assistant.component.ts
- 369
+ 370
@@ -6429,7 +6441,7 @@
libs/ui/src/lib/assistant/assistant.component.ts
- 387
+ 388
@@ -6441,7 +6453,7 @@
libs/ui/src/lib/assistant/assistant.component.ts
- 409
+ 410
@@ -6482,7 +6494,7 @@
데이터 수집
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 629
+ 630
apps/client/src/app/components/admin-overview/admin-overview.html
@@ -6494,7 +6506,7 @@
보유 종목 검색...
libs/ui/src/lib/assistant/assistant.component.ts
- 448
+ 449
@@ -6562,11 +6574,11 @@
거래
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 100
+ 101
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 231
+ 232
@@ -6574,7 +6586,7 @@
배당수익률
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 198
+ 199
@@ -6630,7 +6642,7 @@
거래 삭제
libs/ui/src/lib/activities-table/activities-table.component.html
- 92
+ 105
@@ -6662,7 +6674,7 @@
페이지 이동...
libs/ui/src/lib/assistant/assistant.component.ts
- 449
+ 450
@@ -6710,7 +6722,7 @@
포함
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 399
+ 400
@@ -6882,7 +6894,7 @@
보유 종목 보기
libs/ui/src/lib/activities-table/activities-table.component.html
- 473
+ 487
@@ -6970,11 +6982,11 @@
취소
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 162
+ 163
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 634
+ 635
apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html
@@ -7050,7 +7062,7 @@
닫다
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 636
+ 637
apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html
@@ -7174,7 +7186,7 @@
환율 효과 반영 수익률 수익률
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 83
+ 84
@@ -7198,7 +7210,7 @@
환율 효과 반영 변동 변동
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 63
+ 64
@@ -7312,6 +7324,10 @@
apps/client/src/app/components/admin-market-data/admin-market-data.html
270
+
+ libs/ui/src/lib/activities-table/activities-table.component.html
+ 101
+
cannot be self-hosted
@@ -7632,7 +7648,7 @@
구하다
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 645
+ 646
apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html
@@ -7748,7 +7764,7 @@
방법
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 556
+ 557
@@ -7764,7 +7780,7 @@
기본 시장 가격
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 519
+ 520
@@ -7772,7 +7788,7 @@
선택자
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 572
+ 573
@@ -7796,7 +7812,7 @@
HTTP 요청 헤더
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 532
+ 533
@@ -8041,7 +8057,7 @@
적용하다
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 154
+ 155
@@ -8108,6 +8124,18 @@
142
+
+ {VAR_PLURAL, plural, =1 {Activity} other {Activities}}
+ {VAR_PLURAL, plural, =1 {Activity} other {Activities}}
+
+ libs/ui/src/lib/activities-table/activities-table.component.html
+ 69
+
+
+ libs/ui/src/lib/activities-table/activities-table.component.html
+ 102
+
+
Log out
로그아웃
@@ -8577,7 +8605,7 @@
자산 프로필 관리
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 478
+ 479
@@ -8605,7 +8633,7 @@
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 101
+ 102
diff --git a/apps/client/src/locales/messages.nl.xlf b/apps/client/src/locales/messages.nl.xlf
index 585a06f79..fccb994a9 100644
--- a/apps/client/src/locales/messages.nl.xlf
+++ b/apps/client/src/locales/messages.nl.xlf
@@ -66,11 +66,11 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 5
+ 7
libs/ui/src/lib/activities-table/activities-table.component.html
- 183
+ 197
@@ -114,7 +114,7 @@
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 332
+ 333
apps/client/src/app/components/admin-platform/admin-platform.component.html
@@ -150,7 +150,7 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 161
+ 175
libs/ui/src/lib/benchmark/benchmark.component.html
@@ -210,11 +210,11 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 284
+ 298
libs/ui/src/lib/activities-table/activities-table.component.html
- 320
+ 334
libs/ui/src/lib/holdings-table/holdings-table.component.html
@@ -254,7 +254,7 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 483
+ 497
@@ -294,7 +294,7 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 513
+ 527
libs/ui/src/lib/benchmark/benchmark.component.html
@@ -338,7 +338,7 @@
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 197
+ 198
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
@@ -422,7 +422,7 @@
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 486
+ 487
@@ -462,7 +462,7 @@
Zoek een account...
libs/ui/src/lib/assistant/assistant.component.ts
- 447
+ 448
@@ -478,7 +478,7 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 192
+ 206
libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html
@@ -502,7 +502,7 @@
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 113
+ 114
libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html
@@ -518,11 +518,11 @@
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 235
+ 236
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 221
+ 222
libs/ui/src/lib/holdings-table/holdings-table.component.html
@@ -710,7 +710,7 @@
Huidig marktsentiment
libs/ui/src/lib/fear-and-greed-index/fear-and-greed-index.component.html
- 22
+ 23
@@ -854,7 +854,7 @@
of
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 167
+ 168
apps/client/src/app/components/admin-settings/admin-settings.component.html
@@ -998,15 +998,15 @@
Sectoren
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 301
+ 302
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 420
+ 421
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 290
+ 291
apps/client/src/app/pages/public/public-page.html
@@ -1018,15 +1018,15 @@
Landen
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 311
+ 312
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 431
+ 432
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 302
+ 303
@@ -1050,7 +1050,7 @@
Gegevensstoring melden
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 463
+ 464
@@ -1098,7 +1098,7 @@
libs/ui/src/lib/assistant/assistant.component.ts
- 365
+ 366
@@ -1110,7 +1110,7 @@
libs/ui/src/lib/assistant/assistant.component.ts
- 377
+ 378
@@ -1122,7 +1122,7 @@
libs/ui/src/lib/assistant/assistant.component.ts
- 387
+ 388
@@ -1142,7 +1142,7 @@
libs/ui/src/lib/assistant/assistant.component.ts
- 409
+ 410
@@ -1162,7 +1162,7 @@
libs/ui/src/lib/assistant/assistant.component.ts
- 415
+ 416
@@ -1342,7 +1342,7 @@
Locatie
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 547
+ 548
apps/client/src/app/components/user-account-settings/user-account-settings.html
@@ -1454,7 +1454,7 @@
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 395
+ 396
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
@@ -1502,11 +1502,11 @@
Valuta
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 216
+ 217
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 339
+ 340
apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html
@@ -1526,7 +1526,7 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 303
+ 317
@@ -1534,7 +1534,7 @@
Saldo
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 54
+ 55
apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html
@@ -1550,7 +1550,7 @@
Platform
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 112
+ 113
apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html
@@ -1782,11 +1782,11 @@
Overzicht
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 41
+ 42
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 114
+ 115
apps/client/src/app/components/header/header.component.html
@@ -1798,7 +1798,7 @@
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 47
+ 48
apps/client/src/app/pages/admin/admin-page.component.ts
@@ -1822,7 +1822,7 @@
Markten
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 403
+ 404
apps/client/src/app/components/footer/footer.component.html
@@ -2006,7 +2006,7 @@
Posities
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 126
+ 127
apps/client/src/app/components/home-holdings/home-holdings.html
@@ -2078,7 +2078,7 @@
Naam, symbool of ISIN
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 133
+ 134
apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html
@@ -2106,7 +2106,7 @@
Hoeveelheid
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 159
+ 160
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
@@ -2114,7 +2114,7 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 213
+ 227
libs/ui/src/lib/holdings-table/holdings-table.component.html
@@ -2130,7 +2130,7 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 237
+ 251
@@ -2138,7 +2138,7 @@
Opmerking
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 455
+ 456
apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html
@@ -2154,7 +2154,7 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 370
+ 384
@@ -2162,15 +2162,15 @@
Activiteiten
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 102
+ 103
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 137
+ 138
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 244
+ 245
apps/client/src/app/components/admin-overview/admin-overview.html
@@ -2186,11 +2186,11 @@
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 233
+ 234
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 361
+ 362
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
@@ -2398,7 +2398,7 @@
Concept
libs/ui/src/lib/activities-table/activities-table.component.html
- 167
+ 181
@@ -2410,11 +2410,11 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 28
+ 30
libs/ui/src/lib/activities-table/activities-table.component.html
- 406
+ 420
@@ -2422,11 +2422,11 @@
Activiteiten exporteren
libs/ui/src/lib/activities-table/activities-table.component.html
- 64
+ 72
libs/ui/src/lib/activities-table/activities-table.component.html
- 434
+ 448
@@ -2434,11 +2434,11 @@
Concept exporteren als ICS
libs/ui/src/lib/activities-table/activities-table.component.html
- 77
+ 86
libs/ui/src/lib/activities-table/activities-table.component.html
- 447
+ 461
@@ -2446,7 +2446,7 @@
Kloon
libs/ui/src/lib/activities-table/activities-table.component.html
- 492
+ 506
@@ -2454,7 +2454,7 @@
Concept exporteren als ICS
libs/ui/src/lib/activities-table/activities-table.component.html
- 502
+ 516
@@ -2462,7 +2462,11 @@
Wil je deze activiteit echt verwijderen?
libs/ui/src/lib/activities-table/activities-table.component.ts
- 327
+ 333
+
+
+ libs/ui/src/lib/activities-table/activities-table.component.ts
+ 344
@@ -2594,7 +2598,7 @@
Maximale prijs
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 149
+ 150
@@ -2634,11 +2638,11 @@
Sector
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 280
+ 281
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 270
+ 271
@@ -2646,7 +2650,7 @@
Land
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 295
+ 296
apps/client/src/app/components/admin-users/admin-users.html
@@ -2654,7 +2658,7 @@
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 284
+ 285
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
@@ -2666,7 +2670,7 @@
Minimale prijs
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 131
+ 132
@@ -2690,7 +2694,7 @@
Rente
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 78
+ 79
apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html
@@ -2818,7 +2822,7 @@
Benchmark
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 401
+ 402
apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts
@@ -2958,7 +2962,7 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 335
+ 349
libs/ui/src/lib/i18n.ts
@@ -2978,15 +2982,15 @@
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 253
+ 254
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 349
+ 350
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 244
+ 245
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
@@ -3014,7 +3018,7 @@
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 186
+ 187
apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html
@@ -3022,13 +3026,21 @@
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 322
+ 323
libs/ui/src/lib/i18n.ts
35
+
+ Export
+ Export
+
+ libs/ui/src/lib/activities-table/activities-table.component.html
+ 68
+
+
Tag
Label
@@ -3066,7 +3078,7 @@
Equity
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 66
+ 67
libs/ui/src/lib/i18n.ts
@@ -3286,7 +3298,7 @@
Invested Capital
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 173
+ 174
apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html
@@ -3346,7 +3358,7 @@
Frequentie van gegevensverzameling
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 467
+ 468
@@ -3370,7 +3382,7 @@
Symbool toewijzen
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 409
+ 410
@@ -3386,11 +3398,11 @@
Dividend
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 90
+ 91
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 188
+ 189
apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html
@@ -3430,15 +3442,15 @@
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 262
+ 263
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 365
+ 366
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 253
+ 254
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
@@ -3486,7 +3498,7 @@
Marktgegevens
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 417
+ 418
libs/common/src/lib/routes/routes.ts
@@ -3562,11 +3574,11 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 52
+ 54
libs/ui/src/lib/activities-table/activities-table.component.html
- 420
+ 434
@@ -3938,7 +3950,7 @@
Kosten
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 210
+ 211
apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html
@@ -4101,14 +4113,6 @@
254
-
- Do you really want to delete these activities?
- Weet je zeker dat je alle activiteiten wilt verwijderen?
-
- libs/ui/src/lib/activities-table/activities-table.component.ts
- 317
-
-
By ETF Provider
Per ETF-aanbieder
@@ -4154,11 +4158,11 @@
Url
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 442
+ 443
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 588
+ 589
apps/client/src/app/components/admin-platform/admin-platform.component.html
@@ -4566,7 +4570,7 @@
Scraper instellingen
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 509
+ 510
@@ -5257,6 +5261,14 @@
84
+
+ Do you really want to delete these activities?
+ Do you really want to delete these activities?
+
+ libs/ui/src/lib/activities-table/activities-table.component.ts
+ 334
+
+
Why Ghostfolio ?
Waarom Ghostfolio ?
@@ -5756,7 +5768,7 @@
Convert to
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 174
+ 175
@@ -5828,7 +5840,7 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 261
+ 275
libs/ui/src/lib/i18n.ts
@@ -6120,7 +6132,7 @@
Contant Saldo
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 169
+ 170
@@ -6164,7 +6176,7 @@
Test
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 606
+ 607
@@ -6260,7 +6272,7 @@
Sluit Holding
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 450
+ 451
@@ -6300,7 +6312,7 @@
Week tot nu toe
libs/ui/src/lib/assistant/assistant.component.ts
- 369
+ 370
@@ -6312,7 +6324,7 @@
libs/ui/src/lib/assistant/assistant.component.ts
- 369
+ 370
@@ -6320,7 +6332,7 @@
Maand tot nu toe
libs/ui/src/lib/assistant/assistant.component.ts
- 373
+ 374
@@ -6332,7 +6344,7 @@
libs/ui/src/lib/assistant/assistant.component.ts
- 373
+ 374
@@ -6348,7 +6360,7 @@
Jaar tot nu toe
libs/ui/src/lib/assistant/assistant.component.ts
- 377
+ 378
@@ -6404,7 +6416,7 @@
libs/ui/src/lib/assistant/assistant.component.ts
- 387
+ 388
@@ -6416,7 +6428,7 @@
libs/ui/src/lib/assistant/assistant.component.ts
- 409
+ 410
@@ -6432,7 +6444,7 @@
Data Verzamelen
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 629
+ 630
apps/client/src/app/components/admin-overview/admin-overview.html
@@ -6444,7 +6456,7 @@
Zoek een positie...
libs/ui/src/lib/assistant/assistant.component.ts
- 448
+ 449
@@ -6537,11 +6549,11 @@
Activiteit
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 100
+ 101
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 231
+ 232
@@ -6549,7 +6561,7 @@
Dividendrendement
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 198
+ 199
@@ -6605,7 +6617,7 @@
Verwijder Activiteiten
libs/ui/src/lib/activities-table/activities-table.component.html
- 92
+ 105
@@ -6629,7 +6641,7 @@
Ga naar een pagina...
libs/ui/src/lib/assistant/assistant.component.ts
- 449
+ 450
@@ -6685,7 +6697,7 @@
Opnemen in
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 399
+ 400
@@ -6921,7 +6933,7 @@
Bekijk Holding
libs/ui/src/lib/activities-table/activities-table.component.html
- 473
+ 487
@@ -6977,11 +6989,11 @@
Annuleren
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 162
+ 163
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 634
+ 635
apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html
@@ -7033,7 +7045,7 @@
Sluiten
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 636
+ 637
apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html
@@ -7125,7 +7137,7 @@
Verandering met valuta-effect Verandering
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 63
+ 64
@@ -7141,7 +7153,7 @@
Prestaties met valuta-effect Prestaties
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 83
+ 84
@@ -7287,6 +7299,10 @@
apps/client/src/app/components/admin-market-data/admin-market-data.html
270
+
+ libs/ui/src/lib/activities-table/activities-table.component.html
+ 101
+
cannot be self-hosted
@@ -7607,7 +7623,7 @@
Opslaan
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 645
+ 646
apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html
@@ -7739,7 +7755,7 @@
Standaard Marktprijs
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 519
+ 520
@@ -7747,7 +7763,7 @@
Modus
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 556
+ 557
@@ -7763,7 +7779,7 @@
Kiezer
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 572
+ 573
@@ -7771,7 +7787,7 @@
HTTP Verzoek Headers
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 532
+ 533
@@ -8016,7 +8032,7 @@
Toepassen
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 154
+ 155
@@ -8107,6 +8123,18 @@
142
+
+ {VAR_PLURAL, plural, =1 {Activity} other {Activities}}
+ {VAR_PLURAL, plural, =1 {Activity} other {Activities}}
+
+ libs/ui/src/lib/activities-table/activities-table.component.html
+ 69
+
+
+ libs/ui/src/lib/activities-table/activities-table.component.html
+ 102
+
+
Log out
Uitloggen
@@ -8576,7 +8604,7 @@
Beheer activaprofiel
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 478
+ 479
@@ -8604,7 +8632,7 @@
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 101
+ 102
diff --git a/apps/client/src/locales/messages.pl.xlf b/apps/client/src/locales/messages.pl.xlf
index d07646ecd..502faf9f6 100644
--- a/apps/client/src/locales/messages.pl.xlf
+++ b/apps/client/src/locales/messages.pl.xlf
@@ -267,11 +267,11 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 5
+ 7
libs/ui/src/lib/activities-table/activities-table.component.html
- 183
+ 197
@@ -311,7 +311,7 @@
Saldo Gotówkowe
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 54
+ 55
apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html
@@ -327,7 +327,7 @@
Platforma
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 112
+ 113
apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html
@@ -359,7 +359,7 @@
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 332
+ 333
apps/client/src/app/components/admin-platform/admin-platform.component.html
@@ -395,7 +395,7 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 161
+ 175
libs/ui/src/lib/benchmark/benchmark.component.html
@@ -435,11 +435,11 @@
Waluta
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 216
+ 217
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 339
+ 340
apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html
@@ -459,7 +459,7 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 303
+ 317
@@ -495,11 +495,11 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 284
+ 298
libs/ui/src/lib/activities-table/activities-table.component.html
- 320
+ 334
libs/ui/src/lib/holdings-table/holdings-table.component.html
@@ -539,7 +539,7 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 483
+ 497
@@ -579,7 +579,7 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 513
+ 527
libs/ui/src/lib/benchmark/benchmark.component.html
@@ -619,7 +619,7 @@
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 486
+ 487
@@ -635,7 +635,7 @@
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 197
+ 198
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
@@ -743,7 +743,7 @@
Find an account...
libs/ui/src/lib/assistant/assistant.component.ts
- 447
+ 448
@@ -759,7 +759,7 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 192
+ 206
libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html
@@ -783,7 +783,7 @@
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 113
+ 114
libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html
@@ -863,11 +863,11 @@
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 235
+ 236
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 221
+ 222
libs/ui/src/lib/holdings-table/holdings-table.component.html
@@ -879,7 +879,7 @@
Data Gathering Frequency
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 467
+ 468
@@ -999,11 +999,11 @@
Sektor
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 280
+ 281
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 270
+ 271
@@ -1011,7 +1011,7 @@
Kraj
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 295
+ 296
apps/client/src/app/components/admin-users/admin-users.html
@@ -1019,7 +1019,7 @@
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 284
+ 285
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
@@ -1031,15 +1031,15 @@
Sektory
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 301
+ 302
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 420
+ 421
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 290
+ 291
apps/client/src/app/pages/public/public-page.html
@@ -1051,15 +1051,15 @@
Kraje
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 311
+ 312
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 431
+ 432
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 302
+ 303
@@ -1067,7 +1067,7 @@
Mapowanie Symboli
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 409
+ 410
@@ -1107,7 +1107,7 @@
Konfiguracja Scrapera
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 509
+ 510
@@ -1115,7 +1115,7 @@
Notatka
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 455
+ 456
apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html
@@ -1131,7 +1131,7 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 370
+ 384
@@ -1171,7 +1171,7 @@
Nazwa, symbol lub ISIN
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 133
+ 134
apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html
@@ -1331,11 +1331,11 @@
Url
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 442
+ 443
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 588
+ 589
apps/client/src/app/components/admin-platform/admin-platform.component.html
@@ -1575,7 +1575,7 @@
Poziom Odniesienia (Benchmark)
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 401
+ 402
apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts
@@ -1587,7 +1587,7 @@
Obecny Nastrój Rynkowy
libs/ui/src/lib/fear-and-greed-index/fear-and-greed-index.component.html
- 22
+ 23
@@ -1835,7 +1835,7 @@
lub
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 167
+ 168
apps/client/src/app/components/admin-settings/admin-settings.component.html
@@ -1915,7 +1915,7 @@
Opłaty
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 210
+ 211
apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html
@@ -2011,7 +2011,7 @@
Cena Minimalna
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 131
+ 132
@@ -2019,7 +2019,7 @@
Cena Maksymalna
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 149
+ 150
@@ -2027,7 +2027,7 @@
Ilość
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 159
+ 160
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
@@ -2035,7 +2035,7 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 213
+ 227
libs/ui/src/lib/holdings-table/holdings-table.component.html
@@ -2047,7 +2047,7 @@
Zgłoś Błąd Danych
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 463
+ 464
@@ -2227,7 +2227,7 @@
libs/ui/src/lib/assistant/assistant.component.ts
- 365
+ 366
@@ -2239,7 +2239,7 @@
libs/ui/src/lib/assistant/assistant.component.ts
- 377
+ 378
@@ -2251,7 +2251,7 @@
libs/ui/src/lib/assistant/assistant.component.ts
- 387
+ 388
@@ -2271,7 +2271,7 @@
libs/ui/src/lib/assistant/assistant.component.ts
- 409
+ 410
@@ -2291,7 +2291,7 @@
libs/ui/src/lib/assistant/assistant.component.ts
- 415
+ 416
@@ -2471,7 +2471,7 @@
Ustawienia Regionalne
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 547
+ 548
apps/client/src/app/components/user-account-settings/user-account-settings.html
@@ -2791,7 +2791,7 @@
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 395
+ 396
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
@@ -2895,7 +2895,7 @@
Dane Rynkowe
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 417
+ 418
libs/common/src/lib/routes/routes.ts
@@ -2935,11 +2935,11 @@
Przegląd
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 41
+ 42
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 114
+ 115
apps/client/src/app/components/header/header.component.html
@@ -2951,7 +2951,7 @@
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 47
+ 48
apps/client/src/app/pages/admin/admin-page.component.ts
@@ -3335,7 +3335,7 @@
Inwestycje
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 126
+ 127
apps/client/src/app/components/home-holdings/home-holdings.html
@@ -3387,7 +3387,7 @@
Rynki
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 403
+ 404
apps/client/src/app/components/footer/footer.component.html
@@ -3582,6 +3582,14 @@
84
+
+ Do you really want to delete these activities?
+ Do you really want to delete these activities?
+
+ libs/ui/src/lib/activities-table/activities-table.component.ts
+ 334
+
+
Why Ghostfolio ?
Dlaczego Ghostfolio ?
@@ -3823,7 +3831,7 @@
Convert to
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 174
+ 175
@@ -3899,15 +3907,15 @@
Aktywności
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 102
+ 103
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 137
+ 138
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 244
+ 245
apps/client/src/app/components/admin-overview/admin-overview.html
@@ -3923,11 +3931,11 @@
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 233
+ 234
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 361
+ 362
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
@@ -3946,14 +3954,6 @@
126
-
- Do you really want to delete these activities?
- Czy na pewno chcesz usunąć te aktywności?
-
- libs/ui/src/lib/activities-table/activities-table.component.ts
- 317
-
-
Update activity
Aktualizuj aktywność
@@ -4031,7 +4031,7 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 237
+ 251
@@ -4043,11 +4043,11 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 28
+ 30
libs/ui/src/lib/activities-table/activities-table.component.html
- 406
+ 420
@@ -4059,11 +4059,11 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 52
+ 54
libs/ui/src/lib/activities-table/activities-table.component.html
- 420
+ 434
@@ -4399,11 +4399,11 @@
Dywidenda
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 90
+ 91
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 188
+ 189
apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html
@@ -5228,11 +5228,11 @@
Eksportuj Działalności
libs/ui/src/lib/activities-table/activities-table.component.html
- 64
+ 72
libs/ui/src/lib/activities-table/activities-table.component.html
- 434
+ 448
@@ -5240,11 +5240,11 @@
Eksportuj Wersje Robocze jako ICS
libs/ui/src/lib/activities-table/activities-table.component.html
- 77
+ 86
libs/ui/src/lib/activities-table/activities-table.component.html
- 447
+ 461
@@ -5252,7 +5252,7 @@
Przygotuj Wstępną Wersję
libs/ui/src/lib/activities-table/activities-table.component.html
- 167
+ 181
@@ -5260,7 +5260,7 @@
Sklonuj
libs/ui/src/lib/activities-table/activities-table.component.html
- 492
+ 506
@@ -5268,7 +5268,7 @@
Eksportuj Wersję Roboczą jako ICS
libs/ui/src/lib/activities-table/activities-table.component.html
- 502
+ 516
@@ -5276,7 +5276,11 @@
Czy na pewno chcesz usunąć tę działalność?
libs/ui/src/lib/activities-table/activities-table.component.ts
- 327
+ 333
+
+
+ libs/ui/src/lib/activities-table/activities-table.component.ts
+ 344
@@ -5384,7 +5388,7 @@
Odsetki
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 78
+ 79
apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html
@@ -5452,7 +5456,7 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 335
+ 349
libs/ui/src/lib/i18n.ts
@@ -5480,15 +5484,15 @@
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 253
+ 254
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 349
+ 350
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 244
+ 245
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
@@ -5512,15 +5516,15 @@
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 262
+ 263
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 365
+ 366
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 253
+ 254
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
@@ -5704,7 +5708,7 @@
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 186
+ 187
apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html
@@ -5712,13 +5716,21 @@
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 322
+ 323
libs/ui/src/lib/i18n.ts
35
+
+ Export
+ Export
+
+ libs/ui/src/lib/activities-table/activities-table.component.html
+ 68
+
+
Tag
Tag
@@ -5788,7 +5800,7 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 261
+ 275
libs/ui/src/lib/i18n.ts
@@ -5848,7 +5860,7 @@
Kapitał
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 66
+ 67
libs/ui/src/lib/i18n.ts
@@ -6000,7 +6012,7 @@
Invested Capital
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 173
+ 174
apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html
@@ -6120,7 +6132,7 @@
Salda Gotówkowe
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 169
+ 170
@@ -6164,7 +6176,7 @@
Test
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 606
+ 607
@@ -6260,7 +6272,7 @@
Zamknij pozycję
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 450
+ 451
@@ -6300,7 +6312,7 @@
Dotychczasowy tydzień
libs/ui/src/lib/assistant/assistant.component.ts
- 369
+ 370
@@ -6312,7 +6324,7 @@
libs/ui/src/lib/assistant/assistant.component.ts
- 369
+ 370
@@ -6320,7 +6332,7 @@
Od początku miesiąca
libs/ui/src/lib/assistant/assistant.component.ts
- 373
+ 374
@@ -6332,7 +6344,7 @@
libs/ui/src/lib/assistant/assistant.component.ts
- 373
+ 374
@@ -6348,7 +6360,7 @@
Od początku roku
libs/ui/src/lib/assistant/assistant.component.ts
- 377
+ 378
@@ -6404,7 +6416,7 @@
libs/ui/src/lib/assistant/assistant.component.ts
- 387
+ 388
@@ -6416,7 +6428,7 @@
libs/ui/src/lib/assistant/assistant.component.ts
- 409
+ 410
@@ -6432,7 +6444,7 @@
Gromadzenie Danych
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 629
+ 630
apps/client/src/app/components/admin-overview/admin-overview.html
@@ -6444,7 +6456,7 @@
Find a holding...
libs/ui/src/lib/assistant/assistant.component.ts
- 448
+ 449
@@ -6537,11 +6549,11 @@
Aktywność
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 100
+ 101
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 231
+ 232
@@ -6549,7 +6561,7 @@
Dochód z Dywidendy
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 198
+ 199
@@ -6605,7 +6617,7 @@
Usuń aktywności
libs/ui/src/lib/activities-table/activities-table.component.html
- 92
+ 105
@@ -6629,7 +6641,7 @@
Jump to a page...
libs/ui/src/lib/assistant/assistant.component.ts
- 449
+ 450
@@ -6685,7 +6697,7 @@
Uwzględnij w
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 399
+ 400
@@ -6921,7 +6933,7 @@
Podgląd inwestycji
libs/ui/src/lib/activities-table/activities-table.component.html
- 473
+ 487
@@ -6977,11 +6989,11 @@
Anuluj
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 162
+ 163
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 634
+ 635
apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html
@@ -7033,7 +7045,7 @@
Zamknij
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 636
+ 637
apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html
@@ -7125,7 +7137,7 @@
Zmiana z efektem walutowym Zmiana
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 63
+ 64
@@ -7141,7 +7153,7 @@
Wydajność z efektem walutowym Wydajność
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 83
+ 84
@@ -7287,6 +7299,10 @@
apps/client/src/app/components/admin-market-data/admin-market-data.html
270
+
+ libs/ui/src/lib/activities-table/activities-table.component.html
+ 101
+
cannot be self-hosted
@@ -7607,7 +7623,7 @@
Zapisz
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 645
+ 646
apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html
@@ -7739,7 +7755,7 @@
Domyślna cena rynkowa
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 519
+ 520
@@ -7747,7 +7763,7 @@
Tryb
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 556
+ 557
@@ -7763,7 +7779,7 @@
Selektor
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 572
+ 573
@@ -7771,7 +7787,7 @@
Nagłówki żądań HTTP
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 532
+ 533
@@ -8016,7 +8032,7 @@
Zatwierdź
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 154
+ 155
@@ -8107,6 +8123,18 @@
142
+
+ {VAR_PLURAL, plural, =1 {Activity} other {Activities}}
+ {VAR_PLURAL, plural, =1 {Activity} other {Activities}}
+
+ libs/ui/src/lib/activities-table/activities-table.component.html
+ 69
+
+
+ libs/ui/src/lib/activities-table/activities-table.component.html
+ 102
+
+
Log out
Wyloguj się
@@ -8576,7 +8604,7 @@
Zarządzaj profilem aktywów
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 478
+ 479
@@ -8604,7 +8632,7 @@
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 101
+ 102
diff --git a/apps/client/src/locales/messages.pt.xlf b/apps/client/src/locales/messages.pt.xlf
index 8aa2ecf93..a89f05adb 100644
--- a/apps/client/src/locales/messages.pt.xlf
+++ b/apps/client/src/locales/messages.pt.xlf
@@ -58,11 +58,11 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 5
+ 7
libs/ui/src/lib/activities-table/activities-table.component.html
- 183
+ 197
@@ -102,7 +102,7 @@
Plataforma
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 112
+ 113
apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html
@@ -122,7 +122,7 @@
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 332
+ 333
apps/client/src/app/components/admin-platform/admin-platform.component.html
@@ -158,7 +158,7 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 161
+ 175
libs/ui/src/lib/benchmark/benchmark.component.html
@@ -198,11 +198,11 @@
Moeda
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 216
+ 217
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 339
+ 340
apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html
@@ -222,7 +222,7 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 303
+ 317
@@ -230,7 +230,7 @@
Saldo disponível em dinheiro
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 54
+ 55
apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html
@@ -274,11 +274,11 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 284
+ 298
libs/ui/src/lib/activities-table/activities-table.component.html
- 320
+ 334
libs/ui/src/lib/holdings-table/holdings-table.component.html
@@ -318,7 +318,7 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 483
+ 497
@@ -358,7 +358,7 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 513
+ 527
libs/ui/src/lib/benchmark/benchmark.component.html
@@ -394,7 +394,7 @@
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 197
+ 198
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
@@ -486,7 +486,7 @@
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 486
+ 487
@@ -526,7 +526,7 @@
Find an account...
libs/ui/src/lib/assistant/assistant.component.ts
- 447
+ 448
@@ -542,7 +542,7 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 192
+ 206
libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html
@@ -566,7 +566,7 @@
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 113
+ 114
libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html
@@ -590,11 +590,11 @@
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 235
+ 236
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 221
+ 222
libs/ui/src/lib/holdings-table/holdings-table.component.html
@@ -858,7 +858,7 @@
Referência
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 401
+ 402
apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts
@@ -870,7 +870,7 @@
Tom do Mercado Atual
libs/ui/src/lib/fear-and-greed-index/fear-and-greed-index.component.html
- 22
+ 23
@@ -1026,7 +1026,7 @@
ou
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 167
+ 168
apps/client/src/app/components/admin-settings/admin-settings.component.html
@@ -1178,7 +1178,7 @@
Preço Mínimo
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 131
+ 132
@@ -1186,7 +1186,7 @@
Preço Máximo
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 149
+ 150
@@ -1194,7 +1194,7 @@
Quantidade
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 159
+ 160
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
@@ -1202,7 +1202,7 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 213
+ 227
libs/ui/src/lib/holdings-table/holdings-table.component.html
@@ -1222,11 +1222,11 @@
Setor
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 280
+ 281
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 270
+ 271
@@ -1234,7 +1234,7 @@
País
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 295
+ 296
apps/client/src/app/components/admin-users/admin-users.html
@@ -1242,7 +1242,7 @@
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 284
+ 285
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
@@ -1254,15 +1254,15 @@
Setores
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 301
+ 302
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 420
+ 421
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 290
+ 291
apps/client/src/app/pages/public/public-page.html
@@ -1274,15 +1274,15 @@
Países
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 311
+ 312
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 431
+ 432
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 302
+ 303
@@ -1306,7 +1306,7 @@
Dados do Relatório com Problema
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 463
+ 464
@@ -1354,7 +1354,7 @@
libs/ui/src/lib/assistant/assistant.component.ts
- 365
+ 366
@@ -1366,7 +1366,7 @@
libs/ui/src/lib/assistant/assistant.component.ts
- 377
+ 378
@@ -1378,7 +1378,7 @@
libs/ui/src/lib/assistant/assistant.component.ts
- 387
+ 388
@@ -1398,7 +1398,7 @@
libs/ui/src/lib/assistant/assistant.component.ts
- 409
+ 410
@@ -1418,7 +1418,7 @@
libs/ui/src/lib/assistant/assistant.component.ts
- 415
+ 416
@@ -1666,7 +1666,7 @@
Localidade
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 547
+ 548
apps/client/src/app/components/user-account-settings/user-account-settings.html
@@ -1830,7 +1830,7 @@
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 395
+ 396
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
@@ -2086,11 +2086,11 @@
Visão geral
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 41
+ 42
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 114
+ 115
apps/client/src/app/components/header/header.component.html
@@ -2102,7 +2102,7 @@
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 47
+ 48
apps/client/src/app/pages/admin/admin-page.component.ts
@@ -2126,7 +2126,7 @@
Mercados
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 403
+ 404
apps/client/src/app/components/footer/footer.component.html
@@ -2166,15 +2166,15 @@
Atividades
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 102
+ 103
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 137
+ 138
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 244
+ 245
apps/client/src/app/components/admin-overview/admin-overview.html
@@ -2190,11 +2190,11 @@
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 233
+ 234
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 361
+ 362
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
@@ -2258,7 +2258,7 @@
Nome, símbolo or ISIN
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 133
+ 134
apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html
@@ -2290,7 +2290,7 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 237
+ 251
@@ -2298,7 +2298,7 @@
Nota
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 455
+ 456
apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html
@@ -2314,7 +2314,7 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 370
+ 384
@@ -2606,7 +2606,7 @@
Posições
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 126
+ 127
apps/client/src/app/components/home-holdings/home-holdings.html
@@ -2846,7 +2846,7 @@
Rascunho
libs/ui/src/lib/activities-table/activities-table.component.html
- 167
+ 181
@@ -2858,11 +2858,11 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 28
+ 30
libs/ui/src/lib/activities-table/activities-table.component.html
- 406
+ 420
@@ -2870,11 +2870,11 @@
Exportar Atividades
libs/ui/src/lib/activities-table/activities-table.component.html
- 64
+ 72
libs/ui/src/lib/activities-table/activities-table.component.html
- 434
+ 448
@@ -2882,11 +2882,11 @@
Exportar Rascunhos como ICS
libs/ui/src/lib/activities-table/activities-table.component.html
- 77
+ 86
libs/ui/src/lib/activities-table/activities-table.component.html
- 447
+ 461
@@ -2894,7 +2894,7 @@
Clonar
libs/ui/src/lib/activities-table/activities-table.component.html
- 492
+ 506
@@ -2902,7 +2902,7 @@
Exportar Rascunho como ICS
libs/ui/src/lib/activities-table/activities-table.component.html
- 502
+ 516
@@ -2910,7 +2910,11 @@
Deseja realmente eliminar esta atividade?
libs/ui/src/lib/activities-table/activities-table.component.ts
- 327
+ 333
+
+
+ libs/ui/src/lib/activities-table/activities-table.component.ts
+ 344
@@ -2966,7 +2970,7 @@
Juros
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 78
+ 79
apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html
@@ -2998,7 +3002,7 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 335
+ 349
libs/ui/src/lib/i18n.ts
@@ -3018,15 +3022,15 @@
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 253
+ 254
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 349
+ 350
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 244
+ 245
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
@@ -3094,7 +3098,7 @@
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 186
+ 187
apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html
@@ -3102,13 +3106,21 @@
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 322
+ 323
libs/ui/src/lib/i18n.ts
35
+
+ Export
+ Export
+
+ libs/ui/src/lib/activities-table/activities-table.component.html
+ 68
+
+
Tag
Marcador
@@ -3146,7 +3158,7 @@
Ações
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 66
+ 67
libs/ui/src/lib/i18n.ts
@@ -3298,7 +3310,7 @@
Invested Capital
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 173
+ 174
apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html
@@ -3358,7 +3370,7 @@
Data Gathering Frequency
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 467
+ 468
@@ -3382,7 +3394,7 @@
Mapeamento de Símbolo
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 409
+ 410
@@ -3398,7 +3410,7 @@
Dados de Mercado
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 417
+ 418
libs/common/src/lib/routes/routes.ts
@@ -3462,11 +3474,11 @@
Dividendos
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 90
+ 91
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 188
+ 189
apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html
@@ -3506,15 +3518,15 @@
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 262
+ 263
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 365
+ 366
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 253
+ 254
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
@@ -3562,11 +3574,11 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 52
+ 54
libs/ui/src/lib/activities-table/activities-table.component.html
- 420
+ 434
@@ -3938,7 +3950,7 @@
Taxas
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 210
+ 211
apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html
@@ -4101,14 +4113,6 @@
254
-
- Do you really want to delete these activities?
- Deseja mesmo eliminar estas atividades?
-
- libs/ui/src/lib/activities-table/activities-table.component.ts
- 317
-
-
By ETF Provider
Por Prestador de ETF
@@ -4154,11 +4158,11 @@
Url
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 442
+ 443
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 588
+ 589
apps/client/src/app/components/admin-platform/admin-platform.component.html
@@ -4566,7 +4570,7 @@
Configuração do raspador
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 509
+ 510
@@ -5257,6 +5261,14 @@
84
+
+ Do you really want to delete these activities?
+ Do you really want to delete these activities?
+
+ libs/ui/src/lib/activities-table/activities-table.component.ts
+ 334
+
+
Why Ghostfolio ?
Por que Ghostfolio ?
@@ -5756,7 +5768,7 @@
Convert to
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 174
+ 175
@@ -5828,7 +5840,7 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 261
+ 275
libs/ui/src/lib/i18n.ts
@@ -6120,7 +6132,7 @@
Saldos de caixa
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 169
+ 170
@@ -6164,7 +6176,7 @@
Teste
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 606
+ 607
@@ -6260,7 +6272,7 @@
Close Holding
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 450
+ 451
@@ -6300,7 +6312,7 @@
Semana até agora
libs/ui/src/lib/assistant/assistant.component.ts
- 369
+ 370
@@ -6312,7 +6324,7 @@
libs/ui/src/lib/assistant/assistant.component.ts
- 369
+ 370
@@ -6320,7 +6332,7 @@
Do mês até a data
libs/ui/src/lib/assistant/assistant.component.ts
- 373
+ 374
@@ -6332,7 +6344,7 @@
libs/ui/src/lib/assistant/assistant.component.ts
- 373
+ 374
@@ -6348,7 +6360,7 @@
No acumulado do ano
libs/ui/src/lib/assistant/assistant.component.ts
- 377
+ 378
@@ -6404,7 +6416,7 @@
libs/ui/src/lib/assistant/assistant.component.ts
- 387
+ 388
@@ -6416,7 +6428,7 @@
libs/ui/src/lib/assistant/assistant.component.ts
- 409
+ 410
@@ -6432,7 +6444,7 @@
Coleta de dados
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 629
+ 630
apps/client/src/app/components/admin-overview/admin-overview.html
@@ -6444,7 +6456,7 @@
Find a holding...
libs/ui/src/lib/assistant/assistant.component.ts
- 448
+ 449
@@ -6537,11 +6549,11 @@
Atividade
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 100
+ 101
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 231
+ 232
@@ -6549,7 +6561,7 @@
Rendimento de dividendos
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 198
+ 199
@@ -6605,7 +6617,7 @@
Excluir atividades
libs/ui/src/lib/activities-table/activities-table.component.html
- 92
+ 105
@@ -6629,7 +6641,7 @@
Jump to a page...
libs/ui/src/lib/assistant/assistant.component.ts
- 449
+ 450
@@ -6685,7 +6697,7 @@
Include in
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 399
+ 400
@@ -6921,7 +6933,7 @@
View Holding
libs/ui/src/lib/activities-table/activities-table.component.html
- 473
+ 487
@@ -6977,11 +6989,11 @@
Cancelar
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 162
+ 163
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 634
+ 635
apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html
@@ -7033,7 +7045,7 @@
Fechar
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 636
+ 637
apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html
@@ -7125,7 +7137,7 @@
Change with currency effect Change
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 63
+ 64
@@ -7141,7 +7153,7 @@
Performance with currency effect Performance
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 83
+ 84
@@ -7287,6 +7299,10 @@
apps/client/src/app/components/admin-market-data/admin-market-data.html
270
+
+ libs/ui/src/lib/activities-table/activities-table.component.html
+ 101
+
cannot be self-hosted
@@ -7607,7 +7623,7 @@
Guardar
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 645
+ 646
apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html
@@ -7739,7 +7755,7 @@
Preço de mercado padrão
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 519
+ 520
@@ -7747,7 +7763,7 @@
Mode
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 556
+ 557
@@ -7763,7 +7779,7 @@
Selector
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 572
+ 573
@@ -7771,7 +7787,7 @@
HTTP Request Headers
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 532
+ 533
@@ -8016,7 +8032,7 @@
Apply
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 154
+ 155
@@ -8107,6 +8123,18 @@
142
+
+ {VAR_PLURAL, plural, =1 {Activity} other {Activities}}
+ {VAR_PLURAL, plural, =1 {Activity} other {Activities}}
+
+ libs/ui/src/lib/activities-table/activities-table.component.html
+ 69
+
+
+ libs/ui/src/lib/activities-table/activities-table.component.html
+ 102
+
+
Log out
Log out
@@ -8576,7 +8604,7 @@
Gerenciar perfil de ativos
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 478
+ 479
@@ -8604,7 +8632,7 @@
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 101
+ 102
diff --git a/apps/client/src/locales/messages.tr.xlf b/apps/client/src/locales/messages.tr.xlf
index 8630fea58..dce74dcfa 100644
--- a/apps/client/src/locales/messages.tr.xlf
+++ b/apps/client/src/locales/messages.tr.xlf
@@ -239,11 +239,11 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 5
+ 7
libs/ui/src/lib/activities-table/activities-table.component.html
- 183
+ 197
@@ -283,7 +283,7 @@
Nakit Bakiye
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 54
+ 55
apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html
@@ -299,7 +299,7 @@
Platform
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 112
+ 113
apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html
@@ -319,7 +319,7 @@
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 332
+ 333
apps/client/src/app/components/admin-platform/admin-platform.component.html
@@ -355,7 +355,7 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 161
+ 175
libs/ui/src/lib/benchmark/benchmark.component.html
@@ -395,11 +395,11 @@
Para Birimi
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 216
+ 217
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 339
+ 340
apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html
@@ -419,7 +419,7 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 303
+ 317
@@ -455,11 +455,11 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 284
+ 298
libs/ui/src/lib/activities-table/activities-table.component.html
- 320
+ 334
libs/ui/src/lib/holdings-table/holdings-table.component.html
@@ -499,7 +499,7 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 483
+ 497
@@ -539,7 +539,7 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 513
+ 527
libs/ui/src/lib/benchmark/benchmark.component.html
@@ -575,7 +575,7 @@
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 197
+ 198
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
@@ -667,7 +667,7 @@
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 486
+ 487
@@ -707,7 +707,7 @@
Find an account...
libs/ui/src/lib/assistant/assistant.component.ts
- 447
+ 448
@@ -723,7 +723,7 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 192
+ 206
libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html
@@ -747,7 +747,7 @@
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 113
+ 114
libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html
@@ -815,11 +815,11 @@
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 235
+ 236
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 221
+ 222
libs/ui/src/lib/holdings-table/holdings-table.component.html
@@ -831,7 +831,7 @@
Data Gathering Frequency
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 467
+ 468
@@ -919,11 +919,11 @@
Sektör
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 280
+ 281
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 270
+ 271
@@ -931,7 +931,7 @@
Ülke
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 295
+ 296
apps/client/src/app/components/admin-users/admin-users.html
@@ -939,7 +939,7 @@
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 284
+ 285
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
@@ -951,15 +951,15 @@
Sektörler
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 301
+ 302
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 420
+ 421
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 290
+ 291
apps/client/src/app/pages/public/public-page.html
@@ -971,15 +971,15 @@
Ülkeler
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 311
+ 312
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 431
+ 432
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 302
+ 303
@@ -987,7 +987,7 @@
Sembol Eşleştirme
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 409
+ 410
@@ -1027,7 +1027,7 @@
Veri Toplayıcı Yapılandırması
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 509
+ 510
@@ -1035,7 +1035,7 @@
Not
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 455
+ 456
apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html
@@ -1051,7 +1051,7 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 370
+ 384
@@ -1067,7 +1067,7 @@
Ad, sembol ya da ISIN
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 133
+ 134
apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html
@@ -1227,11 +1227,11 @@
Url
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 442
+ 443
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 588
+ 589
apps/client/src/app/components/admin-platform/admin-platform.component.html
@@ -1423,7 +1423,7 @@
Karşılaştırma Ölçütü
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 401
+ 402
apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts
@@ -1435,7 +1435,7 @@
Piyasa Psikolojisi
libs/ui/src/lib/fear-and-greed-index/fear-and-greed-index.component.html
- 22
+ 23
@@ -1683,7 +1683,7 @@
veya
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 167
+ 168
apps/client/src/app/components/admin-settings/admin-settings.component.html
@@ -1847,7 +1847,7 @@
Asgari Fiyat
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 131
+ 132
@@ -1855,7 +1855,7 @@
Azami Fiyat
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 149
+ 150
@@ -1863,7 +1863,7 @@
Miktar
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 159
+ 160
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
@@ -1871,7 +1871,7 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 213
+ 227
libs/ui/src/lib/holdings-table/holdings-table.component.html
@@ -1883,7 +1883,7 @@
Komisyon
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 210
+ 211
apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html
@@ -1895,7 +1895,7 @@
Rapor Veri Sorunu
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 463
+ 464
@@ -2075,7 +2075,7 @@
libs/ui/src/lib/assistant/assistant.component.ts
- 365
+ 366
@@ -2087,7 +2087,7 @@
libs/ui/src/lib/assistant/assistant.component.ts
- 377
+ 378
@@ -2099,7 +2099,7 @@
libs/ui/src/lib/assistant/assistant.component.ts
- 387
+ 388
@@ -2119,7 +2119,7 @@
libs/ui/src/lib/assistant/assistant.component.ts
- 409
+ 410
@@ -2139,7 +2139,7 @@
libs/ui/src/lib/assistant/assistant.component.ts
- 415
+ 416
@@ -2319,7 +2319,7 @@
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 395
+ 396
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
@@ -2391,7 +2391,7 @@
Piyasa Verileri
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 417
+ 418
libs/common/src/lib/routes/routes.ts
@@ -2431,11 +2431,11 @@
Özet
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 41
+ 42
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 114
+ 115
apps/client/src/app/components/header/header.component.html
@@ -2447,7 +2447,7 @@
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 47
+ 48
apps/client/src/app/pages/admin/admin-page.component.ts
@@ -2843,7 +2843,7 @@
Varlıklar
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 126
+ 127
apps/client/src/app/components/home-holdings/home-holdings.html
@@ -2895,7 +2895,7 @@
Piyasalar
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 403
+ 404
apps/client/src/app/components/footer/footer.component.html
@@ -3066,6 +3066,14 @@
84
+
+ Do you really want to delete these activities?
+ Do you really want to delete these activities?
+
+ libs/ui/src/lib/activities-table/activities-table.component.ts
+ 334
+
+
Why Ghostfolio ?
Neden Ghostfolio ?
@@ -3323,15 +3331,15 @@
İşlemler
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 102
+ 103
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 137
+ 138
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 244
+ 245
apps/client/src/app/components/admin-overview/admin-overview.html
@@ -3347,11 +3355,11 @@
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 233
+ 234
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 361
+ 362
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
@@ -3370,14 +3378,6 @@
126
-
- Do you really want to delete these activities?
- Tüm işlemlerinizi silmeyi gerçekten istiyor musunuz?
-
- libs/ui/src/lib/activities-table/activities-table.component.ts
- 317
-
-
Update activity
İşlemi Güncelle
@@ -3431,7 +3431,7 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 237
+ 251
@@ -3443,11 +3443,11 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 28
+ 30
libs/ui/src/lib/activities-table/activities-table.component.html
- 406
+ 420
@@ -3459,11 +3459,11 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 52
+ 54
libs/ui/src/lib/activities-table/activities-table.component.html
- 420
+ 434
@@ -3807,11 +3807,11 @@
Temettü
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 90
+ 91
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 188
+ 189
apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html
@@ -4768,7 +4768,7 @@
Yerel Ayarlar
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 547
+ 548
apps/client/src/app/components/user-account-settings/user-account-settings.html
@@ -4936,11 +4936,11 @@
İşlemleri Dışa Aktar
libs/ui/src/lib/activities-table/activities-table.component.html
- 64
+ 72
libs/ui/src/lib/activities-table/activities-table.component.html
- 434
+ 448
@@ -4948,11 +4948,11 @@
Taslakları ICS Olarak Dışa Aktar
libs/ui/src/lib/activities-table/activities-table.component.html
- 77
+ 86
libs/ui/src/lib/activities-table/activities-table.component.html
- 447
+ 461
@@ -4960,7 +4960,7 @@
Taslak
libs/ui/src/lib/activities-table/activities-table.component.html
- 167
+ 181
@@ -4968,7 +4968,7 @@
Klonla
libs/ui/src/lib/activities-table/activities-table.component.html
- 492
+ 506
@@ -4976,7 +4976,7 @@
Taslakları ICS Olarak Dışa Aktar
libs/ui/src/lib/activities-table/activities-table.component.html
- 502
+ 516
@@ -4984,7 +4984,11 @@
TBu işlemi silmeyi gerçekten istiyor musunuz?
libs/ui/src/lib/activities-table/activities-table.component.ts
- 327
+ 333
+
+
+ libs/ui/src/lib/activities-table/activities-table.component.ts
+ 344
@@ -5072,7 +5076,7 @@
Faiz
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 78
+ 79
apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html
@@ -5140,7 +5144,7 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 335
+ 349
libs/ui/src/lib/i18n.ts
@@ -5168,15 +5172,15 @@
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 253
+ 254
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 349
+ 350
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 244
+ 245
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
@@ -5200,15 +5204,15 @@
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 262
+ 263
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 365
+ 366
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 253
+ 254
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
@@ -5392,7 +5396,7 @@
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 186
+ 187
apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html
@@ -5400,13 +5404,21 @@
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 322
+ 323
libs/ui/src/lib/i18n.ts
35
+
+ Export
+ Export
+
+ libs/ui/src/lib/activities-table/activities-table.component.html
+ 68
+
+
Tag
Etiket
@@ -5520,7 +5532,7 @@
Menkul Kıymet
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 66
+ 67
libs/ui/src/lib/i18n.ts
@@ -5672,7 +5684,7 @@
Invested Capital
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 173
+ 174
apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html
@@ -5764,7 +5776,7 @@
Convert to
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 174
+ 175
@@ -5836,7 +5848,7 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 261
+ 275
libs/ui/src/lib/i18n.ts
@@ -6120,7 +6132,7 @@
Nakit Bakiyeleri
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 169
+ 170
@@ -6164,7 +6176,7 @@
Test
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 606
+ 607
@@ -6260,7 +6272,7 @@
Close Holding
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 450
+ 451
@@ -6300,7 +6312,7 @@
Hafta içi
libs/ui/src/lib/assistant/assistant.component.ts
- 369
+ 370
@@ -6312,7 +6324,7 @@
libs/ui/src/lib/assistant/assistant.component.ts
- 369
+ 370
@@ -6320,7 +6332,7 @@
Ay içi
libs/ui/src/lib/assistant/assistant.component.ts
- 373
+ 374
@@ -6332,7 +6344,7 @@
libs/ui/src/lib/assistant/assistant.component.ts
- 373
+ 374
@@ -6348,7 +6360,7 @@
Yıl içi
libs/ui/src/lib/assistant/assistant.component.ts
- 377
+ 378
@@ -6404,7 +6416,7 @@
libs/ui/src/lib/assistant/assistant.component.ts
- 387
+ 388
@@ -6416,7 +6428,7 @@
libs/ui/src/lib/assistant/assistant.component.ts
- 409
+ 410
@@ -6432,7 +6444,7 @@
Veri Toplama
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 629
+ 630
apps/client/src/app/components/admin-overview/admin-overview.html
@@ -6444,7 +6456,7 @@
Find a holding...
libs/ui/src/lib/assistant/assistant.component.ts
- 448
+ 449
@@ -6537,11 +6549,11 @@
Etkinlik
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 100
+ 101
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 231
+ 232
@@ -6549,7 +6561,7 @@
Temettü Getiri
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 198
+ 199
@@ -6605,7 +6617,7 @@
Etkinlikleri Sil
libs/ui/src/lib/activities-table/activities-table.component.html
- 92
+ 105
@@ -6629,7 +6641,7 @@
Jump to a page...
libs/ui/src/lib/assistant/assistant.component.ts
- 449
+ 450
@@ -6685,7 +6697,7 @@
Include in
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 399
+ 400
@@ -6921,7 +6933,7 @@
View Holding
libs/ui/src/lib/activities-table/activities-table.component.html
- 473
+ 487
@@ -6977,11 +6989,11 @@
İptal Et
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 162
+ 163
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 634
+ 635
apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html
@@ -7033,7 +7045,7 @@
Kapat
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 636
+ 637
apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html
@@ -7125,7 +7137,7 @@
Kur farkı etkisiyle değişim Değişim
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 63
+ 64
@@ -7141,7 +7153,7 @@
Kur farkı etkisiyle performans Performans
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 83
+ 84
@@ -7287,6 +7299,10 @@
apps/client/src/app/components/admin-market-data/admin-market-data.html
270
+
+ libs/ui/src/lib/activities-table/activities-table.component.html
+ 101
+
cannot be self-hosted
@@ -7607,7 +7623,7 @@
Kaydet
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 645
+ 646
apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html
@@ -7739,7 +7755,7 @@
Varsayılan Piyasa Fiyatı
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 519
+ 520
@@ -7747,7 +7763,7 @@
Mod
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 556
+ 557
@@ -7763,7 +7779,7 @@
Seçici
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 572
+ 573
@@ -7771,7 +7787,7 @@
HTTP İstek Başlıkları
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 532
+ 533
@@ -8016,7 +8032,7 @@
Uygula
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 154
+ 155
@@ -8107,6 +8123,18 @@
142
+
+ {VAR_PLURAL, plural, =1 {Activity} other {Activities}}
+ {VAR_PLURAL, plural, =1 {Activity} other {Activities}}
+
+ libs/ui/src/lib/activities-table/activities-table.component.html
+ 69
+
+
+ libs/ui/src/lib/activities-table/activities-table.component.html
+ 102
+
+
Log out
Oturumu kapat
@@ -8576,7 +8604,7 @@
Manage Asset Profile
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 478
+ 479
@@ -8604,7 +8632,7 @@
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 101
+ 102
diff --git a/apps/client/src/locales/messages.uk.xlf b/apps/client/src/locales/messages.uk.xlf
index fa110490a..be6b41b0f 100644
--- a/apps/client/src/locales/messages.uk.xlf
+++ b/apps/client/src/locales/messages.uk.xlf
@@ -407,7 +407,7 @@
Баланс готівки
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 54
+ 55
apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html
@@ -423,7 +423,7 @@
Платформа
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 112
+ 113
apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html
@@ -439,7 +439,7 @@
Баланс готівки
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 169
+ 170
@@ -463,7 +463,7 @@
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 332
+ 333
apps/client/src/app/components/admin-platform/admin-platform.component.html
@@ -499,7 +499,7 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 161
+ 175
libs/ui/src/lib/benchmark/benchmark.component.html
@@ -539,11 +539,11 @@
Валюта
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 216
+ 217
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 339
+ 340
apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html
@@ -563,7 +563,7 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 303
+ 317
@@ -599,11 +599,11 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 284
+ 298
libs/ui/src/lib/activities-table/activities-table.component.html
- 320
+ 334
libs/ui/src/lib/holdings-table/holdings-table.component.html
@@ -643,7 +643,7 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 483
+ 497
@@ -683,7 +683,7 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 513
+ 527
libs/ui/src/lib/benchmark/benchmark.component.html
@@ -727,11 +727,11 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 5
+ 7
libs/ui/src/lib/activities-table/activities-table.component.html
- 183
+ 197
@@ -751,7 +751,7 @@
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 486
+ 487
@@ -775,7 +775,7 @@
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 197
+ 198
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
@@ -963,7 +963,7 @@
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 113
+ 114
libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html
@@ -979,11 +979,11 @@
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 235
+ 236
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 221
+ 222
libs/ui/src/lib/holdings-table/holdings-table.component.html
@@ -995,7 +995,7 @@
Частота збору даних
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 467
+ 468
@@ -1119,11 +1119,11 @@
Сектор
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 280
+ 281
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 270
+ 271
@@ -1131,7 +1131,7 @@
Країна
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 295
+ 296
apps/client/src/app/components/admin-users/admin-users.html
@@ -1139,7 +1139,7 @@
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 284
+ 285
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
@@ -1151,15 +1151,15 @@
Сектори
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 301
+ 302
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 420
+ 421
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 290
+ 291
apps/client/src/app/pages/public/public-page.html
@@ -1171,15 +1171,15 @@
Країни
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 311
+ 312
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 431
+ 432
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 302
+ 303
@@ -1187,7 +1187,7 @@
Зіставлення символів
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 409
+ 410
@@ -1227,7 +1227,7 @@
Конфігурація скребка
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 509
+ 510
@@ -1235,7 +1235,7 @@
Тест
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 606
+ 607
@@ -1243,11 +1243,11 @@
URL
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 442
+ 443
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 588
+ 589
apps/client/src/app/components/admin-platform/admin-platform.component.html
@@ -1271,7 +1271,7 @@
Примітка
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 455
+ 456
apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html
@@ -1287,7 +1287,7 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 370
+ 384
@@ -1335,7 +1335,7 @@
Назва, символ або ISIN
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 133
+ 134
apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html
@@ -1435,7 +1435,7 @@
Збір даних
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 629
+ 630
apps/client/src/app/components/admin-overview/admin-overview.html
@@ -1447,7 +1447,7 @@
Знайти актив...
libs/ui/src/lib/assistant/assistant.component.ts
- 448
+ 449
@@ -1655,7 +1655,7 @@
або
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 167
+ 168
apps/client/src/app/components/admin-settings/admin-settings.component.html
@@ -1859,7 +1859,7 @@
Порівняльний показник
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 401
+ 402
apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts
@@ -1871,7 +1871,7 @@
Поточний ринковий настрій
libs/ui/src/lib/fear-and-greed-index/fear-and-greed-index.component.html
- 22
+ 23
@@ -1951,7 +1951,7 @@
Зміна з урахуванням валютного ефекту Зміна
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 63
+ 64
@@ -1967,7 +1967,7 @@
Прибутковість з урахуванням валютного ефекту валюти Прибутковість
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 83
+ 84
@@ -1975,7 +1975,7 @@
Мінімальна ціна
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 131
+ 132
@@ -1983,7 +1983,7 @@
Максимальна ціна
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 149
+ 150
@@ -1991,7 +1991,7 @@
Кількість
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 159
+ 160
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
@@ -1999,7 +1999,7 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 213
+ 227
libs/ui/src/lib/holdings-table/holdings-table.component.html
@@ -2011,7 +2011,7 @@
Дохідність дивіденду
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 198
+ 199
@@ -2019,7 +2019,7 @@
Комісії
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 210
+ 211
apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html
@@ -2031,11 +2031,11 @@
Активність
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 100
+ 101
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 231
+ 232
@@ -2043,7 +2043,7 @@
Повідомити про збій даних
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 463
+ 464
@@ -2415,7 +2415,7 @@
Зберегти
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 645
+ 646
apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html
@@ -2695,7 +2695,7 @@
libs/ui/src/lib/assistant/assistant.component.ts
- 365
+ 366
@@ -2707,7 +2707,7 @@
libs/ui/src/lib/assistant/assistant.component.ts
- 377
+ 378
@@ -2719,7 +2719,7 @@
libs/ui/src/lib/assistant/assistant.component.ts
- 387
+ 388
@@ -2739,7 +2739,7 @@
libs/ui/src/lib/assistant/assistant.component.ts
- 409
+ 410
@@ -2759,7 +2759,7 @@
libs/ui/src/lib/assistant/assistant.component.ts
- 415
+ 416
@@ -2995,7 +2995,7 @@
Перейти до сторінки...
libs/ui/src/lib/assistant/assistant.component.ts
- 449
+ 450
@@ -3019,7 +3019,7 @@
Включити до
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 399
+ 400
@@ -3091,7 +3091,7 @@
Локалізація
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 547
+ 548
apps/client/src/app/components/user-account-settings/user-account-settings.html
@@ -3423,7 +3423,7 @@
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 395
+ 396
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
@@ -3539,7 +3539,7 @@
Ринкові дані
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 417
+ 418
libs/common/src/lib/routes/routes.ts
@@ -3579,11 +3579,11 @@
Огляд
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 41
+ 42
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 114
+ 115
apps/client/src/app/components/header/header.component.html
@@ -3595,7 +3595,7 @@
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 47
+ 48
apps/client/src/app/pages/admin/admin-page.component.ts
@@ -4004,7 +4004,7 @@
Активи
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 126
+ 127
apps/client/src/app/components/home-holdings/home-holdings.html
@@ -4056,7 +4056,7 @@
Ринки
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 403
+ 404
apps/client/src/app/components/footer/footer.component.html
@@ -4259,6 +4259,14 @@
84
+
+ Do you really want to delete these activities?
+ Do you really want to delete these activities?
+
+ libs/ui/src/lib/activities-table/activities-table.component.ts
+ 334
+
+
Why Ghostfolio ?
Чому Ghostfolio ?
@@ -4508,7 +4516,7 @@
Конвертувати в
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 174
+ 175
@@ -4584,15 +4592,15 @@
Активності
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 102
+ 103
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 137
+ 138
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 244
+ 245
apps/client/src/app/components/admin-overview/admin-overview.html
@@ -4608,11 +4616,11 @@
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 233
+ 234
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 361
+ 362
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
@@ -4704,7 +4712,7 @@
Знайти рахунок...
libs/ui/src/lib/assistant/assistant.component.ts
- 447
+ 448
@@ -4720,7 +4728,7 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 192
+ 206
libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html
@@ -4736,7 +4744,7 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 237
+ 251
@@ -4748,11 +4756,11 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 28
+ 30
libs/ui/src/lib/activities-table/activities-table.component.html
- 406
+ 420
@@ -4764,11 +4772,11 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 52
+ 54
libs/ui/src/lib/activities-table/activities-table.component.html
- 420
+ 434
@@ -5136,11 +5144,11 @@
Дивіденди
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 90
+ 91
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 188
+ 189
apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html
@@ -5204,7 +5212,7 @@
Закрити позицію
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 450
+ 451
@@ -6221,6 +6229,10 @@
apps/client/src/app/components/admin-market-data/admin-market-data.html
270
+
+ libs/ui/src/lib/activities-table/activities-table.component.html
+ 101
+
cannot be self-hosted
@@ -6479,11 +6491,11 @@
Експорт активності
libs/ui/src/lib/activities-table/activities-table.component.html
- 64
+ 72
libs/ui/src/lib/activities-table/activities-table.component.html
- 434
+ 448
@@ -6491,11 +6503,11 @@
Експортувати чернетки як ICS
libs/ui/src/lib/activities-table/activities-table.component.html
- 77
+ 86
libs/ui/src/lib/activities-table/activities-table.component.html
- 447
+ 461
@@ -6503,7 +6515,7 @@
Видалити активності
libs/ui/src/lib/activities-table/activities-table.component.html
- 92
+ 105
@@ -6511,7 +6523,7 @@
Чернетка
libs/ui/src/lib/activities-table/activities-table.component.html
- 167
+ 181
@@ -6519,7 +6531,7 @@
Клонувати
libs/ui/src/lib/activities-table/activities-table.component.html
- 492
+ 506
@@ -6527,15 +6539,7 @@
Експортувати чернетку як ICS
libs/ui/src/lib/activities-table/activities-table.component.html
- 502
-
-
-
- Do you really want to delete these activities?
- Ви дійсно хочете видалити ці дії?
-
- libs/ui/src/lib/activities-table/activities-table.component.ts
- 317
+ 516
@@ -6543,7 +6547,11 @@
Ви дійсно хочете видалити цю активність?
libs/ui/src/lib/activities-table/activities-table.component.ts
- 327
+ 333
+
+
+ libs/ui/src/lib/activities-table/activities-table.component.ts
+ 344
@@ -6551,7 +6559,7 @@
Тиждень до дати
libs/ui/src/lib/assistant/assistant.component.ts
- 369
+ 370
@@ -6563,7 +6571,7 @@
libs/ui/src/lib/assistant/assistant.component.ts
- 369
+ 370
@@ -6571,7 +6579,7 @@
Місяць до дати
libs/ui/src/lib/assistant/assistant.component.ts
- 373
+ 374
@@ -6583,7 +6591,7 @@
libs/ui/src/lib/assistant/assistant.component.ts
- 373
+ 374
@@ -6599,7 +6607,7 @@
Рік до дати
libs/ui/src/lib/assistant/assistant.component.ts
- 377
+ 378
@@ -6619,7 +6627,7 @@
libs/ui/src/lib/assistant/assistant.component.ts
- 387
+ 388
@@ -6631,7 +6639,7 @@
libs/ui/src/lib/assistant/assistant.component.ts
- 409
+ 410
@@ -6795,7 +6803,7 @@
Відсотки
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 78
+ 79
apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html
@@ -6887,7 +6895,7 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 335
+ 349
libs/ui/src/lib/i18n.ts
@@ -6915,15 +6923,15 @@
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 253
+ 254
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 349
+ 350
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 244
+ 245
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
@@ -6947,15 +6955,15 @@
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 262
+ 263
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 365
+ 366
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 253
+ 254
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
@@ -6979,11 +6987,11 @@
Скасувати
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 162
+ 163
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 634
+ 635
apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html
@@ -7043,7 +7051,7 @@
Закрити
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 636
+ 637
apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html
@@ -7263,7 +7271,7 @@
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 186
+ 187
apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html
@@ -7271,13 +7279,21 @@
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 322
+ 323
libs/ui/src/lib/i18n.ts
35
+
+ Export
+ Export
+
+ libs/ui/src/lib/activities-table/activities-table.component.html
+ 68
+
+
Tag
Тег
@@ -7363,7 +7379,7 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 261
+ 275
libs/ui/src/lib/i18n.ts
@@ -7423,7 +7439,7 @@
Капітал
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 66
+ 67
libs/ui/src/lib/i18n.ts
@@ -7583,7 +7599,7 @@
Інвестований капітал
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 173
+ 174
apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html
@@ -7607,7 +7623,7 @@
Переглянути позицію
libs/ui/src/lib/activities-table/activities-table.component.html
- 473
+ 487
@@ -7739,7 +7755,7 @@
Стандартна ринкова ціна
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 519
+ 520
@@ -7747,7 +7763,7 @@
Режим
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 556
+ 557
@@ -7763,7 +7779,7 @@
Селектор
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 572
+ 573
@@ -7771,7 +7787,7 @@
Заголовки HTTP-запиту
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 532
+ 533
@@ -8016,7 +8032,7 @@
Застосувати
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 154
+ 155
@@ -8107,6 +8123,18 @@
142
+
+ {VAR_PLURAL, plural, =1 {Activity} other {Activities}}
+ {VAR_PLURAL, plural, =1 {Activity} other {Activities}}
+
+ libs/ui/src/lib/activities-table/activities-table.component.html
+ 69
+
+
+ libs/ui/src/lib/activities-table/activities-table.component.html
+ 102
+
+
Log out
Вийти
@@ -8576,7 +8604,7 @@
Керувати профілем активу
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 478
+ 479
@@ -8604,7 +8632,7 @@
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 101
+ 102
diff --git a/apps/client/src/locales/messages.xlf b/apps/client/src/locales/messages.xlf
index 528c478ca..c0297b1fa 100644
--- a/apps/client/src/locales/messages.xlf
+++ b/apps/client/src/locales/messages.xlf
@@ -251,11 +251,11 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 5
+ 7
libs/ui/src/lib/activities-table/activities-table.component.html
- 183
+ 197
@@ -290,7 +290,7 @@
Cash Balance
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 54
+ 55
apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html
@@ -305,7 +305,7 @@
Platform
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 112
+ 113
apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html
@@ -320,7 +320,7 @@
Cash Balances
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 169
+ 170
@@ -342,7 +342,7 @@
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 332
+ 333
apps/client/src/app/components/admin-platform/admin-platform.component.html
@@ -378,7 +378,7 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 161
+ 175
libs/ui/src/lib/benchmark/benchmark.component.html
@@ -415,11 +415,11 @@
Currency
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 216
+ 217
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 339
+ 340
apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html
@@ -439,7 +439,7 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 303
+ 317
@@ -474,11 +474,11 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 284
+ 298
libs/ui/src/lib/activities-table/activities-table.component.html
- 320
+ 334
libs/ui/src/lib/holdings-table/holdings-table.component.html
@@ -517,7 +517,7 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 483
+ 497
@@ -556,7 +556,7 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 513
+ 527
libs/ui/src/lib/benchmark/benchmark.component.html
@@ -592,7 +592,7 @@
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 486
+ 487
@@ -607,7 +607,7 @@
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 197
+ 198
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
@@ -703,7 +703,7 @@
Find an account...
libs/ui/src/lib/assistant/assistant.component.ts
- 447
+ 448
@@ -718,7 +718,7 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 192
+ 206
libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html
@@ -740,7 +740,7 @@
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 113
+ 114
libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html
@@ -812,11 +812,11 @@
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 235
+ 236
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 221
+ 222
libs/ui/src/lib/holdings-table/holdings-table.component.html
@@ -827,7 +827,7 @@
Data Gathering Frequency
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 467
+ 468
@@ -955,18 +955,18 @@
Sector
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 280
+ 281
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 270
+ 271
Country
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 295
+ 296
apps/client/src/app/components/admin-users/admin-users.html
@@ -974,7 +974,7 @@
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 284
+ 285
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
@@ -985,15 +985,15 @@
Sectors
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 301
+ 302
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 420
+ 421
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 290
+ 291
apps/client/src/app/pages/public/public-page.html
@@ -1004,22 +1004,22 @@
Countries
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 311
+ 312
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 431
+ 432
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 302
+ 303
Symbol Mapping
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 409
+ 410
@@ -1054,14 +1054,14 @@
Scraper Configuration
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 509
+ 510
Note
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 455
+ 456
apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html
@@ -1077,7 +1077,7 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 370
+ 384
@@ -1112,7 +1112,7 @@
Name, symbol or ISIN
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 133
+ 134
apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html
@@ -1254,11 +1254,11 @@
Url
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 442
+ 443
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 588
+ 589
apps/client/src/app/components/admin-platform/admin-platform.component.html
@@ -1474,7 +1474,7 @@
Benchmark
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 401
+ 402
apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts
@@ -1485,7 +1485,7 @@
Current Market Mood
libs/ui/src/lib/fear-and-greed-index/fear-and-greed-index.component.html
- 22
+ 23
@@ -1709,7 +1709,7 @@
or
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 167
+ 168
apps/client/src/app/components/admin-settings/admin-settings.component.html
@@ -1783,7 +1783,7 @@
Fees
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 210
+ 211
apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html
@@ -1869,21 +1869,21 @@
Minimum Price
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 131
+ 132
Maximum Price
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 149
+ 150
Quantity
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 159
+ 160
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
@@ -1891,7 +1891,7 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 213
+ 227
libs/ui/src/lib/holdings-table/holdings-table.component.html
@@ -1902,7 +1902,7 @@
Report Data Glitch
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 463
+ 464
@@ -2070,7 +2070,7 @@
libs/ui/src/lib/assistant/assistant.component.ts
- 365
+ 366
@@ -2081,7 +2081,7 @@
libs/ui/src/lib/assistant/assistant.component.ts
- 377
+ 378
@@ -2092,7 +2092,7 @@
libs/ui/src/lib/assistant/assistant.component.ts
- 387
+ 388
@@ -2110,7 +2110,7 @@
libs/ui/src/lib/assistant/assistant.component.ts
- 409
+ 410
@@ -2128,7 +2128,7 @@
libs/ui/src/lib/assistant/assistant.component.ts
- 415
+ 416
@@ -2287,7 +2287,7 @@
Locale
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 547
+ 548
apps/client/src/app/components/user-account-settings/user-account-settings.html
@@ -2579,7 +2579,7 @@
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 395
+ 396
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
@@ -2673,7 +2673,7 @@
Market Data
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 417
+ 418
libs/common/src/lib/routes/routes.ts
@@ -2710,11 +2710,11 @@
Overview
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 41
+ 42
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 114
+ 115
apps/client/src/app/components/header/header.component.html
@@ -2726,7 +2726,7 @@
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 47
+ 48
apps/client/src/app/pages/admin/admin-page.component.ts
@@ -3084,7 +3084,7 @@
Holdings
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 126
+ 127
apps/client/src/app/components/home-holdings/home-holdings.html
@@ -3133,7 +3133,7 @@
Markets
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 403
+ 404
apps/client/src/app/components/footer/footer.component.html
@@ -3309,6 +3309,13 @@
84
+
+ Do you really want to delete these activities?
+
+ libs/ui/src/lib/activities-table/activities-table.component.ts
+ 334
+
+
Why Ghostfolio ?
@@ -3527,7 +3534,7 @@
Convert to
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 174
+ 175
@@ -3594,15 +3601,15 @@
Activities
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 102
+ 103
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 137
+ 138
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 244
+ 245
apps/client/src/app/components/admin-overview/admin-overview.html
@@ -3618,11 +3625,11 @@
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 233
+ 234
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 361
+ 362
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
@@ -3641,13 +3648,6 @@
126
-
- Do you really want to delete these activities?
-
- libs/ui/src/lib/activities-table/activities-table.component.ts
- 317
-
-
Update activity
@@ -3716,7 +3716,7 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 237
+ 251
@@ -3727,11 +3727,11 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 28
+ 30
libs/ui/src/lib/activities-table/activities-table.component.html
- 406
+ 420
@@ -3742,11 +3742,11 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 52
+ 54
libs/ui/src/lib/activities-table/activities-table.component.html
- 420
+ 434
@@ -4045,11 +4045,11 @@
Dividend
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 90
+ 91
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 188
+ 189
apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html
@@ -4812,50 +4812,54 @@
Export Activities
libs/ui/src/lib/activities-table/activities-table.component.html
- 64
+ 72
libs/ui/src/lib/activities-table/activities-table.component.html
- 434
+ 448
Export Drafts as ICS
libs/ui/src/lib/activities-table/activities-table.component.html
- 77
+ 86
libs/ui/src/lib/activities-table/activities-table.component.html
- 447
+ 461
Draft
libs/ui/src/lib/activities-table/activities-table.component.html
- 167
+ 181
Clone
libs/ui/src/lib/activities-table/activities-table.component.html
- 492
+ 506
Export Draft as ICS
libs/ui/src/lib/activities-table/activities-table.component.html
- 502
+ 516
Do you really want to delete this activity?
libs/ui/src/lib/activities-table/activities-table.component.ts
- 327
+ 333
+
+
+ libs/ui/src/lib/activities-table/activities-table.component.ts
+ 344
@@ -4971,7 +4975,7 @@
Interest
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 78
+ 79
apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html
@@ -5035,7 +5039,7 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 335
+ 349
libs/ui/src/lib/i18n.ts
@@ -5061,15 +5065,15 @@
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 253
+ 254
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 349
+ 350
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 244
+ 245
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
@@ -5092,15 +5096,15 @@
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 262
+ 263
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 365
+ 366
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 253
+ 254
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
@@ -5259,7 +5263,7 @@
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 186
+ 187
apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html
@@ -5267,13 +5271,20 @@
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 322
+ 323
libs/ui/src/lib/i18n.ts
35
+
+ Export
+
+ libs/ui/src/lib/activities-table/activities-table.component.html
+ 68
+
+
Tag
@@ -5336,7 +5347,7 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 261
+ 275
libs/ui/src/lib/i18n.ts
@@ -5390,7 +5401,7 @@
Equity
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 66
+ 67
libs/ui/src/lib/i18n.ts
@@ -5524,7 +5535,7 @@
Invested Capital
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 173
+ 174
apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html
@@ -5633,7 +5644,7 @@
Test
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 606
+ 607
@@ -5701,7 +5712,7 @@
Close Holding
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 450
+ 451
@@ -5747,21 +5758,21 @@
Year to date
libs/ui/src/lib/assistant/assistant.component.ts
- 377
+ 378
Week to date
libs/ui/src/lib/assistant/assistant.component.ts
- 369
+ 370
Month to date
libs/ui/src/lib/assistant/assistant.component.ts
- 373
+ 374
@@ -5772,7 +5783,7 @@
libs/ui/src/lib/assistant/assistant.component.ts
- 373
+ 374
@@ -5790,7 +5801,7 @@
libs/ui/src/lib/assistant/assistant.component.ts
- 369
+ 370
@@ -5841,7 +5852,7 @@
libs/ui/src/lib/assistant/assistant.component.ts
- 387
+ 388
@@ -5852,7 +5863,7 @@
libs/ui/src/lib/assistant/assistant.component.ts
- 409
+ 410
@@ -5889,7 +5900,7 @@
Data Gathering
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 629
+ 630
apps/client/src/app/components/admin-overview/admin-overview.html
@@ -5900,7 +5911,7 @@
Find a holding...
libs/ui/src/lib/assistant/assistant.component.ts
- 448
+ 449
@@ -5960,18 +5971,18 @@
Activity
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 100
+ 101
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 231
+ 232
Dividend Yield
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 198
+ 199
@@ -6020,7 +6031,7 @@
Delete Activities
libs/ui/src/lib/activities-table/activities-table.component.html
- 92
+ 105
@@ -6048,7 +6059,7 @@
Jump to a page...
libs/ui/src/lib/assistant/assistant.component.ts
- 449
+ 450
@@ -6090,7 +6101,7 @@
Include in
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 399
+ 400
@@ -6247,7 +6258,7 @@
View Holding
libs/ui/src/lib/activities-table/activities-table.component.html
- 473
+ 487
@@ -6325,11 +6336,11 @@
Cancel
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 162
+ 163
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 634
+ 635
apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html
@@ -6401,7 +6412,7 @@
Close
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 636
+ 637
apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html
@@ -6515,7 +6526,7 @@
Performance with currency effect Performance
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 83
+ 84
@@ -6536,7 +6547,7 @@
Change with currency effect Change
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 63
+ 64
@@ -6638,6 +6649,10 @@
apps/client/src/app/components/admin-market-data/admin-market-data.html
270
+
+ libs/ui/src/lib/activities-table/activities-table.component.html
+ 101
+
cannot be self-hosted
@@ -6924,7 +6939,7 @@
Save
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 645
+ 646
apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html
@@ -7031,7 +7046,7 @@
Mode
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 556
+ 557
@@ -7045,14 +7060,14 @@
Default Market Price
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 519
+ 520
Selector
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 572
+ 573
@@ -7073,7 +7088,7 @@
HTTP Request Headers
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 532
+ 533
@@ -7292,7 +7307,7 @@
Apply
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 154
+ 155
@@ -7352,6 +7367,17 @@
142
+
+ {VAR_PLURAL, plural, =1 {Activity} other {Activities}}
+
+ libs/ui/src/lib/activities-table/activities-table.component.html
+ 69
+
+
+ libs/ui/src/lib/activities-table/activities-table.component.html
+ 102
+
+
Log out
@@ -7768,7 +7794,7 @@
Manage Asset Profile
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 478
+ 479
@@ -7793,7 +7819,7 @@
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 101
+ 102
diff --git a/apps/client/src/locales/messages.zh.xlf b/apps/client/src/locales/messages.zh.xlf
index 9cb1e72ba..a70be75d6 100644
--- a/apps/client/src/locales/messages.zh.xlf
+++ b/apps/client/src/locales/messages.zh.xlf
@@ -268,11 +268,11 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 5
+ 7
libs/ui/src/lib/activities-table/activities-table.component.html
- 183
+ 197
@@ -312,7 +312,7 @@
现金余额
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 54
+ 55
apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html
@@ -328,7 +328,7 @@
平台
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 112
+ 113
apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html
@@ -344,7 +344,7 @@
现金余额
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 169
+ 170
@@ -368,7 +368,7 @@
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 332
+ 333
apps/client/src/app/components/admin-platform/admin-platform.component.html
@@ -404,7 +404,7 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 161
+ 175
libs/ui/src/lib/benchmark/benchmark.component.html
@@ -444,11 +444,11 @@
货币
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 216
+ 217
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 339
+ 340
apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html
@@ -468,7 +468,7 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 303
+ 317
@@ -504,11 +504,11 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 284
+ 298
libs/ui/src/lib/activities-table/activities-table.component.html
- 320
+ 334
libs/ui/src/lib/holdings-table/holdings-table.component.html
@@ -548,7 +548,7 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 483
+ 497
@@ -588,7 +588,7 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 513
+ 527
libs/ui/src/lib/benchmark/benchmark.component.html
@@ -628,7 +628,7 @@
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 486
+ 487
@@ -644,7 +644,7 @@
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 197
+ 198
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
@@ -752,7 +752,7 @@
Find an account...
libs/ui/src/lib/assistant/assistant.component.ts
- 447
+ 448
@@ -768,7 +768,7 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 192
+ 206
libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html
@@ -792,7 +792,7 @@
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 113
+ 114
libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html
@@ -872,11 +872,11 @@
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 235
+ 236
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 221
+ 222
libs/ui/src/lib/holdings-table/holdings-table.component.html
@@ -888,7 +888,7 @@
Data Gathering Frequency
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 467
+ 468
@@ -1008,11 +1008,11 @@
行业
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 280
+ 281
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 270
+ 271
@@ -1020,7 +1020,7 @@
国家
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 295
+ 296
apps/client/src/app/components/admin-users/admin-users.html
@@ -1028,7 +1028,7 @@
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 284
+ 285
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
@@ -1040,15 +1040,15 @@
行业
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 301
+ 302
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 420
+ 421
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 290
+ 291
apps/client/src/app/pages/public/public-page.html
@@ -1060,15 +1060,15 @@
国家
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 311
+ 312
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 431
+ 432
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 302
+ 303
@@ -1076,7 +1076,7 @@
代码映射
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 409
+ 410
@@ -1116,7 +1116,7 @@
刮削配置
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 509
+ 510
@@ -1124,7 +1124,7 @@
笔记
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 455
+ 456
apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html
@@ -1140,7 +1140,7 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 370
+ 384
@@ -1180,7 +1180,7 @@
名称、代码或 ISIN
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 133
+ 134
apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html
@@ -1340,11 +1340,11 @@
网址
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 442
+ 443
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 588
+ 589
apps/client/src/app/components/admin-platform/admin-platform.component.html
@@ -1584,7 +1584,7 @@
基准
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 401
+ 402
apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts
@@ -1596,7 +1596,7 @@
当前市场情绪
libs/ui/src/lib/fear-and-greed-index/fear-and-greed-index.component.html
- 22
+ 23
@@ -1844,7 +1844,7 @@
或
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 167
+ 168
apps/client/src/app/components/admin-settings/admin-settings.component.html
@@ -1924,7 +1924,7 @@
费用
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 210
+ 211
apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html
@@ -2020,7 +2020,7 @@
最低价格
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 131
+ 132
@@ -2028,7 +2028,7 @@
最高价格
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 149
+ 150
@@ -2036,7 +2036,7 @@
数量
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 159
+ 160
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
@@ -2044,7 +2044,7 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 213
+ 227
libs/ui/src/lib/holdings-table/holdings-table.component.html
@@ -2056,7 +2056,7 @@
报告数据故障
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 463
+ 464
@@ -2236,7 +2236,7 @@
libs/ui/src/lib/assistant/assistant.component.ts
- 365
+ 366
@@ -2248,7 +2248,7 @@
libs/ui/src/lib/assistant/assistant.component.ts
- 377
+ 378
@@ -2260,7 +2260,7 @@
libs/ui/src/lib/assistant/assistant.component.ts
- 387
+ 388
@@ -2280,7 +2280,7 @@
libs/ui/src/lib/assistant/assistant.component.ts
- 409
+ 410
@@ -2300,7 +2300,7 @@
libs/ui/src/lib/assistant/assistant.component.ts
- 415
+ 416
@@ -2480,7 +2480,7 @@
语言环境
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 547
+ 548
apps/client/src/app/components/user-account-settings/user-account-settings.html
@@ -2800,7 +2800,7 @@
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 395
+ 396
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
@@ -2904,7 +2904,7 @@
市场数据
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 417
+ 418
libs/common/src/lib/routes/routes.ts
@@ -2944,11 +2944,11 @@
概述
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 41
+ 42
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 114
+ 115
apps/client/src/app/components/header/header.component.html
@@ -2960,7 +2960,7 @@
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 47
+ 48
apps/client/src/app/pages/admin/admin-page.component.ts
@@ -3344,7 +3344,7 @@
持仓
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 126
+ 127
apps/client/src/app/components/home-holdings/home-holdings.html
@@ -3396,7 +3396,7 @@
市场
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 403
+ 404
apps/client/src/app/components/footer/footer.component.html
@@ -3591,6 +3591,14 @@
84
+
+ Do you really want to delete these activities?
+ Do you really want to delete these activities?
+
+ libs/ui/src/lib/activities-table/activities-table.component.ts
+ 334
+
+
Why Ghostfolio ?
为什么使用 Ghostfolio ?
@@ -3840,7 +3848,7 @@
Convert to
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 174
+ 175
@@ -3916,15 +3924,15 @@
活动
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 102
+ 103
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 137
+ 138
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 244
+ 245
apps/client/src/app/components/admin-overview/admin-overview.html
@@ -3940,11 +3948,11 @@
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 233
+ 234
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 361
+ 362
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
@@ -3963,14 +3971,6 @@
126
-
- Do you really want to delete these activities?
- 您确定要删除这些活动吗?
-
- libs/ui/src/lib/activities-table/activities-table.component.ts
- 317
-
-
Update activity
更新活动
@@ -4048,7 +4048,7 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 237
+ 251
@@ -4060,11 +4060,11 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 28
+ 30
libs/ui/src/lib/activities-table/activities-table.component.html
- 406
+ 420
@@ -4076,11 +4076,11 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 52
+ 54
libs/ui/src/lib/activities-table/activities-table.component.html
- 420
+ 434
@@ -4416,11 +4416,11 @@
股息
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 90
+ 91
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 188
+ 189
apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html
@@ -5265,11 +5265,11 @@
导出活动记录
libs/ui/src/lib/activities-table/activities-table.component.html
- 64
+ 72
libs/ui/src/lib/activities-table/activities-table.component.html
- 434
+ 448
@@ -5277,11 +5277,11 @@
将汇票导出为 ICS
libs/ui/src/lib/activities-table/activities-table.component.html
- 77
+ 86
libs/ui/src/lib/activities-table/activities-table.component.html
- 447
+ 461
@@ -5289,7 +5289,7 @@
草稿
libs/ui/src/lib/activities-table/activities-table.component.html
- 167
+ 181
@@ -5297,7 +5297,7 @@
克隆
libs/ui/src/lib/activities-table/activities-table.component.html
- 492
+ 506
@@ -5305,7 +5305,7 @@
将汇票导出为 ICS
libs/ui/src/lib/activities-table/activities-table.component.html
- 502
+ 516
@@ -5313,7 +5313,11 @@
您确实要删除此活动吗?
libs/ui/src/lib/activities-table/activities-table.component.ts
- 327
+ 333
+
+
+ libs/ui/src/lib/activities-table/activities-table.component.ts
+ 344
@@ -5445,7 +5449,7 @@
利息
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 78
+ 79
apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html
@@ -5513,7 +5517,7 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 335
+ 349
libs/ui/src/lib/i18n.ts
@@ -5541,15 +5545,15 @@
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 253
+ 254
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 349
+ 350
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 244
+ 245
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
@@ -5573,15 +5577,15 @@
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 262
+ 263
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 365
+ 366
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 253
+ 254
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
@@ -5757,7 +5761,7 @@
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 186
+ 187
apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html
@@ -5765,13 +5769,21 @@
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 322
+ 323
libs/ui/src/lib/i18n.ts
35
+
+ Export
+ Export
+
+ libs/ui/src/lib/activities-table/activities-table.component.html
+ 68
+
+
Tag
标签
@@ -5841,7 +5853,7 @@
libs/ui/src/lib/activities-table/activities-table.component.html
- 261
+ 275
libs/ui/src/lib/i18n.ts
@@ -5901,7 +5913,7 @@
股权
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 66
+ 67
libs/ui/src/lib/i18n.ts
@@ -6053,7 +6065,7 @@
Invested Capital
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 173
+ 174
apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html
@@ -6173,7 +6185,7 @@
测试
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 606
+ 607
@@ -6249,7 +6261,7 @@
关闭持仓
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 450
+ 451
@@ -6301,7 +6313,7 @@
今年迄今为止
libs/ui/src/lib/assistant/assistant.component.ts
- 377
+ 378
@@ -6309,7 +6321,7 @@
本周至今
libs/ui/src/lib/assistant/assistant.component.ts
- 369
+ 370
@@ -6317,7 +6329,7 @@
本月至今
libs/ui/src/lib/assistant/assistant.component.ts
- 373
+ 374
@@ -6329,7 +6341,7 @@
libs/ui/src/lib/assistant/assistant.component.ts
- 373
+ 374
@@ -6349,7 +6361,7 @@
libs/ui/src/lib/assistant/assistant.component.ts
- 369
+ 370
@@ -6405,7 +6417,7 @@
libs/ui/src/lib/assistant/assistant.component.ts
- 387
+ 388
@@ -6417,7 +6429,7 @@
libs/ui/src/lib/assistant/assistant.component.ts
- 409
+ 410
@@ -6458,7 +6470,7 @@
数据收集
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 629
+ 630
apps/client/src/app/components/admin-overview/admin-overview.html
@@ -6470,7 +6482,7 @@
Find a holding...
libs/ui/src/lib/assistant/assistant.component.ts
- 448
+ 449
@@ -6538,11 +6550,11 @@
活动
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
- 100
+ 101
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 231
+ 232
@@ -6550,7 +6562,7 @@
股息收益率
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 198
+ 199
@@ -6606,7 +6618,7 @@
删除活动
libs/ui/src/lib/activities-table/activities-table.component.html
- 92
+ 105
@@ -6630,7 +6642,7 @@
Jump to a page...
libs/ui/src/lib/assistant/assistant.component.ts
- 449
+ 450
@@ -6686,7 +6698,7 @@
包含在
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 399
+ 400
@@ -6922,7 +6934,7 @@
查看持仓
libs/ui/src/lib/activities-table/activities-table.component.html
- 473
+ 487
@@ -6978,11 +6990,11 @@
取消
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 162
+ 163
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 634
+ 635
apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html
@@ -7034,7 +7046,7 @@
关闭
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 636
+ 637
apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html
@@ -7126,7 +7138,7 @@
含货币影响的涨跌 涨跌
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 63
+ 64
@@ -7142,7 +7154,7 @@
含货币影响的表现 表现
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 83
+ 84
@@ -7288,6 +7300,10 @@
apps/client/src/app/components/admin-market-data/admin-market-data.html
270
+
+ libs/ui/src/lib/activities-table/activities-table.component.html
+ 101
+
cannot be self-hosted
@@ -7608,7 +7624,7 @@
保存
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 645
+ 646
apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html
@@ -7740,7 +7756,7 @@
默认市场价格
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 519
+ 520
@@ -7748,7 +7764,7 @@
模式
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 556
+ 557
@@ -7764,7 +7780,7 @@
选择器
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 572
+ 573
@@ -7772,7 +7788,7 @@
HTTP 请求标头
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 532
+ 533
@@ -8017,7 +8033,7 @@
应用
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 154
+ 155
@@ -8108,6 +8124,18 @@
142
+
+ {VAR_PLURAL, plural, =1 {Activity} other {Activities}}
+ {VAR_PLURAL, plural, =1 {Activity} other {Activities}}
+
+ libs/ui/src/lib/activities-table/activities-table.component.html
+ 69
+
+
+ libs/ui/src/lib/activities-table/activities-table.component.html
+ 102
+
+
Log out
登出
@@ -8577,7 +8605,7 @@
管理资产概况
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 478
+ 479
@@ -8605,7 +8633,7 @@
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 101
+ 102
From 0e42a62e9207e458b3db84d2606b26f18f41823b Mon Sep 17 00:00:00 2001
From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com>
Date: Sat, 1 Aug 2026 09:32:10 +0200
Subject: [PATCH 34/86] Task/improve color of checkboxes in type filter of
activities table component (#7493)
Improve color of checkboxes
---
apps/client/src/styles/theme.scss | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/apps/client/src/styles/theme.scss b/apps/client/src/styles/theme.scss
index 75ecc210d..3f8125011 100644
--- a/apps/client/src/styles/theme.scss
+++ b/apps/client/src/styles/theme.scss
@@ -364,6 +364,12 @@ $gf-typography: (
)
);
+ @include mat.pseudo-checkbox-overrides(
+ (
+ full-selected-icon-color: var(--gf-theme-primary-500)
+ )
+ );
+
@include mat.slide-toggle-overrides(
(
selected-focus-handle-color: var(--gf-theme-primary-500),
From c383eade6f193c8c9d13e1fbab04b168f5d75567 Mon Sep 17 00:00:00 2001
From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com>
Date: Sat, 1 Aug 2026 09:32:45 +0200
Subject: [PATCH 35/86] Task/improve language localization for DE (20260801)
(#7497)
* Update translations
* Update changelog
---
CHANGELOG.md | 6 ++++++
apps/client/src/locales/messages.de.xlf | 6 +++---
2 files changed, 9 insertions(+), 3 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 3fe881b94..952ea923b 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
+
+### Changed
+
+- Improved the language localization for German (`de`)
+
## 3.38.0 - 2026-07-31
### Added
diff --git a/apps/client/src/locales/messages.de.xlf b/apps/client/src/locales/messages.de.xlf
index 2765b0b4c..b2800165a 100644
--- a/apps/client/src/locales/messages.de.xlf
+++ b/apps/client/src/locales/messages.de.xlf
@@ -3051,7 +3051,7 @@
Export
- Export
+ exportieren
libs/ui/src/lib/activities-table/activities-table.component.html
68
@@ -5287,7 +5287,7 @@
Do you really want to delete these activities?
- Do you really want to delete these activities?
+ Möchtest du diese Aktivitäten wirklich löschen?
libs/ui/src/lib/activities-table/activities-table.component.ts
334
@@ -8125,7 +8125,7 @@
{VAR_PLURAL, plural, =1 {Activity} other {Activities}}
- {VAR_PLURAL, plural, =1 {Activity} other {Activities}}
+ {VAR_PLURAL, plural, =1 {Aktivität} other {Aktivitäten}}
libs/ui/src/lib/activities-table/activities-table.component.html
69
From caa9bef697fd04abdf4e9b0cbac277ed17d5fb69 Mon Sep 17 00:00:00 2001
From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com>
Date: Sat, 1 Aug 2026 09:45:18 +0200
Subject: [PATCH 36/86] Task/upgrade prisma to version 7.9.1 (#7498)
* Update prisma to version 7.9.1
* Update changelog
---
CHANGELOG.md | 1 +
package-lock.json | 592 +++++++++++++++++++++++++++++++++++-----------
package.json | 8 +-
3 files changed, 465 insertions(+), 136 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 952ea923b..0512ad5bf 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -10,6 +10,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
### Changed
- Improved the language localization for German (`de`)
+- Upgraded `prisma` from version `7.8.0` to `7.9.1`
## 3.38.0 - 2026-07-31
diff --git a/package-lock.json b/package-lock.json
index 04a7da5a3..1e49fb135 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -43,8 +43,8 @@
"@nestjs/serve-static": "5.0.5",
"@nestjs/throttler": "6.5.0",
"@openrouter/ai-sdk-provider": "3.0.0",
- "@prisma/adapter-pg": "7.8.0",
- "@prisma/client": "7.8.0",
+ "@prisma/adapter-pg": "7.9.1",
+ "@prisma/client": "7.9.1",
"@simplewebauthn/browser": "13.3.0",
"@simplewebauthn/server": "13.3.1",
"ai": "7.0.37",
@@ -127,7 +127,7 @@
"@nx/storybook": "23.0.2",
"@nx/web": "23.0.2",
"@nx/workspace": "23.0.2",
- "@prisma/config": "7.8.0",
+ "@prisma/config": "7.9.1",
"@schematics/angular": "21.2.6",
"@storybook/addon-docs": "10.1.10",
"@storybook/addon-themes": "10.1.10",
@@ -157,7 +157,7 @@
"nx": "23.0.2",
"prettier": "3.9.6",
"prettier-plugin-organize-attributes": "1.0.0",
- "prisma": "7.8.0",
+ "prisma": "7.9.1",
"react": "18.2.0",
"react-dom": "18.2.0",
"replace-in-file": "8.4.0",
@@ -3908,33 +3908,33 @@
}
},
"node_modules/@electric-sql/pglite": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/@electric-sql/pglite/-/pglite-0.4.1.tgz",
- "integrity": "sha512-mZ9NzzUSYPOCnxHH1oAHPRzoMFJHY472raDKwXl/+6oPbpdJ7g8LsCN4FSaIIfkiCKHhb3iF/Zqo3NYxaIhU7Q==",
+ "version": "0.4.3",
+ "resolved": "https://registry.npmjs.org/@electric-sql/pglite/-/pglite-0.4.3.tgz",
+ "integrity": "sha512-ichuWTgtd4mOM1G4SpyGJa5trT03lWbMypDV0fUXUCXg5hiHqVAz/bZyV68NqmkLB7WcYmj1RMJVSp8HV/v/ZQ==",
"devOptional": true,
"license": "Apache-2.0"
},
"node_modules/@electric-sql/pglite-socket": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/@electric-sql/pglite-socket/-/pglite-socket-0.1.1.tgz",
- "integrity": "sha512-p2hoXw3Z3LQHwTeikdZNsFBOvXGqKY2hk51BBw+8NKND8eoH+8LFOtW9Z8CQKmTJ2qqGYu82ipqiyFZOTTXNfw==",
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/@electric-sql/pglite-socket/-/pglite-socket-0.1.3.tgz",
+ "integrity": "sha512-LAciWM0M1dCL8hlsxu2venbVZcdxema0BtDfpWYVqr+Y468UADw0pFWidhKw1M8sfJ8rdLT71tjMmnirf/IZRQ==",
"devOptional": true,
"license": "Apache-2.0",
"bin": {
"pglite-server": "dist/scripts/server.js"
},
"peerDependencies": {
- "@electric-sql/pglite": "0.4.1"
+ "@electric-sql/pglite": "0.4.3"
}
},
"node_modules/@electric-sql/pglite-tools": {
- "version": "0.3.1",
- "resolved": "https://registry.npmjs.org/@electric-sql/pglite-tools/-/pglite-tools-0.3.1.tgz",
- "integrity": "sha512-C+T3oivmy9bpQvSxVqXA1UDY8cB9Eb9vZHL9zxWwEUfDixbXv4G3r2LjoTdR33LD8aomR3O9ZXEO3XEwr/cUCA==",
+ "version": "0.3.3",
+ "resolved": "https://registry.npmjs.org/@electric-sql/pglite-tools/-/pglite-tools-0.3.3.tgz",
+ "integrity": "sha512-AlzLJTRJ8+UFgK8CmxIpyIpJ0+YaFw02IiOSdYrqxwPXdSyeIShz8aa9Tq+tYFXdPwcaMp/Fc80mQZ1dkOQ/wg==",
"devOptional": true,
"license": "Apache-2.0",
"peerDependencies": {
- "@electric-sql/pglite": "0.4.1"
+ "@electric-sql/pglite": "0.4.3"
}
},
"node_modules/@emnapi/core": {
@@ -10041,24 +10041,24 @@
}
},
"node_modules/@prisma/adapter-pg": {
- "version": "7.8.0",
- "resolved": "https://registry.npmjs.org/@prisma/adapter-pg/-/adapter-pg-7.8.0.tgz",
- "integrity": "sha512-ygb3UkerK3v8MDpXVgCISdRNDozpxh6+JVJgiIGbSr5KBgz10LLf5ejUskPGoXlsIjxsOu6nuy1JVQr2EKGSlg==",
+ "version": "7.9.1",
+ "resolved": "https://registry.npmjs.org/@prisma/adapter-pg/-/adapter-pg-7.9.1.tgz",
+ "integrity": "sha512-Ho2RK1KanQxLNSC0sR5bpiiVep10sWPLXCcxK+KXfI/Q69TMRbiafSvLPv3V9snimX72rMCqGlyJ4sBO4lKTAw==",
"license": "Apache-2.0",
"dependencies": {
- "@prisma/driver-adapter-utils": "7.8.0",
+ "@prisma/driver-adapter-utils": "7.9.1",
"@types/pg": "^8.16.0",
"pg": "^8.16.3",
"postgres-array": "3.0.4"
}
},
"node_modules/@prisma/client": {
- "version": "7.8.0",
- "resolved": "https://registry.npmjs.org/@prisma/client/-/client-7.8.0.tgz",
- "integrity": "sha512-HFp3Dawv/3sU3JtlPha90IB+48lS7zHiH4LKZPjmcE8YH5P9DOXGPvo8dqOtO7MqLDd1p2hOWMcFlRT1DMblHw==",
+ "version": "7.9.1",
+ "resolved": "https://registry.npmjs.org/@prisma/client/-/client-7.9.1.tgz",
+ "integrity": "sha512-+xgrh2EhJVF79wC0yX5G4PI1Rdcm7Qn/nekNQ+t/O153wtNggruHal+fXHSa0QE+Tp/Cw5wvxeCEhZZ59xGm8Q==",
"license": "Apache-2.0",
"dependencies": {
- "@prisma/client-runtime-utils": "7.8.0"
+ "@prisma/client-runtime-utils": "7.9.1"
},
"engines": {
"node": "^20.19 || ^22.12 || >=24.0"
@@ -10077,15 +10077,15 @@
}
},
"node_modules/@prisma/client-runtime-utils": {
- "version": "7.8.0",
- "resolved": "https://registry.npmjs.org/@prisma/client-runtime-utils/-/client-runtime-utils-7.8.0.tgz",
- "integrity": "sha512-5NQZztQ0oY/ADFkmd9gPuweH5A1/CCY8YQPorLLO0Mu6a87mY5gsnDkzmFmIHs9NFaLnZojzgddFVN4RpKYrdw==",
+ "version": "7.9.1",
+ "resolved": "https://registry.npmjs.org/@prisma/client-runtime-utils/-/client-runtime-utils-7.9.1.tgz",
+ "integrity": "sha512-mVIBGYdO5CFmK0HvjxrtfIyQQcPdb88pSCeVQriVQPVZyDovIWblpHfOgcS8QO187j3QF0ePArH8qPhp0AU2vg==",
"license": "Apache-2.0"
},
"node_modules/@prisma/config": {
- "version": "7.8.0",
- "resolved": "https://registry.npmjs.org/@prisma/config/-/config-7.8.0.tgz",
- "integrity": "sha512-HFESzd9rx2ZQxlK+TL7tu1HPvCqrHiL6LCxYykI2c34mvaUuIVVl3lYuicJD/MNnzgPnyeBEMlK4WTomJCV5jw==",
+ "version": "7.9.1",
+ "resolved": "https://registry.npmjs.org/@prisma/config/-/config-7.9.1.tgz",
+ "integrity": "sha512-4znKhxTmXmuPye9Z6pbIyYb5VZlkZ05qG1L6Dr4g+7oTwc6V50Bs9XirFBDdjWt+H/AabMn9aUnxBcvj8z05aA==",
"devOptional": true,
"license": "Apache-2.0",
"dependencies": {
@@ -10096,97 +10096,95 @@
}
},
"node_modules/@prisma/debug": {
- "version": "7.8.0",
- "resolved": "https://registry.npmjs.org/@prisma/debug/-/debug-7.8.0.tgz",
- "integrity": "sha512-p+QZReysDUqXC+mk17q9a+Y/qzh4c2KYliDK30buYUyfrGeTGSyfmc0AIrJRhZJrLHhRiJa9Au/J72h3C+szvA==",
+ "version": "7.9.1",
+ "resolved": "https://registry.npmjs.org/@prisma/debug/-/debug-7.9.1.tgz",
+ "integrity": "sha512-/cpVZ4itxtcgB8GHBvZtcmuEjq+lWsLrRJxFMbwZrT1RIdtuKmUm7PPGo/wzfbYpBrk+9WmmBE8CHJw2rybKDQ==",
"license": "Apache-2.0"
},
"node_modules/@prisma/dev": {
- "version": "0.24.3",
- "resolved": "https://registry.npmjs.org/@prisma/dev/-/dev-0.24.3.tgz",
- "integrity": "sha512-ffHlQuKXZiaDt9Go0OnCTdJZrHxK0k7omJKNV86/VjpsXu5EIHZLK0T7JSWgvNlJwh56kW9JFu9v0qJciFzepg==",
+ "version": "0.24.17",
+ "resolved": "https://registry.npmjs.org/@prisma/dev/-/dev-0.24.17.tgz",
+ "integrity": "sha512-UvdZzmpFwknnfreh6Jije84ekkYGPYEJhXG1tFzCsCfQyzJifrOo38eZc0qajzvaC6OLUOrN9ML5XfCnEZL9DA==",
"devOptional": true,
"license": "ISC",
"dependencies": {
- "@electric-sql/pglite": "0.4.1",
- "@electric-sql/pglite-socket": "0.1.1",
- "@electric-sql/pglite-tools": "0.3.1",
- "@hono/node-server": "1.19.11",
+ "@electric-sql/pglite": "0.4.3",
+ "@electric-sql/pglite-socket": "0.1.3",
+ "@electric-sql/pglite-tools": "0.3.3",
"@prisma/get-platform": "7.2.0",
"@prisma/query-plan-executor": "7.2.0",
- "@prisma/streams-local": "0.1.2",
+ "@prisma/streams-local": "0.1.11",
+ "find-my-way": "9.7.0",
"foreground-child": "3.3.1",
"get-port-please": "3.2.0",
- "hono": "^4.12.8",
- "http-status-codes": "2.3.0",
"pathe": "2.0.3",
"proper-lockfile": "4.1.2",
"remeda": "2.33.4",
"std-env": "3.10.0",
- "valibot": "1.2.0",
+ "valibot": "1.4.2",
"zeptomatch": "2.1.0"
}
},
"node_modules/@prisma/driver-adapter-utils": {
- "version": "7.8.0",
- "resolved": "https://registry.npmjs.org/@prisma/driver-adapter-utils/-/driver-adapter-utils-7.8.0.tgz",
- "integrity": "sha512-/Q13o0ZT0rjc1Xk0Q9KhZYwuq2EW/vSbWUBKfgEKkaCuB/Sg6bqnjmTZqC5cD4d6y1vfFAEwBRzfzoSMIVJ55A==",
+ "version": "7.9.1",
+ "resolved": "https://registry.npmjs.org/@prisma/driver-adapter-utils/-/driver-adapter-utils-7.9.1.tgz",
+ "integrity": "sha512-vmHehG7nn/heW32DXXpp13DxxAxVVe6n250oEt3dOL2E/4bt3olktKZN0mzSuxMMronyMSkbeW2uCOn3F4g8RQ==",
"license": "Apache-2.0",
"dependencies": {
- "@prisma/debug": "7.8.0"
+ "@prisma/debug": "7.9.1"
}
},
"node_modules/@prisma/engines": {
- "version": "7.8.0",
- "resolved": "https://registry.npmjs.org/@prisma/engines/-/engines-7.8.0.tgz",
- "integrity": "sha512-jx3rCnNNrt5uzbkKlegtQ2GZHxSlihMCzutgT/BP6UIDF1r9tDI39hV/0T/cHZgzJ3ELbuQPXlVZy+Y1n0pcgw==",
+ "version": "7.9.1",
+ "resolved": "https://registry.npmjs.org/@prisma/engines/-/engines-7.9.1.tgz",
+ "integrity": "sha512-UprXSMNXx2NF5ow4pqaQtE8OuBz6K78B0wc0tn2L28G5r933iWp1DR9Do2qWrsNvvFIP3x6mpEWnQtckMO0Uhg==",
"devOptional": true,
"hasInstallScript": true,
"license": "Apache-2.0",
"dependencies": {
- "@prisma/debug": "7.8.0",
- "@prisma/engines-version": "7.8.0-6.3c6e192761c0362d496ed980de936e2f3cebcd3a",
- "@prisma/fetch-engine": "7.8.0",
- "@prisma/get-platform": "7.8.0"
+ "@prisma/debug": "7.9.1",
+ "@prisma/engines-version": "7.9.0-1.e922089b7d7502aff4249d5da3420f6fa55fc6ad",
+ "@prisma/fetch-engine": "7.9.1",
+ "@prisma/get-platform": "7.9.1"
}
},
"node_modules/@prisma/engines-version": {
- "version": "7.8.0-6.3c6e192761c0362d496ed980de936e2f3cebcd3a",
- "resolved": "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-7.8.0-6.3c6e192761c0362d496ed980de936e2f3cebcd3a.tgz",
- "integrity": "sha512-fJPQxCkLgA5EayWaW8eArgCvjJ+N+Kz3VyeNKMEeYiQC4alNkxRKFVAGxv/ZUzuJISKqdw+zGeDbS6mn6RCPOA==",
+ "version": "7.9.0-1.e922089b7d7502aff4249d5da3420f6fa55fc6ad",
+ "resolved": "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-7.9.0-1.e922089b7d7502aff4249d5da3420f6fa55fc6ad.tgz",
+ "integrity": "sha512-2BsPPFksz3CQUXG6af3rVCtJKg6+JJGJTtfgu2fU8DdXhOfkBjulCq8mwybCd6ge0/jhZq2kOtLAbmUDMyI1nA==",
"devOptional": true,
"license": "Apache-2.0"
},
"node_modules/@prisma/engines/node_modules/@prisma/get-platform": {
- "version": "7.8.0",
- "resolved": "https://registry.npmjs.org/@prisma/get-platform/-/get-platform-7.8.0.tgz",
- "integrity": "sha512-WlxgRGnolL8VH2EmkH1R/DkKNr/mVdS3G2h42IZFFZ3eUrH9OT6t73kIOSlkkrv50wG123Iq8d96ufv5LlZktw==",
+ "version": "7.9.1",
+ "resolved": "https://registry.npmjs.org/@prisma/get-platform/-/get-platform-7.9.1.tgz",
+ "integrity": "sha512-PK8R60YZRQvYxBrGG9i7l2/rFyzy+2MuI1dKtmtrCqPH8YpiJx/MfiC7LRzX5786rZDEv7BngcjfIJW4/9ADuw==",
"devOptional": true,
"license": "Apache-2.0",
"dependencies": {
- "@prisma/debug": "7.8.0"
+ "@prisma/debug": "7.9.1"
}
},
"node_modules/@prisma/fetch-engine": {
- "version": "7.8.0",
- "resolved": "https://registry.npmjs.org/@prisma/fetch-engine/-/fetch-engine-7.8.0.tgz",
- "integrity": "sha512-gwB0Euiz/DDRyxFRpLXYlK3RfaZUj1c5dAYMuhZYfApg7arknJlcb9bIsOHDppJmbqYaVA+yBIiFMDBfprsNPQ==",
+ "version": "7.9.1",
+ "resolved": "https://registry.npmjs.org/@prisma/fetch-engine/-/fetch-engine-7.9.1.tgz",
+ "integrity": "sha512-9DwxrNTeT25Orbu9CWh0CZvVlyY1lmscpbaeLZcOnuR7zcuFrt91YSmmOfIm7zJ08YOZ6mVzURKwLoMwEBcK8w==",
"devOptional": true,
"license": "Apache-2.0",
"dependencies": {
- "@prisma/debug": "7.8.0",
- "@prisma/engines-version": "7.8.0-6.3c6e192761c0362d496ed980de936e2f3cebcd3a",
- "@prisma/get-platform": "7.8.0"
+ "@prisma/debug": "7.9.1",
+ "@prisma/engines-version": "7.9.0-1.e922089b7d7502aff4249d5da3420f6fa55fc6ad",
+ "@prisma/get-platform": "7.9.1"
}
},
"node_modules/@prisma/fetch-engine/node_modules/@prisma/get-platform": {
- "version": "7.8.0",
- "resolved": "https://registry.npmjs.org/@prisma/get-platform/-/get-platform-7.8.0.tgz",
- "integrity": "sha512-WlxgRGnolL8VH2EmkH1R/DkKNr/mVdS3G2h42IZFFZ3eUrH9OT6t73kIOSlkkrv50wG123Iq8d96ufv5LlZktw==",
+ "version": "7.9.1",
+ "resolved": "https://registry.npmjs.org/@prisma/get-platform/-/get-platform-7.9.1.tgz",
+ "integrity": "sha512-PK8R60YZRQvYxBrGG9i7l2/rFyzy+2MuI1dKtmtrCqPH8YpiJx/MfiC7LRzX5786rZDEv7BngcjfIJW4/9ADuw==",
"devOptional": true,
"license": "Apache-2.0",
"dependencies": {
- "@prisma/debug": "7.8.0"
+ "@prisma/debug": "7.9.1"
}
},
"node_modules/@prisma/get-platform": {
@@ -10214,9 +10212,9 @@
"license": "Apache-2.0"
},
"node_modules/@prisma/streams-local": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/@prisma/streams-local/-/streams-local-0.1.2.tgz",
- "integrity": "sha512-l49yTxKKF2odFxaAXTmwmkBKL3+bVQ1tFOooGifu4xkdb9NMNLxHj27XAhTylWZod8I+ISGM5erU1xcl/oBCtg==",
+ "version": "0.1.11",
+ "resolved": "https://registry.npmjs.org/@prisma/streams-local/-/streams-local-0.1.11.tgz",
+ "integrity": "sha512-0TcebL559MByKqTJ+SsrFIEg228iw8UCVRFckzgfRSiJqczhs+MuAgWOF9lnOIV/IVqvu+KMnFTH0eDeTQMpUg==",
"devOptional": true,
"license": "Apache-2.0",
"dependencies": {
@@ -10226,7 +10224,7 @@
"proper-lockfile": "^4.1.2"
},
"engines": {
- "bun": ">=1.3.6",
+ "bun": ">=1.2.0",
"node": ">=22.0.0"
}
},
@@ -10244,14 +10242,23 @@
}
},
"node_modules/@prisma/studio-core": {
- "version": "0.27.3",
- "resolved": "https://registry.npmjs.org/@prisma/studio-core/-/studio-core-0.27.3.tgz",
- "integrity": "sha512-AADjNFPdsrglxHQVTmHFqv6DuKQZ5WY4p5/gVFY017twvNrSwpLJ9lqUbYYxEu2W7nbvVxTZA8deJ8LseNALsw==",
+ "version": "0.33.0",
+ "resolved": "https://registry.npmjs.org/@prisma/studio-core/-/studio-core-0.33.0.tgz",
+ "integrity": "sha512-V2fX/nKEymNTrHXwfP26PGjoLStO35Ogu+ex7CFJbLrMYEcZxxZpiSNOs7px23Hk5mzLWvM5RsqG6Ka+rha+wg==",
"devOptional": true,
"license": "Apache-2.0",
"dependencies": {
"@radix-ui/react-toggle": "1.1.10",
- "chart.js": "4.5.1"
+ "@visx/curve": "4.0.1-alpha.0",
+ "@visx/event": "4.0.1-alpha.0",
+ "@visx/grid": "4.0.1-alpha.0",
+ "@visx/group": "4.0.1-alpha.0",
+ "@visx/responsive": "4.0.1-alpha.0",
+ "@visx/scale": "4.0.1-alpha.0",
+ "@visx/shape": "4.0.1-alpha.0",
+ "d3-array": "3.2.4",
+ "d3-shape": "3.2.0",
+ "elkjs": "0.11.1"
},
"engines": {
"node": "^20.19 || ^22.12 || >=24.0",
@@ -12501,9 +12508,8 @@
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/@types/d3-geo/-/d3-geo-3.1.0.tgz",
"integrity": "sha512-856sckF0oP/diXtS4jNsiQw/UuK5fQG8l/a9VVLeSouf1/PPbBE1i1W852zVwKwYCBkFJJB7nCFTbk6UMEXBOQ==",
+ "devOptional": true,
"license": "MIT",
- "optional": true,
- "peer": true,
"dependencies": {
"@types/geojson": "*"
}
@@ -12531,9 +12537,8 @@
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/@types/d3-path/-/d3-path-3.1.1.tgz",
"integrity": "sha512-VMZBYyQvbGmWyWVea0EHs/BwLgxc+MKi1zLDCONksozI4YJMcTt8ZEuIR4Sb1MMTE8MMW49v0IwI5+b7RmfWlg==",
- "license": "MIT",
- "optional": true,
- "peer": true
+ "devOptional": true,
+ "license": "MIT"
},
"node_modules/@types/d3-polygon": {
"version": "3.0.2",
@@ -12756,9 +12761,8 @@
"version": "7946.0.16",
"resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.16.tgz",
"integrity": "sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg==",
- "license": "MIT",
- "optional": true,
- "peer": true
+ "devOptional": true,
+ "license": "MIT"
},
"node_modules/@types/google-spreadsheet": {
"version": "3.1.5",
@@ -12902,7 +12906,7 @@
"version": "4.17.24",
"resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.24.tgz",
"integrity": "sha512-gIW7lQLZbue7lRSWEFql49QJJWThrTFFeIMJdp3eH4tKoxm1OvEPg02rm4wCCSHS0cL3/Fizimb35b7k8atwsQ==",
- "dev": true,
+ "devOptional": true,
"license": "MIT"
},
"node_modules/@types/luxon": {
@@ -13056,7 +13060,6 @@
"integrity": "sha512-cMoR+FoAf/Jyq6+Df2/Z41jISvGZZ2eTlnsaJRptmZ76Caldwy1odD4xTr/gNV9VLj0AWgg/nmkevIyUfIIq5w==",
"devOptional": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"csstype": "^3.2.2"
}
@@ -14168,6 +14171,265 @@
"node": ">= 20"
}
},
+ "node_modules/@visx/curve": {
+ "version": "4.0.1-alpha.0",
+ "resolved": "https://registry.npmjs.org/@visx/curve/-/curve-4.0.1-alpha.0.tgz",
+ "integrity": "sha512-jRu61Uz274pV1zyioXmboyrLutYbnKsgjj4njSGCnhdXj5GkZvZbg+ThDb6oOzoAnJOBRLz4rzPlWvNJOzuVMg==",
+ "devOptional": true,
+ "license": "MIT",
+ "dependencies": {
+ "@visx/vendor": "4.0.0-alpha.0"
+ }
+ },
+ "node_modules/@visx/event": {
+ "version": "4.0.1-alpha.0",
+ "resolved": "https://registry.npmjs.org/@visx/event/-/event-4.0.1-alpha.0.tgz",
+ "integrity": "sha512-EQqCMSv/s8NbFjo+hz3FKsvvYfP+2QslsFJ/24/O5l/W+7UC6J6aAvO0ujVwrTwdYbuQ+vhxKi1xdPdKR/qj1g==",
+ "devOptional": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/react": "*",
+ "@visx/point": "4.0.1-alpha.0"
+ }
+ },
+ "node_modules/@visx/grid": {
+ "version": "4.0.1-alpha.0",
+ "resolved": "https://registry.npmjs.org/@visx/grid/-/grid-4.0.1-alpha.0.tgz",
+ "integrity": "sha512-rycutGmTHO+znNdPumheWMglm7YfpffvRwUkVy5zy4WoORIuKTMkDxwnOzHG2xMxU3EE/YCd37xFV5AxA30yeg==",
+ "devOptional": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/react": "*",
+ "@visx/curve": "4.0.1-alpha.0",
+ "@visx/group": "4.0.1-alpha.0",
+ "@visx/point": "4.0.1-alpha.0",
+ "@visx/scale": "4.0.1-alpha.0",
+ "@visx/shape": "4.0.1-alpha.0",
+ "classnames": "^2.3.1"
+ },
+ "peerDependencies": {
+ "react": "^16.14.0 || ^17.0.0-0 || ^18.0.0-0 || ^19.0.0-0"
+ }
+ },
+ "node_modules/@visx/group": {
+ "version": "4.0.1-alpha.0",
+ "resolved": "https://registry.npmjs.org/@visx/group/-/group-4.0.1-alpha.0.tgz",
+ "integrity": "sha512-V19l7iQ7jccBv8kao/EByuI6o4xtxzzLV9nqVI1hRvmdzTVsuLpqlwzYCZUXJaTVvUWf8s4D2SQFjGkj/Nw+0w==",
+ "devOptional": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/react": "*",
+ "classnames": "^2.3.1"
+ },
+ "peerDependencies": {
+ "react": "^16.14.0 || ^17.0.0-0 || ^18.0.0-0 || ^19.0.0-0"
+ }
+ },
+ "node_modules/@visx/point": {
+ "version": "4.0.1-alpha.0",
+ "resolved": "https://registry.npmjs.org/@visx/point/-/point-4.0.1-alpha.0.tgz",
+ "integrity": "sha512-ijTfr/Nx09f03vIj9nyTr3z4Xth4Y75427UaogJh6dnIRLMEFHQOwNu791sbfiNj0a+ZXuaE32h0vKrFe4/8Qg==",
+ "devOptional": true,
+ "license": "MIT"
+ },
+ "node_modules/@visx/responsive": {
+ "version": "4.0.1-alpha.0",
+ "resolved": "https://registry.npmjs.org/@visx/responsive/-/responsive-4.0.1-alpha.0.tgz",
+ "integrity": "sha512-o+1zGywQZY0+yOx3Iw87wc4bbPJRr/HnIukTwfOz4UVyj9pB1OQNVHB7OORO1+LBHJceWpB31co/ZV9KHncKrA==",
+ "devOptional": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/lodash": "^4.17.13",
+ "@types/react": "*",
+ "lodash": "^4.17.21"
+ },
+ "peerDependencies": {
+ "react": "^16.14.0 || ^17.0.0-0 || ^18.0.0-0 || ^19.0.0-0"
+ }
+ },
+ "node_modules/@visx/scale": {
+ "version": "4.0.1-alpha.0",
+ "resolved": "https://registry.npmjs.org/@visx/scale/-/scale-4.0.1-alpha.0.tgz",
+ "integrity": "sha512-nzjeE87vFSAXGWFiiNfBpNLAf0Q8Qmf6syvKLjqNi4kGZkdhbUll3E/59YsgWXmjM8+llPLWzGsP+JPvo5eq1A==",
+ "devOptional": true,
+ "license": "MIT",
+ "dependencies": {
+ "@visx/vendor": "4.0.0-alpha.0"
+ }
+ },
+ "node_modules/@visx/shape": {
+ "version": "4.0.1-alpha.0",
+ "resolved": "https://registry.npmjs.org/@visx/shape/-/shape-4.0.1-alpha.0.tgz",
+ "integrity": "sha512-62QeiVNmPlterQGwhkEDcbq7M0MqY0lBsK5QKXtM9ZoPZWkuGV3aykA3+Xu20B2FAvyJq4LqJzBc7Sxr+EAdbA==",
+ "devOptional": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/lodash": "^4.17.13",
+ "@types/react": "*",
+ "@visx/curve": "4.0.1-alpha.0",
+ "@visx/group": "4.0.1-alpha.0",
+ "@visx/scale": "4.0.1-alpha.0",
+ "@visx/vendor": "4.0.0-alpha.0",
+ "classnames": "^2.3.1",
+ "lodash": "^4.17.21"
+ },
+ "peerDependencies": {
+ "react": "^16.14.0 || ^17.0.0-0 || ^18.0.0-0 || ^19.0.0-0"
+ }
+ },
+ "node_modules/@visx/vendor": {
+ "version": "4.0.0-alpha.0",
+ "resolved": "https://registry.npmjs.org/@visx/vendor/-/vendor-4.0.0-alpha.0.tgz",
+ "integrity": "sha512-6I+MuqXBcv9jnlcVowHoHKSdk9gXTWkHLKyqBwRWg7LY6A3Ei8SHfubpqGV5rBUSppxMq2RszPJUS6w+H0YgmQ==",
+ "devOptional": true,
+ "license": "MIT and ISC",
+ "dependencies": {
+ "@types/d3-array": "3.0.3",
+ "@types/d3-color": "3.1.0",
+ "@types/d3-delaunay": "6.0.1",
+ "@types/d3-format": "3.0.1",
+ "@types/d3-geo": "3.1.0",
+ "@types/d3-interpolate": "3.0.1",
+ "@types/d3-path": "3.1.1",
+ "@types/d3-scale": "4.0.2",
+ "@types/d3-shape": "3.1.7",
+ "@types/d3-time": "3.0.0",
+ "@types/d3-time-format": "2.1.0",
+ "d3-array": "3.2.1",
+ "d3-color": "3.1.0",
+ "d3-delaunay": "6.0.2",
+ "d3-format": "3.1.0",
+ "d3-geo": "3.1.0",
+ "d3-interpolate": "3.0.1",
+ "d3-path": "3.1.0",
+ "d3-scale": "4.0.2",
+ "d3-shape": "3.2.0",
+ "d3-time": "3.1.0",
+ "d3-time-format": "4.1.0",
+ "internmap": "2.0.3"
+ }
+ },
+ "node_modules/@visx/vendor/node_modules/@types/d3-array": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/@types/d3-array/-/d3-array-3.0.3.tgz",
+ "integrity": "sha512-Reoy+pKnvsksN0lQUlcH6dOGjRZ/3WRwXR//m+/8lt1BXeI4xyaUZoqULNjyXXRuh0Mj4LNpkCvhUpQlY3X5xQ==",
+ "devOptional": true,
+ "license": "MIT"
+ },
+ "node_modules/@visx/vendor/node_modules/@types/d3-color": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/@types/d3-color/-/d3-color-3.1.0.tgz",
+ "integrity": "sha512-HKuicPHJuvPgCD+np6Se9MQvS6OCbJmOjGvylzMJRlDwUXjKTTXs6Pwgk79O09Vj/ho3u1ofXnhFOaEWWPrlwA==",
+ "devOptional": true,
+ "license": "MIT"
+ },
+ "node_modules/@visx/vendor/node_modules/@types/d3-delaunay": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/@types/d3-delaunay/-/d3-delaunay-6.0.1.tgz",
+ "integrity": "sha512-tLxQ2sfT0p6sxdG75c6f/ekqxjyYR0+LwPrsO1mbC9YDBzPJhs2HbJJRrn8Ez1DBoHRo2yx7YEATI+8V1nGMnQ==",
+ "devOptional": true,
+ "license": "MIT"
+ },
+ "node_modules/@visx/vendor/node_modules/@types/d3-format": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/@types/d3-format/-/d3-format-3.0.1.tgz",
+ "integrity": "sha512-5KY70ifCCzorkLuIkDe0Z9YTf9RR2CjBX1iaJG+rgM/cPP+sO+q9YdQ9WdhQcgPj1EQiJ2/0+yUkkziTG6Lubg==",
+ "devOptional": true,
+ "license": "MIT"
+ },
+ "node_modules/@visx/vendor/node_modules/@types/d3-interpolate": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/@types/d3-interpolate/-/d3-interpolate-3.0.1.tgz",
+ "integrity": "sha512-jx5leotSeac3jr0RePOH1KdR9rISG91QIE4Q2PYTu4OymLTZfA3SrnURSLzKH48HmXVUru50b8nje4E79oQSQw==",
+ "devOptional": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/d3-color": "*"
+ }
+ },
+ "node_modules/@visx/vendor/node_modules/@types/d3-scale": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/@types/d3-scale/-/d3-scale-4.0.2.tgz",
+ "integrity": "sha512-Yk4htunhPAwN0XGlIwArRomOjdoBFXC3+kCxK2Ubg7I9shQlVSJy/pG/Ht5ASN+gdMIalpk8TJ5xV74jFsetLA==",
+ "devOptional": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/d3-time": "*"
+ }
+ },
+ "node_modules/@visx/vendor/node_modules/@types/d3-shape": {
+ "version": "3.1.7",
+ "resolved": "https://registry.npmjs.org/@types/d3-shape/-/d3-shape-3.1.7.tgz",
+ "integrity": "sha512-VLvUQ33C+3J+8p+Daf+nYSOsjB4GXp19/S/aGo60m9h1v6XaxjiT82lKVWJCfzhtuZ3yD7i/TPeC/fuKLLOSmg==",
+ "devOptional": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/d3-path": "*"
+ }
+ },
+ "node_modules/@visx/vendor/node_modules/@types/d3-time": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/@types/d3-time/-/d3-time-3.0.0.tgz",
+ "integrity": "sha512-sZLCdHvBUcNby1cB6Fd3ZBrABbjz3v1Vm90nysCQ6Vt7vd6e/h9Lt7SiJUoEX0l4Dzc7P5llKyhqSi1ycSf1Hg==",
+ "devOptional": true,
+ "license": "MIT"
+ },
+ "node_modules/@visx/vendor/node_modules/@types/d3-time-format": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/@types/d3-time-format/-/d3-time-format-2.1.0.tgz",
+ "integrity": "sha512-/myT3I7EwlukNOX2xVdMzb8FRgNzRMpsZddwst9Ld/VFe6LyJyRp0s32l/V9XoUzk+Gqu56F/oGk6507+8BxrA==",
+ "devOptional": true,
+ "license": "MIT"
+ },
+ "node_modules/@visx/vendor/node_modules/d3-array": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.1.tgz",
+ "integrity": "sha512-gUY/qeHq/yNqqoCKNq4vtpFLdoCdvyNpWoC/KNjhGbhDuQpAM9sIQQKkXSNpXa9h5KySs/gzm7R88WkUutgwWQ==",
+ "devOptional": true,
+ "license": "ISC",
+ "dependencies": {
+ "internmap": "1 - 2"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@visx/vendor/node_modules/d3-delaunay": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/d3-delaunay/-/d3-delaunay-6.0.2.tgz",
+ "integrity": "sha512-IMLNldruDQScrcfT+MWnazhHbDJhcRJyOEBAJfwQnHle1RPh6WDuLvxNArUju2VSMSUuKlY5BGHRJ2cYyoFLQQ==",
+ "devOptional": true,
+ "license": "ISC",
+ "dependencies": {
+ "delaunator": "5"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@visx/vendor/node_modules/d3-format": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz",
+ "integrity": "sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==",
+ "devOptional": true,
+ "license": "ISC",
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@visx/vendor/node_modules/d3-geo": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-3.1.0.tgz",
+ "integrity": "sha512-JEo5HxXDdDYXCaWdwLRt79y7giK8SbhZJbFWXqbRTolCHFI5jRqteLzCsq51NKbUoX0PjBVSohxrx+NoOUujYA==",
+ "devOptional": true,
+ "license": "ISC",
+ "dependencies": {
+ "d3-array": "2.5.0 - 3"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
"node_modules/@vitejs/plugin-basic-ssl": {
"version": "2.1.4",
"resolved": "https://registry.npmjs.org/@vitejs/plugin-basic-ssl/-/plugin-basic-ssl-2.1.4.tgz",
@@ -15462,9 +15724,9 @@
}
},
"node_modules/better-result": {
- "version": "2.8.2",
- "resolved": "https://registry.npmjs.org/better-result/-/better-result-2.8.2.tgz",
- "integrity": "sha512-YOf0VSj5nUPI27doTtXF+BBnsiRq3qY7avHqfIWnppxTLGyvkLq1QV2RTxkwoZwJ60ywLfZ0raFF4J/G886i7A==",
+ "version": "2.10.0",
+ "resolved": "https://registry.npmjs.org/better-result/-/better-result-2.10.0.tgz",
+ "integrity": "sha512-oQhh0y1qo2/ZKdAAEvHZAqKKiHOFU5k/bW96fE2ScgQOVkJRiHwB+nOS1SgFsYqRlxMDWvefXi9Q3px7QvgNDw==",
"devOptional": true,
"license": "MIT"
},
@@ -16392,6 +16654,13 @@
"validator": "^13.15.22"
}
},
+ "node_modules/classnames": {
+ "version": "2.5.1",
+ "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.5.1.tgz",
+ "integrity": "sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==",
+ "devOptional": true,
+ "license": "MIT"
+ },
"node_modules/clean-css": {
"version": "5.3.3",
"resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.3.tgz",
@@ -18049,8 +18318,7 @@
"resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz",
"integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==",
"devOptional": true,
- "license": "MIT",
- "peer": true
+ "license": "MIT"
},
"node_modules/cytoscape": {
"version": "3.33.2",
@@ -18157,9 +18425,8 @@
"version": "3.2.4",
"resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz",
"integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==",
+ "devOptional": true,
"license": "ISC",
- "optional": true,
- "peer": true,
"dependencies": {
"internmap": "1 - 2"
},
@@ -18214,9 +18481,8 @@
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz",
"integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==",
+ "devOptional": true,
"license": "ISC",
- "optional": true,
- "peer": true,
"engines": {
"node": ">=12"
}
@@ -18372,9 +18638,8 @@
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.2.tgz",
"integrity": "sha512-AJDdYOdnyRDV5b6ArilzCPPwc1ejkHcoyFarqlPqT7zRYjhavcT3uSrqcMvsgh2CgoPbK3RCwyHaVyxYcP2Arg==",
+ "devOptional": true,
"license": "ISC",
- "optional": true,
- "peer": true,
"engines": {
"node": ">=12"
}
@@ -18408,9 +18673,8 @@
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz",
"integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==",
+ "devOptional": true,
"license": "ISC",
- "optional": true,
- "peer": true,
"dependencies": {
"d3-color": "1 - 3"
},
@@ -18422,9 +18686,8 @@
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/d3-path/-/d3-path-3.1.0.tgz",
"integrity": "sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==",
+ "devOptional": true,
"license": "ISC",
- "optional": true,
- "peer": true,
"engines": {
"node": ">=12"
}
@@ -18516,9 +18779,8 @@
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz",
"integrity": "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==",
+ "devOptional": true,
"license": "ISC",
- "optional": true,
- "peer": true,
"dependencies": {
"d3-array": "2.10.0 - 3",
"d3-format": "1 - 3",
@@ -18560,9 +18822,8 @@
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-3.2.0.tgz",
"integrity": "sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==",
+ "devOptional": true,
"license": "ISC",
- "optional": true,
- "peer": true,
"dependencies": {
"d3-path": "^3.1.0"
},
@@ -18574,9 +18835,8 @@
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/d3-time/-/d3-time-3.1.0.tgz",
"integrity": "sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==",
+ "devOptional": true,
"license": "ISC",
- "optional": true,
- "peer": true,
"dependencies": {
"d3-array": "2 - 3"
},
@@ -18588,9 +18848,8 @@
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz",
"integrity": "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==",
+ "devOptional": true,
"license": "ISC",
- "optional": true,
- "peer": true,
"dependencies": {
"d3-time": "1 - 3"
},
@@ -18943,9 +19202,8 @@
"version": "5.1.0",
"resolved": "https://registry.npmjs.org/delaunator/-/delaunator-5.1.0.tgz",
"integrity": "sha512-AGrQ4QSgssa1NGmWmLPqN5NY2KajF5MqxetNEO+o0n3ZwZZeTmt7bBnvzHWrmkZFxGgr4HdyFgelzgi06otLuQ==",
+ "devOptional": true,
"license": "ISC",
- "optional": true,
- "peer": true,
"dependencies": {
"robust-predicates": "^3.0.2"
}
@@ -19286,6 +19544,13 @@
"integrity": "sha512-mgjZAz7Jyx1SRCwEpy9wefDS7GvNPazLthHg8eQMJ76wBdGQQDW33TCrUTvQ4wzpmOrv2zrFoD3oNufMdyMpog==",
"license": "ISC"
},
+ "node_modules/elkjs": {
+ "version": "0.11.1",
+ "resolved": "https://registry.npmjs.org/elkjs/-/elkjs-0.11.1.tgz",
+ "integrity": "sha512-zxxR9k+rx5ktMwT/FwyLdPCrq7xN6e4VGGHH8hA01vVYKjTFik7nHOxBnAYtrgYUB1RpAiLvA1/U2YraWxyKKg==",
+ "devOptional": true,
+ "license": "EPL-2.0"
+ },
"node_modules/emittery": {
"version": "0.13.1",
"resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz",
@@ -20460,6 +20725,13 @@
],
"license": "MIT"
},
+ "node_modules/fast-decode-uri-component": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/fast-decode-uri-component/-/fast-decode-uri-component-1.0.1.tgz",
+ "integrity": "sha512-WKgKWg5eUxvRZGwW8FvfbaH7AXSh2cL+3j5fMGzUMCxWBJ3dV3a7Wz8y2f/uQ0e3B6WmodD3oS54jTQ9HVTIIg==",
+ "devOptional": true,
+ "license": "MIT"
+ },
"node_modules/fast-deep-equal": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
@@ -20510,6 +20782,16 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/fast-querystring": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/fast-querystring/-/fast-querystring-1.1.2.tgz",
+ "integrity": "sha512-g6KuKWmFXc0fID8WWH0jit4g0AGBoJhCkJMb1RmbsSEUNvQ+ZC8D6CUZ+GtF8nMzSPXnhiePyyqqipzNNEnHjg==",
+ "devOptional": true,
+ "license": "MIT",
+ "dependencies": {
+ "fast-decode-uri-component": "^1.0.1"
+ }
+ },
"node_modules/fast-redact": {
"version": "3.5.0",
"resolved": "https://registry.npmjs.org/fast-redact/-/fast-redact-3.5.0.tgz",
@@ -20898,6 +21180,21 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/find-my-way": {
+ "version": "9.7.0",
+ "resolved": "https://registry.npmjs.org/find-my-way/-/find-my-way-9.7.0.tgz",
+ "integrity": "sha512-f2JHn75x2JlwUwLenZypgczR7YWMb/uO9BvUXtus+JMgkbIkLADd38cI4EiV+OQqrGo1Zlq6V8wnqMJ8e62wUQ==",
+ "devOptional": true,
+ "license": "MIT",
+ "dependencies": {
+ "fast-deep-equal": "^3.1.3",
+ "fast-querystring": "^1.0.0",
+ "safe-regex2": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=20"
+ }
+ },
"node_modules/find-up": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
@@ -21768,9 +22065,9 @@
"license": "ISC"
},
"node_modules/grammex": {
- "version": "3.1.12",
- "resolved": "https://registry.npmjs.org/grammex/-/grammex-3.1.12.tgz",
- "integrity": "sha512-6ufJOsSA7LcQehIJNCO7HIBykfM7DXQual0Ny780/DEcJIpBlHRvcqEBWGPYd7hrXL2GJ3oJI1MIhaXjWmLQOQ==",
+ "version": "3.1.13",
+ "resolved": "https://registry.npmjs.org/grammex/-/grammex-3.1.13.tgz",
+ "integrity": "sha512-LnPnhOBLEJEVKS8WFDVaA397L9Kq55Q9oSITJiVLHVdhAclfUkWzQv74KhvZHKL2Q09Pb1XdsrOsZ4LfTFFTEg==",
"devOptional": true,
"license": "MIT"
},
@@ -22645,9 +22942,8 @@
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz",
"integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==",
+ "devOptional": true,
"license": "ISC",
- "optional": true,
- "peer": true,
"engines": {
"node": ">=12"
}
@@ -29188,17 +29484,17 @@
}
},
"node_modules/prisma": {
- "version": "7.8.0",
- "resolved": "https://registry.npmjs.org/prisma/-/prisma-7.8.0.tgz",
- "integrity": "sha512-yfN4yrw7HV9kEJhoy1+jgah0jafEIQsf7uWouSsM8MvJtlubsk+kM7AIBWZ8+GJl74Yj3c+nbYqBkMOxtsZ3Lw==",
+ "version": "7.9.1",
+ "resolved": "https://registry.npmjs.org/prisma/-/prisma-7.9.1.tgz",
+ "integrity": "sha512-aPqePoZIqwlAchbgbFDO/wHqGB+7H1nj9gaM+OsL9h77S5S3TnLd9BgD3LnoeDikULo7cl2HSUrEyQ55Z7DYbg==",
"devOptional": true,
"hasInstallScript": true,
"license": "Apache-2.0",
"dependencies": {
- "@prisma/config": "7.8.0",
- "@prisma/dev": "0.24.3",
- "@prisma/engines": "7.8.0",
- "@prisma/studio-core": "0.27.3",
+ "@prisma/config": "7.9.1",
+ "@prisma/dev": "0.24.17",
+ "@prisma/engines": "7.9.1",
+ "@prisma/studio-core": "0.33.0",
"mysql2": "3.15.3",
"postgres": "3.4.7"
},
@@ -30152,6 +30448,16 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/ret": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/ret/-/ret-0.5.0.tgz",
+ "integrity": "sha512-I1XxrZSQ+oErkRR4jYbAyEEu2I0avBvvMM5JN+6EBprOGRCs63ENqZ3vjavq8fBw2+62G5LF5XelKwuJpcvcxw==",
+ "devOptional": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ }
+ },
"node_modules/retry": {
"version": "0.13.1",
"resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz",
@@ -30183,9 +30489,8 @@
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.3.tgz",
"integrity": "sha512-NS3levdsRIUOmiJ8FZWCP7LG3QpJyrs/TE0Zpf1yvZu8cAJJ6QMW92H1c7kWpdIHo8RvmLxN/o2JXTKHp74lUA==",
- "license": "Unlicense",
- "optional": true,
- "peer": true
+ "devOptional": true,
+ "license": "Unlicense"
},
"node_modules/rolldown": {
"version": "1.0.0-rc.4",
@@ -30532,6 +30837,29 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/safe-regex2": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/safe-regex2/-/safe-regex2-5.1.1.tgz",
+ "integrity": "sha512-mOSBvHGDZMuIEZMdOz/aCEYDCv0E7nfcNsIhUF+/P+xC7Hyf3FkvymqgPbg9D1EdSGu+uKbJgy09K/RKKc7kJA==",
+ "devOptional": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/fastify"
+ },
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/fastify"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "ret": "~0.5.0"
+ },
+ "bin": {
+ "safe-regex2": "bin/safe-regex2.js"
+ }
+ },
"node_modules/safer-buffer": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
@@ -34374,9 +34702,9 @@
"license": "MIT"
},
"node_modules/valibot": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/valibot/-/valibot-1.2.0.tgz",
- "integrity": "sha512-mm1rxUsmOxzrwnX5arGS+U4T25RdvpPjPN4yR0u9pUBov9+zGVtO84tif1eY4r6zWxVxu3KzIyknJy3rxfRZZg==",
+ "version": "1.4.2",
+ "resolved": "https://registry.npmjs.org/valibot/-/valibot-1.4.2.tgz",
+ "integrity": "sha512-gjdCvJ6d3RyHAneqxMYMW9QMCwYMb3jpOO0IyHZV1bnRHFBHrX3VkIILt5XYR0WhwHiH7Mty8ovuPZ/O3gamrg==",
"devOptional": true,
"license": "MIT",
"peerDependencies": {
diff --git a/package.json b/package.json
index c2bc56d4a..194ee3ce3 100644
--- a/package.json
+++ b/package.json
@@ -87,8 +87,8 @@
"@nestjs/serve-static": "5.0.5",
"@nestjs/throttler": "6.5.0",
"@openrouter/ai-sdk-provider": "3.0.0",
- "@prisma/adapter-pg": "7.8.0",
- "@prisma/client": "7.8.0",
+ "@prisma/adapter-pg": "7.9.1",
+ "@prisma/client": "7.9.1",
"@simplewebauthn/browser": "13.3.0",
"@simplewebauthn/server": "13.3.1",
"ai": "7.0.37",
@@ -171,7 +171,7 @@
"@nx/storybook": "23.0.2",
"@nx/web": "23.0.2",
"@nx/workspace": "23.0.2",
- "@prisma/config": "7.8.0",
+ "@prisma/config": "7.9.1",
"@schematics/angular": "21.2.6",
"@storybook/addon-docs": "10.1.10",
"@storybook/addon-themes": "10.1.10",
@@ -201,7 +201,7 @@
"nx": "23.0.2",
"prettier": "3.9.6",
"prettier-plugin-organize-attributes": "1.0.0",
- "prisma": "7.8.0",
+ "prisma": "7.9.1",
"react": "18.2.0",
"react-dom": "18.2.0",
"replace-in-file": "8.4.0",
From 179be2f564c3a25691f6b1a8597e9ee0f820d7f5 Mon Sep 17 00:00:00 2001
From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com>
Date: Sat, 1 Aug 2026 10:21:28 +0200
Subject: [PATCH 37/86] Task/add portfolio summary tests (#7458)
Add portfolio summary tests
---
.../app/portfolio/portfolio.service.spec.ts | 86 ++++++++++++++++++-
1 file changed, 85 insertions(+), 1 deletion(-)
diff --git a/apps/api/src/app/portfolio/portfolio.service.spec.ts b/apps/api/src/app/portfolio/portfolio.service.spec.ts
index d85258f7e..699e79e0d 100644
--- a/apps/api/src/app/portfolio/portfolio.service.spec.ts
+++ b/apps/api/src/app/portfolio/portfolio.service.spec.ts
@@ -1,6 +1,7 @@
import { AccountService } from '@ghostfolio/api/app/account/account.service';
import { CashDetails } from '@ghostfolio/api/app/account/interfaces/cash-details.interface';
import { ActivitiesService } from '@ghostfolio/api/app/activities/activities.service';
+import { PortfolioCalculator } from '@ghostfolio/api/app/portfolio/calculator/portfolio-calculator';
import { userDummyData } from '@ghostfolio/api/app/portfolio/calculator/portfolio-calculator-test-utils';
import { PortfolioCalculatorFactory } from '@ghostfolio/api/app/portfolio/calculator/portfolio-calculator.factory';
import { UserService } from '@ghostfolio/api/app/user/user.service';
@@ -11,7 +12,10 @@ import { ImpersonationService } from '@ghostfolio/api/services/impersonation/imp
import { SymbolProfileService } from '@ghostfolio/api/services/symbol-profile/symbol-profile.service';
import { UNKNOWN_KEY } from '@ghostfolio/common/config';
import { parseDate } from '@ghostfolio/common/helper';
-import { AssetProfileIdentifier } from '@ghostfolio/common/interfaces';
+import {
+ AssetProfileIdentifier,
+ PortfolioSummary
+} from '@ghostfolio/common/interfaces';
import { Account, DataSource } from '@prisma/client';
import { Big } from 'big.js';
@@ -338,6 +342,86 @@ describe('PortfolioService', () => {
});
});
+ describe('getSummary', () => {
+ const getSummary = (args: object) => {
+ return (
+ portfolioService as unknown as {
+ getSummary: (aArgs: object) => Promise;
+ }
+ ).getSummary(args);
+ };
+
+ function createPortfolioCalculator() {
+ return {
+ getDividendInBaseCurrency: jest.fn().mockResolvedValue(new Big(0)),
+ getFeesInBaseCurrency: jest.fn().mockResolvedValue(new Big(0)),
+ getInterestInBaseCurrency: jest.fn().mockResolvedValue(new Big(0)),
+ getLiabilitiesInBaseCurrency: jest.fn().mockResolvedValue(new Big(0)),
+ getSnapshot: jest.fn().mockResolvedValue({
+ currentValueInBaseCurrency: new Big(3000),
+ totalCashInBaseCurrency: new Big(1000),
+ totalInvestment: new Big(2000),
+ totalInvestmentWithCurrencyEffect: new Big(2000)
+ }),
+ getStartDate: jest.fn().mockReturnValue(parseDate('2024-01-01'))
+ } as unknown as PortfolioCalculator;
+ }
+
+ beforeEach(() => {
+ jest
+ .spyOn(activitiesService, 'getActivities')
+ .mockResolvedValue({ activities: [], count: 0 });
+
+ jest
+ .spyOn(impersonationService, 'validateImpersonationId')
+ .mockResolvedValue(null);
+
+ jest.spyOn(portfolioService, 'getPerformance').mockResolvedValue({
+ performance: {
+ currentValueInBaseCurrency: 3000,
+ netPerformance: 500,
+ netPerformancePercentage: 0.2,
+ netPerformancePercentageWithCurrencyEffect: 0.2,
+ netPerformanceWithCurrencyEffect: 500
+ }
+ } as Awaited>);
+
+ jest.spyOn(userService, 'user').mockResolvedValue({
+ id: userDummyData.id,
+ settings: {
+ settings: {
+ baseCurrency: 'CHF'
+ }
+ }
+ } as unknown as Awaited>);
+ });
+
+ it('should derive the cash and net worth from the account balance when there are no excluded accounts, no emergency fund and no liabilities', async () => {
+ jest.spyOn(accountService, 'getCashDetails').mockResolvedValue({
+ accounts: [],
+ balanceInBaseCurrency: 1000
+ });
+
+ const portfolioCalculator = createPortfolioCalculator();
+
+ const summary = await getSummary({
+ portfolioCalculator,
+ balanceInBaseCurrency: 1000,
+ emergencyFundHoldingsValueInBaseCurrency: 0,
+ filteredValueInBaseCurrency: new Big(3000),
+ impersonationId: undefined,
+ userCurrency: 'CHF',
+ userId: userDummyData.id
+ });
+
+ expect(summary.cash).toBe(1000);
+ expect(summary.emergencyFund.total).toBe(0);
+ expect(summary.excludedAccountsAndActivities).toBe(0);
+ expect(summary.totalAssetsInBaseCurrency).toBe(3000);
+ expect(summary.totalValueInBaseCurrency).toBe(3000);
+ });
+ });
+
describe('getValueOfAccountsAndPlatforms', () => {
const getValueOfAccountsAndPlatforms = (args: object) => {
return (
From 5f47a2f2a77d7ca0793ca68917b6ed0390cec9c2 Mon Sep 17 00:00:00 2001
From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com>
Date: Sat, 1 Aug 2026 10:26:28 +0200
Subject: [PATCH 38/86] Task/improve export functionality (#7499)
* Improve export functionality
* Update changelog
---
CHANGELOG.md | 5 ++++
apps/api/src/app/export/export.service.ts | 9 +++++++-
.../user-account-settings.component.ts | 4 ----
.../activities/activities-page.component.ts | 6 +----
libs/ui/src/lib/services/data.service.ts | 23 +++++++++++++++----
5 files changed, 33 insertions(+), 14 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 0512ad5bf..c242cac5a 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -9,9 +9,14 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
### Changed
+- Harmonized the data format of the export functionality
- Improved the language localization for German (`de`)
- Upgraded `prisma` from version `7.8.0` to `7.9.1`
+### Fixed
+
+- Fixed the export functionality to only include the accounts of the exported activities if a filter is applied
+
## 3.38.0 - 2026-07-31
### Added
diff --git a/apps/api/src/app/export/export.service.ts b/apps/api/src/app/export/export.service.ts
index 6e920553b..ec9b89a81 100644
--- a/apps/api/src/app/export/export.service.ts
+++ b/apps/api/src/app/export/export.service.ts
@@ -73,6 +73,13 @@ export class ExportService {
};
}
+ const isFilteredExport =
+ activityIds?.length > 0 ||
+ activityTypes?.length > 0 ||
+ filters?.length > 0 ||
+ !!endDate ||
+ !!startDate;
+
const accounts = (
await this.accountService.accounts({
where,
@@ -87,7 +94,7 @@ export class ExportService {
})
)
.filter(({ id }) => {
- return activityIds?.length > 0
+ return isFilteredExport
? activities.some(({ accountId }) => {
return accountId === id;
})
diff --git a/apps/client/src/app/components/user-account-settings/user-account-settings.component.ts b/apps/client/src/app/components/user-account-settings/user-account-settings.component.ts
index a556a68d6..0a049a7ae 100644
--- a/apps/client/src/app/components/user-account-settings/user-account-settings.component.ts
+++ b/apps/client/src/app/components/user-account-settings/user-account-settings.component.ts
@@ -266,10 +266,6 @@ export class GfUserAccountSettingsComponent implements OnInit {
.fetchExport()
.pipe(takeUntilDestroyed(this.destroyRef))
.subscribe((data) => {
- for (const activity of data.activities) {
- delete (activity as Omit & { id?: string }).id;
- }
-
downloadAsFile({
content: data,
fileName: `ghostfolio-export-${format(
diff --git a/apps/client/src/app/pages/portfolio/activities/activities-page.component.ts b/apps/client/src/app/pages/portfolio/activities/activities-page.component.ts
index 87da2fb84..0ff4168ac 100644
--- a/apps/client/src/app/pages/portfolio/activities/activities-page.component.ts
+++ b/apps/client/src/app/pages/portfolio/activities/activities-page.component.ts
@@ -177,10 +177,6 @@ export class GfActivitiesPageComponent implements OnInit {
.fetchExport(fetchExportParams)
.pipe(takeUntilDestroyed(this.destroyRef))
.subscribe((data) => {
- for (const activity of data.activities) {
- delete (activity as Omit & { id?: string }).id;
- }
-
downloadAsFile({
content: data,
fileName: `ghostfolio-export-${format(
@@ -194,7 +190,7 @@ export class GfActivitiesPageComponent implements OnInit {
protected onExportDrafts(activityIds?: string[]) {
this.dataService
- .fetchExport({ activityIds })
+ .fetchExport({ activityIds, withActivityIds: true })
.pipe(takeUntilDestroyed(this.destroyRef))
.subscribe((data) => {
downloadAsFile({
diff --git a/libs/ui/src/lib/services/data.service.ts b/libs/ui/src/lib/services/data.service.ts
index 870719702..bc1512550 100644
--- a/libs/ui/src/lib/services/data.service.ts
+++ b/libs/ui/src/lib/services/data.service.ts
@@ -476,12 +476,14 @@ export class DataService {
activityIds,
activityTypes,
filters,
- range
+ range,
+ withActivityIds = false
}: {
activityIds?: string[];
activityTypes?: string[];
filters?: Filter[];
range?: DateRange;
+ withActivityIds?: boolean;
} = {}) {
let params = this.buildFiltersAsQueryParams({ filters });
@@ -497,9 +499,22 @@ export class DataService {
params = params.append('range', range);
}
- return this.http.get('/api/v1/export', {
- params
- });
+ return this.http
+ .get('/api/v1/export', {
+ params
+ })
+ .pipe(
+ map((exportResponse) => {
+ if (!withActivityIds) {
+ for (const activity of exportResponse.activities) {
+ delete (activity as Omit & { id?: string })
+ .id;
+ }
+ }
+
+ return exportResponse;
+ })
+ );
}
public fetchHoldingDetail({
From 5092316609b2577ffa2d6bfaaeeeb9eacddf65fa Mon Sep 17 00:00:00 2001
From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com>
Date: Sat, 1 Aug 2026 10:40:18 +0200
Subject: [PATCH 39/86] Bugfix/scroll behavior of page content behind open
dialog (#7500)
* Fix scroll behavior of page content behind open dialog
* Update changelog
---
CHANGELOG.md | 1 +
apps/client/src/index.html | 2 +-
2 files changed, 2 insertions(+), 1 deletion(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index c242cac5a..8c47efb2e 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -15,6 +15,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
### Fixed
+- Fixed the scroll behavior of the page content behind an open dialog
- Fixed the export functionality to only include the accounts of the exported activities if a filter is applied
## 3.38.0 - 2026-07-31
diff --git a/apps/client/src/index.html b/apps/client/src/index.html
index 61953bca8..105e7bcae 100644
--- a/apps/client/src/index.html
+++ b/apps/client/src/index.html
@@ -1,5 +1,5 @@
-
+
Ghostfolio
From 5e9ac0169e912d1480ca9a5f6db06b3f52fee8fb Mon Sep 17 00:00:00 2001
From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com>
Date: Sat, 1 Aug 2026 10:41:01 +0200
Subject: [PATCH 40/86] Task/remove deprecated firstOrderDate from portfolio
performance endpoint response (#7483)
* Remove deprecated firstOrderDate
* Update changelog
---
CHANGELOG.md | 1 +
apps/api/src/app/portfolio/portfolio.service.ts | 2 --
.../responses/portfolio-performance-response.interface.ts | 6 ------
3 files changed, 1 insertion(+), 8 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 8c47efb2e..b80a682c4 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -10,6 +10,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
### Changed
- Harmonized the data format of the export functionality
+- Removed the deprecated `firstOrderDate` attribute from the `GET api/v2/portfolio/performance` endpoint response
- Improved the language localization for German (`de`)
- Upgraded `prisma` from version `7.8.0` to `7.9.1`
diff --git a/apps/api/src/app/portfolio/portfolio.service.ts b/apps/api/src/app/portfolio/portfolio.service.ts
index d1aff3811..0a69cf32d 100644
--- a/apps/api/src/app/portfolio/portfolio.service.ts
+++ b/apps/api/src/app/portfolio/portfolio.service.ts
@@ -1035,7 +1035,6 @@ export class PortfolioService {
return {
chart: [],
dateOfFirstActivity: undefined,
- firstOrderDate: undefined,
hasErrors: false,
performance: {
currentNetWorth: 0,
@@ -1093,7 +1092,6 @@ export class PortfolioService {
errors,
hasErrors,
dateOfFirstActivity: parseDate(historicalData[0]?.date),
- firstOrderDate: parseDate(historicalData[0]?.date),
performance: {
netPerformance,
netPerformanceWithCurrencyEffect,
diff --git a/libs/common/src/lib/interfaces/responses/portfolio-performance-response.interface.ts b/libs/common/src/lib/interfaces/responses/portfolio-performance-response.interface.ts
index 104302de3..8177bd533 100644
--- a/libs/common/src/lib/interfaces/responses/portfolio-performance-response.interface.ts
+++ b/libs/common/src/lib/interfaces/responses/portfolio-performance-response.interface.ts
@@ -5,11 +5,5 @@ import { ResponseError } from './errors.interface';
export interface PortfolioPerformanceResponse extends ResponseError {
chart?: HistoricalDataItem[];
dateOfFirstActivity: Date;
-
- /**
- * @deprecated Use `dateOfFirstActivity` instead
- */
- firstOrderDate: Date;
-
performance: PortfolioPerformance;
}
From 263e064fd6b1c55cc547a071023f4dced6185037 Mon Sep 17 00:00:00 2001
From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com>
Date: Sat, 1 Aug 2026 14:27:47 +0200
Subject: [PATCH 41/86] Task/remove deprecated attribute isExcluded from
account (#7253)
* Remove deprecated attribute isExcluded from account
* Update changelog
---
CHANGELOG.md | 1 +
apps/api/src/app/export/export.service.ts | 2 --
apps/api/src/app/import/import.service.ts | 21 +++++++++++++++++--
.../roai/portfolio-calculator-cash.spec.ts | 3 ---
.../app/portfolio/portfolio.service.spec.ts | 3 ---
apps/api/src/helper/account.helper.ts | 1 -
.../pages/accounts/accounts-page.component.ts | 3 ---
...eate-or-update-account-dialog.component.ts | 4 ----
.../create-or-update-account-dialog.html | 5 -----
.../dtos/create-account-with-balances.dto.ts | 10 ++++++++-
.../common/src/lib/dtos/create-account.dto.ts | 8 -------
.../common/src/lib/dtos/update-account.dto.ts | 8 -------
libs/common/src/lib/helper.ts | 6 +-----
.../accounts-table.component.stories.ts | 3 ---
.../activities-table.component.stories.ts | 5 -----
.../migration.sql | 21 +++++++++++++++++++
prisma/schema.prisma | 3 ---
17 files changed, 51 insertions(+), 56 deletions(-)
create mode 100644 prisma/migrations/20260801103609_removed_is_excluded_from_account/migration.sql
diff --git a/CHANGELOG.md b/CHANGELOG.md
index b80a682c4..72a0cc95f 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -11,6 +11,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- Harmonized the data format of the export functionality
- Removed the deprecated `firstOrderDate` attribute from the `GET api/v2/portfolio/performance` endpoint response
+- Removed the deprecated `isExcluded` attribute of the account in favor of the _Exclude from Analysis_ tag including a data migration
- Improved the language localization for German (`de`)
- Upgraded `prisma` from version `7.8.0` to `7.9.1`
diff --git a/apps/api/src/app/export/export.service.ts b/apps/api/src/app/export/export.service.ts
index ec9b89a81..02ccb46b3 100644
--- a/apps/api/src/app/export/export.service.ts
+++ b/apps/api/src/app/export/export.service.ts
@@ -107,7 +107,6 @@ export class ExportService {
comment,
currency,
id,
- isExcluded,
name,
platform,
platformId,
@@ -125,7 +124,6 @@ export class ExportService {
comment,
currency,
id,
- isExcluded,
name,
platformId,
tags: tags.map(({ id: tagId }) => {
diff --git a/apps/api/src/app/import/import.service.ts b/apps/api/src/app/import/import.service.ts
index b706baa8d..b8579b795 100644
--- a/apps/api/src/app/import/import.service.ts
+++ b/apps/api/src/app/import/import.service.ts
@@ -9,7 +9,10 @@ import { MarketDataService } from '@ghostfolio/api/services/market-data/market-d
import { DataGatheringService } from '@ghostfolio/api/services/queues/data-gathering/data-gathering.service';
import { SymbolProfileService } from '@ghostfolio/api/services/symbol-profile/symbol-profile.service';
import { TagService } from '@ghostfolio/api/services/tag/tag.service';
-import { DATA_GATHERING_QUEUE_PRIORITY_HIGH } from '@ghostfolio/common/config';
+import {
+ DATA_GATHERING_QUEUE_PRIORITY_HIGH,
+ TAG_ID_EXCLUDE_FROM_ANALYSIS
+} from '@ghostfolio/common/config';
import { CreateAssetProfileDto, CreateOrderDto } from '@ghostfolio/common/dtos';
import {
getAssetProfileIdentifier,
@@ -272,7 +275,11 @@ export class ImportService {
// If there is no account or if the account belongs to a different user then create a new account
if (!accountWithSameId || accountWithSameId.userId !== user.id) {
- const account = omit(accountWithBalances, ['balances', 'tags']);
+ const account = omit(accountWithBalances, [
+ 'balances',
+ 'isExcluded',
+ 'tags'
+ ]);
let oldAccountId: string;
const platformId = account.platformId;
@@ -292,6 +299,16 @@ export class ImportService {
return existingTagIds.has(tagId);
});
+ // Map the legacy isExcluded attribute of old export files to
+ // the "Exclude from Analysis" tag
+ if (
+ accountWithBalances.isExcluded &&
+ existingTagIds.has(TAG_ID_EXCLUDE_FROM_ANALYSIS) &&
+ !tagIds.includes(TAG_ID_EXCLUDE_FROM_ANALYSIS)
+ ) {
+ tagIds.push(TAG_ID_EXCLUDE_FROM_ANALYSIS);
+ }
+
let accountObject: Prisma.AccountCreateInput = {
...account,
balances: {
diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-cash.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-cash.spec.ts
index 1fc705b46..aaa2f63cf 100644
--- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-cash.spec.ts
+++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-cash.spec.ts
@@ -186,7 +186,6 @@ describe('PortfolioCalculator', () => {
createdAt: parseDate('2023-12-31'),
currency: 'USD',
id: accountId,
- isExcluded: false,
name: 'USD',
platformId: null,
updatedAt: parseDate('2023-12-31'),
@@ -362,7 +361,6 @@ describe('PortfolioCalculator', () => {
createdAt: parseDate('2023-12-31'),
currency: 'CHF',
id: accountId,
- isExcluded: false,
name: 'CHF',
platformId: null,
updatedAt: parseDate('2023-12-31'),
@@ -494,7 +492,6 @@ describe('PortfolioCalculator', () => {
createdAt: parseDate('2023-12-31'),
currency: 'CHF',
id: accountId,
- isExcluded: false,
name: 'CHF',
platformId: null,
updatedAt: parseDate('2023-12-31'),
diff --git a/apps/api/src/app/portfolio/portfolio.service.spec.ts b/apps/api/src/app/portfolio/portfolio.service.spec.ts
index 699e79e0d..97635553f 100644
--- a/apps/api/src/app/portfolio/portfolio.service.spec.ts
+++ b/apps/api/src/app/portfolio/portfolio.service.spec.ts
@@ -192,7 +192,6 @@ describe('PortfolioService', () => {
createdAt: parseDate('2024-01-01'),
currency: 'USD',
id: randomUUID(),
- isExcluded: false,
name: 'USD',
platformId: null,
updatedAt: parseDate('2024-01-01'),
@@ -226,7 +225,6 @@ describe('PortfolioService', () => {
createdAt: parseDate('2024-01-01'),
currency: 'USD',
id: accountId,
- isExcluded: false,
name: 'USD',
platformId: null,
updatedAt: parseDate('2024-01-01'),
@@ -438,7 +436,6 @@ describe('PortfolioService', () => {
balance: 100,
currency: 'USD',
id: randomUUID(),
- isExcluded: false,
name: 'Account 1',
platform: { name: 'Platform 1' },
platformId: randomUUID()
diff --git a/apps/api/src/helper/account.helper.ts b/apps/api/src/helper/account.helper.ts
index 8e7520d0a..da0762ba5 100644
--- a/apps/api/src/helper/account.helper.ts
+++ b/apps/api/src/helper/account.helper.ts
@@ -4,7 +4,6 @@ import { Prisma } from '@prisma/client';
import { endOfToday, isAfter } from 'date-fns';
export const WHERE_ACCOUNT_NOT_EXCLUDED: Prisma.AccountWhereInput = {
- isExcluded: false,
tags: {
none: {
tagId: TAG_ID_EXCLUDE_FROM_ANALYSIS
diff --git a/apps/client/src/app/pages/accounts/accounts-page.component.ts b/apps/client/src/app/pages/accounts/accounts-page.component.ts
index 1cf0e44a7..291a7f3f9 100644
--- a/apps/client/src/app/pages/accounts/accounts-page.component.ts
+++ b/apps/client/src/app/pages/accounts/accounts-page.component.ts
@@ -191,7 +191,6 @@ export class GfAccountsPageComponent implements OnInit {
comment,
currency,
id,
- isExcluded,
name,
platformId,
tags
@@ -206,7 +205,6 @@ export class GfAccountsPageComponent implements OnInit {
comment,
currency,
id,
- isExcluded,
name,
platformId,
tags
@@ -288,7 +286,6 @@ export class GfAccountsPageComponent implements OnInit {
comment: null,
currency: this.user?.settings?.baseCurrency ?? null,
id: null,
- isExcluded: false,
name: null,
platformId: null,
tags: []
diff --git a/apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.component.ts b/apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.component.ts
index de0172eac..8b0536ebf 100644
--- a/apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.component.ts
+++ b/apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.component.ts
@@ -27,7 +27,6 @@ import {
} from '@angular/forms';
import { MatAutocompleteModule } from '@angular/material/autocomplete';
import { MatButtonModule } from '@angular/material/button';
-import { MatCheckboxModule } from '@angular/material/checkbox';
import {
MAT_DIALOG_DATA,
MatDialogModule,
@@ -51,7 +50,6 @@ import { CreateOrUpdateAccountDialogParams } from './interfaces/interfaces';
GfTagsSelectorComponent,
MatAutocompleteModule,
MatButtonModule,
- MatCheckboxModule,
MatDialogModule,
MatFormFieldModule,
MatInputModule,
@@ -106,7 +104,6 @@ export class GfCreateOrUpdateAccountDialogComponent {
balance: [this.data.account.balance, Validators.required],
comment: [this.data.account.comment],
currency: [this.data.account.currency, Validators.required],
- isExcluded: [this.data.account.isExcluded],
name: [this.data.account.name, Validators.required],
platformId: [null, this.autocompleteObjectValidator()],
tags: [
@@ -204,7 +201,6 @@ export class GfCreateOrUpdateAccountDialogComponent {
comment: this.accountForm.get('comment')?.value ?? null,
currency: this.accountForm.get('currency')?.value,
id: this.accountForm.get('accountId')?.value,
- isExcluded: this.accountForm.get('isExcluded')?.value,
name: this.accountForm.get('name')?.value,
platformId: this.accountForm.get('platformId')?.value?.id ?? null,
tags: this.accountForm
diff --git a/apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html b/apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html
index d5743313d..4e4c62b6f 100644
--- a/apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html
+++ b/apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html
@@ -92,11 +92,6 @@
[tagsAvailable]="tagsAvailable"
/>
-
- Exclude from Analysis
-
@if (data.account.id) {
diff --git a/libs/common/src/lib/dtos/create-account-with-balances.dto.ts b/libs/common/src/lib/dtos/create-account-with-balances.dto.ts
index 2d1d3ed2a..8fc6f78e4 100644
--- a/libs/common/src/lib/dtos/create-account-with-balances.dto.ts
+++ b/libs/common/src/lib/dtos/create-account-with-balances.dto.ts
@@ -1,6 +1,6 @@
import { AccountBalance } from '@ghostfolio/common/interfaces';
-import { IsArray, IsOptional } from 'class-validator';
+import { IsArray, IsBoolean, IsOptional } from 'class-validator';
import { CreateAccountDto } from './create-account.dto';
@@ -8,4 +8,12 @@ export class CreateAccountWithBalancesDto extends CreateAccountDto {
@IsArray()
@IsOptional()
balances?: AccountBalance[];
+
+ /**
+ * @deprecated Accepted for backward compatibility with old export files
+ * and mapped to the "Exclude from Analysis" tag (`TAG_ID_EXCLUDE_FROM_ANALYSIS`)
+ */
+ @IsBoolean()
+ @IsOptional()
+ isExcluded?: boolean;
}
diff --git a/libs/common/src/lib/dtos/create-account.dto.ts b/libs/common/src/lib/dtos/create-account.dto.ts
index b04193020..e4a0c64fe 100644
--- a/libs/common/src/lib/dtos/create-account.dto.ts
+++ b/libs/common/src/lib/dtos/create-account.dto.ts
@@ -4,7 +4,6 @@ import { Transform, TransformFnParams } from 'class-transformer';
import {
ArrayUnique,
IsArray,
- IsBoolean,
IsNumber,
IsOptional,
IsString,
@@ -30,13 +29,6 @@ export class CreateAccountDto {
@IsString()
id?: string;
- /**
- * @deprecated Use the "Exclude from Analysis" tag (`TAG_ID_EXCLUDE_FROM_ANALYSIS`) instead
- */
- @IsBoolean()
- @IsOptional()
- isExcluded?: boolean;
-
@IsString()
name: string;
diff --git a/libs/common/src/lib/dtos/update-account.dto.ts b/libs/common/src/lib/dtos/update-account.dto.ts
index 7a33da2df..a6a3e6ac6 100644
--- a/libs/common/src/lib/dtos/update-account.dto.ts
+++ b/libs/common/src/lib/dtos/update-account.dto.ts
@@ -4,7 +4,6 @@ import { Transform, TransformFnParams } from 'class-transformer';
import {
ArrayUnique,
IsArray,
- IsBoolean,
IsNumber,
IsOptional,
IsString,
@@ -29,13 +28,6 @@ export class UpdateAccountDto {
@IsString()
id: string;
- /**
- * @deprecated Use the "Exclude from Analysis" tag (`TAG_ID_EXCLUDE_FROM_ANALYSIS`) instead
- */
- @IsBoolean()
- @IsOptional()
- isExcluded?: boolean;
-
@IsString()
name: string;
diff --git a/libs/common/src/lib/helper.ts b/libs/common/src/lib/helper.ts
index 98f097b44..db1d3c2a2 100644
--- a/libs/common/src/lib/helper.ts
+++ b/libs/common/src/lib/helper.ts
@@ -456,12 +456,8 @@ export function interpolate(template: string, context: any) {
});
}
-export function isAccountExcluded(account: {
- isExcluded: boolean;
- tags?: { id: string }[];
-}) {
+export function isAccountExcluded(account: { tags?: { id: string }[] }) {
return (
- account.isExcluded ||
account.tags?.some(({ id }) => {
return id === TAG_ID_EXCLUDE_FROM_ANALYSIS;
}) === true
diff --git a/libs/ui/src/lib/accounts-table/accounts-table.component.stories.ts b/libs/ui/src/lib/accounts-table/accounts-table.component.stories.ts
index 62a01164f..a38ca826c 100644
--- a/libs/ui/src/lib/accounts-table/accounts-table.component.stories.ts
+++ b/libs/ui/src/lib/accounts-table/accounts-table.component.stories.ts
@@ -24,7 +24,6 @@ const accounts = [
createdAt: new Date('2025-06-01T06:52:49.063Z'),
currency: 'USD',
id: '460d7401-ca43-4ed4-b08e-349f1822e9db',
- isExcluded: false,
name: 'Coinbase Account',
platform: {
id: '8dc24b88-bb92-4152-af25-fe6a31643e26',
@@ -46,7 +45,6 @@ const accounts = [
createdAt: new Date('2025-06-01T06:48:53.055Z'),
currency: 'USD',
id: '6d773e31-0583-4c85-a247-e69870b4f1ee',
- isExcluded: false,
name: 'Private Banking Account',
platform: {
id: '43e8fcd1-5b79-4100-b678-d2229bd1660d',
@@ -68,7 +66,6 @@ const accounts = [
createdAt: new Date('2025-05-31T13:00:13.940Z'),
currency: 'USD',
id: '776bd1e9-b2f6-4f7e-933d-18756c2f0625',
- isExcluded: false,
name: 'Trading Account',
platform: {
id: '9da3a8a7-4795-43e3-a6db-ccb914189737',
diff --git a/libs/ui/src/lib/activities-table/activities-table.component.stories.ts b/libs/ui/src/lib/activities-table/activities-table.component.stories.ts
index 057747cf1..0136545cf 100644
--- a/libs/ui/src/lib/activities-table/activities-table.component.stories.ts
+++ b/libs/ui/src/lib/activities-table/activities-table.component.stories.ts
@@ -44,7 +44,6 @@ const activities: Activity[] = [
createdAt: new Date('2025-05-31T13:00:13.940Z'),
currency: 'USD',
id: '776bd1e9-b2f6-4f7e-933d-18756c2f0625',
- isExcluded: false,
name: 'Trading Account',
platformId: '9da3a8a7-4795-43e3-a6db-ccb914189737',
updatedAt: new Date('2025-06-01T06:53:10.569Z'),
@@ -111,7 +110,6 @@ const activities: Activity[] = [
createdAt: new Date('2025-05-31T13:00:13.940Z'),
currency: 'USD',
id: '776bd1e9-b2f6-4f7e-933d-18756c2f0625',
- isExcluded: false,
name: 'Trading Account',
platformId: '9da3a8a7-4795-43e3-a6db-ccb914189737',
updatedAt: new Date('2025-06-01T06:53:10.569Z'),
@@ -178,7 +176,6 @@ const activities: Activity[] = [
createdAt: new Date('2025-05-31T13:00:13.940Z'),
currency: 'USD',
id: '776bd1e9-b2f6-4f7e-933d-18756c2f0625',
- isExcluded: false,
name: 'Trading Account',
platformId: '9da3a8a7-4795-43e3-a6db-ccb914189737',
updatedAt: new Date('2025-06-01T06:53:10.569Z'),
@@ -245,7 +242,6 @@ const activities: Activity[] = [
createdAt: new Date('2025-05-31T13:00:13.940Z'),
currency: 'USD',
id: '776bd1e9-b2f6-4f7e-933d-18756c2f0625',
- isExcluded: false,
name: 'Trading Account',
platformId: '9da3a8a7-4795-43e3-a6db-ccb914189737',
updatedAt: new Date('2025-06-01T06:53:10.569Z'),
@@ -312,7 +308,6 @@ const activities: Activity[] = [
createdAt: new Date('2025-05-31T13:00:13.940Z'),
currency: 'USD',
id: '776bd1e9-b2f6-4f7e-933d-18756c2f0625',
- isExcluded: false,
name: 'Trading Account',
platformId: '9da3a8a7-4795-43e3-a6db-ccb914189737',
updatedAt: new Date('2025-06-01T06:53:10.569Z'),
diff --git a/prisma/migrations/20260801103609_removed_is_excluded_from_account/migration.sql b/prisma/migrations/20260801103609_removed_is_excluded_from_account/migration.sql
new file mode 100644
index 000000000..5fb01f5d2
--- /dev/null
+++ b/prisma/migrations/20260801103609_removed_is_excluded_from_account/migration.sql
@@ -0,0 +1,21 @@
+-- Create the "EXCLUDE_FROM_ANALYSIS" tag if it does not exist yet
+INSERT INTO "Tag" ("id", "name")
+VALUES ('f2e868af-8333-459f-b161-cbc6544c24bd', 'EXCLUDE_FROM_ANALYSIS')
+ON CONFLICT DO NOTHING;
+
+-- Migrate accounts with "isExcluded" to the "EXCLUDE_FROM_ANALYSIS" tag
+INSERT INTO "TagsOnAccounts" ("accountId", "tagId", "updatedAt", "userId")
+SELECT
+ "id",
+ 'f2e868af-8333-459f-b161-cbc6544c24bd',
+ CURRENT_TIMESTAMP,
+ "userId"
+FROM "Account"
+WHERE "isExcluded" = true
+ON CONFLICT DO NOTHING;
+
+-- DropIndex
+DROP INDEX "Account_isExcluded_idx";
+
+-- AlterTable
+ALTER TABLE "Account" DROP COLUMN "isExcluded";
diff --git a/prisma/schema.prisma b/prisma/schema.prisma
index 733399506..faf7a9259 100644
--- a/prisma/schema.prisma
+++ b/prisma/schema.prisma
@@ -33,8 +33,6 @@ model Account {
createdAt DateTime @default(now())
currency String?
id String @default(uuid())
- /// @deprecated Use the "Exclude from Analysis" tag (`TAG_ID_EXCLUDE_FROM_ANALYSIS`) instead
- isExcluded Boolean @default(false)
name String?
platform Platform? @relation(fields: [platformId], references: [id])
platformId String?
@@ -46,7 +44,6 @@ model Account {
@@id([id, userId])
@@index([currency])
@@index([id])
- @@index([isExcluded])
@@index([name])
@@index([userId])
}
From a64f7144fe0f17b82360e3aec92febb4eb27e47f Mon Sep 17 00:00:00 2001
From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com>
Date: Sat, 1 Aug 2026 14:31:58 +0200
Subject: [PATCH 42/86] Release 3.39.0 (#7503)
---
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 72a0cc95f..b31046e8c 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
+## 3.39.0 - 2026-08-01
### Changed
diff --git a/package-lock.json b/package-lock.json
index 1e49fb135..9009b4f29 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,12 +1,12 @@
{
"name": "ghostfolio",
- "version": "3.38.0",
+ "version": "3.39.0",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "ghostfolio",
- "version": "3.38.0",
+ "version": "3.39.0",
"hasInstallScript": true,
"license": "AGPL-3.0",
"dependencies": {
diff --git a/package.json b/package.json
index 194ee3ce3..ded794ce4 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "ghostfolio",
- "version": "3.38.0",
+ "version": "3.39.0",
"homepage": "https://ghostfol.io",
"license": "AGPL-3.0",
"repository": "https://github.com/ghostfolio/ghostfolio",
From 1822a09c6a97982a2eb045b3a00e117332f9991a Mon Sep 17 00:00:00 2001
From: Kenrick Tandrian <60643640+KenTandrian@users.noreply.github.com>
Date: Sun, 2 Aug 2026 02:40:26 +0700
Subject: [PATCH 43/86] Task/improve language localization for ZH (20260731)
(#7490)
* Update translations
* Update changelog
---
CHANGELOG.md | 6 +
apps/client/src/locales/messages.zh.xlf | 152 ++++++++++++------------
2 files changed, 82 insertions(+), 76 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index b31046e8c..cf5ab1a70 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
+
+### Changed
+
+- Improved the language localization for Chinese (`zh`)
+
## 3.39.0 - 2026-08-01
### Changed
diff --git a/apps/client/src/locales/messages.zh.xlf b/apps/client/src/locales/messages.zh.xlf
index a70be75d6..7963e7767 100644
--- a/apps/client/src/locales/messages.zh.xlf
+++ b/apps/client/src/locales/messages.zh.xlf
@@ -433,7 +433,7 @@
Copy
- Copy
+ 复制
libs/ui/src/lib/notifications/alert-dialog/alert-dialog.html
20
@@ -605,7 +605,7 @@
Paid
- Paid
+ 付费
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts
129
@@ -657,7 +657,7 @@
Unknown
- Unknown
+ 未知
libs/ui/src/lib/i18n.ts
88
@@ -701,7 +701,7 @@
and is driven by the efforts of its contributors
- 并且得益于其 贡献者
+ 并且得益于其 贡献者
apps/client/src/app/pages/about/overview/about-overview-page.html
50
@@ -749,7 +749,7 @@
Find an account...
- Find an account...
+ 查找账户...
libs/ui/src/lib/assistant/assistant.component.ts
448
@@ -777,7 +777,7 @@
Watch the Ghostfol.io Trailer on YouTube
- Watch the Ghostfol.io Trailer on YouTube
+ 在 YouTube 上观看 Ghostfol.io 预告片
apps/client/src/app/pages/landing/landing-page.html
19
@@ -813,7 +813,7 @@
Category
- Category
+ 类别
apps/client/src/app/pages/resources/personal-finance-tools/product-page.html
77
@@ -837,7 +837,7 @@
An error occurred while converting the data source to .
- An error occurred while converting the data source to .
+ 将数据源转换为 时发生错误。
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
482
@@ -885,7 +885,7 @@
Data Gathering Frequency
- Data Gathering Frequency
+ 数据采集频率
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
468
@@ -921,7 +921,7 @@
Apply current market price
- Apply current market price
+ 应用当前市场价格
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
238
@@ -929,7 +929,7 @@
Subscription History
- Subscription History
+ 订阅历史
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
141
@@ -965,7 +965,7 @@
Healthcare
- Healthcare
+ 医疗保健
libs/ui/src/lib/i18n.ts
97
@@ -1081,7 +1081,7 @@
Update Activity
- Update Activity
+ 更新活动
libs/common/src/lib/routes/routes.ts
141
@@ -1089,7 +1089,7 @@
Technology
- Technology
+ 科技
libs/ui/src/lib/i18n.ts
101
@@ -1105,7 +1105,7 @@
Total
- Total
+ 总计
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
160
@@ -1161,7 +1161,7 @@
Industrials
- Industrials
+ 工业
libs/ui/src/lib/i18n.ts
98
@@ -1197,7 +1197,7 @@
Consumer Cyclical
- Consumer Cyclical
+ 非必需消费品
libs/ui/src/lib/i18n.ts
93
@@ -1705,7 +1705,7 @@
The source code is fully available as open source software (OSS) under the AGPL-3.0 license
- 源代码完全可用,作为 开源软件 (OSS),遵循 AGPL-3.0许可证
+ 源代码完全可用,作为 开源软件 (OSS),遵循 AGPL-3.0许可证
apps/client/src/app/pages/about/overview/about-overview-page.html
16
@@ -1889,7 +1889,7 @@
Energy
- Energy
+ 能源
libs/ui/src/lib/i18n.ts
95
@@ -2265,7 +2265,7 @@
Ghostfolio in Numbers: Monthly Active Users (MAU)
- Ghostfolio in Numbers: Monthly Active Users (MAU)
+ Ghostfolio 数据:月活跃用户数 (MAU)
apps/client/src/app/pages/landing/landing-page.html
63
@@ -2305,7 +2305,7 @@
The value has been copied to the clipboard
- The value has been copied to the clipboard
+ 该值已复制到剪贴板
libs/ui/src/lib/notifications/alert-dialog/alert-dialog.component.ts
46
@@ -2357,7 +2357,7 @@
Consumer Defensive
- Consumer Defensive
+ 必需消费品
libs/ui/src/lib/i18n.ts
94
@@ -2429,7 +2429,7 @@
Utilities
- Utilities
+ 公用事业
libs/ui/src/lib/i18n.ts
102
@@ -2461,7 +2461,7 @@
Coupon
- Coupon
+ 优惠券
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts
134
@@ -2497,7 +2497,7 @@
Close Account
- Close Account
+ 关闭账户
apps/client/src/app/components/user-account-settings/user-account-settings.html
337
@@ -2517,7 +2517,7 @@
Contributors to Ghostfolio
- Contributors to Ghostfolio
+ Ghostfolio 贡献者
apps/client/src/app/pages/about/overview/about-overview-page.html
54
@@ -2561,7 +2561,7 @@
Investments
- Investments
+ 投资
apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html
197
@@ -2853,7 +2853,7 @@
Financial Planning
- Financial Planning
+ 财务规划
libs/ui/src/lib/i18n.ts
109
@@ -3121,7 +3121,7 @@
popular
- popular
+ 热门
apps/client/src/app/components/admin-settings/admin-settings.component.html
79
@@ -3157,7 +3157,7 @@
Invalid API key
- Invalid API key
+ 无效的 API 密钥
apps/client/src/app/components/admin-settings/admin-settings.component.html
112
@@ -3201,7 +3201,7 @@
For security reasons, please delete all activities and accounts first before your Ghostfolio account can be closed.
- For security reasons, please delete all activities and accounts first before your Ghostfolio account can be closed.
+ 出于安全原因,在关闭您的 Ghostfolio 账户之前,请先删除所有活动和账户。
apps/client/src/app/components/user-account-settings/user-account-settings.html
348
@@ -3329,7 +3329,7 @@
Creation
- Creation
+ 创建时间
apps/client/src/app/components/admin-overview/admin-overview.html
185
@@ -3373,7 +3373,7 @@
just now
- just now
+ 刚刚
apps/client/src/app/components/admin-users/admin-users.component.ts
221
@@ -3561,7 +3561,7 @@
Basic Materials
- Basic Materials
+ 基础材料
libs/ui/src/lib/i18n.ts
91
@@ -3705,7 +3705,7 @@
Oops! Could not delete the asset profiles.
- Oops! Could not delete the asset profiles.
+ 哎呀!无法删除资产概况。
apps/client/src/app/components/admin-market-data/admin-market-data.service.ts
52
@@ -3777,7 +3777,7 @@
Add Activity
- Add Activity
+ 添加活动
libs/common/src/lib/routes/routes.ts
134
@@ -3801,7 +3801,7 @@
At Ghostfolio, transparency is at the core of our values. We publish the source code as open source software (OSS) under the AGPL-3.0 license and we openly share aggregated key metrics of the platform’s operational status.
- 在 Ghostfolio,透明度是我们价值观的核心。我们将源代码发布为 开源软件 (OSS)下 AGPL-3.0许可证 我们公开分享平台运营状态的汇总关键指标。
+ 在 Ghostfolio,透明度是我们价值观的核心。我们将源代码发布为 开源软件 (OSS)下 AGPL-3.0许可证 我们公开分享平台运营状态的汇总关键指标。
apps/client/src/app/pages/open/open-page.html
7
@@ -3845,7 +3845,7 @@
Convert to
- Convert to
+ 转换为
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
175
@@ -3897,7 +3897,7 @@
Available on
- Available on
+ 适用于
apps/client/src/app/pages/resources/personal-finance-tools/product-page.html
130
@@ -4197,7 +4197,7 @@
Price
- Price
+ 价格
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
176
@@ -4205,7 +4205,7 @@
Do you really want to convert this asset profile to ( )?
- Do you really want to convert this asset profile to ( )?
+ 您确定要把此资产概况转换为 ( ) 吗?
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
723
@@ -4305,7 +4305,7 @@
Trial
- Trial
+ 试用
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts
133
@@ -4605,7 +4605,7 @@
Hourly
- Hourly
+ 每小时
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
216
@@ -4717,7 +4717,7 @@
Expiration
- Expiration
+ 到期时间
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
209
@@ -4970,7 +4970,7 @@
Coupon has been created
- Coupon has been created
+ 优惠券 已创建
apps/client/src/app/components/admin-overview/admin-overview.component.ts
224
@@ -5022,7 +5022,7 @@
Upgrade to Ghostfolio Premium
- Upgrade to Ghostfolio Premium
+ 升级至 Ghostfolio Premium
libs/ui/src/lib/premium-indicator/premium-indicator.component.html
4
@@ -5110,7 +5110,7 @@
Stock Tracking
- Stock Tracking
+ 股票追踪
libs/ui/src/lib/i18n.ts
112
@@ -5134,7 +5134,7 @@
Web
- Web
+ 网页
libs/ui/src/lib/i18n.ts
121
@@ -5334,7 +5334,7 @@
Portfolio Filters
- Portfolio Filters
+ 组合筛选器
apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html
63
@@ -5390,7 +5390,7 @@
{VAR_PLURAL, plural, =1 {Profile} other {Profiles}}
- {VAR_PLURAL, plural, =1 {Profile} other {Profiles}}
+ {VAR_PLURAL, plural, =1 {个资产概况} other {个资产概况}}
apps/client/src/app/components/admin-market-data/admin-market-data.html
275
@@ -5710,7 +5710,7 @@
Ghostfolio in Numbers: Pulls on Docker Hub
- Ghostfolio in Numbers: Pulls on Docker Hub
+ Ghostfolio 数据:Docker Hub 下载量
apps/client/src/app/pages/landing/landing-page.html
101
@@ -6022,7 +6022,7 @@
Communication Services
- Communication Services
+ 通信服务
libs/ui/src/lib/i18n.ts
92
@@ -6062,7 +6062,7 @@
Invested Capital
- Invested Capital
+ 投入资本
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
174
@@ -6346,7 +6346,7 @@
Expires ( )
- Expires ( )
+ 到期时间 ( )
apps/client/src/app/components/admin-users/admin-users.html
34
@@ -6386,7 +6386,7 @@
Fetch market price
- Fetch market price
+ 获取市场价格
libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html
40
@@ -6479,7 +6479,7 @@
Find a holding...
- Find a holding...
+ 查找持仓...
libs/ui/src/lib/assistant/assistant.component.ts
449
@@ -6507,7 +6507,7 @@
Daily
- Daily
+ 每天
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
212
@@ -6639,7 +6639,7 @@
Jump to a page...
- Jump to a page...
+ 跳转到页面...
libs/ui/src/lib/assistant/assistant.component.ts
450
@@ -6687,7 +6687,7 @@
Clone Activity
- Clone Activity
+ 克隆活动
libs/common/src/lib/routes/routes.ts
129
@@ -6835,7 +6835,7 @@
Oops! Could not delete the asset profile.
- Oops! Could not delete the asset profile.
+ 哎呀!无法删除资产概况。
apps/client/src/app/components/admin-market-data/admin-market-data.service.ts
51
@@ -6939,7 +6939,7 @@
Do you really want to delete these asset profiles?
- Do you really want to delete these asset profiles?
+ 您确定要删除这 个资产概况吗?
apps/client/src/app/components/admin-market-data/admin-market-data.service.ts
67
@@ -7119,7 +7119,7 @@
Tax Reporting
- Tax Reporting
+ 税务报告
libs/ui/src/lib/i18n.ts
113
@@ -7135,7 +7135,7 @@
Change with currency effect Change
- 含货币影响的涨跌 涨跌
+ 含货币影响的涨跌 涨跌
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
64
@@ -7151,7 +7151,7 @@
Performance with currency effect Performance
- 含货币影响的表现 表现
+ 含货币影响的表现 表现
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
84
@@ -7199,7 +7199,7 @@
has been copied to the clipboard
- 已复制到剪贴板
+ 已复制到剪贴板
apps/client/src/app/components/admin-overview/admin-overview.component.ts
223
@@ -7219,7 +7219,7 @@
Compare Ghostfolio to -
- Compare Ghostfolio to -
+ 对比 Ghostfolio 与 -
apps/client/src/app/pages/resources/personal-finance-tools/personal-finance-tools-page.html
32
@@ -7267,7 +7267,7 @@
Financial Services
- Financial Services
+ 金融服务
libs/ui/src/lib/i18n.ts
96
@@ -7295,7 +7295,7 @@
Delete
- Delete
+ 删除
apps/client/src/app/components/admin-market-data/admin-market-data.html
270
@@ -7355,7 +7355,7 @@
Dividend Tracking
- Dividend Tracking
+ 股息追踪
libs/ui/src/lib/i18n.ts
106
@@ -7415,7 +7415,7 @@
Investment Research
- Investment Research
+ 投资研究
libs/ui/src/lib/i18n.ts
110
@@ -7697,7 +7697,7 @@
Net Worth Tracking
- Net Worth Tracking
+ 净资产追踪
libs/ui/src/lib/i18n.ts
111
@@ -7769,7 +7769,7 @@
Do you really want to convert the data source to ?
- Do you really want to convert the data source to ?
+ 您确定要把数据源转换为 吗?
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
485
@@ -7837,7 +7837,7 @@
Ghostfolio in Numbers: Stars on GitHub
- Ghostfolio in Numbers: Stars on GitHub
+ Ghostfolio 数据:GitHub Stars 数量
apps/client/src/app/pages/landing/landing-page.html
82
@@ -8167,7 +8167,7 @@
ETF Tracking
- ETF Tracking
+ ETF 追踪
libs/ui/src/lib/i18n.ts
107
@@ -8333,7 +8333,7 @@
Post to Ghostfolio on X (formerly Twitter)
- Post to Ghostfolio on X (formerly Twitter)
+ 在 X (前身为 Twitter) 上发布给 Ghostfolio
apps/client/src/app/pages/about/overview/about-overview-page.html
85
@@ -8570,7 +8570,7 @@
If you encounter a bug, would like to suggest an improvement or a new feature , please join the Ghostfolio Slack community, post to @ghostfolio_
- 如果您遇到错误,想要建议改进或新 功能 ,请加入 Ghostfolio Slack 社区,发布到 @ghostfolio_
+ 如果您遇到错误,想要建议改进或新 功能 ,请加入 Ghostfolio Slack 社区,发布到 @ghostfolio_
apps/client/src/app/pages/about/overview/about-overview-page.html
71
From c3e70091aee0f08389e4ab5a23425839a9a79379 Mon Sep 17 00:00:00 2001
From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com>
Date: Sat, 1 Aug 2026 23:01:38 +0200
Subject: [PATCH 44/86] Bugfix/validation error caused by empty strings in
asset profile details dialog (#7509)
* Resolve validation error caused by empty strings
* Update changelog
---
CHANGELOG.md | 4 ++
.../asset-profile-dialog.component.ts | 16 +++--
.../src/lib/dtos/update-asset-profile.dto.ts | 4 +-
libs/common/src/lib/helper.spec.ts | 58 +++++++++++++++++++
libs/common/src/lib/helper.ts | 20 +++++++
5 files changed, 94 insertions(+), 8 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index cf5ab1a70..054a24bdf 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
- Improved the language localization for Chinese (`zh`)
+### Fixed
+
+- Resolved a validation error caused by empty strings in the asset profile details dialog of the admin control panel
+
## 3.39.0 - 2026-08-01
### Changed
diff --git a/apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts b/apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
index c5562740f..330688da1 100644
--- a/apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
+++ b/apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
@@ -11,6 +11,8 @@ import {
DATE_FORMAT,
getCountryName,
getCurrencyFromSymbol,
+ getStringOrNull,
+ getStringOrUndefined,
isCurrency
} from '@ghostfolio/common/helper';
import {
@@ -568,9 +570,10 @@ export class GfAssetProfileDialogComponent implements OnInit {
this.assetProfileForm.controls.scraperConfiguration.controls.headers
.value ?? '{}'
) as Record,
- locale:
+ locale: getStringOrUndefined(
this.assetProfileForm.controls.scraperConfiguration.controls.locale
- ?.value ?? undefined,
+ ?.value
+ ),
mode:
this.assetProfileForm.controls.scraperConfiguration.controls.mode
?.value ?? undefined,
@@ -619,7 +622,7 @@ export class GfAssetProfileDialogComponent implements OnInit {
assetClass: this.assetProfileForm.controls.assetClass.value ?? undefined,
assetSubClass:
this.assetProfileForm.controls.assetSubClass.value ?? undefined,
- comment: this.assetProfileForm.controls.comment.value ?? undefined,
+ comment: getStringOrNull(this.assetProfileForm.controls.comment.value),
currency: this.assetProfileForm.controls.currency.value ?? undefined,
dataGatheringFrequency:
this.assetProfileForm.controls.dataGatheringFrequency.value ??
@@ -628,7 +631,7 @@ export class GfAssetProfileDialogComponent implements OnInit {
? this.assetProfileForm.controls.isActive.value
: undefined,
name: this.assetProfileForm.controls.name.value ?? undefined,
- url: this.assetProfileForm.controls.url.value ?? undefined
+ url: getStringOrNull(this.assetProfileForm.controls.url.value)
};
try {
@@ -737,9 +740,10 @@ export class GfAssetProfileDialogComponent implements OnInit {
this.assetProfileForm.controls.scraperConfiguration.controls.headers
.value ?? '{}'
) as Record,
- locale:
+ locale: getStringOrUndefined(
this.assetProfileForm.controls.scraperConfiguration.controls.locale
- ?.value ?? undefined,
+ ?.value
+ ),
mode: this.assetProfileForm.controls.scraperConfiguration.controls
.mode?.value,
selector:
diff --git a/libs/common/src/lib/dtos/update-asset-profile.dto.ts b/libs/common/src/lib/dtos/update-asset-profile.dto.ts
index a6e2230e8..a8eaad608 100644
--- a/libs/common/src/lib/dtos/update-asset-profile.dto.ts
+++ b/libs/common/src/lib/dtos/update-asset-profile.dto.ts
@@ -35,7 +35,7 @@ export class UpdateAssetProfileDto {
@IsOptional()
@IsString()
- comment?: string;
+ comment?: string | null;
@IsArray()
@IsOptional()
@@ -96,5 +96,5 @@ export class UpdateAssetProfileDto {
protocols: ['http', 'https'],
require_protocol: true
})
- url?: string;
+ url?: string | null;
}
diff --git a/libs/common/src/lib/helper.spec.ts b/libs/common/src/lib/helper.spec.ts
index d33f10452..758934724 100644
--- a/libs/common/src/lib/helper.spec.ts
+++ b/libs/common/src/lib/helper.spec.ts
@@ -1,6 +1,8 @@
import {
extractNumberFromString,
getNumberFormatGroup,
+ getStringOrNull,
+ getStringOrUndefined,
isCurrency,
isCurrencySymbol
} from '@ghostfolio/common/helper';
@@ -139,6 +141,62 @@ describe('Helper', () => {
});
});
+ describe('Get string or null', () => {
+ it('String', () => {
+ expect(getStringOrNull('https://ghostfol.io')).toEqual(
+ 'https://ghostfol.io'
+ );
+ });
+
+ it('String (with spaces)', () => {
+ expect(getStringOrNull(' https://ghostfol.io ')).toEqual(
+ 'https://ghostfol.io'
+ );
+ });
+
+ it('Empty string', () => {
+ expect(getStringOrNull('')).toEqual(null);
+ });
+
+ it('Blank string', () => {
+ expect(getStringOrNull(' ')).toEqual(null);
+ });
+
+ it('Null', () => {
+ expect(getStringOrNull(null)).toEqual(null);
+ });
+
+ it('Undefined', () => {
+ expect(getStringOrNull(undefined)).toEqual(null);
+ });
+ });
+
+ describe('Get string or undefined', () => {
+ it('String', () => {
+ expect(getStringOrUndefined('de-DE')).toEqual('de-DE');
+ });
+
+ it('String (with spaces)', () => {
+ expect(getStringOrUndefined(' de-DE ')).toEqual('de-DE');
+ });
+
+ it('Empty string', () => {
+ expect(getStringOrUndefined('')).toEqual(undefined);
+ });
+
+ it('Blank string', () => {
+ expect(getStringOrUndefined(' ')).toEqual(undefined);
+ });
+
+ it('Null', () => {
+ expect(getStringOrUndefined(null)).toEqual(undefined);
+ });
+
+ it('Undefined', () => {
+ expect(getStringOrUndefined(undefined)).toEqual(undefined);
+ });
+ });
+
describe('Is currency', () => {
it('ISO 4217 currency code', () => {
expect(isCurrency('USD')).toEqual(true);
diff --git a/libs/common/src/lib/helper.ts b/libs/common/src/lib/helper.ts
index db1d3c2a2..7e482838c 100644
--- a/libs/common/src/lib/helper.ts
+++ b/libs/common/src/lib/helper.ts
@@ -397,6 +397,26 @@ export function getStartOfUtcDate(aDate: Date) {
return date;
}
+export function getStringOrNull(aString: string | null | undefined) {
+ const trimmedString = aString?.trim();
+
+ if (trimmedString) {
+ return trimmedString;
+ }
+
+ return null;
+}
+
+export function getStringOrUndefined(aString: string | null | undefined) {
+ const trimmedString = aString?.trim();
+
+ if (trimmedString) {
+ return trimmedString;
+ }
+
+ return undefined;
+}
+
export function getSum(aArray: Big[]) {
if (aArray?.length > 0) {
return aArray.reduce((a, b) => a.plus(b), new Big(0));
From fa309b57435df39f0b1ad5a25c2b13c3145e2642 Mon Sep 17 00:00:00 2001
From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com>
Date: Sat, 1 Aug 2026 23:16:24 +0200
Subject: [PATCH 45/86] Bugfix/handling of Exclude from Analysis tag in
activities table (#7511)
* Fix handling of Exclude from Analysis tag
* Update changelog
---
CHANGELOG.md | 1 +
libs/common/src/lib/helper.spec.ts | 27 +++++++++++++++++++
libs/common/src/lib/helper.ts | 4 +--
.../activities-table.component.ts | 2 +-
4 files changed, 31 insertions(+), 3 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 054a24bdf..1118f2a69 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -13,6 +13,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
### Fixed
+- Fixed the handling of the _Exclude from Analysis_ tag in the activities table
- Resolved a validation error caused by empty strings in the asset profile details dialog of the admin control panel
## 3.39.0 - 2026-08-01
diff --git a/libs/common/src/lib/helper.spec.ts b/libs/common/src/lib/helper.spec.ts
index 758934724..c4947394f 100644
--- a/libs/common/src/lib/helper.spec.ts
+++ b/libs/common/src/lib/helper.spec.ts
@@ -1,8 +1,13 @@
+import {
+ TAG_ID_EMERGENCY_FUND,
+ TAG_ID_EXCLUDE_FROM_ANALYSIS
+} from '@ghostfolio/common/config';
import {
extractNumberFromString,
getNumberFormatGroup,
getStringOrNull,
getStringOrUndefined,
+ isAccountExcluded,
isCurrency,
isCurrencySymbol
} from '@ghostfolio/common/helper';
@@ -197,6 +202,28 @@ describe('Helper', () => {
});
});
+ describe('Is account excluded', () => {
+ it('Account with Exclude from Analysis tag', () => {
+ expect(
+ isAccountExcluded({ tags: [{ id: TAG_ID_EXCLUDE_FROM_ANALYSIS }] })
+ ).toEqual(true);
+ });
+
+ it('Account with another tag', () => {
+ expect(
+ isAccountExcluded({ tags: [{ id: TAG_ID_EMERGENCY_FUND }] })
+ ).toEqual(false);
+ });
+
+ it('Account without tags', () => {
+ expect(isAccountExcluded({ tags: [] })).toEqual(false);
+ });
+
+ it('Undefined account', () => {
+ expect(isAccountExcluded(undefined)).toEqual(false);
+ });
+ });
+
describe('Is currency', () => {
it('ISO 4217 currency code', () => {
expect(isCurrency('USD')).toEqual(true);
diff --git a/libs/common/src/lib/helper.ts b/libs/common/src/lib/helper.ts
index 7e482838c..58927337e 100644
--- a/libs/common/src/lib/helper.ts
+++ b/libs/common/src/lib/helper.ts
@@ -476,9 +476,9 @@ export function interpolate(template: string, context: any) {
});
}
-export function isAccountExcluded(account: { tags?: { id: string }[] }) {
+export function isAccountExcluded(account?: { tags?: { id: string }[] }) {
return (
- account.tags?.some(({ id }) => {
+ account?.tags?.some(({ id }) => {
return id === TAG_ID_EXCLUDE_FROM_ANALYSIS;
}) === true
);
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 6fac6d162..7252b0074 100644
--- a/libs/ui/src/lib/activities-table/activities-table.component.ts
+++ b/libs/ui/src/lib/activities-table/activities-table.component.ts
@@ -298,7 +298,7 @@ export class GfActivitiesTableComponent implements AfterViewInit, OnInit {
public isExcludedFromAnalysis(activity: Activity) {
return (
- (activity.account && isAccountExcluded(activity.account)) ??
+ isAccountExcluded(activity.account) ||
activity.tags?.some(({ id }) => {
return id === TAG_ID_EXCLUDE_FROM_ANALYSIS;
}) === true
From 6fbf055206aa857f3699b7fd1a86e9899c8d2900 Mon Sep 17 00:00:00 2001
From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com>
Date: Sun, 2 Aug 2026 09:38:33 +0200
Subject: [PATCH 46/86] Task/upgrade nestjs to version 11.1.28 (#7506)
* Update nestjs to version 11.1.28
* Update changelog
---
CHANGELOG.md | 1 +
package-lock.json | 40 ++++++++++++++++++++--------------------
package.json | 8 ++++----
3 files changed, 25 insertions(+), 24 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 1118f2a69..5a856ca09 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -10,6 +10,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
### Changed
- Improved the language localization for Chinese (`zh`)
+- Upgraded `nestjs` from version `11.1.27` to `11.1.28`
### Fixed
diff --git a/package-lock.json b/package-lock.json
index 9009b4f29..51ad39a41 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -32,13 +32,13 @@
"@nest-lab/throttler-storage-redis": "1.2.0",
"@nestjs/bull": "11.0.4",
"@nestjs/cache-manager": "3.1.3",
- "@nestjs/common": "11.1.27",
+ "@nestjs/common": "11.1.28",
"@nestjs/config": "4.0.4",
- "@nestjs/core": "11.1.27",
+ "@nestjs/core": "11.1.28",
"@nestjs/event-emitter": "3.1.0",
"@nestjs/jwt": "11.0.2",
"@nestjs/passport": "11.0.5",
- "@nestjs/platform-express": "11.1.27",
+ "@nestjs/platform-express": "11.1.28",
"@nestjs/schedule": "6.1.3",
"@nestjs/serve-static": "5.0.5",
"@nestjs/throttler": "6.5.0",
@@ -116,7 +116,7 @@
"@eslint/eslintrc": "3.3.1",
"@eslint/js": "9.35.0",
"@nestjs/schematics": "11.1.0",
- "@nestjs/testing": "11.1.27",
+ "@nestjs/testing": "11.1.28",
"@nx/angular": "23.0.2",
"@nx/eslint-plugin": "23.0.2",
"@nx/jest": "23.0.2",
@@ -7034,9 +7034,9 @@
}
},
"node_modules/@nestjs/common": {
- "version": "11.1.27",
- "resolved": "https://registry.npmjs.org/@nestjs/common/-/common-11.1.27.tgz",
- "integrity": "sha512-kEGSzqM2lWr4whh4Ubflw+oPZSEzxvRMu9WL+LveZploJWTjec5bBlCiRVlVzTPg2kIwBiLwWSvCCW7Wnin1gg==",
+ "version": "11.1.28",
+ "resolved": "https://registry.npmjs.org/@nestjs/common/-/common-11.1.28.tgz",
+ "integrity": "sha512-bRImsxibie+AM7xjdwcrm/gr5YeacI65kSBNzTufa1Ib5iwziaY/lqMtRh9THq6pbV4e1HP9aI2ZxGUumnmaoQ==",
"license": "MIT",
"dependencies": {
"file-type": "21.3.4",
@@ -7119,9 +7119,9 @@
}
},
"node_modules/@nestjs/core": {
- "version": "11.1.27",
- "resolved": "https://registry.npmjs.org/@nestjs/core/-/core-11.1.27.tgz",
- "integrity": "sha512-K6DX7hcqmZdeXkv7tsPakKBRCgqL19a4mtbX4FluY0hWtFdtPKp6lbe+lb8gWPfvLdbOWr/CPScn7BSjBX+Ecg==",
+ "version": "11.1.28",
+ "resolved": "https://registry.npmjs.org/@nestjs/core/-/core-11.1.28.tgz",
+ "integrity": "sha512-06m63xIRj8+l8uOeh/8LnYupGubkyu4f+bPKIadaSui6vK9KpXgoz7HveT1yOVLcEt0M0oCOEW5EuEXZkEmBBQ==",
"license": "MIT",
"dependencies": {
"fast-safe-stringify": "2.1.1",
@@ -7194,14 +7194,14 @@
}
},
"node_modules/@nestjs/platform-express": {
- "version": "11.1.27",
- "resolved": "https://registry.npmjs.org/@nestjs/platform-express/-/platform-express-11.1.27.tgz",
- "integrity": "sha512-0ZFhz6H6EdGh4xQVbUNwjoAwBuz73P7FvUAl67h9CTdMqQlJDaQYJApBv8pKfVZ1fGjMCbl0m9DcC6pXaZPWSQ==",
+ "version": "11.1.28",
+ "resolved": "https://registry.npmjs.org/@nestjs/platform-express/-/platform-express-11.1.28.tgz",
+ "integrity": "sha512-hU+9Sz4m+onHrR5AmelI59QKmY/Re546bPnygnpqqeQdHDiJpBgjWbL4t6Jr73CBpS60cpyng7WzjgphNB9iwA==",
"license": "MIT",
"dependencies": {
"cors": "2.8.6",
"express": "5.2.1",
- "multer": "2.1.1",
+ "multer": "2.2.0",
"path-to-regexp": "8.4.2",
"tslib": "2.8.1"
},
@@ -7477,9 +7477,9 @@
}
},
"node_modules/@nestjs/testing": {
- "version": "11.1.27",
- "resolved": "https://registry.npmjs.org/@nestjs/testing/-/testing-11.1.27.tgz",
- "integrity": "sha512-I35po13UHZZeGenLWJ3QYwh77RsLau5RcFKWBZ4waVHeARpwjtC7v7n7lGh98swLQdGmZgTnbvKaZ0B5dsUIKA==",
+ "version": "11.1.28",
+ "resolved": "https://registry.npmjs.org/@nestjs/testing/-/testing-11.1.28.tgz",
+ "integrity": "sha512-B+VgRxeLaH7jkOMgAyUP3N3rpFlisQ7JRxixRbgHvG6a0VgKbbkNSofKExexCgKmQQak80undb3+2kE1lUBmRQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -26514,9 +26514,9 @@
}
},
"node_modules/multer": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/multer/-/multer-2.1.1.tgz",
- "integrity": "sha512-mo+QTzKlx8R7E5ylSXxWzGoXoZbOsRMpyitcht8By2KHvMbf3tjwosZ/Mu/XYU6UuJ3VZnODIrak5ZrPiPyB6A==",
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/multer/-/multer-2.2.0.tgz",
+ "integrity": "sha512-6rdyFg2kLrMh9Jee7/BMPuV9lEAd7lLW2YUpF9/YxR7njyoUwwQ0ZPh3TaIY50Sw6vlyD2HW3wGOkTS4P79xrQ==",
"license": "MIT",
"dependencies": {
"append-field": "^1.0.0",
diff --git a/package.json b/package.json
index ded794ce4..7a4d91899 100644
--- a/package.json
+++ b/package.json
@@ -76,13 +76,13 @@
"@nest-lab/throttler-storage-redis": "1.2.0",
"@nestjs/bull": "11.0.4",
"@nestjs/cache-manager": "3.1.3",
- "@nestjs/common": "11.1.27",
+ "@nestjs/common": "11.1.28",
"@nestjs/config": "4.0.4",
- "@nestjs/core": "11.1.27",
+ "@nestjs/core": "11.1.28",
"@nestjs/event-emitter": "3.1.0",
"@nestjs/jwt": "11.0.2",
"@nestjs/passport": "11.0.5",
- "@nestjs/platform-express": "11.1.27",
+ "@nestjs/platform-express": "11.1.28",
"@nestjs/schedule": "6.1.3",
"@nestjs/serve-static": "5.0.5",
"@nestjs/throttler": "6.5.0",
@@ -160,7 +160,7 @@
"@eslint/eslintrc": "3.3.1",
"@eslint/js": "9.35.0",
"@nestjs/schematics": "11.1.0",
- "@nestjs/testing": "11.1.27",
+ "@nestjs/testing": "11.1.28",
"@nx/angular": "23.0.2",
"@nx/eslint-plugin": "23.0.2",
"@nx/jest": "23.0.2",
From b37654c7c6686662d80b517d851401cf2f6c6fa6 Mon Sep 17 00:00:00 2001
From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com>
Date: Sun, 2 Aug 2026 09:44:05 +0200
Subject: [PATCH 47/86] Bugfix/persistence of empty comment in create or update
account dialog (#7512)
* Fix persistence of empty comment
* Update changelog
---
CHANGELOG.md | 1 +
.../create-or-update-account-dialog.component.ts | 3 ++-
.../create-or-update-activity-dialog.component.ts | 7 +++++--
libs/common/src/lib/dtos/create-account.dto.ts | 2 +-
libs/common/src/lib/dtos/create-order.dto.ts | 2 +-
libs/common/src/lib/dtos/update-account.dto.ts | 2 +-
libs/common/src/lib/dtos/update-order.dto.ts | 2 +-
7 files changed, 12 insertions(+), 7 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 5a856ca09..115d25a92 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -15,6 +15,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
### Fixed
- Fixed the handling of the _Exclude from Analysis_ tag in the activities table
+- Fixed the persistence of an empty comment in the create or update account dialog
- Resolved a validation error caused by empty strings in the asset profile details dialog of the admin control panel
## 3.39.0 - 2026-08-01
diff --git a/apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.component.ts b/apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.component.ts
index 8b0536ebf..2157ea5d3 100644
--- a/apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.component.ts
+++ b/apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.component.ts
@@ -1,6 +1,7 @@
import { UserService } from '@ghostfolio/client/services/user/user.service';
import { TAG_ID_EXCLUDE_FROM_ANALYSIS } from '@ghostfolio/common/config';
import { CreateAccountDto, UpdateAccountDto } from '@ghostfolio/common/dtos';
+import { getStringOrNull } from '@ghostfolio/common/helper';
import { hasPermission, permissions } from '@ghostfolio/common/permissions';
import { validateObjectForForm } from '@ghostfolio/common/utils';
import { GfCurrencySelectorComponent } from '@ghostfolio/ui/currency-selector';
@@ -198,7 +199,7 @@ export class GfCreateOrUpdateAccountDialogComponent {
protected async onSubmit() {
const account: CreateAccountDto | UpdateAccountDto = {
balance: this.accountForm.get('balance')?.value,
- comment: this.accountForm.get('comment')?.value ?? null,
+ comment: getStringOrNull(this.accountForm.get('comment')?.value),
currency: this.accountForm.get('currency')?.value,
id: this.accountForm.get('accountId')?.value,
name: this.accountForm.get('name')?.value,
diff --git a/apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.component.ts b/apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.component.ts
index 632db1cd4..3b80d2825 100644
--- a/apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.component.ts
+++ b/apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.component.ts
@@ -1,7 +1,10 @@
import { UserService } from '@ghostfolio/client/services/user/user.service';
import { ASSET_CLASS_MAPPING, DEFAULT_LOCALE } from '@ghostfolio/common/config';
import { CreateOrderDto, UpdateOrderDto } from '@ghostfolio/common/dtos';
-import { getDateFormatString } from '@ghostfolio/common/helper';
+import {
+ getDateFormatString,
+ getStringOrNull
+} from '@ghostfolio/common/helper';
import {
AssetClassSelectorOption,
LookupItem
@@ -471,7 +474,7 @@ export class GfCreateOrUpdateActivityDialogComponent {
accountId: this.activityForm.get('accountId')?.value,
assetClass: this.activityForm.get('assetClass')?.value,
assetSubClass: this.activityForm.get('assetSubClass')?.value,
- comment: this.activityForm.get('comment')?.value ?? null,
+ comment: getStringOrNull(this.activityForm.get('comment')?.value),
currency: this.activityForm.get('currency')?.value,
customCurrency: this.activityForm.get('currencyOfUnitPrice')?.value,
dataSource: ['FEE', 'INTEREST', 'LIABILITY', 'VALUABLE'].includes(
diff --git a/libs/common/src/lib/dtos/create-account.dto.ts b/libs/common/src/lib/dtos/create-account.dto.ts
index e4a0c64fe..cae8293ee 100644
--- a/libs/common/src/lib/dtos/create-account.dto.ts
+++ b/libs/common/src/lib/dtos/create-account.dto.ts
@@ -20,7 +20,7 @@ export class CreateAccountDto {
@Transform(({ value }: TransformFnParams) =>
isString(value) ? value.trim() : value
)
- comment?: string;
+ comment?: string | null;
@IsCurrencyCode()
currency: string;
diff --git a/libs/common/src/lib/dtos/create-order.dto.ts b/libs/common/src/lib/dtos/create-order.dto.ts
index 36365b7be..c70b66b02 100644
--- a/libs/common/src/lib/dtos/create-order.dto.ts
+++ b/libs/common/src/lib/dtos/create-order.dto.ts
@@ -35,7 +35,7 @@ export class CreateOrderDto {
@Transform(({ value }: TransformFnParams) =>
isString(value) ? value.trim() : value
)
- comment?: string;
+ comment?: string | null;
@IsCurrencyCode()
currency: string;
diff --git a/libs/common/src/lib/dtos/update-account.dto.ts b/libs/common/src/lib/dtos/update-account.dto.ts
index a6a3e6ac6..d8bfc7b8d 100644
--- a/libs/common/src/lib/dtos/update-account.dto.ts
+++ b/libs/common/src/lib/dtos/update-account.dto.ts
@@ -20,7 +20,7 @@ export class UpdateAccountDto {
@Transform(({ value }: TransformFnParams) =>
isString(value) ? value.trim() : value
)
- comment?: string;
+ comment?: string | null;
@IsCurrencyCode()
currency: string;
diff --git a/libs/common/src/lib/dtos/update-order.dto.ts b/libs/common/src/lib/dtos/update-order.dto.ts
index 991479bc8..d8fdbe66b 100644
--- a/libs/common/src/lib/dtos/update-order.dto.ts
+++ b/libs/common/src/lib/dtos/update-order.dto.ts
@@ -34,7 +34,7 @@ export class UpdateOrderDto {
@Transform(({ value }: TransformFnParams) =>
isString(value) ? value.trim() : value
)
- comment?: string;
+ comment?: string | null;
@IsCurrencyCode()
currency: string;
From cb775af7f1631ac95436db65f8730baceb296e48 Mon Sep 17 00:00:00 2001
From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com>
Date: Sun, 2 Aug 2026 09:51:39 +0200
Subject: [PATCH 48/86] Task/improve style of read-only tags in tags selector
component (#7504)
* Improve style of read-only tags
* Add Storybook story
* Update changelog
---
CHANGELOG.md | 1 +
.../src/lib/tags-selector/tags-selector.component.html | 10 +++++-----
.../tags-selector/tags-selector.component.stories.ts | 8 ++++++++
3 files changed, 14 insertions(+), 5 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 115d25a92..9fe7f1a8b 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
### Changed
+- Improved the style of the read-only tags in the tags selector component
- Improved the language localization for Chinese (`zh`)
- Upgraded `nestjs` from version `11.1.27` to `11.1.28`
diff --git a/libs/ui/src/lib/tags-selector/tags-selector.component.html b/libs/ui/src/lib/tags-selector/tags-selector.component.html
index bd56e9318..9bede09a7 100644
--- a/libs/ui/src/lib/tags-selector/tags-selector.component.html
+++ b/libs/ui/src/lib/tags-selector/tags-selector.component.html
@@ -1,20 +1,20 @@
@if (readonly) {
-
Tags
+
Tags
@if (
tagsSelected().length > 0 || (tagsReadOnly && tagsReadOnly.length > 0)
) {
-
+
@if (tagsReadOnly) {
@for (tag of tagsReadOnly; track tag.id) {
- {{ tag.name }}
+ {{ tag.name }}
}
}
@for (tag of tagsSelected(); track tag.id) {
- {{ tag.name }}
+ {{ tag.name }}
}
-
+
} @else {
–
}
diff --git a/libs/ui/src/lib/tags-selector/tags-selector.component.stories.ts b/libs/ui/src/lib/tags-selector/tags-selector.component.stories.ts
index 48aeaffe3..e8bdd1873 100644
--- a/libs/ui/src/lib/tags-selector/tags-selector.component.stories.ts
+++ b/libs/ui/src/lib/tags-selector/tags-selector.component.stories.ts
@@ -87,6 +87,14 @@ export const Readonly: Story = {
}
};
+export const ReadonlyWithoutValue: Story = {
+ args: {
+ readonly: true,
+ tags: [],
+ tagsAvailable: OPTIONS
+ }
+};
+
export const WithoutValue: Story = {
args: {
tags: [],
From bd8ef423fae22709c70c901bab2c4ca42ba74f7b Mon Sep 17 00:00:00 2001
From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com>
Date: Sun, 2 Aug 2026 09:57:21 +0200
Subject: [PATCH 49/86] Release 3.40.0 (#7514)
---
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 9fe7f1a8b..c32132bc9 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
+## 3.40.0 - 2026-08-02
### Changed
diff --git a/package-lock.json b/package-lock.json
index 51ad39a41..b39eac00d 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,12 +1,12 @@
{
"name": "ghostfolio",
- "version": "3.39.0",
+ "version": "3.40.0",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "ghostfolio",
- "version": "3.39.0",
+ "version": "3.40.0",
"hasInstallScript": true,
"license": "AGPL-3.0",
"dependencies": {
diff --git a/package.json b/package.json
index 7a4d91899..dc1e12020 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "ghostfolio",
- "version": "3.39.0",
+ "version": "3.40.0",
"homepage": "https://ghostfol.io",
"license": "AGPL-3.0",
"repository": "https://github.com/ghostfolio/ghostfolio",
From ddf446f9156243a140b3bed6ab8a70215c81193e Mon Sep 17 00:00:00 2001
From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com>
Date: Sun, 2 Aug 2026 17:00:13 +0200
Subject: [PATCH 50/86] Feature/stock splits setup (#7251)
* Stock splits setup
* Update changelog
---
CHANGELOG.md | 4 +
apps/api/src/app/asset/asset.controller.ts | 3 +-
.../asset-profiles.controller.ts | 96 ++++++++++++-
.../asset-profiles/asset-profiles.module.ts | 2 +
.../asset-profiles/asset-profiles.service.ts | 45 ++++++-
apps/api/src/app/user/user.service.ts | 2 +
.../asset-profile-split.module.ts | 12 ++
.../asset-profile-split.service.ts | 87 ++++++++++++
.../asset-profile-dialog.component.ts | 85 +++++++++++-
.../asset-profile-dialog.html | 127 ++++++++++++++++++
.../dtos/create-asset-profile-split.dto.ts | 39 ++++++
libs/common/src/lib/dtos/index.ts | 2 +
libs/common/src/lib/helper.spec.ts | 48 ++++++-
libs/common/src/lib/helper.ts | 22 +++
.../admin-market-data-details.interface.ts | 3 +-
.../asset-profile-response.interface.ts | 3 +-
libs/common/src/lib/permissions.ts | 12 ++
.../validator-constraints/is-split-ratio.ts | 18 +++
libs/ui/src/lib/services/admin.service.ts | 24 +++-
libs/ui/src/lib/services/data.service.ts | 4 +
.../migration.sql | 21 +++
prisma/schema.prisma | 28 ++++
22 files changed, 674 insertions(+), 13 deletions(-)
create mode 100644 apps/api/src/services/asset-profile-split/asset-profile-split.module.ts
create mode 100644 apps/api/src/services/asset-profile-split/asset-profile-split.service.ts
create mode 100644 libs/common/src/lib/dtos/create-asset-profile-split.dto.ts
create mode 100644 libs/common/src/lib/validator-constraints/is-split-ratio.ts
create mode 100644 prisma/migrations/20260802000000_added_asset_profile_split/migration.sql
diff --git a/CHANGELOG.md b/CHANGELOG.md
index c32132bc9..53c443900 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
## 3.40.0 - 2026-08-02
+### Added
+
+- Added the database model and endpoints to manage the stock splits of an asset profile (experimental)
+
### Changed
- Improved the style of the read-only tags in the tags selector component
diff --git a/apps/api/src/app/asset/asset.controller.ts b/apps/api/src/app/asset/asset.controller.ts
index de04b5c81..49afb43d7 100644
--- a/apps/api/src/app/asset/asset.controller.ts
+++ b/apps/api/src/app/asset/asset.controller.ts
@@ -20,7 +20,7 @@ export class AssetController {
@Param('dataSource') dataSource: DataSource,
@Param('symbol') symbol: string
): Promise
{
- const { assetProfile, marketData } =
+ const { assetProfile, marketData, splits } =
await this.assetProfilesService.getAssetProfile({
dataSource,
symbol
@@ -28,6 +28,7 @@ export class AssetController {
return {
marketData,
+ splits,
assetProfile: pick(assetProfile, ['dataSource', 'name', 'symbol'])
};
}
diff --git a/apps/api/src/app/endpoints/asset-profiles/asset-profiles.controller.ts b/apps/api/src/app/endpoints/asset-profiles/asset-profiles.controller.ts
index 6be23c269..6521665e1 100644
--- a/apps/api/src/app/endpoints/asset-profiles/asset-profiles.controller.ts
+++ b/apps/api/src/app/endpoints/asset-profiles/asset-profiles.controller.ts
@@ -4,7 +4,10 @@ import { TransformDataSourceInRequestInterceptor } from '@ghostfolio/api/interce
import { TransformDataSourceInResponseInterceptor } from '@ghostfolio/api/interceptors/transform-data-source-in-response/transform-data-source-in-response.interceptor';
import { ApiService } from '@ghostfolio/api/services/api/api.service';
import { SymbolProfileService } from '@ghostfolio/api/services/symbol-profile/symbol-profile.service';
-import { UpdateAssetProfileDataDto } from '@ghostfolio/common/dtos';
+import {
+ CreateAssetProfileSplitDto,
+ UpdateAssetProfileDataDto
+} from '@ghostfolio/common/dtos';
import { getCurrencyFromSymbol, isCurrency } from '@ghostfolio/common/helper';
import { AssetProfileResponse } from '@ghostfolio/common/interfaces';
import {
@@ -18,19 +21,22 @@ import { MarketDataPreset, RequestWithUser } from '@ghostfolio/common/types';
import {
Body,
Controller,
+ Delete,
Get,
HttpException,
Inject,
Param,
ParseIntPipe,
Patch,
+ Post,
Query,
UseGuards,
UseInterceptors
} from '@nestjs/common';
import { REQUEST } from '@nestjs/core';
import { AuthGuard } from '@nestjs/passport';
-import { DataSource, Prisma } from '@prisma/client';
+import { AssetProfileSplit, DataSource, Prisma } from '@prisma/client';
+import { parseISO } from 'date-fns';
import { StatusCodes, getReasonPhrase } from 'http-status-codes';
import { AssetProfilesService } from './asset-profiles.service';
@@ -119,6 +125,49 @@ export class AssetProfilesController {
});
}
+ @Post(':dataSource/:symbol/splits')
+ @UseGuards(AuthGuard('jwt'))
+ @UseInterceptors(TransformDataSourceInRequestInterceptor)
+ public async createSplit(
+ @Body() data: CreateAssetProfileSplitDto,
+ @Param('dataSource') dataSource: DataSource,
+ @Param('symbol') symbol: string
+ ): Promise {
+ const { id: symbolProfileId } = await this.validateAccessToSplits({
+ dataSource,
+ symbol,
+ permission: permissions.createAssetProfileSplit,
+ permissionOfOwnAssetProfile:
+ permissions.createAssetProfileSplitOfOwnAssetProfile
+ });
+
+ return this.assetProfilesService.createSplit({
+ symbolProfileId,
+ date: parseISO(data.date),
+ denominator: data.denominator,
+ numerator: data.numerator
+ });
+ }
+
+ @Delete(':dataSource/:symbol/splits/:id')
+ @UseGuards(AuthGuard('jwt'))
+ @UseInterceptors(TransformDataSourceInRequestInterceptor)
+ public async deleteSplit(
+ @Param('dataSource') dataSource: DataSource,
+ @Param('id') id: string,
+ @Param('symbol') symbol: string
+ ): Promise {
+ const { id: symbolProfileId } = await this.validateAccessToSplits({
+ dataSource,
+ symbol,
+ permission: permissions.deleteAssetProfileSplit,
+ permissionOfOwnAssetProfile:
+ permissions.deleteAssetProfileSplitOfOwnAssetProfile
+ });
+
+ return this.assetProfilesService.deleteSplit({ id, symbolProfileId });
+ }
+
@HasPermission(permissions.accessAdminControl)
@Patch(':dataSource/:symbol')
@UseGuards(AuthGuard('jwt'), HasPermissionGuard)
@@ -139,4 +188,47 @@ export class AssetProfilesController {
assetProfileData
);
}
+
+ private async validateAccessToSplits({
+ dataSource,
+ permission,
+ permissionOfOwnAssetProfile,
+ symbol
+ }: {
+ dataSource: DataSource;
+ permission: string;
+ permissionOfOwnAssetProfile: string;
+ symbol: string;
+ }) {
+ const [assetProfile] = await this.symbolProfileService.getSymbolProfiles([
+ { dataSource, symbol }
+ ]);
+
+ if (!assetProfile) {
+ throw new HttpException(
+ getReasonPhrase(StatusCodes.NOT_FOUND),
+ StatusCodes.NOT_FOUND
+ );
+ }
+
+ const canAccessAllAssetProfiles = hasPermission(
+ this.request.user.permissions,
+ permission
+ );
+
+ const canAccessOwnAssetProfile =
+ assetProfile.userId === this.request.user.id &&
+ hasPermission(this.request.user.permissions, permissionOfOwnAssetProfile);
+
+ if (!canAccessAllAssetProfiles && !canAccessOwnAssetProfile) {
+ throw new HttpException(
+ assetProfile.userId
+ ? getReasonPhrase(StatusCodes.NOT_FOUND)
+ : getReasonPhrase(StatusCodes.FORBIDDEN),
+ assetProfile.userId ? StatusCodes.NOT_FOUND : StatusCodes.FORBIDDEN
+ );
+ }
+
+ return assetProfile;
+ }
}
diff --git a/apps/api/src/app/endpoints/asset-profiles/asset-profiles.module.ts b/apps/api/src/app/endpoints/asset-profiles/asset-profiles.module.ts
index f96d92eb3..e3906be9f 100644
--- a/apps/api/src/app/endpoints/asset-profiles/asset-profiles.module.ts
+++ b/apps/api/src/app/endpoints/asset-profiles/asset-profiles.module.ts
@@ -2,6 +2,7 @@ import { ActivitiesModule } from '@ghostfolio/api/app/activities/activities.modu
import { TransformDataSourceInRequestModule } from '@ghostfolio/api/interceptors/transform-data-source-in-request/transform-data-source-in-request.module';
import { TransformDataSourceInResponseModule } from '@ghostfolio/api/interceptors/transform-data-source-in-response/transform-data-source-in-response.module';
import { ApiModule } from '@ghostfolio/api/services/api/api.module';
+import { AssetProfileSplitModule } from '@ghostfolio/api/services/asset-profile-split/asset-profile-split.module';
import { BenchmarkModule } from '@ghostfolio/api/services/benchmark/benchmark.module';
import { DataProviderModule } from '@ghostfolio/api/services/data-provider/data-provider.module';
import { ExchangeRateDataModule } from '@ghostfolio/api/services/exchange-rate-data/exchange-rate-data.module';
@@ -20,6 +21,7 @@ import { AssetProfilesService } from './asset-profiles.service';
imports: [
ActivitiesModule,
ApiModule,
+ AssetProfileSplitModule,
BenchmarkModule,
DataProviderModule,
ExchangeRateDataModule,
diff --git a/apps/api/src/app/endpoints/asset-profiles/asset-profiles.service.ts b/apps/api/src/app/endpoints/asset-profiles/asset-profiles.service.ts
index bc6aeff1e..7d75fc40b 100644
--- a/apps/api/src/app/endpoints/asset-profiles/asset-profiles.service.ts
+++ b/apps/api/src/app/endpoints/asset-profiles/asset-profiles.service.ts
@@ -1,4 +1,5 @@
import { ActivitiesService } from '@ghostfolio/api/app/activities/activities.service';
+import { AssetProfileSplitService } from '@ghostfolio/api/services/asset-profile-split/asset-profile-split.service';
import { BenchmarkService } from '@ghostfolio/api/services/benchmark/benchmark.service';
import { DataProviderService } from '@ghostfolio/api/services/data-provider/data-provider.service';
import { ExchangeRateDataService } from '@ghostfolio/api/services/exchange-rate-data/exchange-rate-data.service';
@@ -30,6 +31,7 @@ import { groupBy } from 'lodash';
export class AssetProfilesService {
public constructor(
private readonly activitiesService: ActivitiesService,
+ private readonly assetProfileSplitService: AssetProfileSplitService,
private readonly benchmarkService: BenchmarkService,
private readonly dataProviderService: DataProviderService,
private readonly exchangeRateDataService: ExchangeRateDataService,
@@ -38,6 +40,42 @@ export class AssetProfilesService {
private readonly symbolProfileService: SymbolProfileService
) {}
+ public async createSplit({
+ date,
+ denominator,
+ numerator,
+ symbolProfileId
+ }: {
+ date: Date;
+ denominator: number;
+ numerator: number;
+ symbolProfileId: string;
+ }) {
+ return this.assetProfileSplitService.upsert({
+ date,
+ denominator,
+ numerator,
+ symbolProfileId
+ });
+ }
+
+ public async deleteSplit({
+ id,
+ symbolProfileId
+ }: {
+ id: string;
+ symbolProfileId: string;
+ }) {
+ const isDeleted = await this.assetProfileSplitService.deleteById({
+ id,
+ symbolProfileId
+ });
+
+ if (!isDeleted) {
+ throw new NotFoundException();
+ }
+ }
+
public async getAssetProfile({
dataSource,
symbol
@@ -54,7 +92,7 @@ export class AssetProfilesService {
await this.activitiesService.getStatisticsByCurrency(currency));
}
- const [[assetProfile], marketData] = await Promise.all([
+ const [[assetProfile], marketData, splits] = await Promise.all([
this.symbolProfileService.getSymbolProfiles([
{
dataSource,
@@ -69,7 +107,8 @@ export class AssetProfilesService {
dataSource,
symbol
}
- })
+ }),
+ this.assetProfileSplitService.getSplits({ dataSource, symbol })
]);
if (assetProfile) {
@@ -80,6 +119,7 @@ export class AssetProfilesService {
return {
marketData,
+ splits,
assetProfile: assetProfile ?? {
activitiesCount,
currency,
@@ -92,6 +132,7 @@ export class AssetProfilesService {
}
};
}
+
public async getAssetProfiles({
filters = [],
presetId,
diff --git a/apps/api/src/app/user/user.service.ts b/apps/api/src/app/user/user.service.ts
index b706e4702..5d60c571d 100644
--- a/apps/api/src/app/user/user.service.ts
+++ b/apps/api/src/app/user/user.service.ts
@@ -549,9 +549,11 @@ export class UserService {
currentPermissions,
permissions.accessHoldingsChart,
permissions.createAccess,
+ permissions.createAssetProfileSplitOfOwnAssetProfile,
permissions.createMarketDataOfOwnAssetProfile,
permissions.createOwnTag,
permissions.createWatchlistItem,
+ permissions.deleteAssetProfileSplitOfOwnAssetProfile,
permissions.readAiPrompt,
permissions.readMarketDataOfOwnAssetProfile,
permissions.updateMarketDataOfOwnAssetProfile
diff --git a/apps/api/src/services/asset-profile-split/asset-profile-split.module.ts b/apps/api/src/services/asset-profile-split/asset-profile-split.module.ts
new file mode 100644
index 000000000..1219a2f98
--- /dev/null
+++ b/apps/api/src/services/asset-profile-split/asset-profile-split.module.ts
@@ -0,0 +1,12 @@
+import { PrismaModule } from '@ghostfolio/api/services/prisma/prisma.module';
+
+import { Module } from '@nestjs/common';
+
+import { AssetProfileSplitService } from './asset-profile-split.service';
+
+@Module({
+ exports: [AssetProfileSplitService],
+ imports: [PrismaModule],
+ providers: [AssetProfileSplitService]
+})
+export class AssetProfileSplitModule {}
diff --git a/apps/api/src/services/asset-profile-split/asset-profile-split.service.ts b/apps/api/src/services/asset-profile-split/asset-profile-split.service.ts
new file mode 100644
index 000000000..ec842caaf
--- /dev/null
+++ b/apps/api/src/services/asset-profile-split/asset-profile-split.service.ts
@@ -0,0 +1,87 @@
+import { PrismaService } from '@ghostfolio/api/services/prisma/prisma.service';
+import { resetHours } from '@ghostfolio/common/helper';
+import { AssetProfileIdentifier } from '@ghostfolio/common/interfaces';
+
+import { Injectable } from '@nestjs/common';
+import { AssetProfileSplit } from '@prisma/client';
+
+@Injectable()
+export class AssetProfileSplitService {
+ public constructor(private readonly prismaService: PrismaService) {}
+
+ /**
+ * Deletes the split with the given id of an asset profile and returns
+ * whether it existed
+ */
+ public async deleteById({
+ id,
+ symbolProfileId
+ }: {
+ id: string;
+ symbolProfileId: string;
+ }) {
+ const { count } = await this.prismaService.assetProfileSplit.deleteMany({
+ where: {
+ id,
+ symbolProfileId
+ }
+ });
+
+ return count > 0;
+ }
+
+ /**
+ * Returns the splits of the given asset profile in ascending order by date
+ */
+ public async getSplits({
+ dataSource,
+ symbol
+ }: AssetProfileIdentifier): Promise {
+ return this.prismaService.assetProfileSplit.findMany({
+ orderBy: [
+ {
+ date: 'asc'
+ }
+ ],
+ where: {
+ symbolProfile: {
+ dataSource,
+ symbol
+ }
+ }
+ });
+ }
+
+ public async upsert({
+ date,
+ denominator,
+ numerator,
+ symbolProfileId
+ }: {
+ date: Date;
+ denominator: number;
+ numerator: number;
+ symbolProfileId: string;
+ }): Promise {
+ const dateOfSplit = resetHours(date);
+
+ return this.prismaService.assetProfileSplit.upsert({
+ create: {
+ denominator,
+ numerator,
+ symbolProfileId,
+ date: dateOfSplit
+ },
+ update: {
+ denominator,
+ numerator
+ },
+ where: {
+ symbolProfileId_date: {
+ symbolProfileId,
+ date: dateOfSplit
+ }
+ }
+ });
+ }
+}
diff --git a/apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts b/apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
index 330688da1..f0e8eaf17 100644
--- a/apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
+++ b/apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
@@ -11,9 +11,11 @@ import {
DATE_FORMAT,
getCountryName,
getCurrencyFromSymbol,
+ getDateFormatString,
getStringOrNull,
getStringOrUndefined,
- isCurrency
+ isCurrency,
+ isSplitRatio
} from '@ghostfolio/common/helper';
import {
AdminMarketDataDetails,
@@ -37,6 +39,7 @@ import { GfSymbolAutocompleteComponent } from '@ghostfolio/ui/symbol-autocomplet
import { GfValueComponent } from '@ghostfolio/ui/value';
import { TextFieldModule } from '@angular/cdk/text-field';
+import { CommonModule } from '@angular/common';
import { HttpErrorResponse } from '@angular/common/http';
import {
ChangeDetectionStrategy,
@@ -63,6 +66,7 @@ import {
MatCheckboxChange,
MatCheckboxModule
} from '@angular/material/checkbox';
+import { MatDatepickerModule } from '@angular/material/datepicker';
import {
MAT_DIALOG_DATA,
MatDialogModule,
@@ -76,6 +80,7 @@ import { MatTabsModule } from '@angular/material/tabs';
import { IonIcon } from '@ionic/angular/standalone';
import {
AssetClass,
+ AssetProfileSplit,
AssetSubClass,
DataGatheringFrequency,
DataSource,
@@ -88,11 +93,14 @@ import { format } from 'date-fns';
import { StatusCodes } from 'http-status-codes';
import { addIcons } from 'ionicons';
import {
+ calendarClearOutline,
codeSlashOutline,
createOutline,
ellipsisVertical,
+ gitCompareOutline,
readerOutline,
- serverOutline
+ serverOutline,
+ trashOutline
} from 'ionicons/icons';
import { isBoolean } from 'lodash';
import ms from 'ms';
@@ -105,6 +113,7 @@ import { AssetProfileDialogParams } from './interfaces/interfaces';
changeDetection: ChangeDetectionStrategy.OnPush,
host: { class: 'd-flex flex-column h-100' },
imports: [
+ CommonModule,
FormsModule,
GfCurrencySelectorComponent,
GfEntityLogoComponent,
@@ -116,6 +125,7 @@ import { AssetProfileDialogParams } from './interfaces/interfaces';
IonIcon,
MatButtonModule,
MatCheckboxModule,
+ MatDatepickerModule,
MatDialogModule,
MatInputModule,
MatMenuModule,
@@ -196,6 +206,26 @@ export class GfAssetProfileDialogComponent implements OnInit {
}
);
+ protected readonly assetProfileSplitForm = this.formBuilder.group(
+ {
+ date: new FormControl(null, Validators.required),
+ denominator: new FormControl(null, Validators.required),
+ numerator: new FormControl(null, Validators.required)
+ },
+ {
+ validators: (control: AbstractControl): ValidationErrors | null => {
+ const { denominator, numerator } = control.value as {
+ denominator: number;
+ numerator: number;
+ };
+
+ return isSplitRatio({ denominator, numerator })
+ ? null
+ : { invalidSplitRatio: true };
+ }
+ }
+ );
+
protected readonly canDeleteAssetProfile = canDeleteAssetProfile;
protected canEditAssetProfile = true;
@@ -247,6 +277,7 @@ export class GfAssetProfileDialogComponent implements OnInit {
value: 'max'
}
];
+ protected defaultDateFormat: string;
protected readonly getCountryName = getCountryName;
protected historicalDataItems: LineChartItem[];
protected isBenchmark = false;
@@ -270,6 +301,8 @@ export class GfAssetProfileDialogComponent implements OnInit {
[name: string]: { name: string; value: number };
};
+ protected splits: AssetProfileSplit[] = [];
+
protected readonly translate = translate;
protected user: User;
@@ -293,11 +326,14 @@ export class GfAssetProfileDialogComponent implements OnInit {
private userService: UserService
) {
addIcons({
+ calendarClearOutline,
codeSlashOutline,
createOutline,
ellipsisVertical,
+ gitCompareOutline,
readerOutline,
- serverOutline
+ serverOutline,
+ trashOutline
});
}
@@ -310,6 +346,7 @@ export class GfAssetProfileDialogComponent implements OnInit {
this.benchmarks = benchmarks;
this.currencies = currencies;
+ this.defaultDateFormat = getDateFormatString(this.data.locale);
this.initialize();
}
@@ -364,8 +401,9 @@ export class GfAssetProfileDialogComponent implements OnInit {
symbol: this.data.symbol
})
.pipe(takeUntilDestroyed(this.destroyRef))
- .subscribe(({ assetProfile, marketData }) => {
+ .subscribe(({ assetProfile, marketData, splits }) => {
this.assetProfile = assetProfile;
+ this.splits = splits ?? [];
this.assetClassLabel = translate(this.assetProfile?.assetClass ?? '');
this.assetSubClassLabel = translate(
@@ -521,6 +559,45 @@ export class GfAssetProfileDialogComponent implements OnInit {
.subscribe();
}
+ protected onAddSplit() {
+ const { date, denominator, numerator } =
+ this.assetProfileSplitForm.getRawValue();
+
+ if (!date || !denominator || !numerator) {
+ return;
+ }
+
+ this.adminService
+ .postAssetProfileSplit({
+ dataSource: this.data.dataSource,
+ split: {
+ denominator,
+ numerator,
+ date: format(date, DATE_FORMAT)
+ },
+ symbol: this.data.symbol
+ })
+ .pipe(takeUntilDestroyed(this.destroyRef))
+ .subscribe(() => {
+ this.assetProfileSplitForm.reset();
+
+ this.initialize();
+ });
+ }
+
+ protected onDeleteSplit(aId: string) {
+ this.adminService
+ .deleteAssetProfileSplit({
+ dataSource: this.data.dataSource,
+ id: aId,
+ symbol: this.data.symbol
+ })
+ .pipe(takeUntilDestroyed(this.destroyRef))
+ .subscribe(() => {
+ this.initialize();
+ });
+ }
+
protected onMarketDataChanged(withRefresh: boolean = false) {
if (withRefresh) {
this.initialize();
diff --git a/apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html b/apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
index f0b914b1c..f5df34ab4 100644
--- a/apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
+++ b/apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
@@ -503,6 +503,133 @@
+
+ @if (false && user?.settings?.isExperimentalFeatures) {
+
+
+
+ Splits
+
+
+
+
+
+ Splits are stored for this asset profile, but are not applied
+ to the portfolio calculation yet.
+
+ @if (splits.length > 0) {
+
+
+
+
+
+ @for (split of splits; track split.id) {
+
+
+ {{ split.date | date: defaultDateFormat }}
+
+
+ {{ split.numerator }}:{{ split.denominator }}
+
+
+
+
+
+
+
+ }
+
+
+ }
+
+
+
+
+
+ }
@if (assetProfile?.dataSource === 'MANUAL') {
diff --git a/libs/common/src/lib/dtos/create-asset-profile-split.dto.ts b/libs/common/src/lib/dtos/create-asset-profile-split.dto.ts
new file mode 100644
index 000000000..a68f00883
--- /dev/null
+++ b/libs/common/src/lib/dtos/create-asset-profile-split.dto.ts
@@ -0,0 +1,39 @@
+import { IsAfter1970Constraint } from '@ghostfolio/common/validator-constraints/is-after-1970';
+import { IsSplitRatioConstraint } from '@ghostfolio/common/validator-constraints/is-split-ratio';
+
+import { IsInt, IsISO8601, Validate } from 'class-validator';
+
+export class CreateAssetProfileSplitDto {
+ /**
+ * The date the split becomes effective. Activities before this date are
+ * adjusted by the ratio.
+ */
+ @IsISO8601()
+ @Validate(IsAfter1970Constraint)
+ date: string;
+
+ /**
+ * The number of shares held before the split, for example 1 for a 4:1 split
+ * or 10 for a 1:10 reverse split.
+ */
+ @IsInt()
+ denominator: number;
+
+ /**
+ * The number of shares held after the split, for example 4 for a 4:1 split
+ * or 1 for a 1:10 reverse split.
+ *
+ * The resulting split factor is numerator / denominator. Both parts are kept
+ * so that the ratio stays exact, for example 1/3 for a 1:3 reverse split.
+ *
+ * Activities are adjusted by this ratio: the quantity is multiplied by it and
+ * the unit price divided by it, so that the total value of an activity stays
+ * the same.
+ *
+ * Market data is already split-adjusted by the data providers and must not be
+ * adjusted again.
+ */
+ @IsInt()
+ @Validate(IsSplitRatioConstraint)
+ numerator: number;
+}
diff --git a/libs/common/src/lib/dtos/index.ts b/libs/common/src/lib/dtos/index.ts
index 785115356..7cf385cd7 100644
--- a/libs/common/src/lib/dtos/index.ts
+++ b/libs/common/src/lib/dtos/index.ts
@@ -4,6 +4,7 @@ import { CreateAccessDto } from './create-access.dto';
import { CreateAccountBalanceDto } from './create-account-balance.dto';
import { CreateAccountWithBalancesDto } from './create-account-with-balances.dto';
import { CreateAccountDto } from './create-account.dto';
+import { CreateAssetProfileSplitDto } from './create-asset-profile-split.dto';
import { CreateAssetProfileWithMarketDataDto } from './create-asset-profile-with-market-data.dto';
import { CreateAssetProfileDto } from './create-asset-profile.dto';
import { CreateOrderDto } from './create-order.dto';
@@ -36,6 +37,7 @@ export {
CreateAccountDto,
CreateAccountWithBalancesDto,
CreateAssetProfileDto,
+ CreateAssetProfileSplitDto,
CreateAssetProfileWithMarketDataDto,
CreateOrderDto,
CreatePlatformDto,
diff --git a/libs/common/src/lib/helper.spec.ts b/libs/common/src/lib/helper.spec.ts
index c4947394f..42441a619 100644
--- a/libs/common/src/lib/helper.spec.ts
+++ b/libs/common/src/lib/helper.spec.ts
@@ -9,7 +9,8 @@ import {
getStringOrUndefined,
isAccountExcluded,
isCurrency,
- isCurrencySymbol
+ isCurrencySymbol,
+ isSplitRatio
} from '@ghostfolio/common/helper';
describe('Helper', () => {
@@ -280,4 +281,49 @@ describe('Helper', () => {
expect(isCurrencySymbol('')).toEqual(false);
});
});
+
+ describe('Is split ratio', () => {
+ it('Forward split', () => {
+ expect(isSplitRatio({ denominator: 1, numerator: 2 })).toEqual(true);
+ expect(isSplitRatio({ denominator: 1, numerator: 4 })).toEqual(true);
+ expect(isSplitRatio({ denominator: 2, numerator: 3 })).toEqual(true);
+ });
+
+ it('Reverse split', () => {
+ expect(isSplitRatio({ denominator: 10, numerator: 1 })).toEqual(true);
+ expect(isSplitRatio({ denominator: 3, numerator: 1 })).toEqual(true);
+ });
+
+ it('Ratio without effect', () => {
+ expect(isSplitRatio({ denominator: 1, numerator: 1 })).toEqual(false);
+ expect(isSplitRatio({ denominator: 3, numerator: 3 })).toEqual(false);
+ });
+
+ it('Zero or negative ratio', () => {
+ expect(isSplitRatio({ denominator: 1, numerator: 0 })).toEqual(false);
+ expect(isSplitRatio({ denominator: 0, numerator: 1 })).toEqual(false);
+ expect(isSplitRatio({ denominator: 1, numerator: -2 })).toEqual(false);
+ expect(isSplitRatio({ denominator: -2, numerator: 1 })).toEqual(false);
+ });
+
+ it('Non-integer ratio', () => {
+ expect(isSplitRatio({ denominator: 1, numerator: 1.5 })).toEqual(false);
+ expect(isSplitRatio({ denominator: 2.5, numerator: 1 })).toEqual(false);
+ expect(isSplitRatio({ denominator: 1, numerator: Number.NaN })).toEqual(
+ false
+ );
+ expect(
+ isSplitRatio({ denominator: 1, numerator: Number.POSITIVE_INFINITY })
+ ).toEqual(false);
+ });
+
+ it('Missing ratio', () => {
+ expect(
+ isSplitRatio({ denominator: undefined, numerator: undefined })
+ ).toEqual(false);
+ expect(isSplitRatio({ denominator: null, numerator: null })).toEqual(
+ false
+ );
+ });
+ });
});
diff --git a/libs/common/src/lib/helper.ts b/libs/common/src/lib/helper.ts
index 58927337e..22f969d02 100644
--- a/libs/common/src/lib/helper.ts
+++ b/libs/common/src/lib/helper.ts
@@ -526,6 +526,28 @@ export function isRootCurrency(aCurrency: string) {
});
}
+/**
+ * Validates the ratio of a stock split, expressed as the number of shares held
+ * after the split (numerator) per number of shares held before (denominator),
+ * for example 4 and 1 for a 4:1 split or 1 and 10 for a 1:10 reverse split. An
+ * equal numerator and denominator would be a no-op.
+ */
+export function isSplitRatio({
+ denominator,
+ numerator
+}: {
+ denominator: number;
+ numerator: number;
+}) {
+ return (
+ Number.isSafeInteger(numerator) &&
+ Number.isSafeInteger(denominator) &&
+ numerator > 0 &&
+ denominator > 0 &&
+ numerator !== denominator
+ );
+}
+
export function isValidSearchQuery(aQuery: string) {
return aQuery?.trim().length >= SEARCH_QUERY_MINIMUM_LENGTH;
}
diff --git a/libs/common/src/lib/interfaces/admin-market-data-details.interface.ts b/libs/common/src/lib/interfaces/admin-market-data-details.interface.ts
index dc44d0382..8cfe70f9c 100644
--- a/libs/common/src/lib/interfaces/admin-market-data-details.interface.ts
+++ b/libs/common/src/lib/interfaces/admin-market-data-details.interface.ts
@@ -1,8 +1,9 @@
-import { MarketData } from '@prisma/client';
+import { AssetProfileSplit, MarketData } from '@prisma/client';
import { EnhancedAssetProfile } from './enhanced-asset-profile.interface';
export interface AdminMarketDataDetails {
assetProfile: Partial;
marketData: MarketData[];
+ splits: AssetProfileSplit[];
}
diff --git a/libs/common/src/lib/interfaces/responses/asset-profile-response.interface.ts b/libs/common/src/lib/interfaces/responses/asset-profile-response.interface.ts
index d76188c73..26082c2c4 100644
--- a/libs/common/src/lib/interfaces/responses/asset-profile-response.interface.ts
+++ b/libs/common/src/lib/interfaces/responses/asset-profile-response.interface.ts
@@ -1,8 +1,9 @@
-import { MarketData } from '@prisma/client';
+import { AssetProfileSplit, MarketData } from '@prisma/client';
import { EnhancedAssetProfile } from '../enhanced-asset-profile.interface';
export interface AssetProfileResponse {
assetProfile: Partial;
marketData: MarketData[];
+ splits: AssetProfileSplit[];
}
diff --git a/libs/common/src/lib/permissions.ts b/libs/common/src/lib/permissions.ts
index 428de1788..811ded68c 100644
--- a/libs/common/src/lib/permissions.ts
+++ b/libs/common/src/lib/permissions.ts
@@ -12,6 +12,9 @@ export const permissions = {
createAccountBalance: 'createAccountBalance',
createActivity: 'createActivity',
createApiKey: 'createApiKey',
+ createAssetProfileSplit: 'createAssetProfileSplit',
+ createAssetProfileSplitOfOwnAssetProfile:
+ 'createAssetProfileSplitOfOwnAssetProfile',
createMarketData: 'createMarketData',
createMarketDataOfOwnAssetProfile: 'createMarketDataOfOwnAssetProfile',
createOwnTag: 'createOwnTag',
@@ -23,6 +26,9 @@ export const permissions = {
deleteAccount: 'deleteAccount',
deleteAccountBalance: 'deleteAccountBalance',
deleteActivity: 'deleteActivity',
+ deleteAssetProfileSplit: 'deleteAssetProfileSplit',
+ deleteAssetProfileSplitOfOwnAssetProfile:
+ 'deleteAssetProfileSplitOfOwnAssetProfile',
deleteAuthDevice: 'deleteAuthDevice',
deleteOwnUser: 'deleteOwnUser',
deletePlatform: 'deletePlatform',
@@ -80,6 +86,8 @@ export function getPermissions(aRole: Role): string[] {
permissions.createWatchlistItem,
permissions.deleteAccountBalance,
permissions.deleteWatchlistItem,
+ permissions.createAssetProfileSplit,
+ permissions.createAssetProfileSplitOfOwnAssetProfile,
permissions.createMarketData,
permissions.createMarketDataOfOwnAssetProfile,
permissions.createOwnTag,
@@ -88,6 +96,8 @@ export function getPermissions(aRole: Role): string[] {
permissions.deleteAccess,
permissions.deleteAccount,
permissions.deleteActivity,
+ permissions.deleteAssetProfileSplit,
+ permissions.deleteAssetProfileSplitOfOwnAssetProfile,
permissions.deleteAuthDevice,
permissions.deletePlatform,
permissions.deleteTag,
@@ -128,6 +138,7 @@ export function getPermissions(aRole: Role): string[] {
permissions.createAccount,
permissions.createAccountBalance,
permissions.createActivity,
+ permissions.createAssetProfileSplitOfOwnAssetProfile,
permissions.createMarketDataOfOwnAssetProfile,
permissions.createOwnTag,
permissions.createWatchlistItem,
@@ -135,6 +146,7 @@ export function getPermissions(aRole: Role): string[] {
permissions.deleteAccount,
permissions.deleteAccountBalance,
permissions.deleteActivity,
+ permissions.deleteAssetProfileSplitOfOwnAssetProfile,
permissions.deleteAuthDevice,
permissions.deleteWatchlistItem,
permissions.readAiPrompt,
diff --git a/libs/common/src/lib/validator-constraints/is-split-ratio.ts b/libs/common/src/lib/validator-constraints/is-split-ratio.ts
new file mode 100644
index 000000000..d3cd454e8
--- /dev/null
+++ b/libs/common/src/lib/validator-constraints/is-split-ratio.ts
@@ -0,0 +1,18 @@
+import { isSplitRatio } from '@ghostfolio/common/helper';
+
+import {
+ ValidationArguments,
+ ValidatorConstraint,
+ ValidatorConstraintInterface
+} from 'class-validator';
+
+@ValidatorConstraint({ name: 'isSplitRatio' })
+export class IsSplitRatioConstraint implements ValidatorConstraintInterface {
+ public defaultMessage() {
+ return 'numerator and denominator must be different positive integers';
+ }
+
+ public validate(_: unknown, { object }: ValidationArguments) {
+ return isSplitRatio(object as { denominator: number; numerator: number });
+ }
+}
diff --git a/libs/ui/src/lib/services/admin.service.ts b/libs/ui/src/lib/services/admin.service.ts
index 6a06ef76b..8510f1729 100644
--- a/libs/ui/src/lib/services/admin.service.ts
+++ b/libs/ui/src/lib/services/admin.service.ts
@@ -4,6 +4,7 @@ import {
HEADER_KEY_TOKEN
} from '@ghostfolio/common/config';
import {
+ CreateAssetProfileSplitDto,
CreatePlatformDto,
UpdateAssetProfileDto,
UpdatePlatformDto
@@ -23,7 +24,7 @@ import { GF_ENVIRONMENT } from '@ghostfolio/ui/environment';
import { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http';
import { Injectable, inject } from '@angular/core';
-import { MarketData, Platform } from '@prisma/client';
+import { AssetProfileSplit, MarketData, Platform } from '@prisma/client';
import { JobStatus } from 'bull';
import { isNumber } from 'lodash';
@@ -61,6 +62,16 @@ export class AdminService {
return this.http.delete(`/api/v1/platform/${aId}`);
}
+ public deleteAssetProfileSplit({
+ dataSource,
+ id,
+ symbol
+ }: AssetProfileIdentifier & { id: string }) {
+ return this.http.delete(
+ `/api/v1/asset-profiles/${dataSource}/${encodeURIComponent(symbol)}/splits/${id}`
+ );
+ }
+
public deleteProfileData({ dataSource, symbol }: AssetProfileIdentifier) {
return this.http.delete(
`/api/v1/admin/profile-data/${dataSource}/${encodeURIComponent(symbol)}`
@@ -217,6 +228,17 @@ export class AdminService {
);
}
+ public postAssetProfileSplit({
+ dataSource,
+ split,
+ symbol
+ }: AssetProfileIdentifier & { split: CreateAssetProfileSplitDto }) {
+ return this.http.post(
+ `/api/v1/asset-profiles/${dataSource}/${encodeURIComponent(symbol)}/splits`,
+ split
+ );
+ }
+
public postPlatform(aPlatform: CreatePlatformDto) {
return this.http.post(`/api/v1/platform`, aPlatform);
}
diff --git a/libs/ui/src/lib/services/data.service.ts b/libs/ui/src/lib/services/data.service.ts
index bc1512550..7ccd9d1d9 100644
--- a/libs/ui/src/lib/services/data.service.ts
+++ b/libs/ui/src/lib/services/data.service.ts
@@ -589,6 +589,10 @@ export class DataService {
item.date = parseISO(item.date);
}
+ for (const item of data.splits ?? []) {
+ item.date = parseISO(item.date);
+ }
+
return data;
})
);
diff --git a/prisma/migrations/20260802000000_added_asset_profile_split/migration.sql b/prisma/migrations/20260802000000_added_asset_profile_split/migration.sql
new file mode 100644
index 000000000..9003916b4
--- /dev/null
+++ b/prisma/migrations/20260802000000_added_asset_profile_split/migration.sql
@@ -0,0 +1,21 @@
+-- CreateTable
+CREATE TABLE "AssetProfileSplit" (
+ "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ "date" TIMESTAMP(3) NOT NULL,
+ "denominator" INTEGER NOT NULL,
+ "id" TEXT NOT NULL,
+ "numerator" INTEGER NOT NULL,
+ "symbolProfileId" TEXT NOT NULL,
+ "updatedAt" TIMESTAMP(3) NOT NULL,
+
+ CONSTRAINT "AssetProfileSplit_pkey" PRIMARY KEY ("id")
+);
+
+-- CreateIndex
+CREATE INDEX "AssetProfileSplit_date_idx" ON "AssetProfileSplit"("date");
+
+-- CreateIndex
+CREATE UNIQUE INDEX "AssetProfileSplit_symbolProfileId_date_key" ON "AssetProfileSplit"("symbolProfileId", "date");
+
+-- AddForeignKey
+ALTER TABLE "AssetProfileSplit" ADD CONSTRAINT "AssetProfileSplit_symbolProfileId_fkey" FOREIGN KEY ("symbolProfileId") REFERENCES "SymbolProfile"("id") ON DELETE CASCADE ON UPDATE CASCADE;
diff --git a/prisma/schema.prisma b/prisma/schema.prisma
index faf7a9259..77faccd49 100644
--- a/prisma/schema.prisma
+++ b/prisma/schema.prisma
@@ -116,6 +116,33 @@ model AssetProfileResolution {
@@unique([dataSourceOrigin, symbolOrigin])
}
+/// A stock split of an asset profile. The numerator is the number of shares
+/// held after the split, the denominator the number of shares held before, for
+/// example 4 and 1 for a 4:1 split or 1 and 10 for a 1:10 reverse split.
+///
+/// The ratio is stored as two integers instead of the resulting factor, so that
+/// it stays exact, for example 1/3 for a 1:3 reverse split.
+///
+/// Activities before the date are adjusted by the ratio: the quantity is
+/// multiplied by it and the unit price divided by it, so that the total value
+/// of an activity stays the same.
+///
+/// Market data is already split-adjusted by the data providers and must not be
+/// adjusted again.
+model AssetProfileSplit {
+ createdAt DateTime @default(now())
+ date DateTime
+ denominator Int
+ id String @id @default(uuid())
+ numerator Int
+ symbolProfile SymbolProfile @relation(fields: [symbolProfileId], onDelete: Cascade, references: [id])
+ symbolProfileId String
+ updatedAt DateTime @updatedAt
+
+ @@unique([symbolProfileId, date])
+ @@index([date])
+}
+
model AuthDevice {
createdAt DateTime @default(now())
credentialId Bytes
@@ -200,6 +227,7 @@ model SymbolProfile {
activities Order[]
assetClass AssetClass?
assetProfileOverrides AssetProfileOverrides?
+ assetProfileSplits AssetProfileSplit[]
assetSubClass AssetSubClass?
comment String?
countries Json?
From 70eaf0999a5829e7595e712e38ddde19c31c247b Mon Sep 17 00:00:00 2001
From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com>
Date: Sun, 2 Aug 2026 17:17:01 +0200
Subject: [PATCH 51/86] Bugfix/changelog entry of stock splits (#7516)
Update changelog
---
CHANGELOG.md | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 53c443900..38e3855f2 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -5,12 +5,14 @@ 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).
-## 3.40.0 - 2026-08-02
+## Unreleased
### Added
- Added the database model and endpoints to manage the stock splits of an asset profile (experimental)
+## 3.40.0 - 2026-08-02
+
### Changed
- Improved the style of the read-only tags in the tags selector component
From d08239f31f8795b2424ce6299bf9451c6225b66b Mon Sep 17 00:00:00 2001
From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com>
Date: Sun, 2 Aug 2026 20:00:52 +0200
Subject: [PATCH 52/86] Task/destructure query parameters in controllers
(#7495)
Destructure query parameters in controllers
---
.../app/activities/activities.controller.ts | 66 ++++++++++++-------
.../ghostfolio/ghostfolio.controller.ts | 20 +++---
apps/api/src/app/export/export.controller.ts | 32 ++++++---
3 files changed, 76 insertions(+), 42 deletions(-)
diff --git a/apps/api/src/app/activities/activities.controller.ts b/apps/api/src/app/activities/activities.controller.ts
index daade2a59..a1b559c84 100644
--- a/apps/api/src/app/activities/activities.controller.ts
+++ b/apps/api/src/app/activities/activities.controller.ts
@@ -62,7 +62,16 @@ export class ActivitiesController {
@UseInterceptors(TransformDataSourceInRequestInterceptor)
public async deleteActivities(
@Headers(HEADER_KEY_IMPERSONATION.toLowerCase()) impersonationId: string,
- @Query() query: ActivitiesFilterDto
+ @Query()
+ {
+ accounts,
+ activityTypes,
+ assetClasses,
+ dataSource,
+ range,
+ symbol,
+ tags
+ }: ActivitiesFilterDto
): Promise {
if (impersonationId) {
throw new HttpException(
@@ -74,25 +83,25 @@ export class ActivitiesController {
let endDate: Date;
let startDate: Date;
- if (query.range) {
+ if (range) {
({ endDate, startDate } = getIntervalFromDateRange({
- dateRange: query.range
+ dateRange: range
}));
}
const filters = this.apiService.buildFiltersFromQueryParams({
- filterByAccounts: query.accounts,
- filterByAssetClasses: query.assetClasses,
- filterByDataSource: query.dataSource,
- filterBySymbol: query.symbol,
- filterByTags: query.tags
+ filterByAccounts: accounts,
+ filterByAssetClasses: assetClasses,
+ filterByDataSource: dataSource,
+ filterBySymbol: symbol,
+ filterByTags: tags
});
return this.activitiesService.deleteActivities({
endDate,
filters,
startDate,
- types: query.activityTypes,
+ types: activityTypes,
userId: this.request.user.id
});
}
@@ -125,23 +134,36 @@ export class ActivitiesController {
@UseInterceptors(TransformDataSourceInResponseInterceptor)
public async getAllActivities(
@Headers(HEADER_KEY_IMPERSONATION.toLowerCase()) impersonationId: string,
- @Query() query: GetActivitiesDto
+ @Query()
+ {
+ accounts,
+ activityTypes,
+ assetClasses,
+ dataSource,
+ range,
+ skip,
+ sortColumn,
+ sortDirection,
+ symbol,
+ tags,
+ take
+ }: GetActivitiesDto
): Promise {
let endDate: Date;
let startDate: Date;
- if (query.range) {
+ if (range) {
({ endDate, startDate } = getIntervalFromDateRange({
- dateRange: query.range
+ dateRange: range
}));
}
const filters = this.apiService.buildFiltersFromQueryParams({
- filterByAccounts: query.accounts,
- filterByAssetClasses: query.assetClasses,
- filterByDataSource: query.dataSource,
- filterBySymbol: query.symbol,
- filterByTags: query.tags
+ filterByAccounts: accounts,
+ filterByAssetClasses: assetClasses,
+ filterByDataSource: dataSource,
+ filterBySymbol: symbol,
+ filterByTags: tags
});
const impersonationUserId =
@@ -152,14 +174,14 @@ export class ActivitiesController {
const { activities, count } = await this.activitiesService.getActivities({
endDate,
filters,
+ skip,
+ sortColumn,
+ sortDirection,
startDate,
+ take,
userCurrency,
includeDrafts: true,
- skip: query.skip,
- sortColumn: query.sortColumn,
- sortDirection: query.sortDirection,
- take: query.take,
- types: query.activityTypes,
+ types: activityTypes,
userId: impersonationUserId || this.request.user.id,
withExcludedAccountsAndActivities: true
});
diff --git a/apps/api/src/app/endpoints/data-providers/ghostfolio/ghostfolio.controller.ts b/apps/api/src/app/endpoints/data-providers/ghostfolio/ghostfolio.controller.ts
index 6e5f48d63..0cdca8110 100644
--- a/apps/api/src/app/endpoints/data-providers/ghostfolio/ghostfolio.controller.ts
+++ b/apps/api/src/app/endpoints/data-providers/ghostfolio/ghostfolio.controller.ts
@@ -90,7 +90,7 @@ export class GhostfolioController {
@Version('2')
public async getDividends(
@Param('symbol') symbol: string,
- @Query() query: GetDividendsDto
+ @Query() { from, granularity, to }: GetDividendsDto
): Promise {
const maxDailyRequests = await this.ghostfolioService.getMaxDailyRequests();
@@ -105,10 +105,10 @@ export class GhostfolioController {
try {
const dividends = await this.ghostfolioService.getDividends({
+ granularity,
symbol,
- from: parseDate(query.from),
- granularity: query.granularity,
- to: parseDate(query.to)
+ from: parseDate(from),
+ to: parseDate(to)
});
await this.ghostfolioService.incrementDailyRequests({
@@ -130,7 +130,7 @@ export class GhostfolioController {
@Version('2')
public async getHistorical(
@Param('symbol') symbol: string,
- @Query() query: GetHistoricalDto
+ @Query() { from, granularity, to }: GetHistoricalDto
): Promise {
const maxDailyRequests = await this.ghostfolioService.getMaxDailyRequests();
@@ -145,10 +145,10 @@ export class GhostfolioController {
try {
const historicalData = await this.ghostfolioService.getHistorical({
+ granularity,
symbol,
- from: parseDate(query.from),
- granularity: query.granularity,
- to: parseDate(query.to)
+ from: parseDate(from),
+ to: parseDate(to)
});
await this.ghostfolioService.incrementDailyRequests({
@@ -247,7 +247,7 @@ export class GhostfolioController {
@UseGuards(AuthGuard('api-key'), HasPermissionGuard)
@Version('2')
public async getQuotes(
- @Query() query: GetQuotesDto
+ @Query() { symbols }: GetQuotesDto
): Promise {
const maxDailyRequests = await this.ghostfolioService.getMaxDailyRequests();
@@ -262,7 +262,7 @@ export class GhostfolioController {
try {
const quotes = await this.ghostfolioService.getQuotes({
- symbols: query.symbols
+ symbols
});
await this.ghostfolioService.incrementDailyRequests({
diff --git a/apps/api/src/app/export/export.controller.ts b/apps/api/src/app/export/export.controller.ts
index f503088d4..27218d03d 100644
--- a/apps/api/src/app/export/export.controller.ts
+++ b/apps/api/src/app/export/export.controller.ts
@@ -32,30 +32,42 @@ export class ExportController {
@UseGuards(AuthGuard('jwt'), HasPermissionGuard)
@UseInterceptors(TransformDataSourceInRequestInterceptor)
@UseInterceptors(TransformDataSourceInResponseInterceptor)
- public async export(@Query() query: GetExportDto): Promise {
+ public async export(
+ @Query()
+ {
+ accounts,
+ activityIds,
+ activityTypes,
+ assetClasses,
+ dataSource,
+ range,
+ symbol,
+ tags
+ }: GetExportDto
+ ): Promise {
let endDate: Date;
let startDate: Date;
- if (query.range) {
+ if (range) {
({ endDate, startDate } = getIntervalFromDateRange({
- dateRange: query.range
+ dateRange: range
}));
}
const filters = this.apiService.buildFiltersFromQueryParams({
- filterByAccounts: query.accounts,
- filterByAssetClasses: query.assetClasses,
- filterByDataSource: query.dataSource,
- filterBySymbol: query.symbol,
- filterByTags: query.tags
+ filterByAccounts: accounts,
+ filterByAssetClasses: assetClasses,
+ filterByDataSource: dataSource,
+ filterBySymbol: symbol,
+ filterByTags: tags
});
return this.exportService.export({
+ activityIds,
+ activityTypes,
endDate,
filters,
startDate,
- activityIds: query.activityIds,
- activityTypes: query.activityTypes,
userId: this.request.user.id,
userSettings: this.request.user.settings.settings
});
From 0efadd7c8c374ee363818fa7a9c7b13f478d55f1 Mon Sep 17 00:00:00 2001
From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com>
Date: Sun, 2 Aug 2026 20:36:40 +0200
Subject: [PATCH 53/86] Task/destructure query parameters in controllers (part
2) (#7505)
Destructure query parameters in controllers
---
.../app/activities/activities-filter.dto.ts | 30 +---
.../api/src/app/endpoints/ai/ai.controller.ts | 18 +-
.../benchmarks/benchmarks.controller.ts | 37 ++--
.../get-benchmark-market-data.dto.ts | 12 ++
apps/api/src/app/portfolio/get-details.dto.ts | 12 ++
.../src/app/portfolio/get-dividends.dto.ts | 10 ++
.../api/src/app/portfolio/get-holdings.dto.ts | 14 ++
.../src/app/portfolio/get-investments.dto.ts | 10 ++
.../src/app/portfolio/get-performance.dto.ts | 12 ++
.../src/app/portfolio/portfolio.controller.ts | 159 ++++++++++--------
apps/api/src/dtos/date-range-filter.dto.ts | 16 ++
apps/api/src/dtos/filter.dto.ts | 23 +++
.../account-detail-dialog.component.ts | 3 +-
libs/ui/src/lib/services/data.service.ts | 8 +-
14 files changed, 227 insertions(+), 137 deletions(-)
create mode 100644 apps/api/src/app/endpoints/benchmarks/get-benchmark-market-data.dto.ts
create mode 100644 apps/api/src/app/portfolio/get-details.dto.ts
create mode 100644 apps/api/src/app/portfolio/get-dividends.dto.ts
create mode 100644 apps/api/src/app/portfolio/get-holdings.dto.ts
create mode 100644 apps/api/src/app/portfolio/get-investments.dto.ts
create mode 100644 apps/api/src/app/portfolio/get-performance.dto.ts
create mode 100644 apps/api/src/dtos/date-range-filter.dto.ts
create mode 100644 apps/api/src/dtos/filter.dto.ts
diff --git a/apps/api/src/app/activities/activities-filter.dto.ts b/apps/api/src/app/activities/activities-filter.dto.ts
index e5a22c020..0c56aacc8 100644
--- a/apps/api/src/app/activities/activities-filter.dto.ts
+++ b/apps/api/src/app/activities/activities-filter.dto.ts
@@ -1,19 +1,13 @@
-import { DATE_RANGES } from '@ghostfolio/common/config';
+import { DATE_RANGE_PATTERN } from '@ghostfolio/api/dtos/date-range-filter.dto';
+import { FilterDto } from '@ghostfolio/api/dtos/filter.dto';
import { DateRange } from '@ghostfolio/common/types';
import { Type as ActivityType } from '@prisma/client';
import { Transform, TransformFnParams } from 'class-transformer';
-import { IsEnum, IsOptional, IsString, Matches } from 'class-validator';
+import { IsEnum, IsOptional, Matches } from 'class-validator';
import { isString } from 'lodash';
-// A named date range or a calendar year like '2024', '2023', '2022', etc.
-const DATE_RANGE_PATTERN = new RegExp(`^(${DATE_RANGES.join('|')}|\\d{4})$`);
-
-export class ActivitiesFilterDto {
- @IsOptional()
- @IsString()
- accounts?: string;
-
+export class ActivitiesFilterDto extends FilterDto {
@IsEnum(ActivityType, { each: true })
@IsOptional()
@Transform(({ value }: TransformFnParams) => {
@@ -21,23 +15,7 @@ export class ActivitiesFilterDto {
})
activityTypes?: ActivityType[];
- @IsOptional()
- @IsString()
- assetClasses?: string;
-
- @IsOptional()
- @IsString()
- dataSource?: string;
-
@IsOptional()
@Matches(DATE_RANGE_PATTERN)
range?: DateRange;
-
- @IsOptional()
- @IsString()
- symbol?: string;
-
- @IsOptional()
- @IsString()
- tags?: string;
}
diff --git a/apps/api/src/app/endpoints/ai/ai.controller.ts b/apps/api/src/app/endpoints/ai/ai.controller.ts
index b1607b53b..6c8102db1 100644
--- a/apps/api/src/app/endpoints/ai/ai.controller.ts
+++ b/apps/api/src/app/endpoints/ai/ai.controller.ts
@@ -1,4 +1,5 @@
import { HasPermission } from '@ghostfolio/api/decorators/has-permission.decorator';
+import { FilterDto } from '@ghostfolio/api/dtos/filter.dto';
import { HasPermissionGuard } from '@ghostfolio/api/guards/has-permission.guard';
import { ApiService } from '@ghostfolio/api/services/api/api.service';
import { AiPromptResponse } from '@ghostfolio/common/interfaces';
@@ -31,18 +32,15 @@ export class AiController {
@UseGuards(AuthGuard('jwt'), HasPermissionGuard)
public async getPrompt(
@Param('mode') mode: AiPromptMode,
- @Query('accounts') filterByAccounts?: string,
- @Query('assetClasses') filterByAssetClasses?: string,
- @Query('dataSource') filterByDataSource?: string,
- @Query('symbol') filterBySymbol?: string,
- @Query('tags') filterByTags?: string
+ @Query()
+ { accounts, assetClasses, dataSource, symbol, tags }: FilterDto
): Promise {
const filters = this.apiService.buildFiltersFromQueryParams({
- filterByAccounts,
- filterByAssetClasses,
- filterByDataSource,
- filterBySymbol,
- filterByTags
+ filterByAccounts: accounts,
+ filterByAssetClasses: assetClasses,
+ filterByDataSource: dataSource,
+ filterBySymbol: symbol,
+ filterByTags: tags
});
const prompt = await this.aiService.getPrompt({
diff --git a/apps/api/src/app/endpoints/benchmarks/benchmarks.controller.ts b/apps/api/src/app/endpoints/benchmarks/benchmarks.controller.ts
index 74bb6b672..53df9bd92 100644
--- a/apps/api/src/app/endpoints/benchmarks/benchmarks.controller.ts
+++ b/apps/api/src/app/endpoints/benchmarks/benchmarks.controller.ts
@@ -5,17 +5,14 @@ import { TransformDataSourceInResponseInterceptor } from '@ghostfolio/api/interc
import { ApiService } from '@ghostfolio/api/services/api/api.service';
import { BenchmarkService } from '@ghostfolio/api/services/benchmark/benchmark.service';
import { getIntervalFromDateRange } from '@ghostfolio/common/calculation-helper';
-import {
- DEFAULT_DATE_RANGE,
- HEADER_KEY_IMPERSONATION
-} from '@ghostfolio/common/config';
+import { HEADER_KEY_IMPERSONATION } from '@ghostfolio/common/config';
import type {
AssetProfileIdentifier,
BenchmarkMarketDataDetailsResponse,
BenchmarkResponse
} from '@ghostfolio/common/interfaces';
import { permissions } from '@ghostfolio/common/permissions';
-import type { DateRange, RequestWithUser } from '@ghostfolio/common/types';
+import type { RequestWithUser } from '@ghostfolio/common/types';
import {
Body,
@@ -37,6 +34,7 @@ import { DataSource } from '@prisma/client';
import { StatusCodes, getReasonPhrase } from 'http-status-codes';
import { BenchmarksService } from './benchmarks.service';
+import { GetBenchmarkMarketDataDto } from './get-benchmark-market-data.dto';
@Controller('benchmarks')
export class BenchmarksController {
@@ -121,38 +119,39 @@ export class BenchmarksController {
@Param('dataSource') dataSource: DataSource,
@Param('startDateString') startDateString: string,
@Param('symbol') symbol: string,
- @Query('range') dateRange: DateRange = DEFAULT_DATE_RANGE,
- @Query('accounts') filterByAccounts?: string,
- @Query('assetClasses') filterByAssetClasses?: string,
- @Query('dataSource') filterByDataSource?: string,
- @Query('symbol') filterBySymbol?: string,
- @Query('tags') filterByTags?: string,
- @Query('withExcludedAccounts') withExcludedAccountsParam = 'false'
+ @Query()
+ {
+ accounts,
+ assetClasses,
+ dataSource: filterByDataSource,
+ range,
+ symbol: filterBySymbol,
+ tags,
+ withExcludedAccounts
+ }: GetBenchmarkMarketDataDto
): Promise {
const { endDate, startDate } = getIntervalFromDateRange({
- dateRange,
+ dateRange: range,
startDate: new Date(startDateString)
});
const filters = this.apiService.buildFiltersFromQueryParams({
- filterByAccounts,
- filterByAssetClasses,
filterByDataSource,
filterBySymbol,
- filterByTags
+ filterByAccounts: accounts,
+ filterByAssetClasses: assetClasses,
+ filterByTags: tags
});
- const withExcludedAccounts = withExcludedAccountsParam === 'true';
-
return this.benchmarksService.getMarketDataForUser({
dataSource,
- dateRange,
endDate,
filters,
impersonationId,
startDate,
symbol,
withExcludedAccounts,
+ dateRange: range,
user: this.request.user
});
}
diff --git a/apps/api/src/app/endpoints/benchmarks/get-benchmark-market-data.dto.ts b/apps/api/src/app/endpoints/benchmarks/get-benchmark-market-data.dto.ts
new file mode 100644
index 000000000..9599ade59
--- /dev/null
+++ b/apps/api/src/app/endpoints/benchmarks/get-benchmark-market-data.dto.ts
@@ -0,0 +1,12 @@
+import { DateRangeFilterDto } from '@ghostfolio/api/dtos/date-range-filter.dto';
+
+import { Transform, TransformFnParams } from 'class-transformer';
+import { IsBoolean } from 'class-validator';
+
+export class GetBenchmarkMarketDataDto extends DateRangeFilterDto {
+ @IsBoolean()
+ @Transform(({ value }: TransformFnParams) => {
+ return value === 'true';
+ })
+ withExcludedAccounts? = false;
+}
diff --git a/apps/api/src/app/portfolio/get-details.dto.ts b/apps/api/src/app/portfolio/get-details.dto.ts
new file mode 100644
index 000000000..e2a13e3b6
--- /dev/null
+++ b/apps/api/src/app/portfolio/get-details.dto.ts
@@ -0,0 +1,12 @@
+import { DateRangeFilterDto } from '@ghostfolio/api/dtos/date-range-filter.dto';
+
+import { Transform, TransformFnParams } from 'class-transformer';
+import { IsBoolean } from 'class-validator';
+
+export class GetDetailsDto extends DateRangeFilterDto {
+ @IsBoolean()
+ @Transform(({ value }: TransformFnParams) => {
+ return value === 'true';
+ })
+ withMarkets? = false;
+}
diff --git a/apps/api/src/app/portfolio/get-dividends.dto.ts b/apps/api/src/app/portfolio/get-dividends.dto.ts
new file mode 100644
index 000000000..f1dff4a97
--- /dev/null
+++ b/apps/api/src/app/portfolio/get-dividends.dto.ts
@@ -0,0 +1,10 @@
+import { DateRangeFilterDto } from '@ghostfolio/api/dtos/date-range-filter.dto';
+import { GroupBy } from '@ghostfolio/common/types';
+
+import { IsIn, IsOptional } from 'class-validator';
+
+export class GetDividendsDto extends DateRangeFilterDto {
+ @IsIn(['month', 'year'] as GroupBy[])
+ @IsOptional()
+ groupBy?: GroupBy;
+}
diff --git a/apps/api/src/app/portfolio/get-holdings.dto.ts b/apps/api/src/app/portfolio/get-holdings.dto.ts
new file mode 100644
index 000000000..b776bfe0d
--- /dev/null
+++ b/apps/api/src/app/portfolio/get-holdings.dto.ts
@@ -0,0 +1,14 @@
+import { DateRangeFilterDto } from '@ghostfolio/api/dtos/date-range-filter.dto';
+import { HoldingType } from '@ghostfolio/common/types';
+
+import { IsIn, IsOptional, IsString } from 'class-validator';
+
+export class GetHoldingsDto extends DateRangeFilterDto {
+ @IsIn(['ACTIVE', 'CLOSED'] as HoldingType[])
+ @IsOptional()
+ holdingType?: HoldingType;
+
+ @IsOptional()
+ @IsString()
+ query?: string;
+}
diff --git a/apps/api/src/app/portfolio/get-investments.dto.ts b/apps/api/src/app/portfolio/get-investments.dto.ts
new file mode 100644
index 000000000..bf312a543
--- /dev/null
+++ b/apps/api/src/app/portfolio/get-investments.dto.ts
@@ -0,0 +1,10 @@
+import { DateRangeFilterDto } from '@ghostfolio/api/dtos/date-range-filter.dto';
+import { GroupBy } from '@ghostfolio/common/types';
+
+import { IsIn, IsOptional } from 'class-validator';
+
+export class GetInvestmentsDto extends DateRangeFilterDto {
+ @IsIn(['month', 'year'] as GroupBy[])
+ @IsOptional()
+ groupBy?: GroupBy;
+}
diff --git a/apps/api/src/app/portfolio/get-performance.dto.ts b/apps/api/src/app/portfolio/get-performance.dto.ts
new file mode 100644
index 000000000..5992c2a09
--- /dev/null
+++ b/apps/api/src/app/portfolio/get-performance.dto.ts
@@ -0,0 +1,12 @@
+import { DateRangeFilterDto } from '@ghostfolio/api/dtos/date-range-filter.dto';
+
+import { Transform, TransformFnParams } from 'class-transformer';
+import { IsBoolean } from 'class-validator';
+
+export class GetPerformanceDto extends DateRangeFilterDto {
+ @IsBoolean()
+ @Transform(({ value }: TransformFnParams) => {
+ return value === 'true';
+ })
+ withExcludedAccounts? = false;
+}
diff --git a/apps/api/src/app/portfolio/portfolio.controller.ts b/apps/api/src/app/portfolio/portfolio.controller.ts
index 5239de24f..f6e8648d5 100644
--- a/apps/api/src/app/portfolio/portfolio.controller.ts
+++ b/apps/api/src/app/portfolio/portfolio.controller.ts
@@ -15,7 +15,6 @@ import { ConfigurationService } from '@ghostfolio/api/services/configuration/con
import { ImpersonationService } from '@ghostfolio/api/services/impersonation/impersonation.service';
import { getIntervalFromDateRange } from '@ghostfolio/common/calculation-helper';
import {
- DEFAULT_DATE_RANGE,
HEADER_KEY_IMPERSONATION,
UNKNOWN_KEY
} from '@ghostfolio/common/config';
@@ -34,11 +33,7 @@ import {
isRestrictedView,
permissions
} from '@ghostfolio/common/permissions';
-import type {
- DateRange,
- GroupBy,
- RequestWithUser
-} from '@ghostfolio/common/types';
+import type { RequestWithUser } from '@ghostfolio/common/types';
import {
Body,
@@ -60,6 +55,11 @@ import { AssetClass, AssetSubClass, DataSource } from '@prisma/client';
import { Big } from 'big.js';
import { StatusCodes, getReasonPhrase } from 'http-status-codes';
+import { GetDetailsDto } from './get-details.dto';
+import { GetDividendsDto } from './get-dividends.dto';
+import { GetHoldingsDto } from './get-holdings.dto';
+import { GetInvestmentsDto } from './get-investments.dto';
+import { GetPerformanceDto } from './get-performance.dto';
import { PortfolioService } from './portfolio.service';
import { UpdateHoldingTagsDto } from './update-holding-tags.dto';
@@ -82,16 +82,17 @@ export class PortfolioController {
@UseInterceptors(TransformDataSourceInResponseInterceptor)
public async getDetails(
@Headers(HEADER_KEY_IMPERSONATION.toLowerCase()) impersonationId: string,
- @Query('accounts') filterByAccounts?: string,
- @Query('assetClasses') filterByAssetClasses?: string,
- @Query('dataSource') filterByDataSource?: string,
- @Query('range') dateRange: DateRange = DEFAULT_DATE_RANGE,
- @Query('symbol') filterBySymbol?: string,
- @Query('tags') filterByTags?: string,
- @Query('withMarkets') withMarketsParam = 'false'
+ @Query()
+ {
+ accounts: filterByAccounts,
+ assetClasses: filterByAssetClasses,
+ dataSource: filterByDataSource,
+ range,
+ symbol: filterBySymbol,
+ tags: filterByTags,
+ withMarkets
+ }: GetDetailsDto
): Promise {
- const withMarkets = withMarketsParam === 'true';
-
let hasDetails = true;
let hasError = false;
@@ -118,10 +119,10 @@ export class PortfolioController {
platforms,
summary
} = await this.portfolioService.getDetails({
- dateRange,
filters,
impersonationId,
withMarkets,
+ dateRange: range,
userId: this.request.user.id,
withSummary: true
});
@@ -326,20 +327,23 @@ export class PortfolioController {
@UseInterceptors(TransformDataSourceInRequestInterceptor)
public async getDividends(
@Headers(HEADER_KEY_IMPERSONATION.toLowerCase()) impersonationId: string,
- @Query('accounts') filterByAccounts?: string,
- @Query('assetClasses') filterByAssetClasses?: string,
- @Query('dataSource') filterByDataSource?: string,
- @Query('groupBy') groupBy?: GroupBy,
- @Query('range') dateRange: DateRange = DEFAULT_DATE_RANGE,
- @Query('symbol') filterBySymbol?: string,
- @Query('tags') filterByTags?: string
+ @Query()
+ {
+ accounts,
+ assetClasses,
+ dataSource,
+ groupBy,
+ range,
+ symbol,
+ tags
+ }: GetDividendsDto
): Promise {
const filters = this.apiService.buildFiltersFromQueryParams({
- filterByAccounts,
- filterByAssetClasses,
- filterByDataSource,
- filterBySymbol,
- filterByTags
+ filterByAccounts: accounts,
+ filterByAssetClasses: assetClasses,
+ filterByDataSource: dataSource,
+ filterBySymbol: symbol,
+ filterByTags: tags
});
const impersonationUserId =
@@ -349,7 +353,9 @@ export class PortfolioController {
const { settings } = await this.userService.user({ id: userId });
const userCurrency = settings.settings.baseCurrency;
- const { endDate, startDate } = getIntervalFromDateRange({ dateRange });
+ const { endDate, startDate } = getIntervalFromDateRange({
+ dateRange: range
+ });
const { activities } = await this.activitiesService.getActivities({
endDate,
@@ -429,29 +435,32 @@ export class PortfolioController {
@UseInterceptors(TransformDataSourceInResponseInterceptor)
public async getHoldings(
@Headers(HEADER_KEY_IMPERSONATION.toLowerCase()) impersonationId: string,
- @Query('accounts') filterByAccounts?: string,
- @Query('assetClasses') filterByAssetClasses?: string,
- @Query('dataSource') filterByDataSource?: string,
- @Query('holdingType') filterByHoldingType?: string,
- @Query('query') filterBySearchQuery?: string,
- @Query('range') dateRange: DateRange = DEFAULT_DATE_RANGE,
- @Query('symbol') filterBySymbol?: string,
- @Query('tags') filterByTags?: string
+ @Query()
+ {
+ accounts,
+ assetClasses,
+ dataSource,
+ holdingType,
+ query,
+ range,
+ symbol,
+ tags
+ }: GetHoldingsDto
): Promise {
const filters = this.apiService.buildFiltersFromQueryParams({
- filterByAccounts,
- filterByAssetClasses,
- filterByDataSource,
- filterByHoldingType,
- filterBySearchQuery,
- filterBySymbol,
- filterByTags
+ filterByAccounts: accounts,
+ filterByAssetClasses: assetClasses,
+ filterByDataSource: dataSource,
+ filterByHoldingType: holdingType,
+ filterBySearchQuery: query,
+ filterBySymbol: symbol,
+ filterByTags: tags
});
const holdings = await this.portfolioService.getHoldings({
- dateRange,
filters,
impersonationId,
+ dateRange: range,
userId: this.request.user.id
});
@@ -463,27 +472,30 @@ export class PortfolioController {
@UseInterceptors(TransformDataSourceInRequestInterceptor)
public async getInvestments(
@Headers(HEADER_KEY_IMPERSONATION.toLowerCase()) impersonationId: string,
- @Query('accounts') filterByAccounts?: string,
- @Query('assetClasses') filterByAssetClasses?: string,
- @Query('dataSource') filterByDataSource?: string,
- @Query('groupBy') groupBy?: GroupBy,
- @Query('range') dateRange: DateRange = DEFAULT_DATE_RANGE,
- @Query('symbol') filterBySymbol?: string,
- @Query('tags') filterByTags?: string
+ @Query()
+ {
+ accounts,
+ assetClasses,
+ dataSource,
+ groupBy,
+ range,
+ symbol,
+ tags
+ }: GetInvestmentsDto
): Promise {
const filters = this.apiService.buildFiltersFromQueryParams({
- filterByAccounts,
- filterByAssetClasses,
- filterByDataSource,
- filterBySymbol,
- filterByTags
+ filterByAccounts: accounts,
+ filterByAssetClasses: assetClasses,
+ filterByDataSource: dataSource,
+ filterBySymbol: symbol,
+ filterByTags: tags
});
let { investments, streaks } = await this.portfolioService.getInvestments({
- dateRange,
filters,
groupBy,
impersonationId,
+ dateRange: range,
savingsRate: this.request.user?.settings?.settings.savingsRate,
userId: this.request.user.id
});
@@ -536,29 +548,30 @@ export class PortfolioController {
@Version('2')
public async getPerformanceV2(
@Headers(HEADER_KEY_IMPERSONATION.toLowerCase()) impersonationId: string,
- @Query('accounts') filterByAccounts?: string,
- @Query('assetClasses') filterByAssetClasses?: string,
- @Query('dataSource') filterByDataSource?: string,
- @Query('range') dateRange: DateRange = DEFAULT_DATE_RANGE,
- @Query('symbol') filterBySymbol?: string,
- @Query('tags') filterByTags?: string,
- @Query('withExcludedAccounts') withExcludedAccountsParam = 'false'
+ @Query()
+ {
+ accounts,
+ assetClasses,
+ dataSource,
+ range,
+ symbol,
+ tags,
+ withExcludedAccounts
+ }: GetPerformanceDto
): Promise {
- const withExcludedAccounts = withExcludedAccountsParam === 'true';
-
const filters = this.apiService.buildFiltersFromQueryParams({
- filterByAccounts,
- filterByAssetClasses,
- filterByDataSource,
- filterBySymbol,
- filterByTags
+ filterByAccounts: accounts,
+ filterByAssetClasses: assetClasses,
+ filterByDataSource: dataSource,
+ filterBySymbol: symbol,
+ filterByTags: tags
});
const performanceInformation = await this.portfolioService.getPerformance({
- dateRange,
filters,
impersonationId,
withExcludedAccounts,
+ dateRange: range,
userId: this.request.user.id
});
diff --git a/apps/api/src/dtos/date-range-filter.dto.ts b/apps/api/src/dtos/date-range-filter.dto.ts
new file mode 100644
index 000000000..bf440ac7c
--- /dev/null
+++ b/apps/api/src/dtos/date-range-filter.dto.ts
@@ -0,0 +1,16 @@
+import { DATE_RANGES, DEFAULT_DATE_RANGE } from '@ghostfolio/common/config';
+import { DateRange } from '@ghostfolio/common/types';
+
+import { Matches } from 'class-validator';
+
+import { FilterDto } from './filter.dto';
+
+// A named date range or a calendar year like '2024', '2023', '2022', etc.
+export const DATE_RANGE_PATTERN = new RegExp(
+ `^(${DATE_RANGES.join('|')}|\\d{4})$`
+);
+
+export class DateRangeFilterDto extends FilterDto {
+ @Matches(DATE_RANGE_PATTERN)
+ range?: DateRange = DEFAULT_DATE_RANGE;
+}
diff --git a/apps/api/src/dtos/filter.dto.ts b/apps/api/src/dtos/filter.dto.ts
new file mode 100644
index 000000000..cb26d582b
--- /dev/null
+++ b/apps/api/src/dtos/filter.dto.ts
@@ -0,0 +1,23 @@
+import { IsOptional, IsString } from 'class-validator';
+
+export class FilterDto {
+ @IsOptional()
+ @IsString()
+ accounts?: string;
+
+ @IsOptional()
+ @IsString()
+ assetClasses?: string;
+
+ @IsOptional()
+ @IsString()
+ dataSource?: string;
+
+ @IsOptional()
+ @IsString()
+ symbol?: string;
+
+ @IsOptional()
+ @IsString()
+ tags?: string;
+}
diff --git a/apps/client/src/app/components/account-detail-dialog/account-detail-dialog.component.ts b/apps/client/src/app/components/account-detail-dialog/account-detail-dialog.component.ts
index fdb0ba97a..d1845222a 100644
--- a/apps/client/src/app/components/account-detail-dialog/account-detail-dialog.component.ts
+++ b/apps/client/src/app/components/account-detail-dialog/account-detail-dialog.component.ts
@@ -341,8 +341,7 @@ export class GfAccountDetailDialogComponent implements OnInit {
}
],
range: DEFAULT_DATE_RANGE,
- withExcludedAccounts: true,
- withItems: true
+ withExcludedAccounts: true
})
.pipe(takeUntilDestroyed(this.destroyRef))
}).subscribe({
diff --git a/libs/ui/src/lib/services/data.service.ts b/libs/ui/src/lib/services/data.service.ts
index 7ccd9d1d9..7081f9b2c 100644
--- a/libs/ui/src/lib/services/data.service.ts
+++ b/libs/ui/src/lib/services/data.service.ts
@@ -731,13 +731,11 @@ export class DataService {
public fetchPortfolioPerformance({
filters,
range,
- withExcludedAccounts = false,
- withItems = false
+ withExcludedAccounts = false
}: {
filters?: Filter[];
range: DateRange;
withExcludedAccounts?: boolean;
- withItems?: boolean;
}): Observable {
let params = this.buildFiltersAsQueryParams({ filters });
params = params.append('range', range);
@@ -746,10 +744,6 @@ export class DataService {
params = params.append('withExcludedAccounts', withExcludedAccounts);
}
- if (withItems) {
- params = params.append('withItems', withItems);
- }
-
return this.http
.get(`/api/v2/portfolio/performance`, {
params
From 3eaba49f19859d899b133407e10ea6a46a183539 Mon Sep 17 00:00:00 2001
From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com>
Date: Mon, 3 Aug 2026 19:48:49 +0200
Subject: [PATCH 54/86] Task/improve handling of encoded data source in user
settings (#7521)
Improve handling of encoded data source in user settings
---
apps/api/src/app/user/user.controller.ts | 10 ++++++++++
apps/api/src/app/user/user.module.ts | 4 +++-
.../transform-data-source-in-response.interceptor.ts | 2 ++
3 files changed, 15 insertions(+), 1 deletion(-)
diff --git a/apps/api/src/app/user/user.controller.ts b/apps/api/src/app/user/user.controller.ts
index 7a1fc71dc..2b679f34c 100644
--- a/apps/api/src/app/user/user.controller.ts
+++ b/apps/api/src/app/user/user.controller.ts
@@ -1,7 +1,9 @@
import { HasPermission } from '@ghostfolio/api/decorators/has-permission.decorator';
import { CustomThrottlerGuard } from '@ghostfolio/api/guards/custom-throttler.guard';
import { HasPermissionGuard } from '@ghostfolio/api/guards/has-permission.guard';
+import { decodeDataSource } from '@ghostfolio/api/helper/data-source.helper';
import { RedactValuesInResponseInterceptor } from '@ghostfolio/api/interceptors/redact-values-in-response/redact-values-in-response.interceptor';
+import { TransformDataSourceInResponseInterceptor } from '@ghostfolio/api/interceptors/transform-data-source-in-response/transform-data-source-in-response.interceptor';
import { ConfigurationService } from '@ghostfolio/api/services/configuration/configuration.service';
import { ImpersonationService } from '@ghostfolio/api/services/impersonation/impersonation.service';
import { PrismaService } from '@ghostfolio/api/services/prisma/prisma.service';
@@ -119,6 +121,7 @@ export class UserController {
@Get()
@UseGuards(AuthGuard('jwt'), HasPermissionGuard)
@UseInterceptors(RedactValuesInResponseInterceptor)
+ @UseInterceptors(TransformDataSourceInResponseInterceptor)
public async getUser(
@Headers('accept-language') acceptLanguage: string,
@Headers(HEADER_KEY_IMPERSONATION.toLowerCase()) impersonationId: string
@@ -165,6 +168,7 @@ export class UserController {
@Put('setting')
@UseGuards(AuthGuard('jwt'), HasPermissionGuard)
+ @UseInterceptors(TransformDataSourceInResponseInterceptor)
public async updateUserSetting(@Body() data: UpdateUserSettingDto) {
if (
size(data) === 1 &&
@@ -192,6 +196,12 @@ export class UserController {
data
);
+ if (userSettings['filters.dataSource']) {
+ userSettings['filters.dataSource'] = decodeDataSource(
+ userSettings['filters.dataSource']
+ );
+ }
+
for (const key in userSettings) {
if (userSettings[key] === false || userSettings[key] === null) {
delete userSettings[key];
diff --git a/apps/api/src/app/user/user.module.ts b/apps/api/src/app/user/user.module.ts
index 3f4e898fc..156630964 100644
--- a/apps/api/src/app/user/user.module.ts
+++ b/apps/api/src/app/user/user.module.ts
@@ -1,6 +1,7 @@
import { ActivitiesModule } from '@ghostfolio/api/app/activities/activities.module';
import { SubscriptionModule } from '@ghostfolio/api/app/subscription/subscription.module';
import { RedactValuesInResponseModule } from '@ghostfolio/api/interceptors/redact-values-in-response/redact-values-in-response.module';
+import { TransformDataSourceInResponseModule } from '@ghostfolio/api/interceptors/transform-data-source-in-response/transform-data-source-in-response.module';
import { ConfigurationModule } from '@ghostfolio/api/services/configuration/configuration.module';
import { I18nModule } from '@ghostfolio/api/services/i18n/i18n.module';
import { ImpersonationModule } from '@ghostfolio/api/services/impersonation/impersonation.module';
@@ -30,7 +31,8 @@ import { UserService } from './user.service';
PropertyModule,
RedactValuesInResponseModule,
SubscriptionModule,
- TagModule
+ TagModule,
+ TransformDataSourceInResponseModule
],
providers: [UserService]
})
diff --git a/apps/api/src/interceptors/transform-data-source-in-response/transform-data-source-in-response.interceptor.ts b/apps/api/src/interceptors/transform-data-source-in-response/transform-data-source-in-response.interceptor.ts
index 6b38b2d54..81aabf4ae 100644
--- a/apps/api/src/interceptors/transform-data-source-in-response/transform-data-source-in-response.interceptor.ts
+++ b/apps/api/src/interceptors/transform-data-source-in-response/transform-data-source-in-response.interceptor.ts
@@ -78,6 +78,7 @@ export class TransformDataSourceInResponseInterceptor<
valueMap,
object: data,
paths: [
+ '["filters.dataSource"]',
'activities[*].assetProfile.dataSource',
'activities[*].dataSource',
'assetProfile.dataSource',
@@ -88,6 +89,7 @@ export class TransformDataSourceInResponseInterceptor<
'holdings[*].assetProfile.dataSource',
'holdings[*].dataSource',
'items[*].dataSource',
+ 'settings["filters.dataSource"]',
'watchlist[*].dataSource'
]
});
From 75e3d032abd554a84954a7ba68d2dfc02516b69c Mon Sep 17 00:00:00 2001
From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com>
Date: Mon, 3 Aug 2026 19:56:36 +0200
Subject: [PATCH 55/86] Feature/stock splits setup (part 2) (#7523)
Improve stock splits setup
---
.../asset-profiles.controller.ts | 2 +
.../asset-profiles/asset-profiles.module.ts | 2 +
.../asset-profiles/asset-profiles.service.ts | 12 +++-
.../asset-profile-dialog.html | 59 ++++++++-----------
4 files changed, 39 insertions(+), 36 deletions(-)
diff --git a/apps/api/src/app/endpoints/asset-profiles/asset-profiles.controller.ts b/apps/api/src/app/endpoints/asset-profiles/asset-profiles.controller.ts
index 6521665e1..5ffb756a0 100644
--- a/apps/api/src/app/endpoints/asset-profiles/asset-profiles.controller.ts
+++ b/apps/api/src/app/endpoints/asset-profiles/asset-profiles.controller.ts
@@ -142,6 +142,8 @@ export class AssetProfilesController {
});
return this.assetProfilesService.createSplit({
+ dataSource,
+ symbol,
symbolProfileId,
date: parseISO(data.date),
denominator: data.denominator,
diff --git a/apps/api/src/app/endpoints/asset-profiles/asset-profiles.module.ts b/apps/api/src/app/endpoints/asset-profiles/asset-profiles.module.ts
index e3906be9f..9df342f5f 100644
--- a/apps/api/src/app/endpoints/asset-profiles/asset-profiles.module.ts
+++ b/apps/api/src/app/endpoints/asset-profiles/asset-profiles.module.ts
@@ -8,6 +8,7 @@ import { DataProviderModule } from '@ghostfolio/api/services/data-provider/data-
import { ExchangeRateDataModule } from '@ghostfolio/api/services/exchange-rate-data/exchange-rate-data.module';
import { MarketDataModule } from '@ghostfolio/api/services/market-data/market-data.module';
import { PrismaModule } from '@ghostfolio/api/services/prisma/prisma.module';
+import { DataGatheringQueueModule } from '@ghostfolio/api/services/queues/data-gathering/data-gathering.module';
import { SymbolProfileModule } from '@ghostfolio/api/services/symbol-profile/symbol-profile.module';
import { Module } from '@nestjs/common';
@@ -23,6 +24,7 @@ import { AssetProfilesService } from './asset-profiles.service';
ApiModule,
AssetProfileSplitModule,
BenchmarkModule,
+ DataGatheringQueueModule,
DataProviderModule,
ExchangeRateDataModule,
MarketDataModule,
diff --git a/apps/api/src/app/endpoints/asset-profiles/asset-profiles.service.ts b/apps/api/src/app/endpoints/asset-profiles/asset-profiles.service.ts
index 7d75fc40b..0d50e2223 100644
--- a/apps/api/src/app/endpoints/asset-profiles/asset-profiles.service.ts
+++ b/apps/api/src/app/endpoints/asset-profiles/asset-profiles.service.ts
@@ -5,6 +5,7 @@ import { DataProviderService } from '@ghostfolio/api/services/data-provider/data
import { ExchangeRateDataService } from '@ghostfolio/api/services/exchange-rate-data/exchange-rate-data.service';
import { MarketDataService } from '@ghostfolio/api/services/market-data/market-data.service';
import { PrismaService } from '@ghostfolio/api/services/prisma/prisma.service';
+import { DataGatheringService } from '@ghostfolio/api/services/queues/data-gathering/data-gathering.service';
import { SymbolProfileService } from '@ghostfolio/api/services/symbol-profile/symbol-profile.service';
import { UpdateAssetProfileDataDto } from '@ghostfolio/common/dtos';
import {
@@ -33,6 +34,7 @@ export class AssetProfilesService {
private readonly activitiesService: ActivitiesService,
private readonly assetProfileSplitService: AssetProfileSplitService,
private readonly benchmarkService: BenchmarkService,
+ private readonly dataGatheringService: DataGatheringService,
private readonly dataProviderService: DataProviderService,
private readonly exchangeRateDataService: ExchangeRateDataService,
private readonly marketDataService: MarketDataService,
@@ -41,22 +43,28 @@ export class AssetProfilesService {
) {}
public async createSplit({
+ dataSource,
date,
denominator,
numerator,
+ symbol,
symbolProfileId
}: {
date: Date;
denominator: number;
numerator: number;
symbolProfileId: string;
- }) {
- return this.assetProfileSplitService.upsert({
+ } & AssetProfileIdentifier) {
+ const assetProfileSplit = await this.assetProfileSplitService.upsert({
date,
denominator,
numerator,
symbolProfileId
});
+
+ await this.dataGatheringService.gatherSymbol({ dataSource, symbol });
+
+ return assetProfileSplit;
}
public async deleteSplit({
diff --git a/apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html b/apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
index f5df34ab4..f80cec842 100644
--- a/apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
+++ b/apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
@@ -514,10 +514,6 @@
-
- Splits are stored for this asset profile, but are not applied
- to the portfolio calculation yet.
-
@if (splits.length > 0) {
@@ -580,38 +576,33 @@
-
- Shares After
-
- Numerator ,
- e.g. 4 for a 4:1 split or 1 for a 1:10 reverse
- split
+
-
-
- Shares Before
-
- Denominator ,
- e.g. 1 for a 4:1 split or 10 for a 1:10 reverse
- split Shares After
+
+
+ :
+
-
+ Shares Before
+
+
+
Date: Mon, 3 Aug 2026 19:57:03 +0200
Subject: [PATCH 56/86] Task/simplify localization in users list of admin
control panel- #7519 (#7519)
Simplify localization
---
apps/client/src/app/components/admin-users/admin-users.html | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/apps/client/src/app/components/admin-users/admin-users.html b/apps/client/src/app/components/admin-users/admin-users.html
index 7e7e5edeb..1be6174ac 100644
--- a/apps/client/src/app/components/admin-users/admin-users.html
+++ b/apps/client/src/app/components/admin-users/admin-users.html
@@ -251,7 +251,7 @@
>
- Delete User
+ Delete
From 37cae1f3d812afb67d6b128cf5ca9b8f4d0c02f3 Mon Sep 17 00:00:00 2001
From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com>
Date: Mon, 3 Aug 2026 20:12:13 +0200
Subject: [PATCH 57/86] Bugfix/loading indicators in user detail dialog of
admin control (#7520)
* Fix loading indicators
* Update changelog
---
CHANGELOG.md | 4 +++
.../user-detail-dialog.component.ts | 7 +++++
.../user-detail-dialog.html | 28 ++++++++++++-------
3 files changed, 29 insertions(+), 10 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 38e3855f2..123ef1f94 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 the database model and endpoints to manage the stock splits of an asset profile (experimental)
+### Fixed
+
+- Fixed the loading state in the user detail dialog of the admin control panel’s users section
+
## 3.40.0 - 2026-08-02
### Changed
diff --git a/apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts b/apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts
index 9e341037a..3aec4d42c 100644
--- a/apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts
+++ b/apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts
@@ -56,14 +56,18 @@ export class GfUserDetailDialogComponent implements OnInit {
protected readonly baseCurrency: string;
protected readonly canDeleteUser = canDeleteUser;
protected readonly getCountryName = getCountryName;
+ protected isLoading = true;
+
protected readonly subscriptionsDataSource =
new MatTableDataSource();
+
protected readonly subscriptionsDisplayedColumns = [
'createdAt',
'type',
'price',
'expiresAt'
];
+
protected user: AdminUserResponse;
protected readonly data = inject(MAT_DIALOG_DATA);
@@ -72,6 +76,7 @@ export class GfUserDetailDialogComponent implements OnInit {
private readonly changeDetectorRef = inject(ChangeDetectorRef);
private readonly dataService = inject(DataService);
private readonly destroyRef = inject(DestroyRef);
+
private readonly dialogRef =
inject>(
MatDialogRef
@@ -101,6 +106,8 @@ export class GfUserDetailDialogComponent implements OnInit {
this.subscriptionsDataSource.data = this.user.subscriptions ?? [];
+ this.isLoading = false;
+
this.changeDetectorRef.markForCheck();
});
}
diff --git a/apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html b/apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
index e2cdb66a5..b77e0043e 100644
--- a/apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
+++ b/apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
@@ -36,12 +36,14 @@
i18n
size="medium"
[enableCopyToClipboardButton]="true"
- [value]="user?.id"
+ [value]="isLoading ? undefined : user.id"
>User ID
- Role
+ Role
@@ -52,7 +54,7 @@
size="medium"
[isDate]="true"
[locale]="data.locale"
- [value]="user?.createdAt"
+ [value]="isLoading ? undefined : user.createdAt"
>Registration Date
@@ -61,7 +63,7 @@
i18n
size="medium"
[locale]="data.locale"
- [value]="user?.provider"
+ [value]="isLoading ? undefined : user.provider"
>Authentication
@@ -74,7 +76,9 @@
i18n
size="medium"
[locale]="data.locale"
- [value]="user?.subscription ? 'Premium' : 'Basic'"
+ [value]="
+ isLoading ? undefined : user.subscription ? 'Premium' : 'Basic'
+ "
>Membership
@@ -83,7 +87,11 @@
i18n
size="medium"
[value]="
- user?.country ? getCountryName({ code: user.country }) : '-'
+ isLoading
+ ? undefined
+ : user.country
+ ? getCountryName({ code: user.country })
+ : '-'
"
>Country
@@ -97,7 +105,7 @@
i18n
size="medium"
[locale]="data.locale"
- [value]="user?.accountCount"
+ [value]="isLoading ? undefined : user.accountCount"
>Accounts
@@ -106,7 +114,7 @@
i18n
size="medium"
[locale]="data.locale"
- [value]="user?.activityCount"
+ [value]="isLoading ? undefined : user.activityCount"
>Activities
@@ -120,7 +128,7 @@
size="medium"
[locale]="data.locale"
[precision]="0"
- [value]="user?.engagement"
+ [value]="isLoading ? undefined : user.engagement"
>Engagement per Day
@@ -129,7 +137,7 @@
i18n
size="medium"
[locale]="data.locale"
- [value]="user?.dailyApiRequests"
+ [value]="isLoading ? undefined : user.dailyApiRequests"
>API Requests Today
From 132f8670b971dcc381555a10e1860ba06c221638 Mon Sep 17 00:00:00 2001
From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com>
Date: Mon, 3 Aug 2026 20:41:34 +0200
Subject: [PATCH 58/86] Task/improve usability in admin control panel by
eliminating page reloads (#7518)
* Improve usability by eliminating page reloads
* Update changelog
---
CHANGELOG.md | 7 +++
.../admin-market-data.component.ts | 62 ++++++++++++++-----
.../admin-market-data.service.ts | 17 +++--
.../asset-profile-dialog.component.ts | 9 ++-
.../admin-overview.component.ts | 41 +++++++++---
.../admin-overview/admin-overview.html | 15 +++--
.../user-account-membership.component.ts | 23 ++-----
7 files changed, 120 insertions(+), 54 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 123ef1f94..a916f8643 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -11,6 +11,13 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- Added the database model and endpoints to manage the stock splits of an asset profile (experimental)
+### Changed
+
+- Improved the usability of the admin control panel by eliminating the page reload on changing a setting
+- Improved the usability of the admin control panel by eliminating the page reload on deleting an asset profile
+- Improved the usability of the admin control panel by eliminating the page reload on flushing the cache
+- Improved the usability of the admin control panel by eliminating the page reload on gathering historical market data
+
### Fixed
- Fixed the loading state in the user detail dialog of the admin control panel’s users section
diff --git a/apps/client/src/app/components/admin-market-data/admin-market-data.component.ts b/apps/client/src/app/components/admin-market-data/admin-market-data.component.ts
index b29ccc7d7..8592070ee 100644
--- a/apps/client/src/app/components/admin-market-data/admin-market-data.component.ts
+++ b/apps/client/src/app/components/admin-market-data/admin-market-data.component.ts
@@ -43,6 +43,7 @@ import {
MatPaginatorModule,
PageEvent
} from '@angular/material/paginator';
+import { MatSnackBar, MatSnackBarModule } from '@angular/material/snack-bar';
import {
MatSort,
MatSortModule,
@@ -64,6 +65,7 @@ import {
ellipsisVertical,
trashOutline
} from 'ionicons/icons';
+import ms from 'ms';
import { DeviceDetectorService } from 'ngx-device-detector';
import { NgxSkeletonLoaderModule } from 'ngx-skeleton-loader';
import { Subject } from 'rxjs';
@@ -88,6 +90,7 @@ import { CreateAssetProfileDialogParams } from './create-asset-profile-dialog/in
MatCheckboxModule,
MatMenuModule,
MatPaginatorModule,
+ MatSnackBarModule,
MatSortModule,
MatTableModule,
NgxSkeletonLoaderModule,
@@ -177,6 +180,7 @@ export class GfAdminMarketDataComponent implements AfterViewInit, OnInit {
private readonly dialog = inject(MatDialog);
private readonly route = inject(ActivatedRoute);
private readonly router = inject(Router);
+ private readonly snackBar = inject(MatSnackBar);
private readonly userService = inject(UserService);
public constructor() {
@@ -239,7 +243,7 @@ export class GfAdminMarketDataComponent implements AfterViewInit, OnInit {
.subscribe((filters) => {
this.activeFilters = filters;
- this.loadData();
+ this.reloadData({ pageIndex: 0 });
});
addIcons({
@@ -285,15 +289,25 @@ export class GfAdminMarketDataComponent implements AfterViewInit, OnInit {
dataSource,
symbol
}: AssetProfileIdentifier) {
- this.adminMarketDataService.deleteAssetProfile({ dataSource, symbol });
+ this.adminMarketDataService
+ .deleteAssetProfile({ dataSource, symbol })
+ .pipe(takeUntilDestroyed(this.destroyRef))
+ .subscribe(() => {
+ this.reloadData();
+ });
}
protected onDeleteAssetProfiles() {
- this.adminMarketDataService.deleteAssetProfiles(
- this.selection.selected.map(({ dataSource, symbol }) => {
- return { dataSource, symbol };
- })
- );
+ this.adminMarketDataService
+ .deleteAssetProfiles(
+ this.selection.selected.map(({ dataSource, symbol }) => {
+ return { dataSource, symbol };
+ })
+ )
+ .pipe(takeUntilDestroyed(this.destroyRef))
+ .subscribe(() => {
+ this.reloadData();
+ });
}
protected onGatherMax() {
@@ -301,9 +315,7 @@ export class GfAdminMarketDataComponent implements AfterViewInit, OnInit {
.gatherMax()
.pipe(takeUntilDestroyed(this.destroyRef))
.subscribe(() => {
- setTimeout(() => {
- window.location.reload();
- }, 300);
+ this.notifyDataGatheringHasBeenStarted();
});
}
@@ -311,7 +323,9 @@ export class GfAdminMarketDataComponent implements AfterViewInit, OnInit {
this.adminService
.gatherProfileData()
.pipe(takeUntilDestroyed(this.destroyRef))
- .subscribe();
+ .subscribe(() => {
+ this.notifyDataGatheringHasBeenStarted();
+ });
}
protected onGatherRecentMarketData() {
@@ -319,9 +333,7 @@ export class GfAdminMarketDataComponent implements AfterViewInit, OnInit {
.gatherRecentMarketData()
.pipe(takeUntilDestroyed(this.destroyRef))
.subscribe(() => {
- setTimeout(() => {
- window.location.reload();
- }, 300);
+ this.notifyDataGatheringHasBeenStarted();
});
}
@@ -396,6 +408,16 @@ export class GfAdminMarketDataComponent implements AfterViewInit, OnInit {
});
}
+ private notifyDataGatheringHasBeenStarted() {
+ this.snackBar.open(
+ '✅ ' + $localize`Data gathering has been started.`,
+ undefined,
+ {
+ duration: ms('3 seconds')
+ }
+ );
+ }
+
private openAssetProfileDialog({
dataSource,
symbol
@@ -431,6 +453,8 @@ export class GfAdminMarketDataComponent implements AfterViewInit, OnInit {
if (newAssetProfileIdentifier) {
this.onOpenAssetProfileDialog(newAssetProfileIdentifier);
} else {
+ this.reloadData();
+
this.router.navigate(['.'], { relativeTo: this.route });
}
});
@@ -483,4 +507,14 @@ export class GfAdminMarketDataComponent implements AfterViewInit, OnInit {
});
});
}
+
+ private reloadData({
+ pageIndex = this.paginator().pageIndex
+ }: { pageIndex?: number } = {}) {
+ this.loadData({
+ pageIndex,
+ sortColumn: this.sort().active,
+ sortDirection: this.sort().direction
+ });
+ }
}
diff --git a/apps/client/src/app/components/admin-market-data/admin-market-data.service.ts b/apps/client/src/app/components/admin-market-data/admin-market-data.service.ts
index 28c8c2d9f..c4d45b7f0 100644
--- a/apps/client/src/app/components/admin-market-data/admin-market-data.service.ts
+++ b/apps/client/src/app/components/admin-market-data/admin-market-data.service.ts
@@ -4,7 +4,7 @@ import { NotificationService } from '@ghostfolio/ui/notifications';
import { AdminService } from '@ghostfolio/ui/services';
import { Injectable } from '@angular/core';
-import { EMPTY, catchError, finalize, forkJoin } from 'rxjs';
+import { EMPTY, Subject, catchError, finalize, forkJoin } from 'rxjs';
@Injectable()
export class AdminMarketDataService {
@@ -14,25 +14,29 @@ export class AdminMarketDataService {
) {}
public deleteAssetProfile({ dataSource, symbol }: AssetProfileIdentifier) {
+ const assetProfileDeleted = new Subject();
+
this.notificationService.confirm({
confirmFn: () => {
this.adminService
.deleteProfileData({ dataSource, symbol })
.subscribe(() => {
- setTimeout(() => {
- window.location.reload();
- }, 300);
+ assetProfileDeleted.next();
+ assetProfileDeleted.complete();
});
},
confirmType: ConfirmationDialogType.Warn,
title: $localize`Do you really want to delete this asset profile?`
});
+
+ return assetProfileDeleted.asObservable();
}
public deleteAssetProfiles(
aAssetProfileIdentifiers: AssetProfileIdentifier[]
) {
const assetProfileCount = aAssetProfileIdentifiers.length;
+ const assetProfilesDeleted = new Subject();
this.notificationService.confirm({
confirmFn: () => {
@@ -55,7 +59,8 @@ export class AdminMarketDataService {
return EMPTY;
}),
finalize(() => {
- window.location.reload();
+ assetProfilesDeleted.next();
+ assetProfilesDeleted.complete();
})
)
.subscribe();
@@ -66,5 +71,7 @@ export class AdminMarketDataService {
? $localize`Do you really want to delete this asset profile?`
: $localize`Do you really want to delete these ${assetProfileCount}:count: asset profiles?`
});
+
+ return assetProfilesDeleted.asObservable();
}
}
diff --git a/apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts b/apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
index f0e8eaf17..aa61845f4 100644
--- a/apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
+++ b/apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
@@ -531,9 +531,12 @@ export class GfAssetProfileDialogComponent implements OnInit {
dataSource,
symbol
}: AssetProfileIdentifier) {
- this.adminMarketDataService.deleteAssetProfile({ dataSource, symbol });
-
- this.dialogRef.close();
+ this.adminMarketDataService
+ .deleteAssetProfile({ dataSource, symbol })
+ .pipe(takeUntilDestroyed(this.destroyRef))
+ .subscribe(() => {
+ this.dialogRef.close();
+ });
}
protected onGatherProfileDataBySymbol({
diff --git a/apps/client/src/app/components/admin-overview/admin-overview.component.ts b/apps/client/src/app/components/admin-overview/admin-overview.component.ts
index 0bed8111f..733200c91 100644
--- a/apps/client/src/app/components/admin-overview/admin-overview.component.ts
+++ b/apps/client/src/app/components/admin-overview/admin-overview.component.ts
@@ -64,6 +64,7 @@ import {
} from 'ionicons/icons';
import ms, { StringValue } from 'ms';
import { NgxSkeletonLoaderModule } from 'ngx-skeleton-loader';
+import { catchError, of, switchMap } from 'rxjs';
@Component({
changeDetection: ChangeDetectionStrategy.OnPush,
@@ -105,6 +106,8 @@ export class GfAdminOverviewComponent implements OnInit {
protected readonly info: InfoItem;
protected isDataGatheringEnabled: boolean;
protected isLoading = false;
+ protected isReadOnlyMode: boolean;
+ protected isUserSignupEnabled: boolean;
protected readonly permissions = permissions;
protected systemMessage: SystemMessage;
protected userCount: number;
@@ -179,6 +182,8 @@ export class GfAdminOverviewComponent implements OnInit {
}
public ngOnInit() {
+ this.isLoading = true;
+
this.fetchAdminData();
}
@@ -270,9 +275,15 @@ export class GfAdminOverviewComponent implements OnInit {
.flush()
.pipe(takeUntilDestroyed(this.destroyRef))
.subscribe(() => {
- setTimeout(() => {
- window.location.reload();
- }, 300);
+ this.dataService.updateInfo();
+
+ this.snackBar.open(
+ '✅ ' + $localize`Cache has been flushed.`,
+ undefined,
+ {
+ duration: ms('3 seconds')
+ }
+ );
});
},
confirmType: ConfirmationDialogType.Warn,
@@ -330,8 +341,6 @@ export class GfAdminOverviewComponent implements OnInit {
}
private fetchAdminData() {
- this.isLoading = true;
-
this.adminService
.fetchAdminData()
.pipe(takeUntilDestroyed(this.destroyRef))
@@ -344,6 +353,11 @@ export class GfAdminOverviewComponent implements OnInit {
this.isDataGatheringEnabled =
settings[PROPERTY_IS_DATA_GATHERING_ENABLED] === false ? false : true;
+ this.isReadOnlyMode = settings[PROPERTY_IS_READ_ONLY_MODE] === true;
+
+ this.isUserSignupEnabled =
+ settings[PROPERTY_IS_USER_SIGNUP_ENABLED] === false ? false : true;
+
this.systemMessage = settings[PROPERTY_SYSTEM_MESSAGE] as SystemMessage;
this.userCount = userCount;
this.version = version;
@@ -372,11 +386,20 @@ export class GfAdminOverviewComponent implements OnInit {
.putAdminSetting(key, {
value: value || value === false ? JSON.stringify(value) : undefined
})
- .pipe(takeUntilDestroyed(this.destroyRef))
+ .pipe(
+ switchMap(() => {
+ return this.userService.get(true);
+ }),
+ catchError(() => {
+ // Refresh anyway to reflect the actual state of the settings
+ return of(undefined);
+ }),
+ takeUntilDestroyed(this.destroyRef)
+ )
.subscribe(() => {
- setTimeout(() => {
- window.location.reload();
- }, 300);
+ this.dataService.updateInfo();
+
+ this.fetchAdminData();
});
}
diff --git a/apps/client/src/app/components/admin-overview/admin-overview.html b/apps/client/src/app/components/admin-overview/admin-overview.html
index 7e05600a6..b919f085f 100644
--- a/apps/client/src/app/components/admin-overview/admin-overview.html
+++ b/apps/client/src/app/components/admin-overview/admin-overview.html
@@ -52,9 +52,8 @@
@@ -66,7 +65,8 @@
@@ -79,6 +79,7 @@
color="primary"
hideIcon="true"
[checked]="isDataGatheringEnabled"
+ [disabled]="isLoading"
(change)="onEnableDataGatheringChange($event)"
/>
@@ -89,7 +90,9 @@
@if (systemMessage) {
-
{{ systemMessage | json }}
+
+ {{ systemMessage | json }}
+
}
- @if (!info?.systemMessage) {
+ @if (!systemMessage) {
{
+ return this.userService.get(true);
+ }),
catchError(() => {
this.snackBar.open(
'😞 ' + $localize`Could not redeem coupon code`,
@@ -187,27 +190,13 @@ export class GfUserAccountMembershipComponent {
takeUntilDestroyed(this.destroyRef)
)
.subscribe(() => {
- const snackBarRef = this.snackBar.open(
+ this.snackBar.open(
'✅ ' + $localize`Coupon code has been redeemed`,
- $localize`Reload`,
+ undefined,
{
duration: ms('3 seconds')
}
);
-
- snackBarRef
- .afterDismissed()
- .pipe(takeUntilDestroyed(this.destroyRef))
- .subscribe(() => {
- window.location.reload();
- });
-
- snackBarRef
- .onAction()
- .pipe(takeUntilDestroyed(this.destroyRef))
- .subscribe(() => {
- window.location.reload();
- });
});
}
},
From 7d053caf805a25c1b02bba19ebdfc32c05630006 Mon Sep 17 00:00:00 2001
From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com>
Date: Mon, 3 Aug 2026 20:42:01 +0200
Subject: [PATCH 59/86] Bugfix/portfolio snapshot cache write and
initialization retry limit (#7517)
* Fix portfolio snapshot cache write and initialization retry limit
* Update changelog
---
CHANGELOG.md | 2 ++
apps/api/src/app/app.module.ts | 10 ++++++-
.../calculator/portfolio-calculator.ts | 18 ++++++++++--
...tfolio-calculator-baln-buy-and-buy.spec.ts | 3 ++
...aln-buy-and-sell-in-two-activities.spec.ts | 3 ++
...folio-calculator-baln-buy-and-sell.spec.ts | 3 ++
.../portfolio-calculator-baln-buy.spec.ts | 3 ++
...ulator-btceur-in-base-currency-eur.spec.ts | 3 ++
.../roai/portfolio-calculator-btceur.spec.ts | 3 ++
...ator-btcusd-buy-and-sell-partially.spec.ts | 3 ++
.../portfolio-calculator-btcusd-short.spec.ts | 3 ++
.../roai/portfolio-calculator-btcusd.spec.ts | 3 ++
.../roai/portfolio-calculator-cash.spec.ts | 3 ++
.../roai/portfolio-calculator-fee.spec.ts | 3 ++
.../portfolio-calculator-googl-buy.spec.ts | 3 ++
...jnug-buy-and-sell-and-buy-and-sell.spec.ts | 3 ++
.../portfolio-calculator-liability.spec.ts | 3 ++
...folio-calculator-msft-buy-and-sell.spec.ts | 3 ++
...-calculator-msft-buy-with-dividend.spec.ts | 3 ++
...portfolio-calculator-no-activities.spec.ts | 3 ++
...ulator-novn-buy-and-sell-partially.spec.ts | 3 ++
...folio-calculator-novn-buy-and-sell.spec.ts | 3 ++
.../portfolio-calculator-valuable.spec.ts | 3 ++
.../portfolio-snapshot-computation.error.ts | 7 +++++
.../redis-cache/redis-cache.service.mock.ts | 3 ++
...o-snapshot-computation-exception.filter.ts | 26 +++++++++++++++++
.../portfolio-snapshot.processor.ts | 2 +-
.../portfolio-snapshot.service.mock.ts | 29 ++++++++++++++-----
28 files changed, 146 insertions(+), 11 deletions(-)
create mode 100644 apps/api/src/app/portfolio/errors/portfolio-snapshot-computation.error.ts
create mode 100644 apps/api/src/filters/portfolio-snapshot-computation-exception.filter.ts
diff --git a/CHANGELOG.md b/CHANGELOG.md
index a916f8643..d6ef5e2f0 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -21,6 +21,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
### Fixed
- Fixed the loading state in the user detail dialog of the admin control panel’s users section
+- Fixed a race condition where the portfolio snapshot computation was completed before its result had been cached, causing a redundant recomputation
+- Fixed an endless loop in the portfolio snapshot computation if the computed result could not be read from the cache
## 3.40.0 - 2026-08-02
diff --git a/apps/api/src/app/app.module.ts b/apps/api/src/app/app.module.ts
index bd76ef49b..ddda044a7 100644
--- a/apps/api/src/app/app.module.ts
+++ b/apps/api/src/app/app.module.ts
@@ -1,4 +1,5 @@
import { EventsModule } from '@ghostfolio/api/events/events.module';
+import { PortfolioSnapshotComputationExceptionFilter } from '@ghostfolio/api/filters/portfolio-snapshot-computation-exception.filter';
import { getRedisConnectionOptions } from '@ghostfolio/api/helper/redis.helper';
import { BullBoardAuthMiddleware } from '@ghostfolio/api/middlewares/bull-board-auth.middleware';
import { HtmlTemplateMiddleware } from '@ghostfolio/api/middlewares/html-template.middleware';
@@ -24,6 +25,7 @@ import { ThrottlerStorageRedisService } from '@nest-lab/throttler-storage-redis'
import { BullModule } from '@nestjs/bull';
import { MiddlewareConsumer, Module, NestModule } from '@nestjs/common';
import { ConfigModule } from '@nestjs/config';
+import { APP_FILTER } from '@nestjs/core';
import { EventEmitterModule } from '@nestjs/event-emitter';
import { ScheduleModule } from '@nestjs/schedule';
import { ServeStaticModule } from '@nestjs/serve-static';
@@ -184,7 +186,13 @@ import { UserModule } from './user/user.module';
UserModule,
WatchlistModule
],
- providers: [I18nService]
+ providers: [
+ I18nService,
+ {
+ provide: APP_FILTER,
+ useClass: PortfolioSnapshotComputationExceptionFilter
+ }
+ ]
})
export class AppModule implements NestModule {
public configure(consumer: MiddlewareConsumer) {
diff --git a/apps/api/src/app/portfolio/calculator/portfolio-calculator.ts b/apps/api/src/app/portfolio/calculator/portfolio-calculator.ts
index 38f942156..cdab3fdf0 100644
--- a/apps/api/src/app/portfolio/calculator/portfolio-calculator.ts
+++ b/apps/api/src/app/portfolio/calculator/portfolio-calculator.ts
@@ -1,4 +1,5 @@
import { CurrentRateService } from '@ghostfolio/api/app/portfolio/current-rate.service';
+import { PortfolioSnapshotComputationError } from '@ghostfolio/api/app/portfolio/errors/portfolio-snapshot-computation.error';
import { PortfolioCalculatorPosition } from '@ghostfolio/api/app/portfolio/interfaces/portfolio-calculator-position.interface';
import { PortfolioOrder } from '@ghostfolio/api/app/portfolio/interfaces/portfolio-order.interface';
import { PortfolioSnapshotValue } from '@ghostfolio/api/app/portfolio/interfaces/snapshot-value.interface';
@@ -65,6 +66,8 @@ import { isNumber, sortBy, sum, uniqBy } from 'lodash';
export abstract class PortfolioCalculator {
protected static readonly ENABLE_LOGGING = false;
+ private static readonly MAX_INITIALIZATION_ATTEMPTS = 3;
+
protected readonly logger = new Logger(PortfolioCalculator.name);
protected accountBalanceItems: HistoricalDataItem[];
@@ -174,6 +177,11 @@ export abstract class PortfolioCalculator {
this.computeTransactionPoints();
this.snapshotPromise = this.initialize();
+
+ // Mark the rejection as handled to prevent an unhandled promise rejection
+ // in case the snapshot promise is never awaited. Consumers awaiting it
+ // still receive the error.
+ this.snapshotPromise.catch(() => undefined);
}
protected abstract calculateOverallPerformance(
@@ -1124,7 +1132,7 @@ export abstract class PortfolioCalculator {
}
@LogPerformance
- private async initialize() {
+ private async initialize(attempt = 1) {
const startTimeTotal = performance.now();
let cachedPortfolioSnapshot: PortfolioSnapshot;
@@ -1183,6 +1191,12 @@ export abstract class PortfolioCalculator {
});
}
} else {
+ if (attempt > PortfolioCalculator.MAX_INITIALIZATION_ATTEMPTS) {
+ throw new PortfolioSnapshotComputationError(
+ `Portfolio snapshot of user '${this.userId}' could not be computed after ${PortfolioCalculator.MAX_INITIALIZATION_ATTEMPTS} attempts`
+ );
+ }
+
// Wait for computation
await this.portfolioSnapshotService.addJobToQueue({
data: {
@@ -1205,7 +1219,7 @@ export abstract class PortfolioCalculator {
await job.finished();
}
- await this.initialize();
+ await this.initialize(attempt + 1);
}
}
}
diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy-and-buy.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy-and-buy.spec.ts
index fe23af04b..a6bedc55d 100644
--- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy-and-buy.spec.ts
+++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy-and-buy.spec.ts
@@ -54,6 +54,9 @@ describe('PortfolioCalculator', () => {
let redisCacheService: RedisCacheService;
beforeEach(() => {
+ PortfolioSnapshotServiceMock.reset();
+ RedisCacheServiceMock.reset();
+
configurationService = new ConfigurationService();
currentRateService = new CurrentRateService(null, null, null, null);
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 061aaf817..dc22cdbab 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
@@ -54,6 +54,9 @@ describe('PortfolioCalculator', () => {
let redisCacheService: RedisCacheService;
beforeEach(() => {
+ PortfolioSnapshotServiceMock.reset();
+ RedisCacheServiceMock.reset();
+
configurationService = new ConfigurationService();
currentRateService = new CurrentRateService(null, null, null, null);
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 c8e0af46d..9d55a79dd 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
@@ -54,6 +54,9 @@ describe('PortfolioCalculator', () => {
let redisCacheService: RedisCacheService;
beforeEach(() => {
+ PortfolioSnapshotServiceMock.reset();
+ RedisCacheServiceMock.reset();
+
configurationService = new ConfigurationService();
currentRateService = new CurrentRateService(null, null, null, null);
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 4922382a9..a2d576361 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
@@ -54,6 +54,9 @@ describe('PortfolioCalculator', () => {
let redisCacheService: RedisCacheService;
beforeEach(() => {
+ PortfolioSnapshotServiceMock.reset();
+ RedisCacheServiceMock.reset();
+
configurationService = new ConfigurationService();
currentRateService = new CurrentRateService(null, null, null, null);
diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btceur-in-base-currency-eur.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btceur-in-base-currency-eur.spec.ts
index 21a8d2056..1143e3bd2 100644
--- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btceur-in-base-currency-eur.spec.ts
+++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btceur-in-base-currency-eur.spec.ts
@@ -76,6 +76,9 @@ describe('PortfolioCalculator', () => {
});
beforeEach(() => {
+ PortfolioSnapshotServiceMock.reset();
+ RedisCacheServiceMock.reset();
+
configurationService = new ConfigurationService();
currentRateService = new CurrentRateService(null, null, null, null);
diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btceur.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btceur.spec.ts
index 4f5da58b8..e5b0d69d6 100644
--- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btceur.spec.ts
+++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btceur.spec.ts
@@ -64,6 +64,9 @@ describe('PortfolioCalculator', () => {
});
beforeEach(() => {
+ PortfolioSnapshotServiceMock.reset();
+ RedisCacheServiceMock.reset();
+
configurationService = new ConfigurationService();
currentRateService = new CurrentRateService(null, null, null, null);
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 f20506b06..ea1df4203 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
@@ -66,6 +66,9 @@ describe('PortfolioCalculator', () => {
let redisCacheService: RedisCacheService;
beforeEach(() => {
+ PortfolioSnapshotServiceMock.reset();
+ RedisCacheServiceMock.reset();
+
configurationService = new ConfigurationService();
currentRateService = new CurrentRateService(null, null, null, null);
diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btcusd-short.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btcusd-short.spec.ts
index 79c6979ef..93d91c500 100644
--- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btcusd-short.spec.ts
+++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btcusd-short.spec.ts
@@ -64,6 +64,9 @@ describe('PortfolioCalculator', () => {
});
beforeEach(() => {
+ PortfolioSnapshotServiceMock.reset();
+ RedisCacheServiceMock.reset();
+
configurationService = new ConfigurationService();
currentRateService = new CurrentRateService(null, null, null, null);
diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btcusd.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btcusd.spec.ts
index eb5571feb..1fa2d1264 100644
--- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btcusd.spec.ts
+++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btcusd.spec.ts
@@ -64,6 +64,9 @@ describe('PortfolioCalculator', () => {
});
beforeEach(() => {
+ PortfolioSnapshotServiceMock.reset();
+ RedisCacheServiceMock.reset();
+
configurationService = new ConfigurationService();
currentRateService = new CurrentRateService(null, null, null, null);
diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-cash.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-cash.spec.ts
index aaa2f63cf..3b09bfd26 100644
--- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-cash.spec.ts
+++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-cash.spec.ts
@@ -77,6 +77,9 @@ describe('PortfolioCalculator', () => {
let redisCacheService: RedisCacheService;
beforeEach(() => {
+ PortfolioSnapshotServiceMock.reset();
+ RedisCacheServiceMock.reset();
+
configurationService = new ConfigurationService();
exchangeRateDataService = new ExchangeRateDataService(
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 4e413c0c5..000cc5935 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
@@ -54,6 +54,9 @@ describe('PortfolioCalculator', () => {
let redisCacheService: RedisCacheService;
beforeEach(() => {
+ PortfolioSnapshotServiceMock.reset();
+ RedisCacheServiceMock.reset();
+
configurationService = new ConfigurationService();
currentRateService = new CurrentRateService(null, null, null, null);
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 984dc1154..451973a9f 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
@@ -66,6 +66,9 @@ describe('PortfolioCalculator', () => {
let redisCacheService: RedisCacheService;
beforeEach(() => {
+ PortfolioSnapshotServiceMock.reset();
+ RedisCacheServiceMock.reset();
+
configurationService = new ConfigurationService();
currentRateService = new CurrentRateService(null, null, null, null);
diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-jnug-buy-and-sell-and-buy-and-sell.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-jnug-buy-and-sell-and-buy-and-sell.spec.ts
index 962cfe2d8..2cc87934a 100644
--- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-jnug-buy-and-sell-and-buy-and-sell.spec.ts
+++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-jnug-buy-and-sell-and-buy-and-sell.spec.ts
@@ -67,6 +67,9 @@ describe('PortfolioCalculator', () => {
});
beforeEach(() => {
+ PortfolioSnapshotServiceMock.reset();
+ RedisCacheServiceMock.reset();
+
configurationService = new ConfigurationService();
currentRateService = new CurrentRateService(null, null, null, null);
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 94654af61..68572c63e 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
@@ -54,6 +54,9 @@ describe('PortfolioCalculator', () => {
let redisCacheService: RedisCacheService;
beforeEach(() => {
+ PortfolioSnapshotServiceMock.reset();
+ RedisCacheServiceMock.reset();
+
configurationService = new ConfigurationService();
currentRateService = new CurrentRateService(null, null, null, null);
diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-msft-buy-and-sell.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-msft-buy-and-sell.spec.ts
index b1f030aae..53236f007 100644
--- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-msft-buy-and-sell.spec.ts
+++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-msft-buy-and-sell.spec.ts
@@ -52,6 +52,9 @@ describe('PortfolioCalculator', () => {
let redisCacheService: RedisCacheService;
beforeEach(() => {
+ PortfolioSnapshotServiceMock.reset();
+ RedisCacheServiceMock.reset();
+
configurationService = new ConfigurationService();
currentRateService = new CurrentRateService(null, null, null, null);
exchangeRateDataService = new ExchangeRateDataService(
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 91c095623..f6598f22b 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
@@ -54,6 +54,9 @@ describe('PortfolioCalculator', () => {
let redisCacheService: RedisCacheService;
beforeEach(() => {
+ PortfolioSnapshotServiceMock.reset();
+ RedisCacheServiceMock.reset();
+
configurationService = new ConfigurationService();
currentRateService = new CurrentRateService(null, null, null, null);
diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-no-activities.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-no-activities.spec.ts
index ff5dc93f9..fb7a43477 100644
--- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-no-activities.spec.ts
+++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-no-activities.spec.ts
@@ -49,6 +49,9 @@ describe('PortfolioCalculator', () => {
let redisCacheService: RedisCacheService;
beforeEach(() => {
+ PortfolioSnapshotServiceMock.reset();
+ RedisCacheServiceMock.reset();
+
configurationService = new ConfigurationService();
currentRateService = new CurrentRateService(null, null, null, null);
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 8ce62db59..8c3858dcd 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
@@ -67,6 +67,9 @@ describe('PortfolioCalculator', () => {
});
beforeEach(() => {
+ PortfolioSnapshotServiceMock.reset();
+ RedisCacheServiceMock.reset();
+
configurationService = new ConfigurationService();
currentRateService = new CurrentRateService(null, null, null, null);
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 10cc2da01..364d173e1 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
@@ -67,6 +67,9 @@ describe('PortfolioCalculator', () => {
});
beforeEach(() => {
+ PortfolioSnapshotServiceMock.reset();
+ RedisCacheServiceMock.reset();
+
configurationService = new ConfigurationService();
currentRateService = new CurrentRateService(null, null, null, null);
diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-valuable.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-valuable.spec.ts
index 226eaa3d8..ce5f90f5c 100644
--- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-valuable.spec.ts
+++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-valuable.spec.ts
@@ -54,6 +54,9 @@ describe('PortfolioCalculator', () => {
let redisCacheService: RedisCacheService;
beforeEach(() => {
+ PortfolioSnapshotServiceMock.reset();
+ RedisCacheServiceMock.reset();
+
configurationService = new ConfigurationService();
currentRateService = new CurrentRateService(null, null, null, null);
diff --git a/apps/api/src/app/portfolio/errors/portfolio-snapshot-computation.error.ts b/apps/api/src/app/portfolio/errors/portfolio-snapshot-computation.error.ts
new file mode 100644
index 000000000..074ac0bae
--- /dev/null
+++ b/apps/api/src/app/portfolio/errors/portfolio-snapshot-computation.error.ts
@@ -0,0 +1,7 @@
+export class PortfolioSnapshotComputationError extends Error {
+ public constructor(message: string) {
+ super(message);
+
+ this.name = 'PortfolioSnapshotComputationError';
+ }
+}
diff --git a/apps/api/src/app/redis-cache/redis-cache.service.mock.ts b/apps/api/src/app/redis-cache/redis-cache.service.mock.ts
index feb669ab0..2a3c1cc7a 100644
--- a/apps/api/src/app/redis-cache/redis-cache.service.mock.ts
+++ b/apps/api/src/app/redis-cache/redis-cache.service.mock.ts
@@ -18,6 +18,9 @@ export const RedisCacheServiceMock = {
return `portfolio-snapshot-${userId}${filtersHash > 0 ? `-${filtersHash}` : ''}`;
},
+ reset: () => {
+ RedisCacheServiceMock.cache.clear();
+ },
set: (key: string, value: string): Promise => {
RedisCacheServiceMock.cache.set(key, value);
diff --git a/apps/api/src/filters/portfolio-snapshot-computation-exception.filter.ts b/apps/api/src/filters/portfolio-snapshot-computation-exception.filter.ts
new file mode 100644
index 000000000..05471c3f6
--- /dev/null
+++ b/apps/api/src/filters/portfolio-snapshot-computation-exception.filter.ts
@@ -0,0 +1,26 @@
+import { PortfolioSnapshotComputationError } from '@ghostfolio/api/app/portfolio/errors/portfolio-snapshot-computation.error';
+
+import { ArgumentsHost, Catch, ExceptionFilter, Logger } from '@nestjs/common';
+import { Response } from 'express';
+import { getReasonPhrase, StatusCodes } from 'http-status-codes';
+
+@Catch(PortfolioSnapshotComputationError)
+export class PortfolioSnapshotComputationExceptionFilter implements ExceptionFilter {
+ private readonly logger = new Logger(
+ PortfolioSnapshotComputationExceptionFilter.name
+ );
+
+ public catch(
+ exception: PortfolioSnapshotComputationError,
+ host: ArgumentsHost
+ ) {
+ this.logger.error(exception.message);
+
+ const response = host.switchToHttp().getResponse();
+
+ response.status(StatusCodes.SERVICE_UNAVAILABLE).json({
+ message: getReasonPhrase(StatusCodes.SERVICE_UNAVAILABLE),
+ statusCode: StatusCodes.SERVICE_UNAVAILABLE
+ });
+ }
+}
diff --git a/apps/api/src/services/queues/portfolio-snapshot/portfolio-snapshot.processor.ts b/apps/api/src/services/queues/portfolio-snapshot/portfolio-snapshot.processor.ts
index cf94a9d2b..2ade39a8a 100644
--- a/apps/api/src/services/queues/portfolio-snapshot/portfolio-snapshot.processor.ts
+++ b/apps/api/src/services/queues/portfolio-snapshot/portfolio-snapshot.processor.ts
@@ -87,7 +87,7 @@ export class PortfolioSnapshotProcessor {
: 0
);
- this.redisCacheService.set(
+ await this.redisCacheService.set(
this.redisCacheService.getPortfolioSnapshotKey({
filters: job.data.filters,
userId: job.data.userId
diff --git a/apps/api/src/services/queues/portfolio-snapshot/portfolio-snapshot.service.mock.ts b/apps/api/src/services/queues/portfolio-snapshot/portfolio-snapshot.service.mock.ts
index 7eb09d966..fddbd01ab 100644
--- a/apps/api/src/services/queues/portfolio-snapshot/portfolio-snapshot.service.mock.ts
+++ b/apps/api/src/services/queues/portfolio-snapshot/portfolio-snapshot.service.mock.ts
@@ -1,32 +1,47 @@
+import { PortfolioSnapshotValue } from '@ghostfolio/api/app/portfolio/interfaces/snapshot-value.interface';
+import { RedisCacheServiceMock } from '@ghostfolio/api/app/redis-cache/redis-cache.service.mock';
+
import type { Job, JobId, JobOptions } from 'bull';
+import ms from 'ms';
import { setTimeout } from 'timers/promises';
import { PortfolioSnapshotQueueJob } from './interfaces/portfolio-snapshot-queue-job.interface';
export const PortfolioSnapshotServiceMock = {
- addJobToQueue({
+ addJobToQueue: ({
opts
}: {
data: PortfolioSnapshotQueueJob;
name: string;
opts?: JobOptions;
- }): Promise {
+ }): Promise => {
const mockJob: Partial = {
finished: async () => {
await setTimeout(100);
- return Promise.resolve();
+ // Mimic the processor which caches the computed portfolio snapshot
+ // under the job id
+ await RedisCacheServiceMock.set(
+ opts?.jobId as string,
+ JSON.stringify({
+ expiration: Date.now() + ms('1 minute'),
+ portfolioSnapshot: {}
+ } as unknown as PortfolioSnapshotValue)
+ );
}
};
- this.jobsStore.set(opts?.jobId, mockJob);
+ PortfolioSnapshotServiceMock.jobsStore.set(opts?.jobId, mockJob);
return Promise.resolve(mockJob as Job);
},
- getJob(jobId: JobId): Promise {
- const job = this.jobsStore.get(jobId);
+ getJob: (jobId: JobId): Promise => {
+ const job = PortfolioSnapshotServiceMock.jobsStore.get(jobId);
return Promise.resolve(job as Job);
},
- jobsStore: new Map>()
+ jobsStore: new Map>(),
+ reset: () => {
+ PortfolioSnapshotServiceMock.jobsStore.clear();
+ }
};
From cf9d9253f97ab503ff0f6afd2e489873b3e8b976 Mon Sep 17 00:00:00 2001
From: "github-actions[bot]"
<41898282+github-actions[bot]@users.noreply.github.com>
Date: Mon, 3 Aug 2026 20:53:12 +0200
Subject: [PATCH 60/86] Task/update locales (#7501)
Co-authored-by: github-actions[bot]
---
apps/client/src/locales/messages.ca.xlf | 290 ++++++++++++++----------
apps/client/src/locales/messages.de.xlf | 290 ++++++++++++++----------
apps/client/src/locales/messages.es.xlf | 290 ++++++++++++++----------
apps/client/src/locales/messages.fr.xlf | 290 ++++++++++++++----------
apps/client/src/locales/messages.it.xlf | 290 ++++++++++++++----------
apps/client/src/locales/messages.ja.xlf | 290 ++++++++++++++----------
apps/client/src/locales/messages.ko.xlf | 290 ++++++++++++++----------
apps/client/src/locales/messages.nl.xlf | 290 ++++++++++++++----------
apps/client/src/locales/messages.pl.xlf | 290 ++++++++++++++----------
apps/client/src/locales/messages.pt.xlf | 290 ++++++++++++++----------
apps/client/src/locales/messages.tr.xlf | 290 ++++++++++++++----------
apps/client/src/locales/messages.uk.xlf | 290 ++++++++++++++----------
apps/client/src/locales/messages.xlf | 282 +++++++++++++----------
apps/client/src/locales/messages.zh.xlf | 290 ++++++++++++++----------
14 files changed, 2332 insertions(+), 1720 deletions(-)
diff --git a/apps/client/src/locales/messages.ca.xlf b/apps/client/src/locales/messages.ca.xlf
index b760aa9a3..ed890ccb1 100644
--- a/apps/client/src/locales/messages.ca.xlf
+++ b/apps/client/src/locales/messages.ca.xlf
@@ -635,7 +635,7 @@
apps/client/src/app/components/admin-overview/admin-overview.html
- 235
+ 238
apps/client/src/app/components/admin-platform/admin-platform.component.html
@@ -645,6 +645,10 @@
apps/client/src/app/components/admin-tag/admin-tag.component.html
100
+
+ apps/client/src/app/components/admin-users/admin-users.html
+ 254
+
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
27
@@ -679,7 +683,7 @@
Paid
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts
- 129
+ 136
@@ -695,7 +699,7 @@
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 166
+ 174
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
@@ -830,6 +834,14 @@
208
+
+ Splits
+ Splits
+
+ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
+ 512
+
+
View Stacktrace
Veure Stacktrace
@@ -873,6 +885,14 @@
Date
Data
+
+ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
+ 521
+
+
+ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
+ 560
+
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
156
@@ -919,7 +939,7 @@
Punts de referència
apps/client/src/app/components/admin-market-data/admin-market-data.component.ts
- 125
+ 128
@@ -927,7 +947,7 @@
Divises
apps/client/src/app/components/admin-market-data/admin-market-data.component.ts
- 130
+ 133
apps/client/src/app/pages/public/public-page.html
@@ -947,7 +967,7 @@
ETFs sense País
apps/client/src/app/components/admin-market-data/admin-market-data.component.ts
- 135
+ 138
@@ -955,7 +975,7 @@
ETFs sense Sector
apps/client/src/app/components/admin-market-data/admin-market-data.component.ts
- 140
+ 143
@@ -963,7 +983,7 @@
An error occurred while converting the data source to .
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 482
+ 522
@@ -971,7 +991,7 @@
Filtra per...
apps/client/src/app/components/admin-market-data/admin-market-data.component.ts
- 365
+ 377
@@ -1043,7 +1063,7 @@
Subscription History
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 141
+ 149
@@ -1071,11 +1091,11 @@
Realment vol eliminar el perfil d’aquest actiu?
apps/client/src/app/components/admin-market-data/admin-market-data.service.ts
- 28
+ 29
apps/client/src/app/components/admin-market-data/admin-market-data.service.ts
- 66
+ 71
@@ -1099,7 +1119,7 @@
El preu de mercat actual és
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 766
+ 850
@@ -1163,7 +1183,7 @@
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 88
+ 96
@@ -1239,7 +1259,7 @@
Total
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 160
+ 168
@@ -1247,7 +1267,7 @@
Configuració del Proveïdor de Dades
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 510
+ 628
@@ -1255,7 +1275,7 @@
Prova
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 607
+ 725
@@ -1267,7 +1287,7 @@
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 589
+ 707
apps/client/src/app/components/admin-platform/admin-platform.component.html
@@ -1283,7 +1303,7 @@
Asset profile has been saved
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 665
+ 748
@@ -1375,7 +1395,7 @@
Està segur qeu vol eliminar aquest cupó?
apps/client/src/app/components/admin-overview/admin-overview.component.ts
- 242
+ 247
@@ -1383,7 +1403,7 @@
Està segur que vol eliminar aquest missatge del sistema?
apps/client/src/app/components/admin-overview/admin-overview.component.ts
- 255
+ 260
@@ -1391,7 +1411,7 @@
Està segur que vol depurar el cache?
apps/client/src/app/components/admin-overview/admin-overview.component.ts
- 279
+ 290
@@ -1399,7 +1419,7 @@
Si us plau, afegeixi el seu missatge del sistema:
apps/client/src/app/components/admin-overview/admin-overview.component.ts
- 299
+ 310
@@ -1415,7 +1435,7 @@
per Usuari
apps/client/src/app/components/admin-overview/admin-overview.component.ts
- 178
+ 181
@@ -1439,7 +1459,7 @@
Mode Només Lecutra
apps/client/src/app/components/admin-overview/admin-overview.html
- 64
+ 63
@@ -1447,7 +1467,7 @@
Recollida de Dades
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 630
+ 748
apps/client/src/app/components/admin-overview/admin-overview.html
@@ -1467,7 +1487,7 @@
Missatge del Sistema
apps/client/src/app/components/admin-overview/admin-overview.html
- 88
+ 89
@@ -1475,7 +1495,7 @@
Estableix el Missatge
apps/client/src/app/components/admin-overview/admin-overview.html
- 110
+ 113
@@ -1483,15 +1503,19 @@
Coupons
apps/client/src/app/components/admin-overview/admin-overview.html
- 148
+ 151
Add
Afegir
+
+ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
+ 615
+
apps/client/src/app/components/admin-overview/admin-overview.html
- 298
+ 301
libs/ui/src/lib/account-balances/account-balances.component.html
@@ -1503,7 +1527,7 @@
Ordre
apps/client/src/app/components/admin-overview/admin-overview.html
- 117
+ 120
@@ -1511,7 +1535,7 @@
Depurar el Cache
apps/client/src/app/components/admin-overview/admin-overview.html
- 133
+ 136
@@ -1551,7 +1575,7 @@
Current year
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 232
+ 264
@@ -1562,6 +1586,14 @@
10
+
+ Cache has been flushed.
+ Cache has been flushed.
+
+ apps/client/src/app/components/admin-overview/admin-overview.component.ts
+ 281
+
+
Platforms
Plataformes
@@ -1659,7 +1691,7 @@
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 124
+ 132
@@ -1678,24 +1710,16 @@
228
-
- Delete User
- Eliminar Usuari
-
- apps/client/src/app/components/admin-users/admin-users.html
- 254
-
-
Could not validate form
Could not validate form
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 641
+ 724
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 644
+ 727
@@ -1946,6 +1970,14 @@
64
+
+ Split Ratio
+ Split Ratio
+
+ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
+ 526
+
+
Fear
Por
@@ -2063,7 +2095,7 @@
Current week
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 224
+ 256
@@ -2091,7 +2123,7 @@
Code
apps/client/src/app/components/admin-overview/admin-overview.html
- 159
+ 162
@@ -2475,7 +2507,7 @@
YTD
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 232
+ 264
libs/ui/src/lib/assistant/assistant.component.ts
@@ -2487,7 +2519,7 @@
1 any
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 236
+ 268
libs/ui/src/lib/assistant/assistant.component.ts
@@ -2507,7 +2539,7 @@
5 anys
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 240
+ 272
libs/ui/src/lib/assistant/assistant.component.ts
@@ -2527,7 +2559,7 @@
Màx
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 244
+ 276
libs/ui/src/lib/assistant/assistant.component.ts
@@ -2607,7 +2639,7 @@
Introduïu el vostre codi de cupó.
apps/client/src/app/components/user-account-membership/user-account-membership.component.ts
- 214
+ 203
@@ -2615,7 +2647,7 @@
No s’ha pogut bescanviar el codi de cupó
apps/client/src/app/components/user-account-membership/user-account-membership.component.ts
- 178
+ 181
@@ -2631,15 +2663,7 @@
El codi del cupó s’ha bescanviat
apps/client/src/app/components/user-account-membership/user-account-membership.component.ts
- 191
-
-
-
- Reload
- Torna a carregar
-
- apps/client/src/app/components/user-account-membership/user-account-membership.component.ts
- 192
+ 194
@@ -2703,7 +2727,7 @@
De debò vols eliminar aquest mètode d’inici de sessió?
apps/client/src/app/components/user-account-settings/user-account-settings.component.ts
- 318
+ 314
@@ -2727,7 +2751,7 @@
Ups! Hi ha hagut un error en configurar l’autenticació biomètrica.
apps/client/src/app/components/user-account-settings/user-account-settings.component.ts
- 367
+ 363
@@ -2767,7 +2791,7 @@
Coupon
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts
- 134
+ 141
@@ -2791,7 +2815,7 @@
Localització
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 548
+ 666
apps/client/src/app/components/user-account-settings/user-account-settings.html
@@ -2995,7 +3019,7 @@
Daily
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 212
+ 244
@@ -3139,7 +3163,7 @@
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 101
+ 109
apps/client/src/app/pages/accounts/accounts-page.html
@@ -3159,7 +3183,7 @@
Vaja, la transferència del saldo en efectiu ha fallat.
apps/client/src/app/pages/accounts/accounts-page.component.ts
- 358
+ 355
@@ -3183,7 +3207,7 @@
ID del compte
apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html
- 103
+ 98
@@ -3443,11 +3467,11 @@
Could not parse scraper configuration
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 589
+ 672
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 592
+ 675
@@ -3479,7 +3503,7 @@
Duration
apps/client/src/app/components/admin-overview/admin-overview.html
- 172
+ 175
@@ -3696,11 +3720,11 @@
Creation
apps/client/src/app/components/admin-overview/admin-overview.html
- 185
+ 188
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 150
+ 158
@@ -4072,7 +4096,7 @@
Oops! Could not delete the asset profiles.
apps/client/src/app/components/admin-market-data/admin-market-data.service.ts
- 52
+ 56
@@ -4328,7 +4352,7 @@
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 110
+ 118
apps/client/src/app/pages/portfolio/activities/activities-page.html
@@ -4555,6 +4579,14 @@
118
+
+ Shares After
+ Shares After
+
+ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
+ 584
+
+
Back
Enrere
@@ -4572,7 +4604,7 @@
Price
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 176
+ 184
@@ -4580,7 +4612,7 @@
Do you really want to convert this asset profile to ( )?
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 723
+ 806
@@ -4680,16 +4712,12 @@
Trial
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts
- 133
+ 140
Exclude from Analysis
Excluir de l’anàlisi
-
- apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html
- 97
-
libs/ui/src/lib/i18n.ts
22
@@ -5048,7 +5076,7 @@
Hourly
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 216
+ 248
@@ -5160,7 +5188,7 @@
Expiration
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 209
+ 217
@@ -5184,11 +5212,11 @@
Could not save asset profile
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 675
+ 758
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 678
+ 761
@@ -5328,6 +5356,14 @@
43
+
+ Data gathering has been started.
+ Data gathering has been started.
+
+ apps/client/src/app/components/admin-market-data/admin-market-data.component.ts
+ 413
+
+
Global
Global
@@ -5417,7 +5453,7 @@
Coupon has been created
apps/client/src/app/components/admin-overview/admin-overview.component.ts
- 224
+ 229
@@ -5621,7 +5657,7 @@
Pertinença
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 78
+ 82
libs/common/src/lib/routes/routes.ts
@@ -5773,7 +5809,7 @@
WTD
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 224
+ 256
libs/ui/src/lib/assistant/assistant.component.ts
@@ -5793,7 +5829,7 @@
MTD
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 228
+ 260
libs/ui/src/lib/assistant/assistant.component.ts
@@ -5821,7 +5857,7 @@
any
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 236
+ 268
apps/client/src/app/pages/resources/personal-finance-tools/product-page.html
@@ -5841,7 +5877,7 @@
anys
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 240
+ 272
libs/ui/src/lib/assistant/assistant.component.ts
@@ -6297,7 +6333,7 @@
No Activities
apps/client/src/app/components/admin-market-data/admin-market-data.component.ts
- 145
+ 148
@@ -6529,7 +6565,7 @@
Authentication
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 65
+ 67
@@ -6837,7 +6873,7 @@
Oops! Could not delete the asset profile.
apps/client/src/app/components/admin-market-data/admin-market-data.service.ts
- 51
+ 55
@@ -6941,7 +6977,7 @@
Do you really want to delete these asset profiles?
apps/client/src/app/components/admin-market-data/admin-market-data.service.ts
- 67
+ 72
@@ -6949,7 +6985,7 @@
Error
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 757
+ 841
@@ -6993,7 +7029,7 @@
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 635
+ 753
apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html
@@ -7017,7 +7053,7 @@
apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html
- 112
+ 107
apps/client/src/app/pages/accounts/transfer-balance/transfer-balance-dialog.html
@@ -7045,7 +7081,7 @@
Close
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 637
+ 755
apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html
@@ -7077,11 +7113,11 @@
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 244
+ 252
apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html
- 114
+ 109
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
@@ -7097,7 +7133,7 @@
Role
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 44
+ 45
@@ -7201,7 +7237,7 @@
has been copied to the clipboard
apps/client/src/app/components/admin-overview/admin-overview.component.ts
- 223
+ 228
libs/ui/src/lib/value/value.component.ts
@@ -7328,6 +7364,14 @@
278
+
+ Shares Before
+ Shares Before
+
+ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
+ 597
+
+
cannot be used anonymously
cannot be used anonymously
@@ -7551,7 +7595,7 @@
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 133
+ 141
@@ -7623,7 +7667,7 @@
Save
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 646
+ 764
apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html
@@ -7655,7 +7699,7 @@
apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html
- 123
+ 118
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
@@ -7739,7 +7783,7 @@
Lazy
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 259
+ 292
@@ -7747,7 +7791,7 @@
Instant
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 263
+ 296
@@ -7755,7 +7799,7 @@
Default Market Price
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 520
+ 638
@@ -7763,7 +7807,7 @@
Mode
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 557
+ 675
@@ -7771,7 +7815,7 @@
Do you really want to convert the data source to ?
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 485
+ 525
@@ -7779,7 +7823,7 @@
Selector
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 573
+ 691
@@ -7787,7 +7831,7 @@
HTTP Request Headers
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 533
+ 651
@@ -7795,7 +7839,7 @@
end of day
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 259
+ 292
@@ -7803,7 +7847,7 @@
real-time
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 263
+ 296
@@ -8016,7 +8060,7 @@
( ) is already in use.
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 718
+ 801
@@ -8024,7 +8068,7 @@
An error occurred while updating to ( ).
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 721
+ 804
@@ -8177,7 +8221,7 @@
Demo user account has been synced.
apps/client/src/app/components/admin-overview/admin-overview.component.ts
- 323
+ 334
@@ -8185,7 +8229,7 @@
Sync Demo User Account
apps/client/src/app/components/admin-overview/admin-overview.html
- 128
+ 131
@@ -8399,7 +8443,7 @@
Current month
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 228
+ 260
@@ -9036,7 +9080,7 @@
Registration Date
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 56
+ 58
diff --git a/apps/client/src/locales/messages.de.xlf b/apps/client/src/locales/messages.de.xlf
index b2800165a..653673d86 100644
--- a/apps/client/src/locales/messages.de.xlf
+++ b/apps/client/src/locales/messages.de.xlf
@@ -58,7 +58,7 @@
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 166
+ 174
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
@@ -270,7 +270,7 @@
apps/client/src/app/components/admin-overview/admin-overview.html
- 235
+ 238
apps/client/src/app/components/admin-platform/admin-platform.component.html
@@ -280,6 +280,10 @@
apps/client/src/app/components/admin-tag/admin-tag.component.html
100
+
+ apps/client/src/app/components/admin-users/admin-users.html
+ 254
+
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
27
@@ -314,7 +318,7 @@
Bezahlt
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts
- 129
+ 136
@@ -433,6 +437,14 @@
208
+
+ Splits
+ Splits
+
+ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
+ 512
+
+
View Stacktrace
Stacktrace anzeigen
@@ -468,6 +480,14 @@
Date
Datum
+
+ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
+ 521
+
+
+ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
+ 560
+
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
156
@@ -546,7 +566,7 @@
Möchtest du diesen Gutscheincode wirklich löschen?
apps/client/src/app/components/admin-overview/admin-overview.component.ts
- 242
+ 247
@@ -554,7 +574,7 @@
Möchtest du den Cache wirklich leeren?
apps/client/src/app/components/admin-overview/admin-overview.component.ts
- 279
+ 290
@@ -562,7 +582,7 @@
Bitte gebe deine Systemmeldung ein:
apps/client/src/app/components/admin-overview/admin-overview.component.ts
- 299
+ 310
@@ -570,7 +590,7 @@
pro Benutzer
apps/client/src/app/components/admin-overview/admin-overview.component.ts
- 178
+ 181
@@ -614,7 +634,7 @@
Systemmeldung
apps/client/src/app/components/admin-overview/admin-overview.html
- 88
+ 89
@@ -622,7 +642,7 @@
Systemmeldung setzen
apps/client/src/app/components/admin-overview/admin-overview.html
- 110
+ 113
@@ -630,7 +650,7 @@
Lese-Modus
apps/client/src/app/components/admin-overview/admin-overview.html
- 64
+ 63
@@ -638,15 +658,19 @@
Gutscheincodes
apps/client/src/app/components/admin-overview/admin-overview.html
- 148
+ 151
Add
Hinzufügen
+
+ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
+ 615
+
apps/client/src/app/components/admin-overview/admin-overview.html
- 298
+ 301
libs/ui/src/lib/account-balances/account-balances.component.html
@@ -658,7 +682,7 @@
Verwaltung
apps/client/src/app/components/admin-overview/admin-overview.html
- 117
+ 120
@@ -666,7 +690,7 @@
Cache leeren
apps/client/src/app/components/admin-overview/admin-overview.html
- 133
+ 136
@@ -710,7 +734,7 @@
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 124
+ 132
@@ -778,11 +802,11 @@
Erstellung
apps/client/src/app/components/admin-overview/admin-overview.html
- 185
+ 188
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 150
+ 158
@@ -829,6 +853,14 @@
64
+
+ Split Ratio
+ Split Ratio
+
+ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
+ 526
+
+
Last Days
Letzte Tage
@@ -1122,7 +1154,7 @@
YTD
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 232
+ 264
libs/ui/src/lib/assistant/assistant.component.ts
@@ -1134,7 +1166,7 @@
1J
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 236
+ 268
libs/ui/src/lib/assistant/assistant.component.ts
@@ -1154,7 +1186,7 @@
5J
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 240
+ 272
libs/ui/src/lib/assistant/assistant.component.ts
@@ -1174,7 +1206,7 @@
Max
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 244
+ 276
libs/ui/src/lib/assistant/assistant.component.ts
@@ -1250,7 +1282,7 @@
Bitte gebe deinen Gutscheincode ein.
apps/client/src/app/components/user-account-membership/user-account-membership.component.ts
- 214
+ 203
@@ -1258,7 +1290,7 @@
Gutscheincode konnte nicht eingelöst werden
apps/client/src/app/components/user-account-membership/user-account-membership.component.ts
- 178
+ 181
@@ -1274,15 +1306,7 @@
Gutscheincode wurde eingelöst
apps/client/src/app/components/user-account-membership/user-account-membership.component.ts
- 191
-
-
-
- Reload
- Neu laden
-
- apps/client/src/app/components/user-account-membership/user-account-membership.component.ts
- 192
+ 194
@@ -1290,7 +1314,7 @@
Möchtest du diese Anmeldemethode wirklich löschen?
apps/client/src/app/components/user-account-settings/user-account-settings.component.ts
- 318
+ 314
@@ -1350,7 +1374,7 @@
Gutschein
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts
- 134
+ 141
@@ -1358,7 +1382,7 @@
Lokalität
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 548
+ 666
apps/client/src/app/components/user-account-settings/user-account-settings.html
@@ -1474,7 +1498,7 @@
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 101
+ 109
apps/client/src/app/pages/accounts/accounts-page.html
@@ -1582,7 +1606,7 @@
Konto ID
apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html
- 103
+ 98
@@ -1742,7 +1766,7 @@
Dauer
apps/client/src/app/components/admin-overview/admin-overview.html
- 172
+ 175
@@ -1962,7 +1986,7 @@
Testphase
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts
- 133
+ 140
@@ -2062,7 +2086,7 @@
Aktuelle Woche
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 224
+ 256
@@ -2210,7 +2234,7 @@
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 110
+ 118
apps/client/src/app/pages/portfolio/activities/activities-page.html
@@ -2630,16 +2654,12 @@
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 88
+ 96
Exclude from Analysis
Aus Analyse ausschliessen
-
- apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html
- 97
-
libs/ui/src/lib/i18n.ts
22
@@ -2770,7 +2790,7 @@
Verlauf der Mitgliedschaft
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 141
+ 149
@@ -2802,7 +2822,7 @@
Filtern nach...
apps/client/src/app/components/admin-market-data/admin-market-data.component.ts
- 365
+ 377
@@ -2838,11 +2858,11 @@
Das Formular konnte nicht validiert werden
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 641
+ 724
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 644
+ 727
@@ -2958,7 +2978,7 @@
Code
apps/client/src/app/components/admin-overview/admin-overview.html
- 159
+ 162
@@ -3126,7 +3146,7 @@
Authentifizierung
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 65
+ 67
@@ -3358,7 +3378,7 @@
Preis
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 176
+ 184
@@ -3366,7 +3386,7 @@
Möchtest du dieses Anlageprofil wirklich in ( ) umwandeln?
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 723
+ 806
@@ -3646,7 +3666,7 @@
Keine Aktivitäten
apps/client/src/app/components/admin-market-data/admin-market-data.component.ts
- 145
+ 148
@@ -3838,7 +3858,7 @@
Stündlich
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 216
+ 248
@@ -3930,7 +3950,7 @@
Ablauf
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 209
+ 217
@@ -3946,11 +3966,11 @@
Das Anlageprofil konnte nicht gespeichert werden
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 675
+ 758
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 678
+ 761
@@ -4129,14 +4149,6 @@
228
-
- Delete User
- Benutzer löschen
-
- apps/client/src/app/components/admin-users/admin-users.html
- 254
-
-
By ETF Provider
Nach ETF-Anbieter
@@ -4166,7 +4178,7 @@
Aktuelles Jahr
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 232
+ 264
@@ -4177,6 +4189,14 @@
10
+
+ Cache has been flushed.
+ Cache has been flushed.
+
+ apps/client/src/app/components/admin-overview/admin-overview.component.ts
+ 281
+
+
Url
Url
@@ -4186,7 +4206,7 @@
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 589
+ 707
apps/client/src/app/components/admin-platform/admin-platform.component.html
@@ -4202,7 +4222,7 @@
Das Anlageprofil wurde gespeichert
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 665
+ 748
@@ -4325,6 +4345,14 @@
118
+
+ Shares After
+ Shares After
+
+ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
+ 584
+
+
Frequently Asked Questions (FAQ)
Häufig gestellte Fragen (FAQ)
@@ -4586,7 +4614,7 @@
Gesamt
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 160
+ 168
@@ -4594,7 +4622,7 @@
Scraper Konfiguration
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 510
+ 628
@@ -4662,7 +4690,7 @@
Gutschein wurde erstellt
apps/client/src/app/components/admin-overview/admin-overview.component.ts
- 224
+ 229
@@ -4870,7 +4898,7 @@
ETFs ohne Länder
apps/client/src/app/components/admin-market-data/admin-market-data.component.ts
- 135
+ 138
@@ -4878,7 +4906,7 @@
ETFs ohne Sektoren
apps/client/src/app/components/admin-market-data/admin-market-data.component.ts
- 140
+ 143
@@ -4886,7 +4914,7 @@
Beim Umwandeln der Datenquelle in ist ein Fehler aufgetreten.
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 482
+ 522
@@ -5106,7 +5134,7 @@
Währungen
apps/client/src/app/components/admin-market-data/admin-market-data.component.ts
- 130
+ 133
apps/client/src/app/pages/public/public-page.html
@@ -5158,11 +5186,11 @@
Die Scraper Konfiguration konnte nicht geparsed werden
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 589
+ 672
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 592
+ 675
@@ -5394,7 +5422,7 @@
Ups! Die Anlageprofile konnten nicht gelöscht werden.
apps/client/src/app/components/admin-market-data/admin-market-data.service.ts
- 52
+ 56
@@ -5751,6 +5779,14 @@
369
+
+ Data gathering has been started.
+ Data gathering has been started.
+
+ apps/client/src/app/components/admin-market-data/admin-market-data.component.ts
+ 413
+
+
Global
Weltweit
@@ -5960,7 +5996,7 @@
Mitgliedschaft
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 78
+ 82
libs/common/src/lib/routes/routes.ts
@@ -6000,11 +6036,11 @@
Möchtest du dieses Anlageprofil wirklich löschen?
apps/client/src/app/components/admin-market-data/admin-market-data.service.ts
- 28
+ 29
apps/client/src/app/components/admin-market-data/admin-market-data.service.ts
- 66
+ 71
@@ -6076,7 +6112,7 @@
Ups, der Cash-Bestand Transfer ist fehlgeschlagen.
apps/client/src/app/pages/accounts/accounts-page.component.ts
- 358
+ 355
@@ -6124,7 +6160,7 @@
Möchtest du diese Systemmeldung wirklich löschen?
apps/client/src/app/components/admin-overview/admin-overview.component.ts
- 255
+ 260
@@ -6192,7 +6228,7 @@
Der aktuelle Marktpreis ist
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 766
+ 850
@@ -6200,7 +6236,7 @@
Test
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 607
+ 725
@@ -6344,7 +6380,7 @@
WTD
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 224
+ 256
libs/ui/src/lib/assistant/assistant.component.ts
@@ -6364,7 +6400,7 @@
MTD
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 228
+ 260
libs/ui/src/lib/assistant/assistant.component.ts
@@ -6428,7 +6464,7 @@
Jahr
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 236
+ 268
apps/client/src/app/pages/resources/personal-finance-tools/product-page.html
@@ -6448,7 +6484,7 @@
Jahre
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 240
+ 272
libs/ui/src/lib/assistant/assistant.component.ts
@@ -6468,7 +6504,7 @@
Finanzmarktdaten synchronisieren
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 630
+ 748
apps/client/src/app/components/admin-overview/admin-overview.html
@@ -6533,7 +6569,7 @@
Täglich
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 212
+ 244
@@ -6729,7 +6765,7 @@
Ups! Beim Einrichten der biometrischen Authentifizierung ist ein Fehler aufgetreten.
apps/client/src/app/components/user-account-settings/user-account-settings.component.ts
- 367
+ 363
@@ -6745,7 +6781,7 @@
Benchmarks
apps/client/src/app/components/admin-market-data/admin-market-data.component.ts
- 125
+ 128
@@ -6861,7 +6897,7 @@
Ups! Das Anlageprofil konnte nicht gelöscht werden.
apps/client/src/app/components/admin-market-data/admin-market-data.service.ts
- 51
+ 55
@@ -6965,7 +7001,7 @@
Möchtest du diese Anlageprofile wirklich löschen?
apps/client/src/app/components/admin-market-data/admin-market-data.service.ts
- 67
+ 72
@@ -6973,7 +7009,7 @@
Fehler
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 757
+ 841
@@ -7017,7 +7053,7 @@
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 635
+ 753
apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html
@@ -7041,7 +7077,7 @@
apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html
- 112
+ 107
apps/client/src/app/pages/accounts/transfer-balance/transfer-balance-dialog.html
@@ -7069,7 +7105,7 @@
Schliessen
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 637
+ 755
apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html
@@ -7101,11 +7137,11 @@
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 244
+ 252
apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html
- 114
+ 109
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
@@ -7121,7 +7157,7 @@
Rolle
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 44
+ 45
@@ -7225,7 +7261,7 @@
wurde in die Zwischenablage kopiert
apps/client/src/app/components/admin-overview/admin-overview.component.ts
- 223
+ 228
libs/ui/src/lib/value/value.component.ts
@@ -7352,6 +7388,14 @@
278
+
+ Shares Before
+ Shares Before
+
+ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
+ 597
+
+
cannot be used anonymously
kann nicht anonym genutzt werden
@@ -7575,7 +7619,7 @@
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 133
+ 141
@@ -7647,7 +7691,7 @@
Speichern
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 646
+ 764
apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html
@@ -7679,7 +7723,7 @@
apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html
- 123
+ 118
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
@@ -7763,7 +7807,7 @@
Verzögert
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 259
+ 292
@@ -7771,7 +7815,7 @@
Sofort
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 263
+ 296
@@ -7779,7 +7823,7 @@
Standardmarktpreis
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 520
+ 638
@@ -7787,7 +7831,7 @@
Modus
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 557
+ 675
@@ -7795,7 +7839,7 @@
Möchtest du die Datenquelle wirklich in umwandeln?
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 485
+ 525
@@ -7803,7 +7847,7 @@
Selektor
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 573
+ 691
@@ -7811,7 +7855,7 @@
HTTP Request-Headers
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 533
+ 651
@@ -7819,7 +7863,7 @@
Tagesende
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 259
+ 292
@@ -7827,7 +7871,7 @@
in Echtzeit
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 263
+ 296
@@ -8040,7 +8084,7 @@
( ) wird bereits verwendet.
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 718
+ 801
@@ -8048,7 +8092,7 @@
Bei der Änderung zu ( ) ist ein Fehler aufgetreten.
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 721
+ 804
@@ -8177,7 +8221,7 @@
Demo Benutzerkonto wurde synchronisiert.
apps/client/src/app/components/admin-overview/admin-overview.component.ts
- 323
+ 334
@@ -8185,7 +8229,7 @@
Synchronisiere Demo Benutzerkonto
apps/client/src/app/components/admin-overview/admin-overview.html
- 128
+ 131
@@ -8399,7 +8443,7 @@
Aktueller Monat
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 228
+ 260
@@ -9036,7 +9080,7 @@
Registrierungsdatum
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 56
+ 58
diff --git a/apps/client/src/locales/messages.es.xlf b/apps/client/src/locales/messages.es.xlf
index 81e2e9968..ab4e4eb3e 100644
--- a/apps/client/src/locales/messages.es.xlf
+++ b/apps/client/src/locales/messages.es.xlf
@@ -59,7 +59,7 @@
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 166
+ 174
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
@@ -271,7 +271,7 @@
apps/client/src/app/components/admin-overview/admin-overview.html
- 235
+ 238
apps/client/src/app/components/admin-platform/admin-platform.component.html
@@ -281,6 +281,10 @@
apps/client/src/app/components/admin-tag/admin-tag.component.html
100
+
+ apps/client/src/app/components/admin-users/admin-users.html
+ 254
+
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
27
@@ -315,7 +319,7 @@
Pagado
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts
- 129
+ 136
@@ -434,6 +438,14 @@
208
+
+ Splits
+ Splits
+
+ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
+ 512
+
+
View Stacktrace
Ver Stacktrace
@@ -469,6 +481,14 @@
Date
Fecha
+
+ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
+ 521
+
+
+ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
+ 560
+
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
156
@@ -547,7 +567,7 @@
¿Seguro que quieres eliminar este cupón?
apps/client/src/app/components/admin-overview/admin-overview.component.ts
- 242
+ 247
@@ -555,7 +575,7 @@
¿Seguro que quieres limpiar la caché?
apps/client/src/app/components/admin-overview/admin-overview.component.ts
- 279
+ 290
@@ -563,7 +583,7 @@
Por favor, establece tu mensaje del sistema:
apps/client/src/app/components/admin-overview/admin-overview.component.ts
- 299
+ 310
@@ -571,7 +591,7 @@
por usuario
apps/client/src/app/components/admin-overview/admin-overview.component.ts
- 178
+ 181
@@ -599,7 +619,7 @@
Mensaje del sistema
apps/client/src/app/components/admin-overview/admin-overview.html
- 88
+ 89
@@ -607,7 +627,7 @@
Establecer mensaje
apps/client/src/app/components/admin-overview/admin-overview.html
- 110
+ 113
@@ -615,7 +635,7 @@
Modo de solo lectura
apps/client/src/app/components/admin-overview/admin-overview.html
- 64
+ 63
@@ -623,15 +643,19 @@
Cupones
apps/client/src/app/components/admin-overview/admin-overview.html
- 148
+ 151
Add
Añadir
+
+ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
+ 615
+
apps/client/src/app/components/admin-overview/admin-overview.html
- 298
+ 301
libs/ui/src/lib/account-balances/account-balances.component.html
@@ -643,7 +667,7 @@
Limpieza del sistema
apps/client/src/app/components/admin-overview/admin-overview.html
- 117
+ 120
@@ -651,7 +675,7 @@
Limpiar caché
apps/client/src/app/components/admin-overview/admin-overview.html
- 133
+ 136
@@ -695,7 +719,7 @@
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 124
+ 132
@@ -763,11 +787,11 @@
Creación
apps/client/src/app/components/admin-overview/admin-overview.html
- 185
+ 188
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 150
+ 158
@@ -814,6 +838,14 @@
64
+
+ Split Ratio
+ Split Ratio
+
+ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
+ 526
+
+
Last Days
Últimos días
@@ -1107,7 +1139,7 @@
YTD
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 232
+ 264
libs/ui/src/lib/assistant/assistant.component.ts
@@ -1119,7 +1151,7 @@
1 año
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 236
+ 268
libs/ui/src/lib/assistant/assistant.component.ts
@@ -1139,7 +1171,7 @@
5 años
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 240
+ 272
libs/ui/src/lib/assistant/assistant.component.ts
@@ -1159,7 +1191,7 @@
Máximo
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 244
+ 276
libs/ui/src/lib/assistant/assistant.component.ts
@@ -1235,7 +1267,7 @@
Por favor, ingresa tu código de cupón.
apps/client/src/app/components/user-account-membership/user-account-membership.component.ts
- 214
+ 203
@@ -1243,7 +1275,7 @@
No se pudo canjear el código de cupón
apps/client/src/app/components/user-account-membership/user-account-membership.component.ts
- 178
+ 181
@@ -1259,15 +1291,7 @@
El código del cupón ha sido canjeado
apps/client/src/app/components/user-account-membership/user-account-membership.component.ts
- 191
-
-
-
- Reload
- Recargar
-
- apps/client/src/app/components/user-account-membership/user-account-membership.component.ts
- 192
+ 194
@@ -1275,7 +1299,7 @@
¿Seguro que quieres eliminar este método de acceso?
apps/client/src/app/components/user-account-settings/user-account-settings.component.ts
- 318
+ 314
@@ -1335,7 +1359,7 @@
Cupón
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts
- 134
+ 141
@@ -1343,7 +1367,7 @@
Configuración regional
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 548
+ 666
apps/client/src/app/components/user-account-settings/user-account-settings.html
@@ -1459,7 +1483,7 @@
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 101
+ 109
apps/client/src/app/pages/accounts/accounts-page.html
@@ -1567,7 +1591,7 @@
ID de cuenta
apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html
- 103
+ 98
@@ -1727,7 +1751,7 @@
Duración
apps/client/src/app/components/admin-overview/admin-overview.html
- 172
+ 175
@@ -1947,7 +1971,7 @@
Prueba
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts
- 133
+ 140
@@ -2047,7 +2071,7 @@
Semana actual
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 224
+ 256
@@ -2195,7 +2219,7 @@
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 110
+ 118
apps/client/src/app/pages/portfolio/activities/activities-page.html
@@ -2565,10 +2589,6 @@
Exclude from Analysis
Excluir del análisis
-
- apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html
- 97
-
libs/ui/src/lib/i18n.ts
22
@@ -2663,7 +2683,7 @@
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 88
+ 96
@@ -2747,7 +2767,7 @@
Historial de suscripción
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 141
+ 149
@@ -2787,7 +2807,7 @@
Filtrar por...
apps/client/src/app/components/admin-market-data/admin-market-data.component.ts
- 365
+ 377
@@ -2835,11 +2855,11 @@
No se pudo validar el formulario
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 641
+ 724
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 644
+ 727
@@ -2943,7 +2963,7 @@
Código
apps/client/src/app/components/admin-overview/admin-overview.html
- 159
+ 162
@@ -3111,7 +3131,7 @@
Autenticación
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 65
+ 67
@@ -3343,7 +3363,7 @@
Precio
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 176
+ 184
@@ -3351,7 +3371,7 @@
¿Seguro que quieres convertir este perfil de activo a ( )?
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 723
+ 806
@@ -3631,7 +3651,7 @@
Sin operaciones
apps/client/src/app/components/admin-market-data/admin-market-data.component.ts
- 145
+ 148
@@ -3823,7 +3843,7 @@
Horaria
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 216
+ 248
@@ -3915,7 +3935,7 @@
Caducidad
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 209
+ 217
@@ -3931,11 +3951,11 @@
No se pudo guardar el perfil del activo
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 675
+ 758
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 678
+ 761
@@ -4106,14 +4126,6 @@
228
-
- Delete User
- Eliminar usuario
-
- apps/client/src/app/components/admin-users/admin-users.html
- 254
-
-
By ETF Provider
Por proveedor de ETF
@@ -4143,7 +4155,7 @@
Año actual
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 232
+ 264
@@ -4154,6 +4166,14 @@
10
+
+ Cache has been flushed.
+ Cache has been flushed.
+
+ apps/client/src/app/components/admin-overview/admin-overview.component.ts
+ 281
+
+
Url
Url
@@ -4163,7 +4183,7 @@
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 589
+ 707
apps/client/src/app/components/admin-platform/admin-platform.component.html
@@ -4179,7 +4199,7 @@
Perfil del activo guardado
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 665
+ 748
@@ -4302,6 +4322,14 @@
118
+
+ Shares After
+ Shares After
+
+ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
+ 584
+
+
Frequently Asked Questions (FAQ)
Preguntas frecuentes (FAQ)
@@ -4563,7 +4591,7 @@
Total
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 160
+ 168
@@ -4571,7 +4599,7 @@
Configuración del scraper
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 510
+ 628
@@ -4639,7 +4667,7 @@
El cupón ha sido creado
apps/client/src/app/components/admin-overview/admin-overview.component.ts
- 224
+ 229
@@ -4847,7 +4875,7 @@
ETFs sin países
apps/client/src/app/components/admin-market-data/admin-market-data.component.ts
- 135
+ 138
@@ -4855,7 +4883,7 @@
ETFs sin sectores
apps/client/src/app/components/admin-market-data/admin-market-data.component.ts
- 140
+ 143
@@ -4863,7 +4891,7 @@
Se produjo un error al convertir la fuente de datos a .
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 482
+ 522
@@ -5083,7 +5111,7 @@
Divisas
apps/client/src/app/components/admin-market-data/admin-market-data.component.ts
- 130
+ 133
apps/client/src/app/pages/public/public-page.html
@@ -5135,11 +5163,11 @@
No se pudo analizar la configuración del scraper
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 589
+ 672
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 592
+ 675
@@ -5371,7 +5399,7 @@
¡Ups! No se pudieron eliminar los perfiles de activos.
apps/client/src/app/components/admin-market-data/admin-market-data.service.ts
- 52
+ 56
@@ -5728,6 +5756,14 @@
369
+
+ Data gathering has been started.
+ Data gathering has been started.
+
+ apps/client/src/app/components/admin-market-data/admin-market-data.component.ts
+ 413
+
+
Global
Global
@@ -5937,7 +5973,7 @@
Membresía
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 78
+ 82
libs/common/src/lib/routes/routes.ts
@@ -5977,11 +6013,11 @@
¿Seguro que quieres eliminar este perfil de activo?
apps/client/src/app/components/admin-market-data/admin-market-data.service.ts
- 28
+ 29
apps/client/src/app/components/admin-market-data/admin-market-data.service.ts
- 66
+ 71
@@ -6053,7 +6089,7 @@
¡Vaya! La transferencia del saldo de efectivo ha fallado.
apps/client/src/app/pages/accounts/accounts-page.component.ts
- 358
+ 355
@@ -6101,7 +6137,7 @@
¿Seguro que quieres eliminar este mensaje del sistema?
apps/client/src/app/components/admin-overview/admin-overview.component.ts
- 255
+ 260
@@ -6169,7 +6205,7 @@
El precio actual de mercado es
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 766
+ 850
@@ -6177,7 +6213,7 @@
Prueba
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 607
+ 725
@@ -6321,7 +6357,7 @@
WTD
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 224
+ 256
libs/ui/src/lib/assistant/assistant.component.ts
@@ -6341,7 +6377,7 @@
MTD
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 228
+ 260
libs/ui/src/lib/assistant/assistant.component.ts
@@ -6405,7 +6441,7 @@
año
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 236
+ 268
apps/client/src/app/pages/resources/personal-finance-tools/product-page.html
@@ -6425,7 +6461,7 @@
años
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 240
+ 272
libs/ui/src/lib/assistant/assistant.component.ts
@@ -6445,7 +6481,7 @@
Recopilación de datos
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 630
+ 748
apps/client/src/app/components/admin-overview/admin-overview.html
@@ -6510,7 +6546,7 @@
Diaria
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 212
+ 244
@@ -6706,7 +6742,7 @@
¡Vaya! Hubo un error al configurar la autenticación biométrica.
apps/client/src/app/components/user-account-settings/user-account-settings.component.ts
- 367
+ 363
@@ -6722,7 +6758,7 @@
Índices de referencia
apps/client/src/app/components/admin-market-data/admin-market-data.component.ts
- 125
+ 128
@@ -6838,7 +6874,7 @@
¡Ups! No se pudo eliminar el perfil de activo.
apps/client/src/app/components/admin-market-data/admin-market-data.service.ts
- 51
+ 55
@@ -6942,7 +6978,7 @@
¿Seguro que quieres eliminar estos perfiles de activos?
apps/client/src/app/components/admin-market-data/admin-market-data.service.ts
- 67
+ 72
@@ -6950,7 +6986,7 @@
Error
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 757
+ 841
@@ -6994,7 +7030,7 @@
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 635
+ 753
apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html
@@ -7018,7 +7054,7 @@
apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html
- 112
+ 107
apps/client/src/app/pages/accounts/transfer-balance/transfer-balance-dialog.html
@@ -7046,7 +7082,7 @@
Cerrar
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 637
+ 755
apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html
@@ -7078,11 +7114,11 @@
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 244
+ 252
apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html
- 114
+ 109
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
@@ -7098,7 +7134,7 @@
Rol
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 44
+ 45
@@ -7202,7 +7238,7 @@
ha sido copiado al portapapeles
apps/client/src/app/components/admin-overview/admin-overview.component.ts
- 223
+ 228
libs/ui/src/lib/value/value.component.ts
@@ -7329,6 +7365,14 @@
278
+
+ Shares Before
+ Shares Before
+
+ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
+ 597
+
+
cannot be used anonymously
no se puede usar de forma anónima
@@ -7552,7 +7596,7 @@
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 133
+ 141
@@ -7624,7 +7668,7 @@
Guardar
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 646
+ 764
apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html
@@ -7656,7 +7700,7 @@
apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html
- 123
+ 118
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
@@ -7740,7 +7784,7 @@
Bajo demanda
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 259
+ 292
@@ -7748,7 +7792,7 @@
Instantáneo
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 263
+ 296
@@ -7756,7 +7800,7 @@
Precio de mercado por defecto
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 520
+ 638
@@ -7764,7 +7808,7 @@
Modo
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 557
+ 675
@@ -7772,7 +7816,7 @@
¿Seguro que quieres convertir la fuente de datos a ?
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 485
+ 525
@@ -7780,7 +7824,7 @@
Selector
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 573
+ 691
@@ -7788,7 +7832,7 @@
Encabezados de solicitud HTTP
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 533
+ 651
@@ -7796,7 +7840,7 @@
final del día
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 259
+ 292
@@ -7804,7 +7848,7 @@
en tiempo real
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 263
+ 296
@@ -8017,7 +8061,7 @@
( ) ya está en uso.
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 718
+ 801
@@ -8025,7 +8069,7 @@
Ocurrió un error al actualizar a ( ).
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 721
+ 804
@@ -8178,7 +8222,7 @@
La cuenta de usuario de demostración se ha sincronizado.
apps/client/src/app/components/admin-overview/admin-overview.component.ts
- 323
+ 334
@@ -8186,7 +8230,7 @@
Sincronizar cuenta de usuario de demostración
apps/client/src/app/components/admin-overview/admin-overview.html
- 128
+ 131
@@ -8400,7 +8444,7 @@
Mes actual
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 228
+ 260
@@ -9037,7 +9081,7 @@
Fecha de registro
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 56
+ 58
diff --git a/apps/client/src/locales/messages.fr.xlf b/apps/client/src/locales/messages.fr.xlf
index 8d4f182bf..6ed02eed8 100644
--- a/apps/client/src/locales/messages.fr.xlf
+++ b/apps/client/src/locales/messages.fr.xlf
@@ -50,7 +50,7 @@
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 166
+ 174
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
@@ -334,7 +334,7 @@
apps/client/src/app/components/admin-overview/admin-overview.html
- 235
+ 238
apps/client/src/app/components/admin-platform/admin-platform.component.html
@@ -344,6 +344,10 @@
apps/client/src/app/components/admin-tag/admin-tag.component.html
100
+
+ apps/client/src/app/components/admin-users/admin-users.html
+ 254
+
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
27
@@ -378,7 +382,7 @@
Paid
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts
- 129
+ 136
@@ -497,6 +501,14 @@
208
+
+ Splits
+ Splits
+
+ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
+ 512
+
+
View Stacktrace
Voir la Stacktrace
@@ -532,6 +544,14 @@
Date
Date
+
+ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
+ 521
+
+
+ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
+ 560
+
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
156
@@ -578,7 +598,7 @@
Filtrer par...
apps/client/src/app/components/admin-market-data/admin-market-data.component.ts
- 365
+ 377
@@ -650,7 +670,7 @@
Historique de l’abonnement
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 141
+ 149
@@ -718,7 +738,7 @@
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 88
+ 96
@@ -794,7 +814,7 @@
Voulez-vous vraiment supprimer ce code promotionnel ?
apps/client/src/app/components/admin-overview/admin-overview.component.ts
- 242
+ 247
@@ -802,7 +822,7 @@
Voulez-vous vraiment vider le cache ?
apps/client/src/app/components/admin-overview/admin-overview.component.ts
- 279
+ 290
@@ -810,7 +830,7 @@
Veuillez définir votre message système :
apps/client/src/app/components/admin-overview/admin-overview.component.ts
- 299
+ 310
@@ -818,7 +838,7 @@
par Utilisateur
apps/client/src/app/components/admin-overview/admin-overview.component.ts
- 178
+ 181
@@ -858,7 +878,7 @@
Mode Lecture Seule
apps/client/src/app/components/admin-overview/admin-overview.html
- 64
+ 63
@@ -866,7 +886,7 @@
Message Système
apps/client/src/app/components/admin-overview/admin-overview.html
- 88
+ 89
@@ -874,7 +894,7 @@
Définir Message
apps/client/src/app/components/admin-overview/admin-overview.html
- 110
+ 113
@@ -882,15 +902,19 @@
Codes promotionnels
apps/client/src/app/components/admin-overview/admin-overview.html
- 148
+ 151
Add
Ajouter
+
+ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
+ 615
+
apps/client/src/app/components/admin-overview/admin-overview.html
- 298
+ 301
libs/ui/src/lib/account-balances/account-balances.component.html
@@ -902,7 +926,7 @@
Maintenance
apps/client/src/app/components/admin-overview/admin-overview.html
- 117
+ 120
@@ -910,7 +934,7 @@
Vider le Cache
apps/client/src/app/components/admin-overview/admin-overview.html
- 133
+ 136
@@ -954,7 +978,7 @@
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 124
+ 132
@@ -970,11 +994,11 @@
Le formulaire n’a pas pu être validé
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 641
+ 724
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 644
+ 727
@@ -1085,6 +1109,14 @@
64
+
+ Split Ratio
+ Split Ratio
+
+ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
+ 526
+
+
Fear
Peur
@@ -1130,7 +1162,7 @@
Code
apps/client/src/app/components/admin-overview/admin-overview.html
- 159
+ 162
@@ -1382,7 +1414,7 @@
CDA
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 232
+ 264
libs/ui/src/lib/assistant/assistant.component.ts
@@ -1394,7 +1426,7 @@
1A
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 236
+ 268
libs/ui/src/lib/assistant/assistant.component.ts
@@ -1414,7 +1446,7 @@
5A
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 240
+ 272
libs/ui/src/lib/assistant/assistant.component.ts
@@ -1434,7 +1466,7 @@
Max
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 244
+ 276
libs/ui/src/lib/assistant/assistant.component.ts
@@ -1558,7 +1590,7 @@
Veuillez entrer votre code promotionnel.
apps/client/src/app/components/user-account-membership/user-account-membership.component.ts
- 214
+ 203
@@ -1566,7 +1598,7 @@
Le code promotionnel n’a pas pu être appliqué
apps/client/src/app/components/user-account-membership/user-account-membership.component.ts
- 178
+ 181
@@ -1582,15 +1614,7 @@
Le code promotionnel a été appliqué
apps/client/src/app/components/user-account-membership/user-account-membership.component.ts
- 191
-
-
-
- Reload
- Rafraîchir
-
- apps/client/src/app/components/user-account-membership/user-account-membership.component.ts
- 192
+ 194
@@ -1598,7 +1622,7 @@
Voulez-vous vraiment supprimer cette méthode de connexion ?
apps/client/src/app/components/user-account-settings/user-account-settings.component.ts
- 318
+ 314
@@ -1658,7 +1682,7 @@
Coupon
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts
- 134
+ 141
@@ -1674,7 +1698,7 @@
Paramètres régionaux
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 548
+ 666
apps/client/src/app/components/user-account-settings/user-account-settings.html
@@ -1842,7 +1866,7 @@
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 101
+ 109
apps/client/src/app/pages/accounts/accounts-page.html
@@ -1878,7 +1902,7 @@
ID du compte
apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html
- 103
+ 98
@@ -2062,7 +2086,7 @@
Durée
apps/client/src/app/components/admin-overview/admin-overview.html
- 172
+ 175
@@ -2242,7 +2266,7 @@
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 110
+ 118
apps/client/src/app/pages/portfolio/activities/activities-page.html
@@ -2270,7 +2294,7 @@
Semaine en cours
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 224
+ 256
@@ -2394,7 +2418,7 @@
Prix
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 176
+ 184
@@ -2402,7 +2426,7 @@
Do you really want to convert this asset profile to ( )?
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 723
+ 806
@@ -2518,16 +2542,12 @@
Essai
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts
- 133
+ 140
Exclude from Analysis
Exclure de l’analyse
-
- apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html
- 97
-
libs/ui/src/lib/i18n.ts
22
@@ -2802,11 +2822,11 @@
Création
apps/client/src/app/components/admin-overview/admin-overview.html
- 185
+ 188
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 150
+ 158
@@ -3362,7 +3382,7 @@
Authentification
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 65
+ 67
@@ -3630,7 +3650,7 @@
Aucune Activité
apps/client/src/app/components/admin-market-data/admin-market-data.component.ts
- 145
+ 148
@@ -3822,7 +3842,7 @@
Toutes les heures
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 216
+ 248
@@ -3914,7 +3934,7 @@
Expiration
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 209
+ 217
@@ -3930,11 +3950,11 @@
Le profil d’actif n’a pas pu être enregistré
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 675
+ 758
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 678
+ 761
@@ -4105,14 +4125,6 @@
228
-
- Delete User
- Supprimer l’Utilisateur
-
- apps/client/src/app/components/admin-users/admin-users.html
- 254
-
-
By ETF Provider
Par Émetteur d’ETF
@@ -4142,7 +4154,7 @@
Année en cours
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 232
+ 264
@@ -4153,6 +4165,14 @@
10
+
+ Cache has been flushed.
+ Cache has been flushed.
+
+ apps/client/src/app/components/admin-overview/admin-overview.component.ts
+ 281
+
+
Url
Lien
@@ -4162,7 +4182,7 @@
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 589
+ 707
apps/client/src/app/components/admin-platform/admin-platform.component.html
@@ -4178,7 +4198,7 @@
Le profil d’actif a été enregistré
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 665
+ 748
@@ -4301,6 +4321,14 @@
118
+
+ Shares After
+ Shares After
+
+ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
+ 584
+
+
Frequently Asked Questions (FAQ)
Questions Fréquentes (FAQ)
@@ -4562,7 +4590,7 @@
Total
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 160
+ 168
@@ -4570,7 +4598,7 @@
Configuration du Scraper
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 510
+ 628
@@ -4638,7 +4666,7 @@
Coupon has been created
apps/client/src/app/components/admin-overview/admin-overview.component.ts
- 224
+ 229
@@ -4846,7 +4874,7 @@
ETF sans Pays
apps/client/src/app/components/admin-market-data/admin-market-data.component.ts
- 135
+ 138
@@ -4854,7 +4882,7 @@
ETF sans Secteurs
apps/client/src/app/components/admin-market-data/admin-market-data.component.ts
- 140
+ 143
@@ -4862,7 +4890,7 @@
An error occurred while converting the data source to .
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 482
+ 522
@@ -5082,7 +5110,7 @@
Devises
apps/client/src/app/components/admin-market-data/admin-market-data.component.ts
- 130
+ 133
apps/client/src/app/pages/public/public-page.html
@@ -5134,11 +5162,11 @@
La configuration du scraper n’a pas pu être analysée
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 589
+ 672
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 592
+ 675
@@ -5370,7 +5398,7 @@
Oops! Could not delete the asset profiles.
apps/client/src/app/components/admin-market-data/admin-market-data.service.ts
- 52
+ 56
@@ -5727,6 +5755,14 @@
369
+
+ Data gathering has been started.
+ Data gathering has been started.
+
+ apps/client/src/app/components/admin-market-data/admin-market-data.component.ts
+ 413
+
+
Global
Mondial
@@ -5936,7 +5972,7 @@
Statut
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 78
+ 82
libs/common/src/lib/routes/routes.ts
@@ -5976,11 +6012,11 @@
Confirmez la suppressoion de ce profil d’actif?
apps/client/src/app/components/admin-market-data/admin-market-data.service.ts
- 28
+ 29
apps/client/src/app/components/admin-market-data/admin-market-data.service.ts
- 66
+ 71
@@ -6052,7 +6088,7 @@
Oops, échec du transfert de la cash balance.
apps/client/src/app/pages/accounts/accounts-page.component.ts
- 358
+ 355
@@ -6100,7 +6136,7 @@
Confirmer la suppresion de ce message système?
apps/client/src/app/components/admin-overview/admin-overview.component.ts
- 255
+ 260
@@ -6168,7 +6204,7 @@
Le prix actuel du marché est
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 766
+ 850
@@ -6176,7 +6212,7 @@
Test
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 607
+ 725
@@ -6320,7 +6356,7 @@
WTD
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 224
+ 256
libs/ui/src/lib/assistant/assistant.component.ts
@@ -6340,7 +6376,7 @@
MTD
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 228
+ 260
libs/ui/src/lib/assistant/assistant.component.ts
@@ -6404,7 +6440,7 @@
année
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 236
+ 268
apps/client/src/app/pages/resources/personal-finance-tools/product-page.html
@@ -6424,7 +6460,7 @@
années
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 240
+ 272
libs/ui/src/lib/assistant/assistant.component.ts
@@ -6444,7 +6480,7 @@
Collecter les données
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 630
+ 748
apps/client/src/app/components/admin-overview/admin-overview.html
@@ -6509,7 +6545,7 @@
Tous les jours
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 212
+ 244
@@ -6705,7 +6741,7 @@
Oops! Une erreur s’est produite lors de la configuration de l’authentification biométrique.
apps/client/src/app/components/user-account-settings/user-account-settings.component.ts
- 367
+ 363
@@ -6721,7 +6757,7 @@
Benchmarks
apps/client/src/app/components/admin-market-data/admin-market-data.component.ts
- 125
+ 128
@@ -6837,7 +6873,7 @@
Oops! Could not delete the asset profile.
apps/client/src/app/components/admin-market-data/admin-market-data.service.ts
- 51
+ 55
@@ -6941,7 +6977,7 @@
Voulez-vous vraiment supprimer ces profils d’actifs ?
apps/client/src/app/components/admin-market-data/admin-market-data.service.ts
- 67
+ 72
@@ -6949,7 +6985,7 @@
Erreur
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 757
+ 841
@@ -6993,7 +7029,7 @@
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 635
+ 753
apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html
@@ -7017,7 +7053,7 @@
apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html
- 112
+ 107
apps/client/src/app/pages/accounts/transfer-balance/transfer-balance-dialog.html
@@ -7045,7 +7081,7 @@
Fermer
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 637
+ 755
apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html
@@ -7077,11 +7113,11 @@
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 244
+ 252
apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html
- 114
+ 109
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
@@ -7097,7 +7133,7 @@
Rôle
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 44
+ 45
@@ -7201,7 +7237,7 @@
a été copié dans le presse-papiers
apps/client/src/app/components/admin-overview/admin-overview.component.ts
- 223
+ 228
libs/ui/src/lib/value/value.component.ts
@@ -7328,6 +7364,14 @@
278
+
+ Shares Before
+ Shares Before
+
+ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
+ 597
+
+
cannot be used anonymously
ne peut pas être utilisé de manière anonyme
@@ -7551,7 +7595,7 @@
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 133
+ 141
@@ -7623,7 +7667,7 @@
Sauvegarder
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 646
+ 764
apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html
@@ -7655,7 +7699,7 @@
apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html
- 123
+ 118
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
@@ -7739,7 +7783,7 @@
Paresseux
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 259
+ 292
@@ -7747,7 +7791,7 @@
Instantané
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 263
+ 296
@@ -7755,7 +7799,7 @@
Prix du marché par défaut
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 520
+ 638
@@ -7763,7 +7807,7 @@
Mode
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 557
+ 675
@@ -7771,7 +7815,7 @@
Do you really want to convert the data source to ?
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 485
+ 525
@@ -7779,7 +7823,7 @@
Selecteur
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 573
+ 691
@@ -7787,7 +7831,7 @@
En-têtes de requête HTTP
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 533
+ 651
@@ -7795,7 +7839,7 @@
fin de journée
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 259
+ 292
@@ -7803,7 +7847,7 @@
temps réel
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 263
+ 296
@@ -8016,7 +8060,7 @@
( ) est déjà utilisé.
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 718
+ 801
@@ -8024,7 +8068,7 @@
Une erreur s’est produite lors de la mise à jour vers ( ).
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 721
+ 804
@@ -8177,7 +8221,7 @@
Le compte utilisateur de démonstration a été synchronisé.
apps/client/src/app/components/admin-overview/admin-overview.component.ts
- 323
+ 334
@@ -8185,7 +8229,7 @@
Synchroniser le compte utilisateur de démonstration
apps/client/src/app/components/admin-overview/admin-overview.html
- 128
+ 131
@@ -8399,7 +8443,7 @@
Mois en cours
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 228
+ 260
@@ -9036,7 +9080,7 @@
Date d’Inscription
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 56
+ 58
diff --git a/apps/client/src/locales/messages.it.xlf b/apps/client/src/locales/messages.it.xlf
index 92dc8372a..260a4d68a 100644
--- a/apps/client/src/locales/messages.it.xlf
+++ b/apps/client/src/locales/messages.it.xlf
@@ -59,7 +59,7 @@
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 166
+ 174
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
@@ -271,7 +271,7 @@
apps/client/src/app/components/admin-overview/admin-overview.html
- 235
+ 238
apps/client/src/app/components/admin-platform/admin-platform.component.html
@@ -281,6 +281,10 @@
apps/client/src/app/components/admin-tag/admin-tag.component.html
100
+
+ apps/client/src/app/components/admin-users/admin-users.html
+ 254
+
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
27
@@ -315,7 +319,7 @@
Paid
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts
- 129
+ 136
@@ -434,6 +438,14 @@
208
+
+ Splits
+ Splits
+
+ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
+ 512
+
+
View Stacktrace
Visualizza Stacktrace
@@ -469,6 +481,14 @@
Date
Data
+
+ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
+ 521
+
+
+ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
+ 560
+
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
156
@@ -547,7 +567,7 @@
Vuoi davvero eliminare questo buono?
apps/client/src/app/components/admin-overview/admin-overview.component.ts
- 242
+ 247
@@ -555,7 +575,7 @@
Vuoi davvero svuotare la cache?
apps/client/src/app/components/admin-overview/admin-overview.component.ts
- 279
+ 290
@@ -563,7 +583,7 @@
Imposta il messaggio di sistema:
apps/client/src/app/components/admin-overview/admin-overview.component.ts
- 299
+ 310
@@ -571,7 +591,7 @@
per utente
apps/client/src/app/components/admin-overview/admin-overview.component.ts
- 178
+ 181
@@ -599,7 +619,7 @@
Messaggio di sistema
apps/client/src/app/components/admin-overview/admin-overview.html
- 88
+ 89
@@ -607,7 +627,7 @@
Imposta messaggio
apps/client/src/app/components/admin-overview/admin-overview.html
- 110
+ 113
@@ -615,7 +635,7 @@
Modalità di sola lettura
apps/client/src/app/components/admin-overview/admin-overview.html
- 64
+ 63
@@ -623,15 +643,19 @@
Buoni sconto
apps/client/src/app/components/admin-overview/admin-overview.html
- 148
+ 151
Add
Aggiungi
+
+ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
+ 615
+
apps/client/src/app/components/admin-overview/admin-overview.html
- 298
+ 301
libs/ui/src/lib/account-balances/account-balances.component.html
@@ -643,7 +667,7 @@
Bilancio domestico
apps/client/src/app/components/admin-overview/admin-overview.html
- 117
+ 120
@@ -651,7 +675,7 @@
Svuota la cache
apps/client/src/app/components/admin-overview/admin-overview.html
- 133
+ 136
@@ -695,7 +719,7 @@
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 124
+ 132
@@ -763,11 +787,11 @@
Creation
apps/client/src/app/components/admin-overview/admin-overview.html
- 185
+ 188
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 150
+ 158
@@ -814,6 +838,14 @@
64
+
+ Split Ratio
+ Split Ratio
+
+ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
+ 526
+
+
Last Days
Ultimi giorni
@@ -1107,7 +1139,7 @@
anno corrente
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 232
+ 264
libs/ui/src/lib/assistant/assistant.component.ts
@@ -1119,7 +1151,7 @@
1 anno
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 236
+ 268
libs/ui/src/lib/assistant/assistant.component.ts
@@ -1139,7 +1171,7 @@
5 anni
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 240
+ 272
libs/ui/src/lib/assistant/assistant.component.ts
@@ -1159,7 +1191,7 @@
Massimo
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 244
+ 276
libs/ui/src/lib/assistant/assistant.component.ts
@@ -1235,7 +1267,7 @@
Inserisci il tuo codice del buono:
apps/client/src/app/components/user-account-membership/user-account-membership.component.ts
- 214
+ 203
@@ -1243,7 +1275,7 @@
Impossibile riscattare il codice del buono
apps/client/src/app/components/user-account-membership/user-account-membership.component.ts
- 178
+ 181
@@ -1259,15 +1291,7 @@
Il codice del buono è stato riscattato
apps/client/src/app/components/user-account-membership/user-account-membership.component.ts
- 191
-
-
-
- Reload
- Ricarica
-
- apps/client/src/app/components/user-account-membership/user-account-membership.component.ts
- 192
+ 194
@@ -1275,7 +1299,7 @@
Vuoi davvero rimuovere questo metodo di accesso?
apps/client/src/app/components/user-account-settings/user-account-settings.component.ts
- 318
+ 314
@@ -1335,7 +1359,7 @@
Coupon
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts
- 134
+ 141
@@ -1343,7 +1367,7 @@
Locale
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 548
+ 666
apps/client/src/app/components/user-account-settings/user-account-settings.html
@@ -1459,7 +1483,7 @@
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 101
+ 109
apps/client/src/app/pages/accounts/accounts-page.html
@@ -1567,7 +1591,7 @@
ID account
apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html
- 103
+ 98
@@ -1727,7 +1751,7 @@
Duration
apps/client/src/app/components/admin-overview/admin-overview.html
- 172
+ 175
@@ -1947,7 +1971,7 @@
Trial
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts
- 133
+ 140
@@ -2047,7 +2071,7 @@
Current week
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 224
+ 256
@@ -2195,7 +2219,7 @@
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 110
+ 118
apps/client/src/app/pages/portfolio/activities/activities-page.html
@@ -2565,10 +2589,6 @@
Exclude from Analysis
Exclude from Analysis
-
- apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html
- 97
-
libs/ui/src/lib/i18n.ts
22
@@ -2663,7 +2683,7 @@
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 88
+ 96
@@ -2747,7 +2767,7 @@
Subscription History
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 141
+ 149
@@ -2787,7 +2807,7 @@
Filtra per...
apps/client/src/app/components/admin-market-data/admin-market-data.component.ts
- 365
+ 377
@@ -2835,11 +2855,11 @@
Could not validate form
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 641
+ 724
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 644
+ 727
@@ -2943,7 +2963,7 @@
Code
apps/client/src/app/components/admin-overview/admin-overview.html
- 159
+ 162
@@ -3111,7 +3131,7 @@
Authentication
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 65
+ 67
@@ -3343,7 +3363,7 @@
Price
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 176
+ 184
@@ -3351,7 +3371,7 @@
Do you really want to convert this asset profile to ( )?
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 723
+ 806
@@ -3631,7 +3651,7 @@
No Activities
apps/client/src/app/components/admin-market-data/admin-market-data.component.ts
- 145
+ 148
@@ -3823,7 +3843,7 @@
Hourly
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 216
+ 248
@@ -3915,7 +3935,7 @@
Expiration
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 209
+ 217
@@ -3931,11 +3951,11 @@
Could not save asset profile
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 675
+ 758
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 678
+ 761
@@ -4106,14 +4126,6 @@
228
-
- Delete User
- Elimina l’utente
-
- apps/client/src/app/components/admin-users/admin-users.html
- 254
-
-
By ETF Provider
Per fornitore di ETF
@@ -4143,7 +4155,7 @@
Current year
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 232
+ 264
@@ -4154,6 +4166,14 @@
10
+
+ Cache has been flushed.
+ Cache has been flushed.
+
+ apps/client/src/app/components/admin-overview/admin-overview.component.ts
+ 281
+
+
Url
Url
@@ -4163,7 +4183,7 @@
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 589
+ 707
apps/client/src/app/components/admin-platform/admin-platform.component.html
@@ -4179,7 +4199,7 @@
Asset profile has been saved
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 665
+ 748
@@ -4302,6 +4322,14 @@
118
+
+ Shares After
+ Shares After
+
+ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
+ 584
+
+
Frequently Asked Questions (FAQ)
Domande più frequenti (FAQ)
@@ -4563,7 +4591,7 @@
Total
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 160
+ 168
@@ -4571,7 +4599,7 @@
Configurazione dello scraper
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 510
+ 628
@@ -4639,7 +4667,7 @@
Coupon has been created
apps/client/src/app/components/admin-overview/admin-overview.component.ts
- 224
+ 229
@@ -4847,7 +4875,7 @@
ETF senza paesi
apps/client/src/app/components/admin-market-data/admin-market-data.component.ts
- 135
+ 138
@@ -4855,7 +4883,7 @@
ETF senza settori
apps/client/src/app/components/admin-market-data/admin-market-data.component.ts
- 140
+ 143
@@ -4863,7 +4891,7 @@
An error occurred while converting the data source to .
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 482
+ 522
@@ -5083,7 +5111,7 @@
Valute
apps/client/src/app/components/admin-market-data/admin-market-data.component.ts
- 130
+ 133
apps/client/src/app/pages/public/public-page.html
@@ -5135,11 +5163,11 @@
Could not parse scraper configuration
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 589
+ 672
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 592
+ 675
@@ -5371,7 +5399,7 @@
Oops! Could not delete the asset profiles.
apps/client/src/app/components/admin-market-data/admin-market-data.service.ts
- 52
+ 56
@@ -5728,6 +5756,14 @@
369
+
+ Data gathering has been started.
+ Data gathering has been started.
+
+ apps/client/src/app/components/admin-market-data/admin-market-data.component.ts
+ 413
+
+
Global
Globale
@@ -5937,7 +5973,7 @@
Iscrizione
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 78
+ 82
libs/common/src/lib/routes/routes.ts
@@ -5977,11 +6013,11 @@
Vuoi veramente eliminare il profilo di questo asset?
apps/client/src/app/components/admin-market-data/admin-market-data.service.ts
- 28
+ 29
apps/client/src/app/components/admin-market-data/admin-market-data.service.ts
- 66
+ 71
@@ -6053,7 +6089,7 @@
Ops, il trasferimento del saldo di cassa è fallito.
apps/client/src/app/pages/accounts/accounts-page.component.ts
- 358
+ 355
@@ -6101,7 +6137,7 @@
Confermi di voler cancellare questo messaggio di sistema?
apps/client/src/app/components/admin-overview/admin-overview.component.ts
- 255
+ 260
@@ -6169,7 +6205,7 @@
L’attuale prezzo di mercato è
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 766
+ 850
@@ -6177,7 +6213,7 @@
Prova
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 607
+ 725
@@ -6321,7 +6357,7 @@
Settimana corrente
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 224
+ 256
libs/ui/src/lib/assistant/assistant.component.ts
@@ -6341,7 +6377,7 @@
Mese corrente
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 228
+ 260
libs/ui/src/lib/assistant/assistant.component.ts
@@ -6405,7 +6441,7 @@
anno
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 236
+ 268
apps/client/src/app/pages/resources/personal-finance-tools/product-page.html
@@ -6425,7 +6461,7 @@
anni
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 240
+ 272
libs/ui/src/lib/assistant/assistant.component.ts
@@ -6445,7 +6481,7 @@
Raccolta Dati
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 630
+ 748
apps/client/src/app/components/admin-overview/admin-overview.html
@@ -6510,7 +6546,7 @@
Daily
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 212
+ 244
@@ -6706,7 +6742,7 @@
Ops! C’è stato un errore impostando l’autenticazione biometrica.
apps/client/src/app/components/user-account-settings/user-account-settings.component.ts
- 367
+ 363
@@ -6722,7 +6758,7 @@
Benchmarks
apps/client/src/app/components/admin-market-data/admin-market-data.component.ts
- 125
+ 128
@@ -6838,7 +6874,7 @@
Oops! Could not delete the asset profile.
apps/client/src/app/components/admin-market-data/admin-market-data.service.ts
- 51
+ 55
@@ -6942,7 +6978,7 @@
Do you really want to delete these asset profiles?
apps/client/src/app/components/admin-market-data/admin-market-data.service.ts
- 67
+ 72
@@ -6950,7 +6986,7 @@
Errore
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 757
+ 841
@@ -6994,7 +7030,7 @@
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 635
+ 753
apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html
@@ -7018,7 +7054,7 @@
apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html
- 112
+ 107
apps/client/src/app/pages/accounts/transfer-balance/transfer-balance-dialog.html
@@ -7046,7 +7082,7 @@
Chiudi
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 637
+ 755
apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html
@@ -7078,11 +7114,11 @@
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 244
+ 252
apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html
- 114
+ 109
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
@@ -7098,7 +7134,7 @@
Role
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 44
+ 45
@@ -7202,7 +7238,7 @@
has been copied to the clipboard
apps/client/src/app/components/admin-overview/admin-overview.component.ts
- 223
+ 228
libs/ui/src/lib/value/value.component.ts
@@ -7329,6 +7365,14 @@
278
+
+ Shares Before
+ Shares Before
+
+ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
+ 597
+
+
cannot be used anonymously
non può essere usato anonimamente
@@ -7552,7 +7596,7 @@
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 133
+ 141
@@ -7624,7 +7668,7 @@
Salva
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 646
+ 764
apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html
@@ -7656,7 +7700,7 @@
apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html
- 123
+ 118
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
@@ -7740,7 +7784,7 @@
Pigro
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 259
+ 292
@@ -7748,7 +7792,7 @@
Istantaneo
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 263
+ 296
@@ -7756,7 +7800,7 @@
Prezzo di mercato predefinito
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 520
+ 638
@@ -7764,7 +7808,7 @@
Modalità
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 557
+ 675
@@ -7772,7 +7816,7 @@
Do you really want to convert the data source to ?
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 485
+ 525
@@ -7780,7 +7824,7 @@
Selettore
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 573
+ 691
@@ -7788,7 +7832,7 @@
Intestazioni della richiesta HTTP
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 533
+ 651
@@ -7796,7 +7840,7 @@
fine giornata
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 259
+ 292
@@ -7804,7 +7848,7 @@
in tempo reale
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 263
+ 296
@@ -8017,7 +8061,7 @@
( ) e gia in uso.
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 718
+ 801
@@ -8025,7 +8069,7 @@
Si è verificato un errore durante l’aggiornamento di ( ).
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 721
+ 804
@@ -8178,7 +8222,7 @@
L’account utente demo è stato sincronizzato.
apps/client/src/app/components/admin-overview/admin-overview.component.ts
- 323
+ 334
@@ -8186,7 +8230,7 @@
Sincronizza l’account utente demo
apps/client/src/app/components/admin-overview/admin-overview.html
- 128
+ 131
@@ -8400,7 +8444,7 @@
Current month
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 228
+ 260
@@ -9037,7 +9081,7 @@
Registration Date
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 56
+ 58
diff --git a/apps/client/src/locales/messages.ja.xlf b/apps/client/src/locales/messages.ja.xlf
index 14781a583..b0e5ecd0a 100644
--- a/apps/client/src/locales/messages.ja.xlf
+++ b/apps/client/src/locales/messages.ja.xlf
@@ -260,7 +260,7 @@
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 166
+ 174
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
@@ -564,7 +564,7 @@
apps/client/src/app/components/admin-overview/admin-overview.html
- 235
+ 238
apps/client/src/app/components/admin-platform/admin-platform.component.html
@@ -574,6 +574,10 @@
apps/client/src/app/components/admin-tag/admin-tag.component.html
100
+
+ apps/client/src/app/components/admin-users/admin-users.html
+ 254
+
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
27
@@ -608,7 +612,7 @@
支払い済み
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts
- 129
+ 136
@@ -723,6 +727,14 @@
208
+
+ Splits
+ Splits
+
+ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
+ 512
+
+
View Stacktrace
スタックトレースを表示
@@ -758,6 +770,14 @@
Date
日付
+
+ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
+ 521
+
+
+ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
+ 560
+
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
156
@@ -804,7 +824,7 @@
通貨
apps/client/src/app/components/admin-market-data/admin-market-data.component.ts
- 130
+ 133
apps/client/src/app/pages/public/public-page.html
@@ -824,7 +844,7 @@
国に縛られないETF
apps/client/src/app/components/admin-market-data/admin-market-data.component.ts
- 135
+ 138
@@ -832,7 +852,7 @@
セクター別ではないETF
apps/client/src/app/components/admin-market-data/admin-market-data.component.ts
- 140
+ 143
@@ -840,7 +860,7 @@
An error occurred while converting the data source to .
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 482
+ 522
@@ -848,11 +868,11 @@
この資産プロファイルを削除してもよろしいですか?
apps/client/src/app/components/admin-market-data/admin-market-data.service.ts
- 28
+ 29
apps/client/src/app/components/admin-market-data/admin-market-data.service.ts
- 66
+ 71
@@ -860,7 +880,7 @@
絞り込み...
apps/client/src/app/components/admin-market-data/admin-market-data.component.ts
- 365
+ 377
@@ -932,7 +952,7 @@
サブスクリプション履歴
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 141
+ 149
@@ -1056,7 +1076,7 @@
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 88
+ 96
@@ -1132,7 +1152,7 @@
合計
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 160
+ 168
@@ -1140,7 +1160,7 @@
スクレイパーの設定
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 510
+ 628
@@ -1232,7 +1252,7 @@
このクーポンを削除してもよろしいですか?
apps/client/src/app/components/admin-overview/admin-overview.component.ts
- 242
+ 247
@@ -1240,7 +1260,7 @@
本当にこのシステムメッセージを削除しますか?
apps/client/src/app/components/admin-overview/admin-overview.component.ts
- 255
+ 260
@@ -1248,7 +1268,7 @@
キャッシュをクリアしてもよろしいですか?
apps/client/src/app/components/admin-overview/admin-overview.component.ts
- 279
+ 290
@@ -1256,7 +1276,7 @@
システムメッセージを設定してください:
apps/client/src/app/components/admin-overview/admin-overview.component.ts
- 299
+ 310
@@ -1272,7 +1292,7 @@
ユーザーあたり
apps/client/src/app/components/admin-overview/admin-overview.component.ts
- 178
+ 181
@@ -1296,7 +1316,7 @@
読み取り専用モード
apps/client/src/app/components/admin-overview/admin-overview.html
- 64
+ 63
@@ -1304,7 +1324,7 @@
システムメッセージ
apps/client/src/app/components/admin-overview/admin-overview.html
- 88
+ 89
@@ -1312,7 +1332,7 @@
メッセージを設定
apps/client/src/app/components/admin-overview/admin-overview.html
- 110
+ 113
@@ -1320,15 +1340,19 @@
クーポン
apps/client/src/app/components/admin-overview/admin-overview.html
- 148
+ 151
Add
追加
+
+ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
+ 615
+
apps/client/src/app/components/admin-overview/admin-overview.html
- 298
+ 301
libs/ui/src/lib/account-balances/account-balances.component.html
@@ -1340,7 +1364,7 @@
メンテナンス
apps/client/src/app/components/admin-overview/admin-overview.html
- 117
+ 120
@@ -1348,7 +1372,7 @@
キャッシュをクリア
apps/client/src/app/components/admin-overview/admin-overview.html
- 133
+ 136
@@ -1368,7 +1392,7 @@
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 589
+ 707
apps/client/src/app/components/admin-platform/admin-platform.component.html
@@ -1384,7 +1408,7 @@
資産プロファイルを保存しました
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 665
+ 748
@@ -1416,7 +1440,7 @@
現在の年
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 232
+ 264
@@ -1427,6 +1451,14 @@
10
+
+ Cache has been flushed.
+ Cache has been flushed.
+
+ apps/client/src/app/components/admin-overview/admin-overview.component.ts
+ 281
+
+
Platforms
プラットフォーム
@@ -1524,7 +1556,7 @@
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 124
+ 132
@@ -1543,24 +1575,16 @@
228
-
- Delete User
- ユーザーを削除
-
- apps/client/src/app/components/admin-users/admin-users.html
- 254
-
-
Could not validate form
フォームを検証できませんでした
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 641
+ 724
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 644
+ 727
@@ -1679,6 +1703,14 @@
64
+
+ Split Ratio
+ Split Ratio
+
+ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
+ 526
+
+
Fear
恐怖
@@ -1796,7 +1828,7 @@
今週
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 224
+ 256
@@ -1824,7 +1856,7 @@
コード
apps/client/src/app/components/admin-overview/admin-overview.html
- 159
+ 162
@@ -2268,7 +2300,7 @@
YTD
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 232
+ 264
libs/ui/src/lib/assistant/assistant.component.ts
@@ -2280,7 +2312,7 @@
1年
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 236
+ 268
libs/ui/src/lib/assistant/assistant.component.ts
@@ -2300,7 +2332,7 @@
5年
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 240
+ 272
libs/ui/src/lib/assistant/assistant.component.ts
@@ -2320,7 +2352,7 @@
マックス
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 244
+ 276
libs/ui/src/lib/assistant/assistant.component.ts
@@ -2368,7 +2400,7 @@
クーポンコードを入力してください。
apps/client/src/app/components/user-account-membership/user-account-membership.component.ts
- 214
+ 203
@@ -2376,7 +2408,7 @@
クーポンコードを引き換えられませんでした
apps/client/src/app/components/user-account-membership/user-account-membership.component.ts
- 178
+ 181
@@ -2392,15 +2424,7 @@
クーポンコードが引き換えられました
apps/client/src/app/components/user-account-membership/user-account-membership.component.ts
- 191
-
-
-
- Reload
- 再読み込み
-
- apps/client/src/app/components/user-account-membership/user-account-membership.component.ts
- 192
+ 194
@@ -2448,7 +2472,7 @@
このサインイン方法を本当に削除しますか?
apps/client/src/app/components/user-account-settings/user-account-settings.component.ts
- 318
+ 314
@@ -2488,7 +2512,7 @@
クーポン
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts
- 134
+ 141
@@ -2504,7 +2528,7 @@
ロケール
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 548
+ 666
apps/client/src/app/components/user-account-settings/user-account-settings.html
@@ -2828,7 +2852,7 @@
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 101
+ 109
apps/client/src/app/pages/accounts/accounts-page.html
@@ -2848,7 +2872,7 @@
おっと、現金残高の振替に失敗しました。
apps/client/src/app/pages/accounts/accounts-page.component.ts
- 358
+ 355
@@ -2872,7 +2896,7 @@
口座ID
apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html
- 103
+ 98
@@ -3120,11 +3144,11 @@
スクレイパー設定を解析できませんでした
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 589
+ 672
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 592
+ 675
@@ -3156,7 +3180,7 @@
持続時間
apps/client/src/app/components/admin-overview/admin-overview.html
- 172
+ 175
@@ -3356,11 +3380,11 @@
創造
apps/client/src/app/components/admin-overview/admin-overview.html
- 185
+ 188
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 150
+ 158
@@ -3732,7 +3756,7 @@
おっと!資産プロファイルを削除できませんでした。
apps/client/src/app/components/admin-market-data/admin-market-data.service.ts
- 52
+ 56
@@ -3980,7 +4004,7 @@
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 110
+ 118
apps/client/src/app/pages/portfolio/activities/activities-page.html
@@ -4207,6 +4231,14 @@
118
+
+ Shares After
+ Shares After
+
+ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
+ 584
+
+
Back
戻る
@@ -4224,7 +4256,7 @@
価格
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 176
+ 184
@@ -4232,7 +4264,7 @@
Do you really want to convert this asset profile to ( )?
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 723
+ 806
@@ -4332,16 +4364,12 @@
トライアル
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts
- 133
+ 140
Exclude from Analysis
分析から除外する
-
- apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html
- 97
-
libs/ui/src/lib/i18n.ts
22
@@ -4632,7 +4660,7 @@
時間ごと
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 216
+ 248
@@ -4744,7 +4772,7 @@
有効期限
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 209
+ 217
@@ -4784,11 +4812,11 @@
資産プロフィールを保存できませんでした
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 675
+ 758
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 678
+ 761
@@ -4997,7 +5025,7 @@
Coupon has been created
apps/client/src/app/components/admin-overview/admin-overview.component.ts
- 224
+ 229
@@ -5172,6 +5200,14 @@
373
+
+ Data gathering has been started.
+ Data gathering has been started.
+
+ apps/client/src/app/components/admin-market-data/admin-market-data.component.ts
+ 413
+
+
Global
グローバル
@@ -5213,7 +5249,7 @@
メンバーシップ
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 78
+ 82
libs/common/src/lib/routes/routes.ts
@@ -5753,7 +5789,7 @@
アクティビティなし
apps/client/src/app/components/admin-market-data/admin-market-data.component.ts
- 145
+ 148
@@ -5969,7 +6005,7 @@
認証
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 65
+ 67
@@ -6201,7 +6237,7 @@
現在の市場価格は
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 766
+ 850
@@ -6209,7 +6245,7 @@
テスト
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 607
+ 725
@@ -6361,7 +6397,7 @@
MTD
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 228
+ 260
libs/ui/src/lib/assistant/assistant.component.ts
@@ -6381,7 +6417,7 @@
WTD
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 224
+ 256
libs/ui/src/lib/assistant/assistant.component.ts
@@ -6429,7 +6465,7 @@
年
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 236
+ 268
apps/client/src/app/pages/resources/personal-finance-tools/product-page.html
@@ -6449,7 +6485,7 @@
年
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 240
+ 272
libs/ui/src/lib/assistant/assistant.component.ts
@@ -6494,7 +6530,7 @@
データ収集
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 630
+ 748
apps/client/src/app/components/admin-overview/admin-overview.html
@@ -6534,7 +6570,7 @@
毎日
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 212
+ 244
@@ -6730,7 +6766,7 @@
Oops! There was an error setting up biometric authentication.
apps/client/src/app/components/user-account-settings/user-account-settings.component.ts
- 367
+ 363
@@ -6746,7 +6782,7 @@
Benchmarks
apps/client/src/app/components/admin-market-data/admin-market-data.component.ts
- 125
+ 128
@@ -6846,7 +6882,7 @@
Oops! Could not delete the asset profile.
apps/client/src/app/components/admin-market-data/admin-market-data.service.ts
- 51
+ 55
@@ -6966,7 +7002,7 @@
Do you really want to delete these asset profiles?
apps/client/src/app/components/admin-market-data/admin-market-data.service.ts
- 67
+ 72
@@ -6974,7 +7010,7 @@
Error
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 757
+ 841
@@ -6986,7 +7022,7 @@
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 635
+ 753
apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html
@@ -7010,7 +7046,7 @@
apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html
- 112
+ 107
apps/client/src/app/pages/accounts/transfer-balance/transfer-balance-dialog.html
@@ -7038,7 +7074,7 @@
Role
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 44
+ 45
@@ -7062,7 +7098,7 @@
Close
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 637
+ 755
apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html
@@ -7094,11 +7130,11 @@
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 244
+ 252
apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html
- 114
+ 109
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
@@ -7242,7 +7278,7 @@
has been copied to the clipboard
apps/client/src/app/components/admin-overview/admin-overview.component.ts
- 223
+ 228
libs/ui/src/lib/value/value.component.ts
@@ -7353,6 +7389,14 @@
278
+
+ Shares Before
+ Shares Before
+
+ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
+ 597
+
+
cannot be used anonymously
cannot be used anonymously
@@ -7592,7 +7636,7 @@
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 133
+ 141
@@ -7648,7 +7692,7 @@
保存
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 646
+ 764
apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html
@@ -7680,7 +7724,7 @@
apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html
- 123
+ 118
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
@@ -7764,7 +7808,7 @@
Mode
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 557
+ 675
@@ -7772,7 +7816,7 @@
Do you really want to convert the data source to ?
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 485
+ 525
@@ -7780,7 +7824,7 @@
Default Market Price
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 520
+ 638
@@ -7788,7 +7832,7 @@
Selector
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 573
+ 691
@@ -7796,7 +7840,7 @@
Instant
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 263
+ 296
@@ -7804,7 +7848,7 @@
Lazy
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 259
+ 292
@@ -7812,7 +7856,7 @@
HTTP Request Headers
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 533
+ 651
@@ -7820,7 +7864,7 @@
real-time
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 263
+ 296
@@ -7828,7 +7872,7 @@
end of day
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 259
+ 292
@@ -8041,7 +8085,7 @@
( ) is already in use.
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 718
+ 801
@@ -8049,7 +8093,7 @@
An error occurred while updating to ( ).
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 721
+ 804
@@ -8170,7 +8214,7 @@
Sync Demo User Account
apps/client/src/app/components/admin-overview/admin-overview.html
- 128
+ 131
@@ -8186,7 +8230,7 @@
Demo user account has been synced.
apps/client/src/app/components/admin-overview/admin-overview.component.ts
- 323
+ 334
@@ -8400,7 +8444,7 @@
Current month
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 228
+ 260
@@ -9033,7 +9077,7 @@
Registration Date
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 56
+ 58
diff --git a/apps/client/src/locales/messages.ko.xlf b/apps/client/src/locales/messages.ko.xlf
index 5ee8c49b7..4219d0859 100644
--- a/apps/client/src/locales/messages.ko.xlf
+++ b/apps/client/src/locales/messages.ko.xlf
@@ -260,7 +260,7 @@
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 166
+ 174
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
@@ -564,7 +564,7 @@
apps/client/src/app/components/admin-overview/admin-overview.html
- 235
+ 238
apps/client/src/app/components/admin-platform/admin-platform.component.html
@@ -574,6 +574,10 @@
apps/client/src/app/components/admin-tag/admin-tag.component.html
100
+
+ apps/client/src/app/components/admin-users/admin-users.html
+ 254
+
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
27
@@ -608,7 +612,7 @@
유료
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts
- 129
+ 136
@@ -723,6 +727,14 @@
208
+
+ Splits
+ Splits
+
+ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
+ 512
+
+
View Stacktrace
스택트레이스 보기
@@ -758,6 +770,14 @@
Date
날짜
+
+ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
+ 521
+
+
+ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
+ 560
+
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
156
@@ -804,7 +824,7 @@
통화
apps/client/src/app/components/admin-market-data/admin-market-data.component.ts
- 130
+ 133
apps/client/src/app/pages/public/public-page.html
@@ -824,7 +844,7 @@
국가 정보 없는 ETF
apps/client/src/app/components/admin-market-data/admin-market-data.component.ts
- 135
+ 138
@@ -832,7 +852,7 @@
섹터 정보 없는 ETF
apps/client/src/app/components/admin-market-data/admin-market-data.component.ts
- 140
+ 143
@@ -840,7 +860,7 @@
An error occurred while converting the data source to .
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 482
+ 522
@@ -848,11 +868,11 @@
이 자산 프로필을 정말 삭제하시겠습니까?
apps/client/src/app/components/admin-market-data/admin-market-data.service.ts
- 28
+ 29
apps/client/src/app/components/admin-market-data/admin-market-data.service.ts
- 66
+ 71
@@ -860,7 +880,7 @@
다음 기준으로 필터...
apps/client/src/app/components/admin-market-data/admin-market-data.component.ts
- 365
+ 377
@@ -932,7 +952,7 @@
구독 내역
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 141
+ 149
@@ -1056,7 +1076,7 @@
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 88
+ 96
@@ -1132,7 +1152,7 @@
합계
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 160
+ 168
@@ -1140,7 +1160,7 @@
스크래퍼 설정
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 510
+ 628
@@ -1232,7 +1252,7 @@
이 쿠폰을 정말 삭제하시겠습니까?
apps/client/src/app/components/admin-overview/admin-overview.component.ts
- 242
+ 247
@@ -1240,7 +1260,7 @@
이 시스템 메시지를 정말 삭제하시겠습니까?
apps/client/src/app/components/admin-overview/admin-overview.component.ts
- 255
+ 260
@@ -1248,7 +1268,7 @@
정말로 캐시를 플러시하시겠습니까?
apps/client/src/app/components/admin-overview/admin-overview.component.ts
- 279
+ 290
@@ -1256,7 +1276,7 @@
시스템 메시지를 설정하십시오:
apps/client/src/app/components/admin-overview/admin-overview.component.ts
- 299
+ 310
@@ -1272,7 +1292,7 @@
사용자당
apps/client/src/app/components/admin-overview/admin-overview.component.ts
- 178
+ 181
@@ -1296,7 +1316,7 @@
읽기 전용 모드
apps/client/src/app/components/admin-overview/admin-overview.html
- 64
+ 63
@@ -1304,7 +1324,7 @@
시스템 메시지
apps/client/src/app/components/admin-overview/admin-overview.html
- 88
+ 89
@@ -1312,7 +1332,7 @@
메시지 설정
apps/client/src/app/components/admin-overview/admin-overview.html
- 110
+ 113
@@ -1320,15 +1340,19 @@
쿠폰
apps/client/src/app/components/admin-overview/admin-overview.html
- 148
+ 151
Add
추가
+
+ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
+ 615
+
apps/client/src/app/components/admin-overview/admin-overview.html
- 298
+ 301
libs/ui/src/lib/account-balances/account-balances.component.html
@@ -1340,7 +1364,7 @@
유지 관리
apps/client/src/app/components/admin-overview/admin-overview.html
- 117
+ 120
@@ -1348,7 +1372,7 @@
캐시 플러시
apps/client/src/app/components/admin-overview/admin-overview.html
- 133
+ 136
@@ -1368,7 +1392,7 @@
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 589
+ 707
apps/client/src/app/components/admin-platform/admin-platform.component.html
@@ -1384,7 +1408,7 @@
자산 정보가 저장되었습니다.
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 665
+ 748
@@ -1416,7 +1440,7 @@
올해
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 232
+ 264
@@ -1427,6 +1451,14 @@
10
+
+ Cache has been flushed.
+ Cache has been flushed.
+
+ apps/client/src/app/components/admin-overview/admin-overview.component.ts
+ 281
+
+
Platforms
플랫폼
@@ -1524,7 +1556,7 @@
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 124
+ 132
@@ -1543,24 +1575,16 @@
228
-
- Delete User
- 사용자 삭제
-
- apps/client/src/app/components/admin-users/admin-users.html
- 254
-
-
Could not validate form
양식 유효성 검사에 실패했습니다.
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 641
+ 724
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 644
+ 727
@@ -1679,6 +1703,14 @@
64
+
+ Split Ratio
+ Split Ratio
+
+ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
+ 526
+
+
Fear
두려움
@@ -1796,7 +1828,7 @@
이번주
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 224
+ 256
@@ -1824,7 +1856,7 @@
코드
apps/client/src/app/components/admin-overview/admin-overview.html
- 159
+ 162
@@ -2268,7 +2300,7 @@
연초 대비
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 232
+ 264
libs/ui/src/lib/assistant/assistant.component.ts
@@ -2280,7 +2312,7 @@
1년
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 236
+ 268
libs/ui/src/lib/assistant/assistant.component.ts
@@ -2300,7 +2332,7 @@
5년
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 240
+ 272
libs/ui/src/lib/assistant/assistant.component.ts
@@ -2320,7 +2352,7 @@
맥스
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 244
+ 276
libs/ui/src/lib/assistant/assistant.component.ts
@@ -2368,7 +2400,7 @@
쿠폰 코드를 입력해주세요.
apps/client/src/app/components/user-account-membership/user-account-membership.component.ts
- 214
+ 203
@@ -2376,7 +2408,7 @@
쿠폰 코드를 사용할 수 없습니다.
apps/client/src/app/components/user-account-membership/user-account-membership.component.ts
- 178
+ 181
@@ -2392,15 +2424,7 @@
쿠폰 코드가 사용되었습니다.
apps/client/src/app/components/user-account-membership/user-account-membership.component.ts
- 191
-
-
-
- Reload
- 새로고침
-
- apps/client/src/app/components/user-account-membership/user-account-membership.component.ts
- 192
+ 194
@@ -2448,7 +2472,7 @@
이 로그인 방법을 정말로 제거하시겠습니까?
apps/client/src/app/components/user-account-settings/user-account-settings.component.ts
- 318
+ 314
@@ -2488,7 +2512,7 @@
쿠폰
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts
- 134
+ 141
@@ -2504,7 +2528,7 @@
장소
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 548
+ 666
apps/client/src/app/components/user-account-settings/user-account-settings.html
@@ -2828,7 +2852,7 @@
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 101
+ 109
apps/client/src/app/pages/accounts/accounts-page.html
@@ -2848,7 +2872,7 @@
죄송합니다. 현금 잔액 이체가 실패했습니다.
apps/client/src/app/pages/accounts/accounts-page.component.ts
- 358
+ 355
@@ -2872,7 +2896,7 @@
계좌 ID
apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html
- 103
+ 98
@@ -3120,11 +3144,11 @@
스크래퍼 설정을 파싱할 수 없습니다.
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 589
+ 672
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 592
+ 675
@@ -3156,7 +3180,7 @@
기간
apps/client/src/app/components/admin-overview/admin-overview.html
- 172
+ 175
@@ -3356,11 +3380,11 @@
생성
apps/client/src/app/components/admin-overview/admin-overview.html
- 185
+ 188
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 150
+ 158
@@ -3724,7 +3748,7 @@
이런! 자산 프로필을 삭제할 수 없습니다.
apps/client/src/app/components/admin-market-data/admin-market-data.service.ts
- 52
+ 56
@@ -3972,7 +3996,7 @@
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 110
+ 118
apps/client/src/app/pages/portfolio/activities/activities-page.html
@@ -4199,6 +4223,14 @@
118
+
+ Shares After
+ Shares After
+
+ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
+ 584
+
+
Back
뒤쪽에
@@ -4216,7 +4248,7 @@
가격
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 176
+ 184
@@ -4224,7 +4256,7 @@
Do you really want to convert this asset profile to ( )?
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 723
+ 806
@@ -4324,16 +4356,12 @@
체험판
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts
- 133
+ 140
Exclude from Analysis
분석에서 제외
-
- apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html
- 97
-
libs/ui/src/lib/i18n.ts
22
@@ -4624,7 +4652,7 @@
매시간
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 216
+ 248
@@ -4736,7 +4764,7 @@
만료
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 209
+ 217
@@ -4776,11 +4804,11 @@
자산 정보를 저장할 수 없습니다.
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 675
+ 758
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 678
+ 761
@@ -4989,7 +5017,7 @@
Coupon has been created
apps/client/src/app/components/admin-overview/admin-overview.component.ts
- 224
+ 229
@@ -5164,6 +5192,14 @@
373
+
+ Data gathering has been started.
+ Data gathering has been started.
+
+ apps/client/src/app/components/admin-market-data/admin-market-data.component.ts
+ 413
+
+
Global
글로벌
@@ -5205,7 +5241,7 @@
멤버십
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 78
+ 82
libs/common/src/lib/routes/routes.ts
@@ -5745,7 +5781,7 @@
거래 내역 없음
apps/client/src/app/components/admin-market-data/admin-market-data.component.ts
- 145
+ 148
@@ -5969,7 +6005,7 @@
입증
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 65
+ 67
@@ -6201,7 +6237,7 @@
현재 시장가격은
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 766
+ 850
@@ -6209,7 +6245,7 @@
시험
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 607
+ 725
@@ -6361,7 +6397,7 @@
MTD
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 228
+ 260
libs/ui/src/lib/assistant/assistant.component.ts
@@ -6381,7 +6417,7 @@
WTD
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 224
+ 256
libs/ui/src/lib/assistant/assistant.component.ts
@@ -6429,7 +6465,7 @@
년도
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 236
+ 268
apps/client/src/app/pages/resources/personal-finance-tools/product-page.html
@@ -6449,7 +6485,7 @@
연령
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 240
+ 272
libs/ui/src/lib/assistant/assistant.component.ts
@@ -6494,7 +6530,7 @@
데이터 수집
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 630
+ 748
apps/client/src/app/components/admin-overview/admin-overview.html
@@ -6534,7 +6570,7 @@
매일
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 212
+ 244
@@ -6730,7 +6766,7 @@
이런! 생체 인증을 설정하는 중에 오류가 발생했습니다.
apps/client/src/app/components/user-account-settings/user-account-settings.component.ts
- 367
+ 363
@@ -6746,7 +6782,7 @@
벤치마크
apps/client/src/app/components/admin-market-data/admin-market-data.component.ts
- 125
+ 128
@@ -6846,7 +6882,7 @@
이런! 자산 프로필을 삭제할 수 없습니다.
apps/client/src/app/components/admin-market-data/admin-market-data.service.ts
- 51
+ 55
@@ -6966,7 +7002,7 @@
이 개의 자산 프로필을 정말 삭제하시겠습니까?
apps/client/src/app/components/admin-market-data/admin-market-data.service.ts
- 67
+ 72
@@ -6974,7 +7010,7 @@
오류
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 757
+ 841
@@ -6986,7 +7022,7 @@
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 635
+ 753
apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html
@@ -7010,7 +7046,7 @@
apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html
- 112
+ 107
apps/client/src/app/pages/accounts/transfer-balance/transfer-balance-dialog.html
@@ -7038,7 +7074,7 @@
역할
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 44
+ 45
@@ -7062,7 +7098,7 @@
닫다
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 637
+ 755
apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html
@@ -7094,11 +7130,11 @@
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 244
+ 252
apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html
- 114
+ 109
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
@@ -7242,7 +7278,7 @@
가 클립보드에 복사되었습니다.
apps/client/src/app/components/admin-overview/admin-overview.component.ts
- 223
+ 228
libs/ui/src/lib/value/value.component.ts
@@ -7353,6 +7389,14 @@
278
+
+ Shares Before
+ Shares Before
+
+ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
+ 597
+
+
cannot be used anonymously
은(는) 익명으로 사용할 수 없습니다.
@@ -7592,7 +7636,7 @@
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 133
+ 141
@@ -7648,7 +7692,7 @@
구하다
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 646
+ 764
apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html
@@ -7680,7 +7724,7 @@
apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html
- 123
+ 118
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
@@ -7764,7 +7808,7 @@
방법
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 557
+ 675
@@ -7772,7 +7816,7 @@
Do you really want to convert the data source to ?
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 485
+ 525
@@ -7780,7 +7824,7 @@
기본 시장 가격
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 520
+ 638
@@ -7788,7 +7832,7 @@
선택자
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 573
+ 691
@@ -7796,7 +7840,7 @@
즉각적인
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 263
+ 296
@@ -7804,7 +7848,7 @@
게으른
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 259
+ 292
@@ -7812,7 +7856,7 @@
HTTP 요청 헤더
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 533
+ 651
@@ -7820,7 +7864,7 @@
실시간
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 263
+ 296
@@ -7828,7 +7872,7 @@
하루의 끝
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 259
+ 292
@@ -8041,7 +8085,7 @@
( )은(는) 이미 사용 중입니다.
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 718
+ 801
@@ -8049,7 +8093,7 @@
( )로 업데이트하는 동안 오류가 발생했습니다.
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 721
+ 804
@@ -8170,7 +8214,7 @@
데모 사용자 계정 동기화
apps/client/src/app/components/admin-overview/admin-overview.html
- 128
+ 131
@@ -8186,7 +8230,7 @@
데모 사용자 계정이 동기화되었습니다.
apps/client/src/app/components/admin-overview/admin-overview.component.ts
- 323
+ 334
@@ -8400,7 +8444,7 @@
이번 달
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 228
+ 260
@@ -9033,7 +9077,7 @@
등록일
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 56
+ 58
diff --git a/apps/client/src/locales/messages.nl.xlf b/apps/client/src/locales/messages.nl.xlf
index fccb994a9..2b7ab89ac 100644
--- a/apps/client/src/locales/messages.nl.xlf
+++ b/apps/client/src/locales/messages.nl.xlf
@@ -58,7 +58,7 @@
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 166
+ 174
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
@@ -270,7 +270,7 @@
apps/client/src/app/components/admin-overview/admin-overview.html
- 235
+ 238
apps/client/src/app/components/admin-platform/admin-platform.component.html
@@ -280,6 +280,10 @@
apps/client/src/app/components/admin-tag/admin-tag.component.html
100
+
+ apps/client/src/app/components/admin-users/admin-users.html
+ 254
+
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
27
@@ -314,7 +318,7 @@
Betaald
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts
- 129
+ 136
@@ -433,6 +437,14 @@
208
+
+ Splits
+ Splits
+
+ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
+ 512
+
+
View Stacktrace
Bekijk Stacktrace
@@ -468,6 +480,14 @@
Date
Datum
+
+ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
+ 521
+
+
+ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
+ 560
+
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
156
@@ -546,7 +566,7 @@
Wil je deze coupon echt verwijderen?
apps/client/src/app/components/admin-overview/admin-overview.component.ts
- 242
+ 247
@@ -554,7 +574,7 @@
Wil je echt de cache legen?
apps/client/src/app/components/admin-overview/admin-overview.component.ts
- 279
+ 290
@@ -562,7 +582,7 @@
Stel je systeemboodschap in:
apps/client/src/app/components/admin-overview/admin-overview.component.ts
- 299
+ 310
@@ -570,7 +590,7 @@
per gebruiker
apps/client/src/app/components/admin-overview/admin-overview.component.ts
- 178
+ 181
@@ -598,7 +618,7 @@
Systeembericht
apps/client/src/app/components/admin-overview/admin-overview.html
- 88
+ 89
@@ -606,7 +626,7 @@
Bericht instellen
apps/client/src/app/components/admin-overview/admin-overview.html
- 110
+ 113
@@ -614,7 +634,7 @@
Alleen lezen
apps/client/src/app/components/admin-overview/admin-overview.html
- 64
+ 63
@@ -622,15 +642,19 @@
Coupons
apps/client/src/app/components/admin-overview/admin-overview.html
- 148
+ 151
Add
Toevoegen
+
+ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
+ 615
+
apps/client/src/app/components/admin-overview/admin-overview.html
- 298
+ 301
libs/ui/src/lib/account-balances/account-balances.component.html
@@ -642,7 +666,7 @@
Huishouding
apps/client/src/app/components/admin-overview/admin-overview.html
- 117
+ 120
@@ -650,7 +674,7 @@
Cache legen
apps/client/src/app/components/admin-overview/admin-overview.html
- 133
+ 136
@@ -694,7 +718,7 @@
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 124
+ 132
@@ -762,11 +786,11 @@
Aanmaakdatum
apps/client/src/app/components/admin-overview/admin-overview.html
- 185
+ 188
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 150
+ 158
@@ -813,6 +837,14 @@
64
+
+ Split Ratio
+ Split Ratio
+
+ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
+ 526
+
+
Last Days
Laatste Dagen
@@ -1106,7 +1138,7 @@
YTD
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 232
+ 264
libs/ui/src/lib/assistant/assistant.component.ts
@@ -1118,7 +1150,7 @@
1J
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 236
+ 268
libs/ui/src/lib/assistant/assistant.component.ts
@@ -1138,7 +1170,7 @@
5J
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 240
+ 272
libs/ui/src/lib/assistant/assistant.component.ts
@@ -1158,7 +1190,7 @@
Max
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 244
+ 276
libs/ui/src/lib/assistant/assistant.component.ts
@@ -1234,7 +1266,7 @@
Voer je couponcode in:
apps/client/src/app/components/user-account-membership/user-account-membership.component.ts
- 214
+ 203
@@ -1242,7 +1274,7 @@
Kon je kortingscode niet inwisselen
apps/client/src/app/components/user-account-membership/user-account-membership.component.ts
- 178
+ 181
@@ -1258,15 +1290,7 @@
Je couponcode is ingewisseld
apps/client/src/app/components/user-account-membership/user-account-membership.component.ts
- 191
-
-
-
- Reload
- Herladen
-
- apps/client/src/app/components/user-account-membership/user-account-membership.component.ts
- 192
+ 194
@@ -1274,7 +1298,7 @@
Wil je deze aanmeldingsmethode echt verwijderen?
apps/client/src/app/components/user-account-settings/user-account-settings.component.ts
- 318
+ 314
@@ -1334,7 +1358,7 @@
Coupon
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts
- 134
+ 141
@@ -1342,7 +1366,7 @@
Locatie
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 548
+ 666
apps/client/src/app/components/user-account-settings/user-account-settings.html
@@ -1458,7 +1482,7 @@
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 101
+ 109
apps/client/src/app/pages/accounts/accounts-page.html
@@ -1566,7 +1590,7 @@
Rekening-ID
apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html
- 103
+ 98
@@ -1726,7 +1750,7 @@
Looptijd
apps/client/src/app/components/admin-overview/admin-overview.html
- 172
+ 175
@@ -1946,7 +1970,7 @@
Proefperiode
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts
- 133
+ 140
@@ -2046,7 +2070,7 @@
Huidige week
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 224
+ 256
@@ -2194,7 +2218,7 @@
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 110
+ 118
apps/client/src/app/pages/portfolio/activities/activities-page.html
@@ -2564,10 +2588,6 @@
Exclude from Analysis
Uitsluiten van analyse
-
- apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html
- 97
-
libs/ui/src/lib/i18n.ts
22
@@ -2662,7 +2682,7 @@
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 88
+ 96
@@ -2746,7 +2766,7 @@
Abonnementsgeschiedenis
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 141
+ 149
@@ -2786,7 +2806,7 @@
Filter op...
apps/client/src/app/components/admin-market-data/admin-market-data.component.ts
- 365
+ 377
@@ -2834,11 +2854,11 @@
Het formulier kon niet worden gevalideerd.
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 641
+ 724
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 644
+ 727
@@ -2942,7 +2962,7 @@
Code
apps/client/src/app/components/admin-overview/admin-overview.html
- 159
+ 162
@@ -3110,7 +3130,7 @@
Authenticatie
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 65
+ 67
@@ -3342,7 +3362,7 @@
Prijs
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 176
+ 184
@@ -3350,7 +3370,7 @@
Do you really want to convert this asset profile to ( )?
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 723
+ 806
@@ -3630,7 +3650,7 @@
Geen activiteiten
apps/client/src/app/components/admin-market-data/admin-market-data.component.ts
- 145
+ 148
@@ -3822,7 +3842,7 @@
Elk uur
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 216
+ 248
@@ -3914,7 +3934,7 @@
Vervaldatum
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 209
+ 217
@@ -3930,11 +3950,11 @@
Kon het assetprofiel niet opslaan
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 675
+ 758
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 678
+ 761
@@ -4105,14 +4125,6 @@
228
-
- Delete User
- Gebruiker verwijderen
-
- apps/client/src/app/components/admin-users/admin-users.html
- 254
-
-
By ETF Provider
Per ETF-aanbieder
@@ -4142,7 +4154,7 @@
Huidig jaar
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 232
+ 264
@@ -4153,6 +4165,14 @@
10
+
+ Cache has been flushed.
+ Cache has been flushed.
+
+ apps/client/src/app/components/admin-overview/admin-overview.component.ts
+ 281
+
+
Url
Url
@@ -4162,7 +4182,7 @@
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 589
+ 707
apps/client/src/app/components/admin-platform/admin-platform.component.html
@@ -4178,7 +4198,7 @@
Het activaprofiel is opgeslagen.
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 665
+ 748
@@ -4301,6 +4321,14 @@
118
+
+ Shares After
+ Shares After
+
+ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
+ 584
+
+
Frequently Asked Questions (FAQ)
Veelgestelde Vragen
@@ -4562,7 +4590,7 @@
Totaal
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 160
+ 168
@@ -4570,7 +4598,7 @@
Scraper instellingen
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 510
+ 628
@@ -4638,7 +4666,7 @@
Coupon has been created
apps/client/src/app/components/admin-overview/admin-overview.component.ts
- 224
+ 229
@@ -4846,7 +4874,7 @@
ETF’s zonder Landen
apps/client/src/app/components/admin-market-data/admin-market-data.component.ts
- 135
+ 138
@@ -4854,7 +4882,7 @@
ETF’s zonder Sectoren
apps/client/src/app/components/admin-market-data/admin-market-data.component.ts
- 140
+ 143
@@ -4862,7 +4890,7 @@
An error occurred while converting the data source to .
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 482
+ 522
@@ -5082,7 +5110,7 @@
Valuta
apps/client/src/app/components/admin-market-data/admin-market-data.component.ts
- 130
+ 133
apps/client/src/app/pages/public/public-page.html
@@ -5134,11 +5162,11 @@
De scraperconfiguratie kon niet worden geparseerd
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 589
+ 672
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 592
+ 675
@@ -5370,7 +5398,7 @@
Oeps! De activaprofielen konden niet worden verwijderd.
apps/client/src/app/components/admin-market-data/admin-market-data.service.ts
- 52
+ 56
@@ -5727,6 +5755,14 @@
369
+
+ Data gathering has been started.
+ Data gathering has been started.
+
+ apps/client/src/app/components/admin-market-data/admin-market-data.component.ts
+ 413
+
+
Global
Wereldwijd
@@ -5936,7 +5972,7 @@
Lidmaatschap
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 78
+ 82
libs/common/src/lib/routes/routes.ts
@@ -5976,11 +6012,11 @@
Weet u zeker dat u dit bezittingen profiel wilt verwijderen?
apps/client/src/app/components/admin-market-data/admin-market-data.service.ts
- 28
+ 29
apps/client/src/app/components/admin-market-data/admin-market-data.service.ts
- 66
+ 71
@@ -6052,7 +6088,7 @@
Oeps, geldoverdracht is mislukt.
apps/client/src/app/pages/accounts/accounts-page.component.ts
- 358
+ 355
@@ -6100,7 +6136,7 @@
Wilt u dit systeembericht echt verwijderen?
apps/client/src/app/components/admin-overview/admin-overview.component.ts
- 255
+ 260
@@ -6168,7 +6204,7 @@
De huidige markt waarde is
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 766
+ 850
@@ -6176,7 +6212,7 @@
Test
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 607
+ 725
@@ -6320,7 +6356,7 @@
Week tot nu toe
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 224
+ 256
libs/ui/src/lib/assistant/assistant.component.ts
@@ -6340,7 +6376,7 @@
MTD
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 228
+ 260
libs/ui/src/lib/assistant/assistant.component.ts
@@ -6404,7 +6440,7 @@
jaar
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 236
+ 268
apps/client/src/app/pages/resources/personal-finance-tools/product-page.html
@@ -6424,7 +6460,7 @@
jaren
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 240
+ 272
libs/ui/src/lib/assistant/assistant.component.ts
@@ -6444,7 +6480,7 @@
Data Verzamelen
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 630
+ 748
apps/client/src/app/components/admin-overview/admin-overview.html
@@ -6509,7 +6545,7 @@
Dagelijks
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 212
+ 244
@@ -6705,7 +6741,7 @@
Oeps! Er is een fout opgetreden met het instellen van de biometrische authenticatie.
apps/client/src/app/components/user-account-settings/user-account-settings.component.ts
- 367
+ 363
@@ -6721,7 +6757,7 @@
Benchmarks
apps/client/src/app/components/admin-market-data/admin-market-data.component.ts
- 125
+ 128
@@ -6837,7 +6873,7 @@
Oeps! Het activaprofiel kon niet worden verwijderd.
apps/client/src/app/components/admin-market-data/admin-market-data.service.ts
- 51
+ 55
@@ -6941,7 +6977,7 @@
Wil je deze activaprofielen echt verwijderen?
apps/client/src/app/components/admin-market-data/admin-market-data.service.ts
- 67
+ 72
@@ -6949,7 +6985,7 @@
Fout
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 757
+ 841
@@ -6993,7 +7029,7 @@
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 635
+ 753
apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html
@@ -7017,7 +7053,7 @@
apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html
- 112
+ 107
apps/client/src/app/pages/accounts/transfer-balance/transfer-balance-dialog.html
@@ -7045,7 +7081,7 @@
Sluiten
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 637
+ 755
apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html
@@ -7077,11 +7113,11 @@
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 244
+ 252
apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html
- 114
+ 109
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
@@ -7097,7 +7133,7 @@
Rol
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 44
+ 45
@@ -7201,7 +7237,7 @@
is naar het klembord gekopieerd
apps/client/src/app/components/admin-overview/admin-overview.component.ts
- 223
+ 228
libs/ui/src/lib/value/value.component.ts
@@ -7328,6 +7364,14 @@
278
+
+ Shares Before
+ Shares Before
+
+ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
+ 597
+
+
cannot be used anonymously
kan niet anoniem gebruik worden
@@ -7551,7 +7595,7 @@
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 133
+ 141
@@ -7623,7 +7667,7 @@
Opslaan
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 646
+ 764
apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html
@@ -7655,7 +7699,7 @@
apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html
- 123
+ 118
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
@@ -7739,7 +7783,7 @@
Lui
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 259
+ 292
@@ -7747,7 +7791,7 @@
Direct
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 263
+ 296
@@ -7755,7 +7799,7 @@
Standaard Marktprijs
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 520
+ 638
@@ -7763,7 +7807,7 @@
Modus
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 557
+ 675
@@ -7771,7 +7815,7 @@
Do you really want to convert the data source to ?
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 485
+ 525
@@ -7779,7 +7823,7 @@
Kiezer
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 573
+ 691
@@ -7787,7 +7831,7 @@
HTTP Verzoek Headers
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 533
+ 651
@@ -7795,7 +7839,7 @@
eind van de dag
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 259
+ 292
@@ -7803,7 +7847,7 @@
real-time
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 263
+ 296
@@ -8016,7 +8060,7 @@
( ) is al in gebruik.
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 718
+ 801
@@ -8024,7 +8068,7 @@
Er is een fout opgetreden tijdens het updaten naar ( ).
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 721
+ 804
@@ -8177,7 +8221,7 @@
Demo-gebruikersaccount is gesynchroniseerd.
apps/client/src/app/components/admin-overview/admin-overview.component.ts
- 323
+ 334
@@ -8185,7 +8229,7 @@
Synchroniseer demo-gebruikersaccount
apps/client/src/app/components/admin-overview/admin-overview.html
- 128
+ 131
@@ -8399,7 +8443,7 @@
Huidige maand
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 228
+ 260
@@ -9036,7 +9080,7 @@
Registratiedatum
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 56
+ 58
diff --git a/apps/client/src/locales/messages.pl.xlf b/apps/client/src/locales/messages.pl.xlf
index 502faf9f6..4182139a7 100644
--- a/apps/client/src/locales/messages.pl.xlf
+++ b/apps/client/src/locales/messages.pl.xlf
@@ -259,7 +259,7 @@
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 166
+ 174
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
@@ -555,7 +555,7 @@
apps/client/src/app/components/admin-overview/admin-overview.html
- 235
+ 238
apps/client/src/app/components/admin-platform/admin-platform.component.html
@@ -565,6 +565,10 @@
apps/client/src/app/components/admin-tag/admin-tag.component.html
100
+
+ apps/client/src/app/components/admin-users/admin-users.html
+ 254
+
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
27
@@ -599,7 +603,7 @@
Paid
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts
- 129
+ 136
@@ -714,6 +718,14 @@
208
+
+ Splits
+ Splits
+
+ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
+ 512
+
+
View Stacktrace
Wyświetl Stos Wywołań
@@ -749,6 +761,14 @@
Date
Data
+
+ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
+ 521
+
+
+ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
+ 560
+
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
156
@@ -795,7 +815,7 @@
Waluty
apps/client/src/app/components/admin-market-data/admin-market-data.component.ts
- 130
+ 133
apps/client/src/app/pages/public/public-page.html
@@ -815,7 +835,7 @@
ETF-y bez Krajów
apps/client/src/app/components/admin-market-data/admin-market-data.component.ts
- 135
+ 138
@@ -823,7 +843,7 @@
ETF-y bez Sektorów
apps/client/src/app/components/admin-market-data/admin-market-data.component.ts
- 140
+ 143
@@ -831,7 +851,7 @@
An error occurred while converting the data source to .
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 482
+ 522
@@ -839,11 +859,11 @@
Czy na pewno chcesz usunąć ten profil aktywów?
apps/client/src/app/components/admin-market-data/admin-market-data.service.ts
- 28
+ 29
apps/client/src/app/components/admin-market-data/admin-market-data.service.ts
- 66
+ 71
@@ -851,7 +871,7 @@
Filtruj według...
apps/client/src/app/components/admin-market-data/admin-market-data.component.ts
- 365
+ 377
@@ -923,7 +943,7 @@
Subscription History
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 141
+ 149
@@ -1023,7 +1043,7 @@
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 88
+ 96
@@ -1099,7 +1119,7 @@
Total
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 160
+ 168
@@ -1107,7 +1127,7 @@
Konfiguracja Scrapera
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 510
+ 628
@@ -1199,7 +1219,7 @@
Czy naprawdę chcesz usunąć ten kupon?
apps/client/src/app/components/admin-overview/admin-overview.component.ts
- 242
+ 247
@@ -1207,7 +1227,7 @@
Czy naprawdę chcesz usunąć tę wiadomość systemową?
apps/client/src/app/components/admin-overview/admin-overview.component.ts
- 255
+ 260
@@ -1215,7 +1235,7 @@
Czy naprawdę chcesz wyczyścić pamięć podręczną?
apps/client/src/app/components/admin-overview/admin-overview.component.ts
- 279
+ 290
@@ -1223,7 +1243,7 @@
Proszę ustawić swoją wiadomość systemową:
apps/client/src/app/components/admin-overview/admin-overview.component.ts
- 299
+ 310
@@ -1239,7 +1259,7 @@
na Użytkownika
apps/client/src/app/components/admin-overview/admin-overview.component.ts
- 178
+ 181
@@ -1263,7 +1283,7 @@
Tryb Tylko do Odczytu
apps/client/src/app/components/admin-overview/admin-overview.html
- 64
+ 63
@@ -1271,7 +1291,7 @@
Wiadomość Systemowa
apps/client/src/app/components/admin-overview/admin-overview.html
- 88
+ 89
@@ -1279,7 +1299,7 @@
Ustaw Wiadomość
apps/client/src/app/components/admin-overview/admin-overview.html
- 110
+ 113
@@ -1287,15 +1307,19 @@
Kupony
apps/client/src/app/components/admin-overview/admin-overview.html
- 148
+ 151
Add
Dodaj
+
+ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
+ 615
+
apps/client/src/app/components/admin-overview/admin-overview.html
- 298
+ 301
libs/ui/src/lib/account-balances/account-balances.component.html
@@ -1307,7 +1331,7 @@
Konserwacja
apps/client/src/app/components/admin-overview/admin-overview.html
- 117
+ 120
@@ -1315,7 +1339,7 @@
Wyczyszczenie pamięci podręcznej
apps/client/src/app/components/admin-overview/admin-overview.html
- 133
+ 136
@@ -1335,7 +1359,7 @@
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 589
+ 707
apps/client/src/app/components/admin-platform/admin-platform.component.html
@@ -1351,7 +1375,7 @@
Profil zasobu został zapisany
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 665
+ 748
@@ -1383,7 +1407,7 @@
Obecny rok
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 232
+ 264
@@ -1394,6 +1418,14 @@
10
+
+ Cache has been flushed.
+ Cache has been flushed.
+
+ apps/client/src/app/components/admin-overview/admin-overview.component.ts
+ 281
+
+
Platforms
Platformy
@@ -1491,7 +1523,7 @@
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 124
+ 132
@@ -1510,24 +1542,16 @@
228
-
- Delete User
- Usuń Użytkownika
-
- apps/client/src/app/components/admin-users/admin-users.html
- 254
-
-
Could not validate form
Could not validate form
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 641
+ 724
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 644
+ 727
@@ -1646,6 +1670,14 @@
64
+
+ Split Ratio
+ Split Ratio
+
+ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
+ 526
+
+
Fear
Zagrożenie
@@ -1763,7 +1795,7 @@
Obecny tydzień
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 224
+ 256
@@ -1791,7 +1823,7 @@
Code
apps/client/src/app/components/admin-overview/admin-overview.html
- 159
+ 162
@@ -2235,7 +2267,7 @@
Liczony od początku roku (year-to-date)
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 232
+ 264
libs/ui/src/lib/assistant/assistant.component.ts
@@ -2247,7 +2279,7 @@
1 rok
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 236
+ 268
libs/ui/src/lib/assistant/assistant.component.ts
@@ -2267,7 +2299,7 @@
5 lat
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 240
+ 272
libs/ui/src/lib/assistant/assistant.component.ts
@@ -2287,7 +2319,7 @@
Maksimum
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 244
+ 276
libs/ui/src/lib/assistant/assistant.component.ts
@@ -2335,7 +2367,7 @@
Wpisz kod kuponu:
apps/client/src/app/components/user-account-membership/user-account-membership.component.ts
- 214
+ 203
@@ -2343,7 +2375,7 @@
Nie udało się zrealizować kodu kuponu
apps/client/src/app/components/user-account-membership/user-account-membership.component.ts
- 178
+ 181
@@ -2359,15 +2391,7 @@
Kupon został zrealizowany
apps/client/src/app/components/user-account-membership/user-account-membership.component.ts
- 191
-
-
-
- Reload
- Odśwież
-
- apps/client/src/app/components/user-account-membership/user-account-membership.component.ts
- 192
+ 194
@@ -2415,7 +2439,7 @@
Czy na pewno chcesz usunąć tą metode logowania?
apps/client/src/app/components/user-account-settings/user-account-settings.component.ts
- 318
+ 314
@@ -2455,7 +2479,7 @@
Coupon
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts
- 134
+ 141
@@ -2471,7 +2495,7 @@
Ustawienia Regionalne
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 548
+ 666
apps/client/src/app/components/user-account-settings/user-account-settings.html
@@ -2795,7 +2819,7 @@
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 101
+ 109
apps/client/src/app/pages/accounts/accounts-page.html
@@ -2815,7 +2839,7 @@
Ups, transfer salda nie powiódł się.
apps/client/src/app/pages/accounts/accounts-page.component.ts
- 358
+ 355
@@ -2839,7 +2863,7 @@
ID konta
apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html
- 103
+ 98
@@ -3087,11 +3111,11 @@
Nie udało się przetworzyć konfiguracji scrapera
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 589
+ 672
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 592
+ 675
@@ -3123,7 +3147,7 @@
Duration
apps/client/src/app/components/admin-overview/admin-overview.html
- 172
+ 175
@@ -3323,11 +3347,11 @@
Creation
apps/client/src/app/components/admin-overview/admin-overview.html
- 185
+ 188
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 150
+ 158
@@ -3691,7 +3715,7 @@
Oops! Could not delete the asset profiles.
apps/client/src/app/components/admin-market-data/admin-market-data.service.ts
- 52
+ 56
@@ -3939,7 +3963,7 @@
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 110
+ 118
apps/client/src/app/pages/portfolio/activities/activities-page.html
@@ -4166,6 +4190,14 @@
118
+
+ Shares After
+ Shares After
+
+ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
+ 584
+
+
Back
Wróc
@@ -4183,7 +4215,7 @@
Price
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 176
+ 184
@@ -4191,7 +4223,7 @@
Do you really want to convert this asset profile to ( )?
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 723
+ 806
@@ -4291,16 +4323,12 @@
Trial
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts
- 133
+ 140
Exclude from Analysis
Wyklucz z analizy
-
- apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html
- 97
-
libs/ui/src/lib/i18n.ts
22
@@ -4591,7 +4619,7 @@
Hourly
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 216
+ 248
@@ -4703,7 +4731,7 @@
Expiration
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 209
+ 217
@@ -4743,11 +4771,11 @@
Could not save asset profile
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 675
+ 758
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 678
+ 761
@@ -4956,7 +4984,7 @@
Coupon has been created
apps/client/src/app/components/admin-overview/admin-overview.component.ts
- 224
+ 229
@@ -5119,6 +5147,14 @@
373
+
+ Data gathering has been started.
+ Data gathering has been started.
+
+ apps/client/src/app/components/admin-market-data/admin-market-data.component.ts
+ 413
+
+
Global
Globalny
@@ -5160,7 +5196,7 @@
Członkostwo
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 78
+ 82
libs/common/src/lib/routes/routes.ts
@@ -5668,7 +5704,7 @@
Brak transakcji
apps/client/src/app/components/admin-market-data/admin-market-data.component.ts
- 145
+ 148
@@ -5892,7 +5928,7 @@
Uwierzytelnianie
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 65
+ 67
@@ -6168,7 +6204,7 @@
Obecna cena rynkowa wynosi
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 766
+ 850
@@ -6176,7 +6212,7 @@
Test
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 607
+ 725
@@ -6320,7 +6356,7 @@
WTD
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 224
+ 256
libs/ui/src/lib/assistant/assistant.component.ts
@@ -6340,7 +6376,7 @@
MTD
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 228
+ 260
libs/ui/src/lib/assistant/assistant.component.ts
@@ -6404,7 +6440,7 @@
rok
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 236
+ 268
apps/client/src/app/pages/resources/personal-finance-tools/product-page.html
@@ -6424,7 +6460,7 @@
lata
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 240
+ 272
libs/ui/src/lib/assistant/assistant.component.ts
@@ -6444,7 +6480,7 @@
Gromadzenie Danych
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 630
+ 748
apps/client/src/app/components/admin-overview/admin-overview.html
@@ -6509,7 +6545,7 @@
Daily
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 212
+ 244
@@ -6705,7 +6741,7 @@
Ups! Wystąpił błąd podczas konfigurowania uwierzytelniania biometrycznego.
apps/client/src/app/components/user-account-settings/user-account-settings.component.ts
- 367
+ 363
@@ -6721,7 +6757,7 @@
Punkty Odniesienia
apps/client/src/app/components/admin-market-data/admin-market-data.component.ts
- 125
+ 128
@@ -6837,7 +6873,7 @@
Oops! Could not delete the asset profile.
apps/client/src/app/components/admin-market-data/admin-market-data.service.ts
- 51
+ 55
@@ -6941,7 +6977,7 @@
Do you really want to delete these asset profiles?
apps/client/src/app/components/admin-market-data/admin-market-data.service.ts
- 67
+ 72
@@ -6949,7 +6985,7 @@
Błąd
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 757
+ 841
@@ -6993,7 +7029,7 @@
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 635
+ 753
apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html
@@ -7017,7 +7053,7 @@
apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html
- 112
+ 107
apps/client/src/app/pages/accounts/transfer-balance/transfer-balance-dialog.html
@@ -7045,7 +7081,7 @@
Zamknij
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 637
+ 755
apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html
@@ -7077,11 +7113,11 @@
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 244
+ 252
apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html
- 114
+ 109
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
@@ -7097,7 +7133,7 @@
Rola
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 44
+ 45
@@ -7201,7 +7237,7 @@
has been copied to the clipboard
apps/client/src/app/components/admin-overview/admin-overview.component.ts
- 223
+ 228
libs/ui/src/lib/value/value.component.ts
@@ -7328,6 +7364,14 @@
278
+
+ Shares Before
+ Shares Before
+
+ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
+ 597
+
+
cannot be used anonymously
nie może być używana anonimowo
@@ -7551,7 +7595,7 @@
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 133
+ 141
@@ -7623,7 +7667,7 @@
Zapisz
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 646
+ 764
apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html
@@ -7655,7 +7699,7 @@
apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html
- 123
+ 118
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
@@ -7739,7 +7783,7 @@
Leniwy
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 259
+ 292
@@ -7747,7 +7791,7 @@
Natychmiastowy
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 263
+ 296
@@ -7755,7 +7799,7 @@
Domyślna cena rynkowa
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 520
+ 638
@@ -7763,7 +7807,7 @@
Tryb
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 557
+ 675
@@ -7771,7 +7815,7 @@
Do you really want to convert the data source to ?
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 485
+ 525
@@ -7779,7 +7823,7 @@
Selektor
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 573
+ 691
@@ -7787,7 +7831,7 @@
Nagłówki żądań HTTP
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 533
+ 651
@@ -7795,7 +7839,7 @@
koniec dnia
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 259
+ 292
@@ -7803,7 +7847,7 @@
w czasie rzeczywistym
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 263
+ 296
@@ -8016,7 +8060,7 @@
( ) jest już w użyciu.
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 718
+ 801
@@ -8024,7 +8068,7 @@
Wystąpił błąd podczas aktualizacji do ( ).
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 721
+ 804
@@ -8177,7 +8221,7 @@
Konto użytkownika demonstracyjnego zostało zsynchronizowane.
apps/client/src/app/components/admin-overview/admin-overview.component.ts
- 323
+ 334
@@ -8185,7 +8229,7 @@
Synchronizuj konto użytkownika demonstracyjnego
apps/client/src/app/components/admin-overview/admin-overview.html
- 128
+ 131
@@ -8399,7 +8443,7 @@
Bieżący miesiąc
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 228
+ 260
@@ -9036,7 +9080,7 @@
Data rejestracji
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 56
+ 58
diff --git a/apps/client/src/locales/messages.pt.xlf b/apps/client/src/locales/messages.pt.xlf
index a89f05adb..c697ed603 100644
--- a/apps/client/src/locales/messages.pt.xlf
+++ b/apps/client/src/locales/messages.pt.xlf
@@ -50,7 +50,7 @@
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 166
+ 174
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
@@ -334,7 +334,7 @@
apps/client/src/app/components/admin-overview/admin-overview.html
- 235
+ 238
apps/client/src/app/components/admin-platform/admin-platform.component.html
@@ -344,6 +344,10 @@
apps/client/src/app/components/admin-tag/admin-tag.component.html
100
+
+ apps/client/src/app/components/admin-users/admin-users.html
+ 254
+
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
27
@@ -378,7 +382,7 @@
Paid
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts
- 129
+ 136
@@ -497,6 +501,14 @@
208
+
+ Splits
+ Splits
+
+ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
+ 512
+
+
View Stacktrace
Ver Stacktrace
@@ -532,6 +544,14 @@
Date
Data
+
+ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
+ 521
+
+
+ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
+ 560
+
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
156
@@ -578,7 +598,7 @@
Filtrar por...
apps/client/src/app/components/admin-market-data/admin-market-data.component.ts
- 365
+ 377
@@ -642,7 +662,7 @@
Subscription History
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 141
+ 149
@@ -662,7 +682,7 @@
Deseja realmente eliminar este cupão?
apps/client/src/app/components/admin-overview/admin-overview.component.ts
- 242
+ 247
@@ -670,7 +690,7 @@
Deseja realmente limpar a cache?
apps/client/src/app/components/admin-overview/admin-overview.component.ts
- 279
+ 290
@@ -678,7 +698,7 @@
Por favor, defina a sua mensagem do sistema:
apps/client/src/app/components/admin-overview/admin-overview.component.ts
- 299
+ 310
@@ -686,7 +706,7 @@
por Utilizador
apps/client/src/app/components/admin-overview/admin-overview.component.ts
- 178
+ 181
@@ -702,7 +722,7 @@
Mensagem de Sistema
apps/client/src/app/components/admin-overview/admin-overview.html
- 88
+ 89
@@ -710,7 +730,7 @@
Definir Mensagem
apps/client/src/app/components/admin-overview/admin-overview.html
- 110
+ 113
@@ -718,7 +738,7 @@
Modo Somente Leitura
apps/client/src/app/components/admin-overview/admin-overview.html
- 64
+ 63
@@ -726,15 +746,19 @@
Cupões
apps/client/src/app/components/admin-overview/admin-overview.html
- 148
+ 151
Add
Adicionar
+
+ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
+ 615
+
apps/client/src/app/components/admin-overview/admin-overview.html
- 298
+ 301
libs/ui/src/lib/account-balances/account-balances.component.html
@@ -746,7 +770,7 @@
Manutenção
apps/client/src/app/components/admin-overview/admin-overview.html
- 117
+ 120
@@ -754,7 +778,7 @@
Limpar Cache
apps/client/src/app/components/admin-overview/admin-overview.html
- 133
+ 136
@@ -798,7 +822,7 @@
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 124
+ 132
@@ -814,11 +838,11 @@
Could not validate form
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 641
+ 724
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 644
+ 727
@@ -929,6 +953,14 @@
64
+
+ Split Ratio
+ Split Ratio
+
+ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
+ 526
+
+
Fear
Medo
@@ -982,7 +1014,7 @@
Code
apps/client/src/app/components/admin-overview/admin-overview.html
- 159
+ 162
@@ -1246,7 +1278,7 @@
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 88
+ 96
@@ -1362,7 +1394,7 @@
AATD
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 232
+ 264
libs/ui/src/lib/assistant/assistant.component.ts
@@ -1374,7 +1406,7 @@
1A
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 236
+ 268
libs/ui/src/lib/assistant/assistant.component.ts
@@ -1394,7 +1426,7 @@
5A
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 240
+ 272
libs/ui/src/lib/assistant/assistant.component.ts
@@ -1414,7 +1446,7 @@
Máx
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 244
+ 276
libs/ui/src/lib/assistant/assistant.component.ts
@@ -1538,7 +1570,7 @@
Por favor, insira o seu código de cupão:
apps/client/src/app/components/user-account-membership/user-account-membership.component.ts
- 214
+ 203
@@ -1546,7 +1578,7 @@
Não foi possível resgatar o código de cupão
apps/client/src/app/components/user-account-membership/user-account-membership.component.ts
- 178
+ 181
@@ -1562,15 +1594,7 @@
Código de cupão foi resgatado
apps/client/src/app/components/user-account-membership/user-account-membership.component.ts
- 191
-
-
-
- Reload
- Atualizar
-
- apps/client/src/app/components/user-account-membership/user-account-membership.component.ts
- 192
+ 194
@@ -1578,7 +1602,7 @@
Deseja realmente remover este método de início de sessão?
apps/client/src/app/components/user-account-settings/user-account-settings.component.ts
- 318
+ 314
@@ -1638,7 +1662,7 @@
Coupon
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts
- 134
+ 141
@@ -1666,7 +1690,7 @@
Localidade
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 548
+ 666
apps/client/src/app/components/user-account-settings/user-account-settings.html
@@ -1834,7 +1858,7 @@
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 101
+ 109
apps/client/src/app/pages/accounts/accounts-page.html
@@ -1870,7 +1894,7 @@
ID da Conta
apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html
- 103
+ 98
@@ -2030,7 +2054,7 @@
Duration
apps/client/src/app/components/admin-overview/admin-overview.html
- 172
+ 175
@@ -2198,7 +2222,7 @@
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 110
+ 118
apps/client/src/app/pages/portfolio/activities/activities-page.html
@@ -2226,7 +2250,7 @@
Current week
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 224
+ 256
@@ -2366,7 +2390,7 @@
Price
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 176
+ 184
@@ -2374,7 +2398,7 @@
Do you really want to convert this asset profile to ( )?
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 723
+ 806
@@ -2474,16 +2498,12 @@
Trial
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts
- 133
+ 140
Exclude from Analysis
Excluir da Análise
-
- apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html
- 97
-
libs/ui/src/lib/i18n.ts
22
@@ -2734,11 +2754,11 @@
Creation
apps/client/src/app/components/admin-overview/admin-overview.html
- 185
+ 188
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 150
+ 158
@@ -3190,7 +3210,7 @@
Authentication
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 65
+ 67
@@ -3630,7 +3650,7 @@
No Activities
apps/client/src/app/components/admin-market-data/admin-market-data.component.ts
- 145
+ 148
@@ -3822,7 +3842,7 @@
Hourly
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 216
+ 248
@@ -3914,7 +3934,7 @@
Expiration
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 209
+ 217
@@ -3930,11 +3950,11 @@
Could not save asset profile
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 675
+ 758
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 678
+ 761
@@ -4105,14 +4125,6 @@
228
-
- Delete User
- Apagar Utilizador
-
- apps/client/src/app/components/admin-users/admin-users.html
- 254
-
-
By ETF Provider
Por Prestador de ETF
@@ -4142,7 +4154,7 @@
Current year
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 232
+ 264
@@ -4153,6 +4165,14 @@
10
+
+ Cache has been flushed.
+ Cache has been flushed.
+
+ apps/client/src/app/components/admin-overview/admin-overview.component.ts
+ 281
+
+
Url
Url
@@ -4162,7 +4182,7 @@
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 589
+ 707
apps/client/src/app/components/admin-platform/admin-platform.component.html
@@ -4178,7 +4198,7 @@
Asset profile has been saved
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 665
+ 748
@@ -4301,6 +4321,14 @@
118
+
+ Shares After
+ Shares After
+
+ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
+ 584
+
+
Frequently Asked Questions (FAQ)
Perguntas Frequentes (FAQ)
@@ -4562,7 +4590,7 @@
Total
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 160
+ 168
@@ -4570,7 +4598,7 @@
Configuração do raspador
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 510
+ 628
@@ -4638,7 +4666,7 @@
Coupon has been created
apps/client/src/app/components/admin-overview/admin-overview.component.ts
- 224
+ 229
@@ -4846,7 +4874,7 @@
ETFs sem países
apps/client/src/app/components/admin-market-data/admin-market-data.component.ts
- 135
+ 138
@@ -4854,7 +4882,7 @@
ETFs sem setores
apps/client/src/app/components/admin-market-data/admin-market-data.component.ts
- 140
+ 143
@@ -4862,7 +4890,7 @@
An error occurred while converting the data source to .
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 482
+ 522
@@ -5082,7 +5110,7 @@
Moedas
apps/client/src/app/components/admin-market-data/admin-market-data.component.ts
- 130
+ 133
apps/client/src/app/pages/public/public-page.html
@@ -5134,11 +5162,11 @@
Could not parse scraper configuration
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 589
+ 672
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 592
+ 675
@@ -5370,7 +5398,7 @@
Oops! Could not delete the asset profiles.
apps/client/src/app/components/admin-market-data/admin-market-data.service.ts
- 52
+ 56
@@ -5727,6 +5755,14 @@
369
+
+ Data gathering has been started.
+ Data gathering has been started.
+
+ apps/client/src/app/components/admin-market-data/admin-market-data.component.ts
+ 413
+
+
Global
Global
@@ -5936,7 +5972,7 @@
Associação
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 78
+ 82
libs/common/src/lib/routes/routes.ts
@@ -5976,11 +6012,11 @@
Você realmente deseja excluir este perfil de ativo?
apps/client/src/app/components/admin-market-data/admin-market-data.service.ts
- 28
+ 29
apps/client/src/app/components/admin-market-data/admin-market-data.service.ts
- 66
+ 71
@@ -6052,7 +6088,7 @@
Ops, a transferência do saldo em dinheiro falhou.
apps/client/src/app/pages/accounts/accounts-page.component.ts
- 358
+ 355
@@ -6100,7 +6136,7 @@
Você realmente deseja excluir esta mensagem do sistema?
apps/client/src/app/components/admin-overview/admin-overview.component.ts
- 255
+ 260
@@ -6168,7 +6204,7 @@
O preço de mercado atual é
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 766
+ 850
@@ -6176,7 +6212,7 @@
Teste
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 607
+ 725
@@ -6320,7 +6356,7 @@
WTD
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 224
+ 256
libs/ui/src/lib/assistant/assistant.component.ts
@@ -6340,7 +6376,7 @@
MTD
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 228
+ 260
libs/ui/src/lib/assistant/assistant.component.ts
@@ -6404,7 +6440,7 @@
ano
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 236
+ 268
apps/client/src/app/pages/resources/personal-finance-tools/product-page.html
@@ -6424,7 +6460,7 @@
anos
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 240
+ 272
libs/ui/src/lib/assistant/assistant.component.ts
@@ -6444,7 +6480,7 @@
Coleta de dados
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 630
+ 748
apps/client/src/app/components/admin-overview/admin-overview.html
@@ -6509,7 +6545,7 @@
Daily
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 212
+ 244
@@ -6705,7 +6741,7 @@
Ops! Ocorreu um erro ao configurar a autenticação biométrica.
apps/client/src/app/components/user-account-settings/user-account-settings.component.ts
- 367
+ 363
@@ -6721,7 +6757,7 @@
Referências
apps/client/src/app/components/admin-market-data/admin-market-data.component.ts
- 125
+ 128
@@ -6837,7 +6873,7 @@
Oops! Could not delete the asset profile.
apps/client/src/app/components/admin-market-data/admin-market-data.service.ts
- 51
+ 55
@@ -6941,7 +6977,7 @@
Do you really want to delete these asset profiles?
apps/client/src/app/components/admin-market-data/admin-market-data.service.ts
- 67
+ 72
@@ -6949,7 +6985,7 @@
Erro
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 757
+ 841
@@ -6993,7 +7029,7 @@
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 635
+ 753
apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html
@@ -7017,7 +7053,7 @@
apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html
- 112
+ 107
apps/client/src/app/pages/accounts/transfer-balance/transfer-balance-dialog.html
@@ -7045,7 +7081,7 @@
Fechar
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 637
+ 755
apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html
@@ -7077,11 +7113,11 @@
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 244
+ 252
apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html
- 114
+ 109
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
@@ -7097,7 +7133,7 @@
Role
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 44
+ 45
@@ -7201,7 +7237,7 @@
has been copied to the clipboard
apps/client/src/app/components/admin-overview/admin-overview.component.ts
- 223
+ 228
libs/ui/src/lib/value/value.component.ts
@@ -7328,6 +7364,14 @@
278
+
+ Shares Before
+ Shares Before
+
+ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
+ 597
+
+
cannot be used anonymously
não pode ser usado anonimamente
@@ -7551,7 +7595,7 @@
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 133
+ 141
@@ -7623,7 +7667,7 @@
Guardar
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 646
+ 764
apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html
@@ -7655,7 +7699,7 @@
apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html
- 123
+ 118
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
@@ -7739,7 +7783,7 @@
Lazy
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 259
+ 292
@@ -7747,7 +7791,7 @@
Instant
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 263
+ 296
@@ -7755,7 +7799,7 @@
Preço de mercado padrão
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 520
+ 638
@@ -7763,7 +7807,7 @@
Mode
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 557
+ 675
@@ -7771,7 +7815,7 @@
Do you really want to convert the data source to ?
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 485
+ 525
@@ -7779,7 +7823,7 @@
Selector
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 573
+ 691
@@ -7787,7 +7831,7 @@
HTTP Request Headers
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 533
+ 651
@@ -7795,7 +7839,7 @@
end of day
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 259
+ 292
@@ -7803,7 +7847,7 @@
real-time
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 263
+ 296
@@ -8016,7 +8060,7 @@
( ) is already in use.
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 718
+ 801
@@ -8024,7 +8068,7 @@
An error occurred while updating to ( ).
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 721
+ 804
@@ -8177,7 +8221,7 @@
Demo user account has been synced.
apps/client/src/app/components/admin-overview/admin-overview.component.ts
- 323
+ 334
@@ -8185,7 +8229,7 @@
Sync Demo User Account
apps/client/src/app/components/admin-overview/admin-overview.html
- 128
+ 131
@@ -8399,7 +8443,7 @@
Current month
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 228
+ 260
@@ -9036,7 +9080,7 @@
Registration Date
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 56
+ 58
diff --git a/apps/client/src/locales/messages.tr.xlf b/apps/client/src/locales/messages.tr.xlf
index dce74dcfa..84863a774 100644
--- a/apps/client/src/locales/messages.tr.xlf
+++ b/apps/client/src/locales/messages.tr.xlf
@@ -231,7 +231,7 @@
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 166
+ 174
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
@@ -515,7 +515,7 @@
apps/client/src/app/components/admin-overview/admin-overview.html
- 235
+ 238
apps/client/src/app/components/admin-platform/admin-platform.component.html
@@ -525,6 +525,10 @@
apps/client/src/app/components/admin-tag/admin-tag.component.html
100
+
+ apps/client/src/app/components/admin-users/admin-users.html
+ 254
+
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
27
@@ -559,7 +563,7 @@
Paid
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts
- 129
+ 136
@@ -678,6 +682,14 @@
208
+
+ Splits
+ Splits
+
+ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
+ 512
+
+
View Stacktrace
Hata İzini Görüntüle
@@ -713,6 +725,14 @@
Date
Tarih
+
+ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
+ 521
+
+
+ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
+ 560
+
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
156
@@ -759,7 +779,7 @@
Para Birimleri
apps/client/src/app/components/admin-market-data/admin-market-data.component.ts
- 130
+ 133
apps/client/src/app/pages/public/public-page.html
@@ -779,7 +799,7 @@
Ülkesi Olmayan ETF’ler
apps/client/src/app/components/admin-market-data/admin-market-data.component.ts
- 135
+ 138
@@ -787,7 +807,7 @@
Sektörü Olmayan ETF’ler
apps/client/src/app/components/admin-market-data/admin-market-data.component.ts
- 140
+ 143
@@ -795,7 +815,7 @@
An error occurred while converting the data source to .
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 482
+ 522
@@ -803,7 +823,7 @@
Filtrele...
apps/client/src/app/components/admin-market-data/admin-market-data.component.ts
- 365
+ 377
@@ -875,7 +895,7 @@
Subscription History
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 141
+ 149
@@ -943,7 +963,7 @@
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 88
+ 96
@@ -1019,7 +1039,7 @@
Total
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 160
+ 168
@@ -1027,7 +1047,7 @@
Veri Toplayıcı Yapılandırması
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 510
+ 628
@@ -1095,7 +1115,7 @@
Bu kuponu gerçekten silmek istiyor musunuz?
apps/client/src/app/components/admin-overview/admin-overview.component.ts
- 242
+ 247
@@ -1103,7 +1123,7 @@
Önbelleği temizlemeyi gerçekten istiyor musunuz?
apps/client/src/app/components/admin-overview/admin-overview.component.ts
- 279
+ 290
@@ -1111,7 +1131,7 @@
Lütfen sistem mesajınızı belirleyin:
apps/client/src/app/components/admin-overview/admin-overview.component.ts
- 299
+ 310
@@ -1119,7 +1139,7 @@
Kullanıcı başına
apps/client/src/app/components/admin-overview/admin-overview.component.ts
- 178
+ 181
@@ -1159,7 +1179,7 @@
Salt okunur mod
apps/client/src/app/components/admin-overview/admin-overview.html
- 64
+ 63
@@ -1167,7 +1187,7 @@
Sistem Mesajı
apps/client/src/app/components/admin-overview/admin-overview.html
- 88
+ 89
@@ -1175,7 +1195,7 @@
Mesaj Belirle
apps/client/src/app/components/admin-overview/admin-overview.html
- 110
+ 113
@@ -1183,15 +1203,19 @@
Kupon
apps/client/src/app/components/admin-overview/admin-overview.html
- 148
+ 151
Add
Ekle
+
+ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
+ 615
+
apps/client/src/app/components/admin-overview/admin-overview.html
- 298
+ 301
libs/ui/src/lib/account-balances/account-balances.component.html
@@ -1203,7 +1227,7 @@
Genel Ayarlar
apps/client/src/app/components/admin-overview/admin-overview.html
- 117
+ 120
@@ -1211,7 +1235,7 @@
Önbelleği temizle
apps/client/src/app/components/admin-overview/admin-overview.html
- 133
+ 136
@@ -1231,7 +1255,7 @@
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 589
+ 707
apps/client/src/app/components/admin-platform/admin-platform.component.html
@@ -1247,7 +1271,7 @@
Asset profile has been saved
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 665
+ 748
@@ -1279,7 +1303,7 @@
Current year
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 232
+ 264
@@ -1290,6 +1314,14 @@
10
+
+ Cache has been flushed.
+ Cache has been flushed.
+
+ apps/client/src/app/components/admin-overview/admin-overview.component.ts
+ 281
+
+
Platforms
Platformlar
@@ -1339,7 +1371,7 @@
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 124
+ 132
@@ -1358,24 +1390,16 @@
228
-
- Delete User
- Kullanıcıyı Sil
-
- apps/client/src/app/components/admin-users/admin-users.html
- 254
-
-
Could not validate form
Could not validate form
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 641
+ 724
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 644
+ 727
@@ -1494,6 +1518,14 @@
64
+
+ Split Ratio
+ Split Ratio
+
+ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
+ 526
+
+
Fear
Korku
@@ -1611,7 +1643,7 @@
Current week
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 224
+ 256
@@ -1639,7 +1671,7 @@
Code
apps/client/src/app/components/admin-overview/admin-overview.html
- 159
+ 162
@@ -2083,7 +2115,7 @@
YTD
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 232
+ 264
libs/ui/src/lib/assistant/assistant.component.ts
@@ -2095,7 +2127,7 @@
1Y
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 236
+ 268
libs/ui/src/lib/assistant/assistant.component.ts
@@ -2115,7 +2147,7 @@
5Y
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 240
+ 272
libs/ui/src/lib/assistant/assistant.component.ts
@@ -2135,7 +2167,7 @@
Maks.
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 244
+ 276
libs/ui/src/lib/assistant/assistant.component.ts
@@ -2323,7 +2355,7 @@
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 101
+ 109
apps/client/src/app/pages/accounts/accounts-page.html
@@ -2359,7 +2391,7 @@
Hesap Kimliği
apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html
- 103
+ 98
@@ -2583,11 +2615,11 @@
Could not parse scraper configuration
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 589
+ 672
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 592
+ 675
@@ -2619,7 +2651,7 @@
Duration
apps/client/src/app/components/admin-overview/admin-overview.html
- 172
+ 175
@@ -2831,11 +2863,11 @@
Creation
apps/client/src/app/components/admin-overview/admin-overview.html
- 185
+ 188
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 150
+ 158
@@ -3175,7 +3207,7 @@
Oops! Could not delete the asset profiles.
apps/client/src/app/components/admin-market-data/admin-market-data.service.ts
- 52
+ 56
@@ -3363,7 +3395,7 @@
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 110
+ 118
apps/client/src/app/pages/portfolio/activities/activities-page.html
@@ -3558,6 +3590,14 @@
118
+
+ Shares After
+ Shares After
+
+ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
+ 584
+
+
Back
Geri
@@ -3575,7 +3615,7 @@
Price
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 176
+ 184
@@ -3583,7 +3623,7 @@
Do you really want to convert this asset profile to ( )?
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 723
+ 806
@@ -3699,16 +3739,12 @@
Trial
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts
- 133
+ 140
Exclude from Analysis
Exclude from Analysis
-
- apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html
- 97
-
libs/ui/src/lib/i18n.ts
22
@@ -3999,7 +4035,7 @@
Hourly
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 216
+ 248
@@ -4111,7 +4147,7 @@
Expiration
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 209
+ 217
@@ -4151,11 +4187,11 @@
Could not save asset profile
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 675
+ 758
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 678
+ 761
@@ -4376,7 +4412,7 @@
Coupon has been created
apps/client/src/app/components/admin-overview/admin-overview.component.ts
- 224
+ 229
@@ -4539,6 +4575,14 @@
373
+
+ Data gathering has been started.
+ Data gathering has been started.
+
+ apps/client/src/app/components/admin-market-data/admin-market-data.component.ts
+ 413
+
+
Global
Küresel
@@ -4632,7 +4676,7 @@
Lütfen kupon kodunuzu girin:
apps/client/src/app/components/user-account-membership/user-account-membership.component.ts
- 214
+ 203
@@ -4640,7 +4684,7 @@
Kupon kodu kullanılamadı
apps/client/src/app/components/user-account-membership/user-account-membership.component.ts
- 178
+ 181
@@ -4656,15 +4700,7 @@
Kupon kodu kullanıldı
apps/client/src/app/components/user-account-membership/user-account-membership.component.ts
- 191
-
-
-
- Reload
- Yeniden Yükle
-
- apps/client/src/app/components/user-account-membership/user-account-membership.component.ts
- 192
+ 194
@@ -4672,7 +4708,7 @@
Bu giriş yöntemini kaldırmayı gerçekten istiyor musunuz?
apps/client/src/app/components/user-account-settings/user-account-settings.component.ts
- 318
+ 314
@@ -4752,7 +4788,7 @@
Coupon
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts
- 134
+ 141
@@ -4768,7 +4804,7 @@
Yerel Ayarlar
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 548
+ 666
apps/client/src/app/components/user-account-settings/user-account-settings.html
@@ -5356,7 +5392,7 @@
No Activities
apps/client/src/app/components/admin-market-data/admin-market-data.component.ts
- 145
+ 148
@@ -5564,7 +5600,7 @@
Authentication
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 65
+ 67
@@ -5936,7 +5972,7 @@
Üyelik
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 78
+ 82
libs/common/src/lib/routes/routes.ts
@@ -5976,11 +6012,11 @@
Bu varlık profilini silmeyi gerçekten istiyor musunuz?
apps/client/src/app/components/admin-market-data/admin-market-data.service.ts
- 28
+ 29
apps/client/src/app/components/admin-market-data/admin-market-data.service.ts
- 66
+ 71
@@ -6052,7 +6088,7 @@
Hay Allah, Nakit bakiyesi tranferi başarısız oldu.
apps/client/src/app/pages/accounts/accounts-page.component.ts
- 358
+ 355
@@ -6100,7 +6136,7 @@
Bu sistem mesajını silmeyi gerçekten istiyor musunuz?
apps/client/src/app/components/admin-overview/admin-overview.component.ts
- 255
+ 260
@@ -6168,7 +6204,7 @@
Şu anki piyasa fiyatı
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 766
+ 850
@@ -6176,7 +6212,7 @@
Test
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 607
+ 725
@@ -6320,7 +6356,7 @@
WTD
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 224
+ 256
libs/ui/src/lib/assistant/assistant.component.ts
@@ -6340,7 +6376,7 @@
MTD
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 228
+ 260
libs/ui/src/lib/assistant/assistant.component.ts
@@ -6404,7 +6440,7 @@
Yıl
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 236
+ 268
apps/client/src/app/pages/resources/personal-finance-tools/product-page.html
@@ -6424,7 +6460,7 @@
Yıllar
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 240
+ 272
libs/ui/src/lib/assistant/assistant.component.ts
@@ -6444,7 +6480,7 @@
Veri Toplama
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 630
+ 748
apps/client/src/app/components/admin-overview/admin-overview.html
@@ -6509,7 +6545,7 @@
Daily
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 212
+ 244
@@ -6705,7 +6741,7 @@
Oops! Biyometrik kimlik doğrulama ayarlanırken bir hata oluştu.
apps/client/src/app/components/user-account-settings/user-account-settings.component.ts
- 367
+ 363
@@ -6721,7 +6757,7 @@
Kıyaslamalar
apps/client/src/app/components/admin-market-data/admin-market-data.component.ts
- 125
+ 128
@@ -6837,7 +6873,7 @@
Oops! Could not delete the asset profile.
apps/client/src/app/components/admin-market-data/admin-market-data.service.ts
- 51
+ 55
@@ -6941,7 +6977,7 @@
Do you really want to delete these asset profiles?
apps/client/src/app/components/admin-market-data/admin-market-data.service.ts
- 67
+ 72
@@ -6949,7 +6985,7 @@
Hata
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 757
+ 841
@@ -6993,7 +7029,7 @@
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 635
+ 753
apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html
@@ -7017,7 +7053,7 @@
apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html
- 112
+ 107
apps/client/src/app/pages/accounts/transfer-balance/transfer-balance-dialog.html
@@ -7045,7 +7081,7 @@
Kapat
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 637
+ 755
apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html
@@ -7077,11 +7113,11 @@
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 244
+ 252
apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html
- 114
+ 109
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
@@ -7097,7 +7133,7 @@
Role
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 44
+ 45
@@ -7201,7 +7237,7 @@
has been copied to the clipboard
apps/client/src/app/components/admin-overview/admin-overview.component.ts
- 223
+ 228
libs/ui/src/lib/value/value.component.ts
@@ -7328,6 +7364,14 @@
278
+
+ Shares Before
+ Shares Before
+
+ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
+ 597
+
+
cannot be used anonymously
gizli kullanımda kullanılmaz
@@ -7551,7 +7595,7 @@
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 133
+ 141
@@ -7623,7 +7667,7 @@
Kaydet
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 646
+ 764
apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html
@@ -7655,7 +7699,7 @@
apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html
- 123
+ 118
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
@@ -7739,7 +7783,7 @@
Tembel
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 259
+ 292
@@ -7747,7 +7791,7 @@
Anında
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 263
+ 296
@@ -7755,7 +7799,7 @@
Varsayılan Piyasa Fiyatı
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 520
+ 638
@@ -7763,7 +7807,7 @@
Mod
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 557
+ 675
@@ -7771,7 +7815,7 @@
Do you really want to convert the data source to ?
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 485
+ 525
@@ -7779,7 +7823,7 @@
Seçici
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 573
+ 691
@@ -7787,7 +7831,7 @@
HTTP İstek Başlıkları
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 533
+ 651
@@ -7795,7 +7839,7 @@
gün sonu
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 259
+ 292
@@ -7803,7 +7847,7 @@
gerçek zamanlı
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 263
+ 296
@@ -8016,7 +8060,7 @@
( ) is already in use.
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 718
+ 801
@@ -8024,7 +8068,7 @@
Güncelleştirilirken bir hata oluştu ( ).
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 721
+ 804
@@ -8177,7 +8221,7 @@
Demo kullanıcı hesabı senkronize edildi.
apps/client/src/app/components/admin-overview/admin-overview.component.ts
- 323
+ 334
@@ -8185,7 +8229,7 @@
Demo Kullanıcı Hesabını Senkronize Et
apps/client/src/app/components/admin-overview/admin-overview.html
- 128
+ 131
@@ -8399,7 +8443,7 @@
Current month
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 228
+ 260
@@ -9036,7 +9080,7 @@
Registration Date
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 56
+ 58
diff --git a/apps/client/src/locales/messages.uk.xlf b/apps/client/src/locales/messages.uk.xlf
index be6b41b0f..78284be35 100644
--- a/apps/client/src/locales/messages.uk.xlf
+++ b/apps/client/src/locales/messages.uk.xlf
@@ -659,7 +659,7 @@
apps/client/src/app/components/admin-overview/admin-overview.html
- 235
+ 238
apps/client/src/app/components/admin-platform/admin-platform.component.html
@@ -669,6 +669,10 @@
apps/client/src/app/components/admin-tag/admin-tag.component.html
100
+
+ apps/client/src/app/components/admin-users/admin-users.html
+ 254
+
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
27
@@ -703,7 +707,7 @@
Платний
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts
- 129
+ 136
@@ -719,7 +723,7 @@
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 166
+ 174
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
@@ -862,6 +866,14 @@
208
+
+ Splits
+ Splits
+
+ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
+ 512
+
+
View Stacktrace
Переглянути трасування
@@ -891,7 +903,7 @@
Порівняльні показники
apps/client/src/app/components/admin-market-data/admin-market-data.component.ts
- 125
+ 128
@@ -899,7 +911,7 @@
Валюти
apps/client/src/app/components/admin-market-data/admin-market-data.component.ts
- 130
+ 133
apps/client/src/app/pages/public/public-page.html
@@ -919,7 +931,7 @@
ETF без країн
apps/client/src/app/components/admin-market-data/admin-market-data.component.ts
- 135
+ 138
@@ -927,7 +939,7 @@
ETF без секторів
apps/client/src/app/components/admin-market-data/admin-market-data.component.ts
- 140
+ 143
@@ -935,7 +947,7 @@
Під час конвертації джерела даних на сталася помилка.
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 482
+ 522
@@ -943,7 +955,7 @@
Фільтрувати за...
apps/client/src/app/components/admin-market-data/admin-market-data.component.ts
- 365
+ 377
@@ -1039,7 +1051,7 @@
Історія підписок
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 141
+ 149
@@ -1067,11 +1079,11 @@
Ви дійсно хочете видалити цей профіль активу?
apps/client/src/app/components/admin-market-data/admin-market-data.service.ts
- 28
+ 29
apps/client/src/app/components/admin-market-data/admin-market-data.service.ts
- 66
+ 71
@@ -1079,7 +1091,7 @@
Ви справді хочете видалити ці профілі активів?
apps/client/src/app/components/admin-market-data/admin-market-data.service.ts
- 67
+ 72
@@ -1087,7 +1099,7 @@
Помилка
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 757
+ 841
@@ -1095,7 +1107,7 @@
Поточна ринкова ціна
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 766
+ 850
@@ -1143,7 +1155,7 @@
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 88
+ 96
@@ -1219,7 +1231,7 @@
Усього
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 160
+ 168
@@ -1227,7 +1239,7 @@
Конфігурація скребка
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 510
+ 628
@@ -1235,7 +1247,7 @@
Тест
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 607
+ 725
@@ -1247,7 +1259,7 @@
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 589
+ 707
apps/client/src/app/components/admin-platform/admin-platform.component.html
@@ -1263,7 +1275,7 @@
Профіль активу було збережено
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 665
+ 748
@@ -1371,7 +1383,7 @@
Ви дійсно хочете видалити цей купон?
apps/client/src/app/components/admin-overview/admin-overview.component.ts
- 242
+ 247
@@ -1379,7 +1391,7 @@
Ви дійсно хочете видалити це системне повідомлення?
apps/client/src/app/components/admin-overview/admin-overview.component.ts
- 255
+ 260
@@ -1387,7 +1399,7 @@
Ви дійсно хочете очистити кеш?
apps/client/src/app/components/admin-overview/admin-overview.component.ts
- 279
+ 290
@@ -1395,7 +1407,7 @@
Будь ласка, встановіть ваше системне повідомлення:
apps/client/src/app/components/admin-overview/admin-overview.component.ts
- 299
+ 310
@@ -1411,7 +1423,7 @@
на користувача
apps/client/src/app/components/admin-overview/admin-overview.component.ts
- 178
+ 181
@@ -1427,7 +1439,7 @@
Режим лише для читання
apps/client/src/app/components/admin-overview/admin-overview.html
- 64
+ 63
@@ -1435,7 +1447,7 @@
Збір даних
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 630
+ 748
apps/client/src/app/components/admin-overview/admin-overview.html
@@ -1455,7 +1467,7 @@
Системне повідомлення
apps/client/src/app/components/admin-overview/admin-overview.html
- 88
+ 89
@@ -1463,7 +1475,7 @@
Встановити повідомлення
apps/client/src/app/components/admin-overview/admin-overview.html
- 110
+ 113
@@ -1471,15 +1483,19 @@
Купони
apps/client/src/app/components/admin-overview/admin-overview.html
- 148
+ 151
Add
Додати
+
+ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
+ 615
+
apps/client/src/app/components/admin-overview/admin-overview.html
- 298
+ 301
libs/ui/src/lib/account-balances/account-balances.component.html
@@ -1491,7 +1507,7 @@
Прибирання
apps/client/src/app/components/admin-overview/admin-overview.html
- 117
+ 120
@@ -1499,7 +1515,7 @@
Очистити кеш
apps/client/src/app/components/admin-overview/admin-overview.html
- 133
+ 136
@@ -1539,7 +1555,7 @@
Поточний рік
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 232
+ 264
@@ -1550,6 +1566,14 @@
10
+
+ Cache has been flushed.
+ Cache has been flushed.
+
+ apps/client/src/app/components/admin-overview/admin-overview.component.ts
+ 281
+
+
Data Providers
Постачальники даних
@@ -1763,7 +1787,7 @@
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 124
+ 132
@@ -1775,7 +1799,7 @@
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 133
+ 141
@@ -1794,24 +1818,16 @@
228
-
- Delete User
- Видалити користувача
-
- apps/client/src/app/components/admin-users/admin-users.html
- 254
-
-
Could not validate form
Не вдалося перевірити форму
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 641
+ 724
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 644
+ 727
@@ -2086,6 +2102,14 @@
64
+
+ Split Ratio
+ Split Ratio
+
+ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
+ 526
+
+
Fear
Страх
@@ -2203,7 +2227,7 @@
Поточний тиждень
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 224
+ 256
@@ -2231,7 +2255,7 @@
Код
apps/client/src/app/components/admin-overview/admin-overview.html
- 159
+ 162
@@ -2415,7 +2439,7 @@
Зберегти
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 646
+ 764
apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html
@@ -2447,7 +2471,7 @@
apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html
- 123
+ 118
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
@@ -2703,7 +2727,7 @@
З початку року
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 232
+ 264
libs/ui/src/lib/assistant/assistant.component.ts
@@ -2715,7 +2739,7 @@
1 рік
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 236
+ 268
libs/ui/src/lib/assistant/assistant.component.ts
@@ -2735,7 +2759,7 @@
5 років
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 240
+ 272
libs/ui/src/lib/assistant/assistant.component.ts
@@ -2755,7 +2779,7 @@
Максимум
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 244
+ 276
libs/ui/src/lib/assistant/assistant.component.ts
@@ -2907,7 +2931,7 @@
Не вдалося обміняти код купона
apps/client/src/app/components/user-account-membership/user-account-membership.component.ts
- 178
+ 181
@@ -2923,15 +2947,7 @@
Код купона був обміняний
apps/client/src/app/components/user-account-membership/user-account-membership.component.ts
- 191
-
-
-
- Reload
- Перезавантажити
-
- apps/client/src/app/components/user-account-membership/user-account-membership.component.ts
- 192
+ 194
@@ -2939,7 +2955,7 @@
Будь ласка, введіть ваш код купона.
apps/client/src/app/components/user-account-membership/user-account-membership.component.ts
- 214
+ 203
@@ -3003,7 +3019,7 @@
Ви дійсно хочете вилучити цей спосіб входу?
apps/client/src/app/components/user-account-settings/user-account-settings.component.ts
- 318
+ 314
@@ -3027,7 +3043,7 @@
Упс! Виникла помилка під час налаштування біометричної автентифікації.
apps/client/src/app/components/user-account-settings/user-account-settings.component.ts
- 367
+ 363
@@ -3067,7 +3083,7 @@
Купон
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts
- 134
+ 141
@@ -3091,7 +3107,7 @@
Локалізація
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 548
+ 666
apps/client/src/app/components/user-account-settings/user-account-settings.html
@@ -3283,7 +3299,7 @@
Щодня
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 212
+ 244
@@ -3427,7 +3443,7 @@
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 101
+ 109
apps/client/src/app/pages/accounts/accounts-page.html
@@ -3447,7 +3463,7 @@
Упс, перенесення балансу готівки не вдалося.
apps/client/src/app/pages/accounts/accounts-page.component.ts
- 358
+ 355
@@ -3471,7 +3487,7 @@
Ідентифікатор облікового запису
apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html
- 103
+ 98
@@ -3739,11 +3755,11 @@
Не вдалося розібрати конфігурацію скрапера
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 589
+ 672
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 592
+ 675
@@ -3775,7 +3791,7 @@
Тривалість
apps/client/src/app/components/admin-overview/admin-overview.html
- 172
+ 175
@@ -3992,11 +4008,11 @@
Створення
apps/client/src/app/components/admin-overview/admin-overview.html
- 185
+ 188
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 150
+ 158
@@ -4368,7 +4384,7 @@
Упс! Не вдалося видалити профілі активів.
apps/client/src/app/components/admin-market-data/admin-market-data.service.ts
- 52
+ 56
@@ -4624,7 +4640,7 @@
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 110
+ 118
apps/client/src/app/pages/portfolio/activities/activities-page.html
@@ -4718,6 +4734,14 @@
Date
Дата
+
+ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
+ 521
+
+
+ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
+ 560
+
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
156
@@ -4879,6 +4903,14 @@
118
+
+ Shares After
+ Shares After
+
+ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
+ 584
+
+
Back
Назад
@@ -4896,7 +4928,7 @@
Ціна
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 176
+ 184
@@ -4904,7 +4936,7 @@
Ви дійсно бажаєте конвертувати цей профіль активу в ( )?
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 723
+ 806
@@ -5020,16 +5052,12 @@
Пробний період
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts
- 133
+ 140
Exclude from Analysis
Виключити з аналізу
-
- apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html
- 97
-
libs/ui/src/lib/i18n.ts
22
@@ -5420,7 +5448,7 @@
Щогодини
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 216
+ 248
@@ -5532,7 +5560,7 @@
Термін дії
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 209
+ 217
@@ -5556,11 +5584,11 @@
Не вдалося зберегти профіль активу
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 675
+ 758
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 678
+ 761
@@ -5592,7 +5620,7 @@
скопійовано в буфер обміну
apps/client/src/app/components/admin-overview/admin-overview.component.ts
- 223
+ 228
libs/ui/src/lib/value/value.component.ts
@@ -5794,6 +5822,14 @@
43
+
+ Data gathering has been started.
+ Data gathering has been started.
+
+ apps/client/src/app/components/admin-market-data/admin-market-data.component.ts
+ 413
+
+
Global
Глобальний
@@ -5895,7 +5931,7 @@
От халепа! Не вдалося видалити профіль активу.
apps/client/src/app/components/admin-market-data/admin-market-data.service.ts
- 51
+ 55
@@ -6071,7 +6107,7 @@
Купон створено
apps/client/src/app/components/admin-overview/admin-overview.component.ts
- 224
+ 229
@@ -6266,6 +6302,14 @@
278
+
+ Shares Before
+ Shares Before
+
+ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
+ 597
+
+
cannot be used anonymously
не може використовуватися анонімно
@@ -6415,7 +6459,7 @@
Членство
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 78
+ 82
libs/common/src/lib/routes/routes.ts
@@ -6567,7 +6611,7 @@
WTD
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 224
+ 256
libs/ui/src/lib/assistant/assistant.component.ts
@@ -6587,7 +6631,7 @@
MTD
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 228
+ 260
libs/ui/src/lib/assistant/assistant.component.ts
@@ -6615,7 +6659,7 @@
рік
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 236
+ 268
apps/client/src/app/pages/resources/personal-finance-tools/product-page.html
@@ -6635,7 +6679,7 @@
роки
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 240
+ 272
libs/ui/src/lib/assistant/assistant.component.ts
@@ -6991,7 +7035,7 @@
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 635
+ 753
apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html
@@ -7015,7 +7059,7 @@
apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html
- 112
+ 107
apps/client/src/app/pages/accounts/transfer-balance/transfer-balance-dialog.html
@@ -7051,7 +7095,7 @@
Закрити
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 637
+ 755
apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html
@@ -7083,11 +7127,11 @@
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 244
+ 252
apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html
- 114
+ 109
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
@@ -7231,7 +7275,7 @@
No Activities
apps/client/src/app/components/admin-market-data/admin-market-data.component.ts
- 145
+ 148
@@ -7339,7 +7383,7 @@
Роль
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 44
+ 45
@@ -7479,7 +7523,7 @@
Автентифікація
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 65
+ 67
@@ -7739,7 +7783,7 @@
Лінивий
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 259
+ 292
@@ -7747,7 +7791,7 @@
Миттєвий
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 263
+ 296
@@ -7755,7 +7799,7 @@
Стандартна ринкова ціна
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 520
+ 638
@@ -7763,7 +7807,7 @@
Режим
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 557
+ 675
@@ -7771,7 +7815,7 @@
Ви дійсно бажаєте конвертувати джерело даних на ?
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 485
+ 525
@@ -7779,7 +7823,7 @@
Селектор
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 573
+ 691
@@ -7787,7 +7831,7 @@
Заголовки HTTP-запиту
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 533
+ 651
@@ -7795,7 +7839,7 @@
кінець дня
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 259
+ 292
@@ -7803,7 +7847,7 @@
реальний час
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 263
+ 296
@@ -8016,7 +8060,7 @@
( ) вже використовується.
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 718
+ 801
@@ -8024,7 +8068,7 @@
Під час оновлення до ( ) сталася помилка.
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 721
+ 804
@@ -8177,7 +8221,7 @@
Обліковий запис демо-користувача синхронізовано.
apps/client/src/app/components/admin-overview/admin-overview.component.ts
- 323
+ 334
@@ -8185,7 +8229,7 @@
Синхронізувати обліковий запис демо-користувача
apps/client/src/app/components/admin-overview/admin-overview.html
- 128
+ 131
@@ -8399,7 +8443,7 @@
Поточний місяць
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 228
+ 260
@@ -9036,7 +9080,7 @@
Дата реєстрації
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 56
+ 58
diff --git a/apps/client/src/locales/messages.xlf b/apps/client/src/locales/messages.xlf
index c0297b1fa..c674ae6fd 100644
--- a/apps/client/src/locales/messages.xlf
+++ b/apps/client/src/locales/messages.xlf
@@ -243,7 +243,7 @@
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 166
+ 174
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
@@ -532,7 +532,7 @@
apps/client/src/app/components/admin-overview/admin-overview.html
- 235
+ 238
apps/client/src/app/components/admin-platform/admin-platform.component.html
@@ -542,6 +542,10 @@
apps/client/src/app/components/admin-tag/admin-tag.component.html
100
+
+ apps/client/src/app/components/admin-users/admin-users.html
+ 254
+
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
27
@@ -574,7 +578,7 @@
Paid
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts
- 129
+ 136
@@ -678,6 +682,13 @@
208
+
+ Splits
+
+ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
+ 512
+
+
View Stacktrace
@@ -708,6 +719,14 @@
Date
+
+ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
+ 521
+
+
+ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
+ 560
+
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
156
@@ -751,7 +770,7 @@
Currencies
apps/client/src/app/components/admin-market-data/admin-market-data.component.ts
- 130
+ 133
apps/client/src/app/pages/public/public-page.html
@@ -769,39 +788,39 @@
ETFs without Countries
apps/client/src/app/components/admin-market-data/admin-market-data.component.ts
- 135
+ 138
ETFs without Sectors
apps/client/src/app/components/admin-market-data/admin-market-data.component.ts
- 140
+ 143
An error occurred while converting the data source to .
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 482
+ 522
Do you really want to delete this asset profile?
apps/client/src/app/components/admin-market-data/admin-market-data.service.ts
- 28
+ 29
apps/client/src/app/components/admin-market-data/admin-market-data.service.ts
- 66
+ 71
Filter by...
apps/client/src/app/components/admin-market-data/admin-market-data.component.ts
- 365
+ 377
@@ -866,7 +885,7 @@
Subscription History
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 141
+ 149
@@ -978,7 +997,7 @@
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 88
+ 96
@@ -1047,14 +1066,14 @@
Total
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 160
+ 168
Scraper Configuration
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 510
+ 628
@@ -1138,28 +1157,28 @@
Do you really want to delete this coupon?
apps/client/src/app/components/admin-overview/admin-overview.component.ts
- 242
+ 247
Do you really want to delete this system message?
apps/client/src/app/components/admin-overview/admin-overview.component.ts
- 255
+ 260
Do you really want to flush the cache?
apps/client/src/app/components/admin-overview/admin-overview.component.ts
- 279
+ 290
Please set your system message:
apps/client/src/app/components/admin-overview/admin-overview.component.ts
- 299
+ 310
@@ -1173,7 +1192,7 @@
per User
apps/client/src/app/components/admin-overview/admin-overview.component.ts
- 178
+ 181
@@ -1194,35 +1213,39 @@
Read-only Mode
apps/client/src/app/components/admin-overview/admin-overview.html
- 64
+ 63
System Message
apps/client/src/app/components/admin-overview/admin-overview.html
- 88
+ 89
Set Message
apps/client/src/app/components/admin-overview/admin-overview.html
- 110
+ 113
Coupons
apps/client/src/app/components/admin-overview/admin-overview.html
- 148
+ 151
Add
+
+ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
+ 615
+
apps/client/src/app/components/admin-overview/admin-overview.html
- 298
+ 301
libs/ui/src/lib/account-balances/account-balances.component.html
@@ -1233,14 +1256,14 @@
Housekeeping
apps/client/src/app/components/admin-overview/admin-overview.html
- 117
+ 120
Flush Cache
apps/client/src/app/components/admin-overview/admin-overview.html
- 133
+ 136
@@ -1258,7 +1281,7 @@
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 589
+ 707
apps/client/src/app/components/admin-platform/admin-platform.component.html
@@ -1273,7 +1296,7 @@
Asset profile has been saved
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 665
+ 748
@@ -1301,7 +1324,7 @@
Current year
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 232
+ 264
@@ -1311,6 +1334,13 @@
10
+
+ Cache has been flushed.
+
+ apps/client/src/app/components/admin-overview/admin-overview.component.ts
+ 281
+
+
Platforms
@@ -1398,7 +1428,7 @@
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 124
+ 132
@@ -1415,22 +1445,15 @@
228
-
- Delete User
-
- apps/client/src/app/components/admin-users/admin-users.html
- 254
-
-
Could not validate form
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 641
+ 724
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 644
+ 727
@@ -1540,6 +1563,13 @@
64
+
+ Split Ratio
+
+ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
+ 526
+
+
Fear
@@ -1643,7 +1673,7 @@
Current week
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 224
+ 256
@@ -1668,7 +1698,7 @@
Code
apps/client/src/app/components/admin-overview/admin-overview.html
- 159
+ 162
@@ -2077,7 +2107,7 @@
YTD
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 232
+ 264
libs/ui/src/lib/assistant/assistant.component.ts
@@ -2088,7 +2118,7 @@
1Y
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 236
+ 268
libs/ui/src/lib/assistant/assistant.component.ts
@@ -2106,7 +2136,7 @@
5Y
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 240
+ 272
libs/ui/src/lib/assistant/assistant.component.ts
@@ -2124,7 +2154,7 @@
Max
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 244
+ 276
libs/ui/src/lib/assistant/assistant.component.ts
@@ -2167,14 +2197,14 @@
Please enter your coupon code.
apps/client/src/app/components/user-account-membership/user-account-membership.component.ts
- 214
+ 203
Could not redeem coupon code
apps/client/src/app/components/user-account-membership/user-account-membership.component.ts
- 178
+ 181
@@ -2188,14 +2218,7 @@
Coupon code has been redeemed
apps/client/src/app/components/user-account-membership/user-account-membership.component.ts
- 191
-
-
-
- Reload
-
- apps/client/src/app/components/user-account-membership/user-account-membership.component.ts
- 192
+ 194
@@ -2238,7 +2261,7 @@
Do you really want to remove this sign in method?
apps/client/src/app/components/user-account-settings/user-account-settings.component.ts
- 318
+ 314
@@ -2273,7 +2296,7 @@
Coupon
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts
- 134
+ 141
@@ -2287,7 +2310,7 @@
Locale
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 548
+ 666
apps/client/src/app/components/user-account-settings/user-account-settings.html
@@ -2583,7 +2606,7 @@
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 101
+ 109
apps/client/src/app/pages/accounts/accounts-page.html
@@ -2602,7 +2625,7 @@
Oops, cash balance transfer has failed.
apps/client/src/app/pages/accounts/accounts-page.component.ts
- 358
+ 355
@@ -2623,7 +2646,7 @@
Account ID
apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html
- 103
+ 98
@@ -2860,11 +2883,11 @@
Could not parse scraper configuration
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 589
+ 672
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 592
+ 675
@@ -2892,7 +2915,7 @@
Duration
apps/client/src/app/components/admin-overview/admin-overview.html
- 172
+ 175
@@ -3073,11 +3096,11 @@
Creation
apps/client/src/app/components/admin-overview/admin-overview.html
- 185
+ 188
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 150
+ 158
@@ -3411,7 +3434,7 @@
Oops! Could not delete the asset profiles.
apps/client/src/app/components/admin-market-data/admin-market-data.service.ts
- 52
+ 56
@@ -3633,7 +3656,7 @@
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 110
+ 118
apps/client/src/app/pages/portfolio/activities/activities-page.html
@@ -3837,6 +3860,13 @@
118
+
+ Shares After
+
+ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
+ 584
+
+
Back
@@ -3852,14 +3882,14 @@
Price
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 176
+ 184
Do you really want to convert this asset profile to ( )?
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 723
+ 806
@@ -3948,15 +3978,11 @@
Trial
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts
- 133
+ 140
Exclude from Analysis
-
- apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html
- 97
-
libs/ui/src/lib/i18n.ts
22
@@ -4219,7 +4245,7 @@
Hourly
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 216
+ 248
@@ -4320,7 +4346,7 @@
Expiration
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 209
+ 217
@@ -4356,11 +4382,11 @@
Could not save asset profile
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 675
+ 758
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 678
+ 761
@@ -4545,7 +4571,7 @@
Coupon has been created
apps/client/src/app/components/admin-overview/admin-overview.component.ts
- 224
+ 229
@@ -4706,6 +4732,13 @@
373
+
+ Data gathering has been started.
+
+ apps/client/src/app/components/admin-market-data/admin-market-data.component.ts
+ 413
+
+
Global
@@ -4744,7 +4777,7 @@
Membership
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 78
+ 82
libs/common/src/lib/routes/routes.ts
@@ -5234,7 +5267,7 @@
No Activities
apps/client/src/app/components/admin-market-data/admin-market-data.component.ts
- 145
+ 148
@@ -5430,7 +5463,7 @@
Authentication
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 65
+ 67
@@ -5637,14 +5670,14 @@
The current market price is
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 766
+ 850
Test
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 607
+ 725
@@ -5779,7 +5812,7 @@
MTD
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 228
+ 260
libs/ui/src/lib/assistant/assistant.component.ts
@@ -5797,7 +5830,7 @@
WTD
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 224
+ 256
libs/ui/src/lib/assistant/assistant.component.ts
@@ -5840,7 +5873,7 @@
year
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 236
+ 268
apps/client/src/app/pages/resources/personal-finance-tools/product-page.html
@@ -5859,7 +5892,7 @@
years
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 240
+ 272
libs/ui/src/lib/assistant/assistant.component.ts
@@ -5900,7 +5933,7 @@
Data Gathering
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 630
+ 748
apps/client/src/app/components/admin-overview/admin-overview.html
@@ -5936,7 +5969,7 @@
Daily
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 212
+ 244
@@ -6108,7 +6141,7 @@
Oops! There was an error setting up biometric authentication.
apps/client/src/app/components/user-account-settings/user-account-settings.component.ts
- 367
+ 363
@@ -6122,7 +6155,7 @@
Benchmarks
apps/client/src/app/components/admin-market-data/admin-market-data.component.ts
- 125
+ 128
@@ -6216,7 +6249,7 @@
Oops! Could not delete the asset profile.
apps/client/src/app/components/admin-market-data/admin-market-data.service.ts
- 51
+ 55
@@ -6322,14 +6355,14 @@
Do you really want to delete these asset profiles?
apps/client/src/app/components/admin-market-data/admin-market-data.service.ts
- 67
+ 72
Error
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 757
+ 841
@@ -6340,7 +6373,7 @@
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 635
+ 753
apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html
@@ -6364,7 +6397,7 @@
apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html
- 112
+ 107
apps/client/src/app/pages/accounts/transfer-balance/transfer-balance-dialog.html
@@ -6391,7 +6424,7 @@
Role
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 44
+ 45
@@ -6412,7 +6445,7 @@
Close
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 637
+ 755
apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html
@@ -6444,11 +6477,11 @@
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 244
+ 252
apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html
- 114
+ 109
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
@@ -6575,7 +6608,7 @@
has been copied to the clipboard
apps/client/src/app/components/admin-overview/admin-overview.component.ts
- 223
+ 228
libs/ui/src/lib/value/value.component.ts
@@ -6676,6 +6709,13 @@
278
+
+ Shares Before
+
+ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
+ 597
+
+
cannot be used anonymously
@@ -6890,7 +6930,7 @@
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 133
+ 141
@@ -6939,7 +6979,7 @@
Save
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 646
+ 764
apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html
@@ -6971,7 +7011,7 @@
apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html
- 123
+ 118
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
@@ -7046,63 +7086,63 @@
Mode
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 557
+ 675
Do you really want to convert the data source to ?
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 485
+ 525
Default Market Price
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 520
+ 638
Selector
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 573
+ 691
Instant
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 263
+ 296
Lazy
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 259
+ 292
HTTP Request Headers
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 533
+ 651
real-time
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 263
+ 296
end of day
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 259
+ 292
@@ -7293,14 +7333,14 @@
( ) is already in use.
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 718
+ 801
An error occurred while updating to ( ).
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 721
+ 804
@@ -7408,7 +7448,7 @@
Sync Demo User Account
apps/client/src/app/components/admin-overview/admin-overview.html
- 128
+ 131
@@ -7422,7 +7462,7 @@
Demo user account has been synced.
apps/client/src/app/components/admin-overview/admin-overview.component.ts
- 323
+ 334
@@ -7613,7 +7653,7 @@
Current month
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 228
+ 260
@@ -8171,7 +8211,7 @@
Registration Date
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 56
+ 58
diff --git a/apps/client/src/locales/messages.zh.xlf b/apps/client/src/locales/messages.zh.xlf
index 7963e7767..b9bd4d51f 100644
--- a/apps/client/src/locales/messages.zh.xlf
+++ b/apps/client/src/locales/messages.zh.xlf
@@ -260,7 +260,7 @@
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 166
+ 174
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
@@ -564,7 +564,7 @@
apps/client/src/app/components/admin-overview/admin-overview.html
- 235
+ 238
apps/client/src/app/components/admin-platform/admin-platform.component.html
@@ -574,6 +574,10 @@
apps/client/src/app/components/admin-tag/admin-tag.component.html
100
+
+ apps/client/src/app/components/admin-users/admin-users.html
+ 254
+
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
27
@@ -608,7 +612,7 @@
付费
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts
- 129
+ 136
@@ -723,6 +727,14 @@
208
+
+ Splits
+ Splits
+
+ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
+ 512
+
+
View Stacktrace
查看堆栈跟踪
@@ -758,6 +770,14 @@
Date
日期
+
+ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
+ 521
+
+
+ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
+ 560
+
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
156
@@ -804,7 +824,7 @@
货币
apps/client/src/app/components/admin-market-data/admin-market-data.component.ts
- 130
+ 133
apps/client/src/app/pages/public/public-page.html
@@ -824,7 +844,7 @@
没有国家的 ETF
apps/client/src/app/components/admin-market-data/admin-market-data.component.ts
- 135
+ 138
@@ -832,7 +852,7 @@
无行业类别的 ETF
apps/client/src/app/components/admin-market-data/admin-market-data.component.ts
- 140
+ 143
@@ -840,7 +860,7 @@
将数据源转换为 时发生错误。
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 482
+ 522
@@ -848,11 +868,11 @@
您确实要删除此资产配置文件吗?
apps/client/src/app/components/admin-market-data/admin-market-data.service.ts
- 28
+ 29
apps/client/src/app/components/admin-market-data/admin-market-data.service.ts
- 66
+ 71
@@ -860,7 +880,7 @@
过滤...
apps/client/src/app/components/admin-market-data/admin-market-data.component.ts
- 365
+ 377
@@ -932,7 +952,7 @@
订阅历史
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 141
+ 149
@@ -1032,7 +1052,7 @@
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 88
+ 96
@@ -1108,7 +1128,7 @@
总计
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 160
+ 168
@@ -1116,7 +1136,7 @@
刮削配置
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 510
+ 628
@@ -1208,7 +1228,7 @@
您确实要删除此优惠券吗?
apps/client/src/app/components/admin-overview/admin-overview.component.ts
- 242
+ 247
@@ -1216,7 +1236,7 @@
您真的要删除这条系统消息吗?
apps/client/src/app/components/admin-overview/admin-overview.component.ts
- 255
+ 260
@@ -1224,7 +1244,7 @@
您真的要刷新缓存吗?
apps/client/src/app/components/admin-overview/admin-overview.component.ts
- 279
+ 290
@@ -1232,7 +1252,7 @@
请设置您的系统消息:
apps/client/src/app/components/admin-overview/admin-overview.component.ts
- 299
+ 310
@@ -1248,7 +1268,7 @@
每位用户
apps/client/src/app/components/admin-overview/admin-overview.component.ts
- 178
+ 181
@@ -1272,7 +1292,7 @@
只读模式
apps/client/src/app/components/admin-overview/admin-overview.html
- 64
+ 63
@@ -1280,7 +1300,7 @@
系统信息
apps/client/src/app/components/admin-overview/admin-overview.html
- 88
+ 89
@@ -1288,7 +1308,7 @@
设置留言
apps/client/src/app/components/admin-overview/admin-overview.html
- 110
+ 113
@@ -1296,15 +1316,19 @@
优惠券
apps/client/src/app/components/admin-overview/admin-overview.html
- 148
+ 151
Add
添加
+
+ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
+ 615
+
apps/client/src/app/components/admin-overview/admin-overview.html
- 298
+ 301
libs/ui/src/lib/account-balances/account-balances.component.html
@@ -1316,7 +1340,7 @@
维护
apps/client/src/app/components/admin-overview/admin-overview.html
- 117
+ 120
@@ -1324,7 +1348,7 @@
刷新缓存
apps/client/src/app/components/admin-overview/admin-overview.html
- 133
+ 136
@@ -1344,7 +1368,7 @@
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 589
+ 707
apps/client/src/app/components/admin-platform/admin-platform.component.html
@@ -1360,7 +1384,7 @@
资产概况已保存
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 665
+ 748
@@ -1392,7 +1416,7 @@
当前年份
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 232
+ 264
@@ -1403,6 +1427,14 @@
10
+
+ Cache has been flushed.
+ Cache has been flushed.
+
+ apps/client/src/app/components/admin-overview/admin-overview.component.ts
+ 281
+
+
Platforms
平台
@@ -1500,7 +1532,7 @@
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 124
+ 132
@@ -1519,24 +1551,16 @@
228
-
- Delete User
- 删除用户
-
- apps/client/src/app/components/admin-users/admin-users.html
- 254
-
-
Could not validate form
无法验证表单
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 641
+ 724
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 644
+ 727
@@ -1655,6 +1679,14 @@
64
+
+ Split Ratio
+ Split Ratio
+
+ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
+ 526
+
+
Fear
恐惧
@@ -1772,7 +1804,7 @@
当前周
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 224
+ 256
@@ -1800,7 +1832,7 @@
代码
apps/client/src/app/components/admin-overview/admin-overview.html
- 159
+ 162
@@ -2244,7 +2276,7 @@
年初至今
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 232
+ 264
libs/ui/src/lib/assistant/assistant.component.ts
@@ -2256,7 +2288,7 @@
1年
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 236
+ 268
libs/ui/src/lib/assistant/assistant.component.ts
@@ -2276,7 +2308,7 @@
5年
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 240
+ 272
libs/ui/src/lib/assistant/assistant.component.ts
@@ -2296,7 +2328,7 @@
最大限度
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 244
+ 276
libs/ui/src/lib/assistant/assistant.component.ts
@@ -2344,7 +2376,7 @@
请输入您的优惠券代码。
apps/client/src/app/components/user-account-membership/user-account-membership.component.ts
- 214
+ 203
@@ -2352,7 +2384,7 @@
无法兑换优惠券代码
apps/client/src/app/components/user-account-membership/user-account-membership.component.ts
- 178
+ 181
@@ -2368,15 +2400,7 @@
优惠券代码已被兑换
apps/client/src/app/components/user-account-membership/user-account-membership.component.ts
- 191
-
-
-
- Reload
- 重新加载
-
- apps/client/src/app/components/user-account-membership/user-account-membership.component.ts
- 192
+ 194
@@ -2424,7 +2448,7 @@
您确实要删除此登录方法吗?
apps/client/src/app/components/user-account-settings/user-account-settings.component.ts
- 318
+ 314
@@ -2464,7 +2488,7 @@
优惠券
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts
- 134
+ 141
@@ -2480,7 +2504,7 @@
语言环境
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 548
+ 666
apps/client/src/app/components/user-account-settings/user-account-settings.html
@@ -2804,7 +2828,7 @@
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 101
+ 109
apps/client/src/app/pages/accounts/accounts-page.html
@@ -2824,7 +2848,7 @@
糟糕,现金余额转账失败。
apps/client/src/app/pages/accounts/accounts-page.component.ts
- 358
+ 355
@@ -2848,7 +2872,7 @@
帐户ID
apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html
- 103
+ 98
@@ -3096,11 +3120,11 @@
无法解析抓取器配置
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 589
+ 672
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 592
+ 675
@@ -3132,7 +3156,7 @@
持续时间
apps/client/src/app/components/admin-overview/admin-overview.html
- 172
+ 175
@@ -3332,11 +3356,11 @@
创建时间
apps/client/src/app/components/admin-overview/admin-overview.html
- 185
+ 188
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 150
+ 158
@@ -3708,7 +3732,7 @@
哎呀!无法删除资产概况。
apps/client/src/app/components/admin-market-data/admin-market-data.service.ts
- 52
+ 56
@@ -3956,7 +3980,7 @@
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 110
+ 118
apps/client/src/app/pages/portfolio/activities/activities-page.html
@@ -4183,6 +4207,14 @@
118
+
+ Shares After
+ Shares After
+
+ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
+ 584
+
+
Back
后退
@@ -4200,7 +4232,7 @@
价格
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 176
+ 184
@@ -4208,7 +4240,7 @@
您确定要把此资产概况转换为 ( ) 吗?
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 723
+ 806
@@ -4308,16 +4340,12 @@
试用
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts
- 133
+ 140
Exclude from Analysis
排除在分析之外
-
- apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html
- 97
-
libs/ui/src/lib/i18n.ts
22
@@ -4608,7 +4636,7 @@
每小时
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 216
+ 248
@@ -4720,7 +4748,7 @@
到期时间
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 209
+ 217
@@ -4760,11 +4788,11 @@
无法保存资产概况
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 675
+ 758
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 678
+ 761
@@ -4973,7 +5001,7 @@
优惠券 已创建
apps/client/src/app/components/admin-overview/admin-overview.component.ts
- 224
+ 229
@@ -5148,6 +5176,14 @@
373
+
+ Data gathering has been started.
+ Data gathering has been started.
+
+ apps/client/src/app/components/admin-market-data/admin-market-data.component.ts
+ 413
+
+
Global
全球的
@@ -5189,7 +5225,7 @@
会员资格
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 78
+ 82
libs/common/src/lib/routes/routes.ts
@@ -5729,7 +5765,7 @@
暂无活动
apps/client/src/app/components/admin-market-data/admin-market-data.component.ts
- 145
+ 148
@@ -5945,7 +5981,7 @@
认证
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 65
+ 67
@@ -6177,7 +6213,7 @@
当前市场价格为
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 766
+ 850
@@ -6185,7 +6221,7 @@
测试
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 607
+ 725
@@ -6337,7 +6373,7 @@
本月至今
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 228
+ 260
libs/ui/src/lib/assistant/assistant.component.ts
@@ -6357,7 +6393,7 @@
本周至今
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 224
+ 256
libs/ui/src/lib/assistant/assistant.component.ts
@@ -6405,7 +6441,7 @@
年
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 236
+ 268
apps/client/src/app/pages/resources/personal-finance-tools/product-page.html
@@ -6425,7 +6461,7 @@
年
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 240
+ 272
libs/ui/src/lib/assistant/assistant.component.ts
@@ -6470,7 +6506,7 @@
数据收集
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 630
+ 748
apps/client/src/app/components/admin-overview/admin-overview.html
@@ -6510,7 +6546,7 @@
每天
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 212
+ 244
@@ -6706,7 +6742,7 @@
哎呀!设置生物识别认证时发生错误。
apps/client/src/app/components/user-account-settings/user-account-settings.component.ts
- 367
+ 363
@@ -6722,7 +6758,7 @@
基准
apps/client/src/app/components/admin-market-data/admin-market-data.component.ts
- 125
+ 128
@@ -6838,7 +6874,7 @@
哎呀!无法删除资产概况。
apps/client/src/app/components/admin-market-data/admin-market-data.service.ts
- 51
+ 55
@@ -6942,7 +6978,7 @@
您确定要删除这 个资产概况吗?
apps/client/src/app/components/admin-market-data/admin-market-data.service.ts
- 67
+ 72
@@ -6950,7 +6986,7 @@
错误
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 757
+ 841
@@ -6994,7 +7030,7 @@
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 635
+ 753
apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html
@@ -7018,7 +7054,7 @@
apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html
- 112
+ 107
apps/client/src/app/pages/accounts/transfer-balance/transfer-balance-dialog.html
@@ -7046,7 +7082,7 @@
关闭
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 637
+ 755
apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html
@@ -7078,11 +7114,11 @@
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 244
+ 252
apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html
- 114
+ 109
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
@@ -7098,7 +7134,7 @@
角色
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 44
+ 45
@@ -7202,7 +7238,7 @@
已复制到剪贴板
apps/client/src/app/components/admin-overview/admin-overview.component.ts
- 223
+ 228
libs/ui/src/lib/value/value.component.ts
@@ -7329,6 +7365,14 @@
278
+
+ Shares Before
+ Shares Before
+
+ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
+ 597
+
+
cannot be used anonymously
无法匿名使用
@@ -7552,7 +7596,7 @@
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 133
+ 141
@@ -7624,7 +7668,7 @@
保存
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 646
+ 764
apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html
@@ -7656,7 +7700,7 @@
apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html
- 123
+ 118
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
@@ -7740,7 +7784,7 @@
延迟
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 259
+ 292
@@ -7748,7 +7792,7 @@
即时
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 263
+ 296
@@ -7756,7 +7800,7 @@
默认市场价格
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 520
+ 638
@@ -7764,7 +7808,7 @@
模式
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 557
+ 675
@@ -7772,7 +7816,7 @@
您确定要把数据源转换为 吗?
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 485
+ 525
@@ -7780,7 +7824,7 @@
选择器
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 573
+ 691
@@ -7788,7 +7832,7 @@
HTTP 请求标头
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
- 533
+ 651
@@ -7796,7 +7840,7 @@
收盘
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 259
+ 292
@@ -7804,7 +7848,7 @@
实时
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 263
+ 296
@@ -8017,7 +8061,7 @@
( ) 已在使用中。
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 718
+ 801
@@ -8025,7 +8069,7 @@
在更新到 ( ) 时发生错误。
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 721
+ 804
@@ -8178,7 +8222,7 @@
演示用户账户已同步。
apps/client/src/app/components/admin-overview/admin-overview.component.ts
- 323
+ 334
@@ -8186,7 +8230,7 @@
同步演示用户账户
apps/client/src/app/components/admin-overview/admin-overview.html
- 128
+ 131
@@ -8400,7 +8444,7 @@
当前月份
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
- 228
+ 260
@@ -9037,7 +9081,7 @@
注册日期
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 56
+ 58
From 8ac551fc445fb68a50a680acde23b87db1ae1ab2 Mon Sep 17 00:00:00 2001
From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com>
Date: Mon, 3 Aug 2026 20:54:35 +0200
Subject: [PATCH 61/86] Feature/support account platforms in activities import
(#7515)
* Support account platforms in activities import
* Update changelog
---
CHANGELOG.md | 1 +
apps/api/src/app/import/import-data.dto.ts | 7 +++
apps/api/src/app/import/import.controller.ts | 1 +
apps/api/src/app/import/import.service.ts | 44 ++++++++++++++++++-
.../import-activities-dialog.component.ts | 5 +++
.../app/services/import-activities.service.ts | 8 ++++
.../src/lib/dtos/create-platform.dto.ts | 6 ++-
test/import/not-ok/invalid-platform.json | 42 ++++++++++++++++++
8 files changed, 112 insertions(+), 2 deletions(-)
create mode 100644 test/import/not-ok/invalid-platform.json
diff --git a/CHANGELOG.md b/CHANGELOG.md
index d6ef5e2f0..bc4764602 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
### Added
+- Added support for the account platforms in the activities import
- Added the database model and endpoints to manage the stock splits of an asset profile (experimental)
### Changed
diff --git a/apps/api/src/app/import/import-data.dto.ts b/apps/api/src/app/import/import-data.dto.ts
index bf45c7cda..1ab6fe3e5 100644
--- a/apps/api/src/app/import/import-data.dto.ts
+++ b/apps/api/src/app/import/import-data.dto.ts
@@ -2,6 +2,7 @@ import {
CreateAccountWithBalancesDto,
CreateAssetProfileWithMarketDataDto,
CreateOrderDto,
+ CreatePlatformDto,
CreateTagDto
} from '@ghostfolio/common/dtos';
@@ -26,6 +27,12 @@ export class ImportDataDto {
@ValidateNested({ each: true })
assetProfiles?: CreateAssetProfileWithMarketDataDto[];
+ @IsArray()
+ @IsOptional()
+ @Type(() => CreatePlatformDto)
+ @ValidateNested({ each: true })
+ platforms?: CreatePlatformDto[];
+
@IsArray()
@IsOptional()
@Type(() => CreateTagDto)
diff --git a/apps/api/src/app/import/import.controller.ts b/apps/api/src/app/import/import.controller.ts
index c2d53e3cb..cd378d07d 100644
--- a/apps/api/src/app/import/import.controller.ts
+++ b/apps/api/src/app/import/import.controller.ts
@@ -77,6 +77,7 @@ export class ImportController {
accountsWithBalancesDto: importData.accounts ?? [],
activitiesDto: importData.activities,
assetProfilesWithMarketDataDto: importData.assetProfiles ?? [],
+ platformsDto: importData.platforms ?? [],
tagsDto: importData.tags ?? [],
user: this.request.user
});
diff --git a/apps/api/src/app/import/import.service.ts b/apps/api/src/app/import/import.service.ts
index b8579b795..52b0662d6 100644
--- a/apps/api/src/app/import/import.service.ts
+++ b/apps/api/src/app/import/import.service.ts
@@ -177,6 +177,7 @@ export class ImportService {
assetProfilesWithMarketDataDto,
isDryRun = false,
maxActivitiesToImport,
+ platformsDto,
tagsDto,
user
}: {
@@ -185,14 +186,54 @@ export class ImportService {
assetProfilesWithMarketDataDto: ImportDataDto['assetProfiles'];
isDryRun?: boolean;
maxActivitiesToImport: number;
+ platformsDto: ImportDataDto['platforms'];
tagsDto: ImportDataDto['tags'];
user: UserWithSettings;
}): Promise {
const accountIdMapping: { [oldAccountId: string]: string } = {};
const assetProfileSymbolMapping: { [oldSymbol: string]: string } = {};
+ const platformIdMapping: { [oldPlatformId: string]: string } = {};
const tagIdMapping: { [oldTagId: string]: string } = {};
const userCurrency = user.settings.settings.baseCurrency;
+ if (platformsDto?.length) {
+ const canCreatePlatform = hasPermission(
+ user.permissions,
+ permissions.createPlatform
+ );
+
+ const existingPlatforms = await this.platformService.getPlatforms();
+
+ for (const platform of platformsDto) {
+ // Check if there is any existing platform with the same ID, otherwise
+ // fall back to a platform with the same URL
+ const existingPlatform =
+ existingPlatforms.find(({ id }) => {
+ return id === platform.id;
+ }) ??
+ existingPlatforms.find(({ url }) => {
+ return url === platform.url;
+ });
+
+ if (existingPlatform) {
+ // Store the new to old platform ID mappings for creating accounts
+ if (platform.id && existingPlatform.id !== platform.id) {
+ platformIdMapping[platform.id] = existingPlatform.id;
+ }
+ } else {
+ if (!canCreatePlatform) {
+ throw new Error(
+ `Insufficient permissions to create platform ("${platform.name}")`
+ );
+ }
+
+ if (!isDryRun) {
+ await this.platformService.createPlatform(platform);
+ }
+ }
+ }
+ }
+
const existingTagsOfUser =
tagsDto?.length || (!isDryRun && accountsWithBalancesDto?.length)
? await this.tagService.getTagsForUser(user.id)
@@ -282,7 +323,8 @@ export class ImportService {
]);
let oldAccountId: string;
- const platformId = account.platformId;
+ const platformId =
+ platformIdMapping[account.platformId] ?? account.platformId;
delete account.platformId;
diff --git a/apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts b/apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts
index 77d889b1a..48f1d5abd 100644
--- a/apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts
+++ b/apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts
@@ -4,6 +4,7 @@ import { DEFAULT_DATE_RANGE } from '@ghostfolio/common/config';
import {
CreateAccountWithBalancesDto,
CreateAssetProfileWithMarketDataDto,
+ CreatePlatformDto,
CreateTagDto
} from '@ghostfolio/common/dtos';
import { Activity, PortfolioPosition } from '@ghostfolio/common/interfaces';
@@ -107,6 +108,7 @@ export class GfImportActivitiesDialogComponent {
private accounts: CreateAccountWithBalancesDto[] = [];
private activities: Activity[] = [];
private assetProfiles: CreateAssetProfileWithMarketDataDto[] = [];
+ private platforms: CreatePlatformDto[] = [];
private tags: CreateTagDto[] = [];
private readonly changeDetectorRef = inject(ChangeDetectorRef);
@@ -173,6 +175,7 @@ export class GfImportActivitiesDialogComponent {
accounts: this.accounts,
activities: this.selectedActivities,
assetProfiles: this.assetProfiles,
+ platforms: this.platforms,
tags: this.tags
});
@@ -304,6 +307,7 @@ export class GfImportActivitiesDialogComponent {
this.accounts = content.accounts;
this.assetProfiles = content.assetProfiles;
+ this.platforms = content.platforms;
this.tags = content.tags;
if (!isArray(content.activities)) {
@@ -337,6 +341,7 @@ export class GfImportActivitiesDialogComponent {
activities: content.activities,
assetProfiles: content.assetProfiles,
isDryRun: true,
+ platforms: content.platforms,
tags: content.tags
});
diff --git a/apps/client/src/app/services/import-activities.service.ts b/apps/client/src/app/services/import-activities.service.ts
index ff5679718..6a8f99bda 100644
--- a/apps/client/src/app/services/import-activities.service.ts
+++ b/apps/client/src/app/services/import-activities.service.ts
@@ -2,6 +2,7 @@ import {
CreateAccountWithBalancesDto,
CreateAssetProfileWithMarketDataDto,
CreateOrderDto,
+ CreatePlatformDto,
CreateTagDto
} from '@ghostfolio/common/dtos';
import { parseDate as parseDateHelper } from '@ghostfolio/common/helper';
@@ -115,12 +116,14 @@ export class ImportActivitiesService {
activities,
assetProfiles,
isDryRun = false,
+ platforms,
tags
}: {
activities: CreateOrderDto[];
accounts?: CreateAccountWithBalancesDto[];
assetProfiles?: CreateAssetProfileWithMarketDataDto[];
isDryRun?: boolean;
+ platforms?: CreatePlatformDto[];
tags?: CreateTagDto[];
}): Promise<{
activities: Activity[];
@@ -131,6 +134,7 @@ export class ImportActivitiesService {
accounts,
activities,
assetProfiles,
+ platforms,
tags
},
isDryRun
@@ -142,11 +146,13 @@ export class ImportActivitiesService {
accounts,
activities,
assetProfiles,
+ platforms,
tags
}: {
accounts?: CreateAccountWithBalancesDto[];
activities: Activity[];
assetProfiles?: CreateAssetProfileWithMarketDataDto[];
+ platforms?: CreatePlatformDto[];
tags?: CreateTagDto[];
}): Promise<{
activities: Activity[];
@@ -158,6 +164,7 @@ export class ImportActivitiesService {
return this.importJson({
accounts,
assetProfiles,
+ platforms,
tags,
activities: importData
});
@@ -457,6 +464,7 @@ export class ImportActivitiesService {
accounts?: CreateAccountWithBalancesDto[];
activities: CreateOrderDto[];
assetProfiles?: CreateAssetProfileWithMarketDataDto[];
+ platforms?: CreatePlatformDto[];
tags?: CreateTagDto[];
},
aIsDryRun = false
diff --git a/libs/common/src/lib/dtos/create-platform.dto.ts b/libs/common/src/lib/dtos/create-platform.dto.ts
index e482dd241..5c6453f84 100644
--- a/libs/common/src/lib/dtos/create-platform.dto.ts
+++ b/libs/common/src/lib/dtos/create-platform.dto.ts
@@ -1,6 +1,10 @@
-import { IsString, IsUrl } from 'class-validator';
+import { IsOptional, IsString, IsUrl } from 'class-validator';
export class CreatePlatformDto {
+ @IsOptional()
+ @IsString()
+ id?: string;
+
@IsString()
name: string;
diff --git a/test/import/not-ok/invalid-platform.json b/test/import/not-ok/invalid-platform.json
new file mode 100644
index 000000000..69a8e29ca
--- /dev/null
+++ b/test/import/not-ok/invalid-platform.json
@@ -0,0 +1,42 @@
+{
+ "meta": {
+ "date": "2023-02-05T00:00:00.000Z",
+ "version": "dev"
+ },
+ "accounts": [
+ {
+ "balance": 0,
+ "balances": [],
+ "currency": "USD",
+ "id": "e62be662-a2c8-4cff-8b79-dc0a46576659",
+ "name": "Lehman Brothers Account",
+ "platformId": "2807e8e7-3966-4ced-8d82-0fa2d9c97277"
+ }
+ ],
+ "platforms": [
+ {
+ "id": "2807e8e7-3966-4ced-8d82-0fa2d9c97277",
+ "name": "Lehman Brothers",
+ "url": "https://lehmanbrothers.com"
+ }
+ ],
+ "activities": [
+ {
+ "accountId": "e62be662-a2c8-4cff-8b79-dc0a46576659",
+ "fee": 19,
+ "quantity": 5,
+ "type": "BUY",
+ "unitPrice": 298.58,
+ "currency": "USD",
+ "dataSource": "YAHOO",
+ "date": "2021-09-16T00:00:00.000Z",
+ "symbol": "MSFT"
+ }
+ ],
+ "user": {
+ "settings": {
+ "currency": "USD",
+ "performanceCalculationType": "ROAI"
+ }
+ }
+}
From bb9399e837bdf1c525824bbb98147e1c39164d75 Mon Sep 17 00:00:00 2001
From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com>
Date: Mon, 3 Aug 2026 21:00:34 +0200
Subject: [PATCH 62/86] Task/improve language localization for DE (20260803)
(#7526)
* Update translations
* Update changelog
---
CHANGELOG.md | 1 +
apps/client/src/locales/messages.de.xlf | 12 ++++++------
2 files changed, 7 insertions(+), 6 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index bc4764602..789fdcd3f 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -18,6 +18,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- Improved the usability of the admin control panel by eliminating the page reload on deleting an asset profile
- Improved the usability of the admin control panel by eliminating the page reload on flushing the cache
- Improved the usability of the admin control panel by eliminating the page reload on gathering historical market data
+- Improved the language localization for German (`de`)
### Fixed
diff --git a/apps/client/src/locales/messages.de.xlf b/apps/client/src/locales/messages.de.xlf
index 653673d86..06b0a7d49 100644
--- a/apps/client/src/locales/messages.de.xlf
+++ b/apps/client/src/locales/messages.de.xlf
@@ -439,7 +439,7 @@
Splits
- Splits
+ Splits
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
512
@@ -855,7 +855,7 @@
Split Ratio
- Split Ratio
+ Split-Verhältnis
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
526
@@ -4191,7 +4191,7 @@
Cache has been flushed.
- Cache has been flushed.
+ Der Cache wurde geleert.
apps/client/src/app/components/admin-overview/admin-overview.component.ts
281
@@ -4347,7 +4347,7 @@
Shares After
- Shares After
+ Anteile nachher
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
584
@@ -5781,7 +5781,7 @@
Data gathering has been started.
- Data gathering has been started.
+ Finanzmarktdaten synchronisieren wurde gestartet.
apps/client/src/app/components/admin-market-data/admin-market-data.component.ts
413
@@ -7390,7 +7390,7 @@
Shares Before
- Shares Before
+ Anteile vorher
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
597
From a3d78ce43df40fb05eb9d41f6c3623915ddf47b2 Mon Sep 17 00:00:00 2001
From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com>
Date: Mon, 3 Aug 2026 21:02:59 +0200
Subject: [PATCH 63/86] Release 3.41.0 (#7527)
---
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 789fdcd3f..6c90fdf30 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
+## 3.41.0 - 2026-08-03
### Added
diff --git a/package-lock.json b/package-lock.json
index b39eac00d..87cad3a36 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,12 +1,12 @@
{
"name": "ghostfolio",
- "version": "3.40.0",
+ "version": "3.41.0",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "ghostfolio",
- "version": "3.40.0",
+ "version": "3.41.0",
"hasInstallScript": true,
"license": "AGPL-3.0",
"dependencies": {
diff --git a/package.json b/package.json
index dc1e12020..9ace2cbe8 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "ghostfolio",
- "version": "3.40.0",
+ "version": "3.41.0",
"homepage": "https://ghostfol.io",
"license": "AGPL-3.0",
"repository": "https://github.com/ghostfolio/ghostfolio",
From 0b9df572ba042c57cc1f0bc9ca42d03121254410 Mon Sep 17 00:00:00 2001
From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com>
Date: Tue, 4 Aug 2026 19:52:15 +0200
Subject: [PATCH 64/86] Task/optimize performance of search in assistant
(#7534)
* Improve performance of search in assistant by reusing cached portfolio snapshot
* Update changelog
---
CHANGELOG.md | 10 +++++++
.../src/app/portfolio/portfolio.service.ts | 30 ++++++++++++-------
.../portfolio-position.interface.ts | 1 +
3 files changed, 31 insertions(+), 10 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 6c90fdf30..7bd3340ec 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -5,6 +5,16 @@ 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
+
+### Changed
+
+- Optimized the performance of the search in the assistant by reusing the cached portfolio snapshot
+
+### Fixed
+
+- Fixed the fuzzy search for the holdings in the assistant
+
## 3.41.0 - 2026-08-03
### Added
diff --git a/apps/api/src/app/portfolio/portfolio.service.ts b/apps/api/src/app/portfolio/portfolio.service.ts
index 0a69cf32d..70106bdc1 100644
--- a/apps/api/src/app/portfolio/portfolio.service.ts
+++ b/apps/api/src/app/portfolio/portfolio.service.ts
@@ -165,6 +165,10 @@ export class PortfolioService {
};
}
+ const filtersWithoutSearchQueryFilter = filters?.filter(({ type }) => {
+ return type !== 'SEARCH_QUERY';
+ });
+
const [accounts, details, user] = await Promise.all([
this.accountService.accounts({
where,
@@ -176,8 +180,8 @@ export class PortfolioService {
orderBy: { name: 'asc' }
}),
this.getDetails({
- filters,
withExcludedAccounts,
+ filters: filtersWithoutSearchQueryFilter,
impersonationId: userId,
userId: this.request.user.id
}),
@@ -369,14 +373,6 @@ export class PortfolioService {
userId: string;
}) {
userId = await this.getUserId(impersonationId, userId);
- const { holdings: holdingsMap } = await this.getDetails({
- dateRange,
- filters,
- impersonationId,
- userId
- });
-
- let holdings = Object.values(holdingsMap);
const { SEARCH_QUERY: [filterBySearchQuery] = [] } = groupBy(
filters,
@@ -385,9 +381,22 @@ export class PortfolioService {
}
);
+ const filtersWithoutSearchQueryFilter = filters?.filter(({ type }) => {
+ return type !== 'SEARCH_QUERY';
+ });
+
+ const { holdings: holdingsMap } = await this.getDetails({
+ dateRange,
+ impersonationId,
+ userId,
+ filters: filtersWithoutSearchQueryFilter
+ });
+
+ let holdings = Object.values(holdingsMap);
+
if (filterBySearchQuery) {
const fuse = new Fuse(holdings, {
- keys: ['isin', 'name', 'symbol'],
+ keys: ['assetProfile.isin', 'assetProfile.name', 'assetProfile.symbol'],
threshold: 0.3
});
@@ -651,6 +660,7 @@ export class PortfolioService {
};
}
),
+ isin: assetProfile.isin,
name: assetProfile.name,
sectors: assetProfile.sectors,
symbol: assetProfile.symbol,
diff --git a/libs/common/src/lib/interfaces/portfolio-position.interface.ts b/libs/common/src/lib/interfaces/portfolio-position.interface.ts
index cf71b20ca..388e661f7 100644
--- a/libs/common/src/lib/interfaces/portfolio-position.interface.ts
+++ b/libs/common/src/lib/interfaces/portfolio-position.interface.ts
@@ -15,6 +15,7 @@ export interface PortfolioPosition {
| 'currency'
| 'dataSource'
| 'holdings'
+ | 'isin'
| 'name'
| 'sectors'
| 'symbol'
From 851901916b568b3ff51cd7a46968a86999baea0a Mon Sep 17 00:00:00 2001
From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com>
Date: Tue, 4 Aug 2026 20:07:55 +0200
Subject: [PATCH 65/86] Task/improve handling of Exclude from Analysis tag
(#7533)
* Improve handling of Exclude from Analysis tag
* Update changelog
---
CHANGELOG.md | 1 +
apps/api/src/app/user/user.service.ts | 8 +++----
...eate-or-update-account-dialog.component.ts | 21 +++++++------------
.../portfolio-filter-form.util.ts | 5 +++--
4 files changed, 15 insertions(+), 20 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 7bd3340ec..1de1e82b9 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
### Changed
+- Extended the support of the _Exclude from Analysis_ tag from accounts to activities
- Optimized the performance of the search in the assistant by reusing the cached portfolio snapshot
### Fixed
diff --git a/apps/api/src/app/user/user.service.ts b/apps/api/src/app/user/user.service.ts
index 5d60c571d..10e9c5240 100644
--- a/apps/api/src/app/user/user.service.ts
+++ b/apps/api/src/app/user/user.service.ts
@@ -186,15 +186,15 @@ export class UserService {
systemMessage = systemMessageProperty;
}
- let tags = tagsForUser.filter((tag) => {
- return tag.id !== TAG_ID_EXCLUDE_FROM_ANALYSIS;
- });
+ let tags = tagsForUser;
if (
this.configurationService.get('ENABLE_FEATURE_SUBSCRIPTION') &&
subscription.type === SubscriptionType.Basic
) {
- tags = [];
+ tags = tags.filter(({ id }) => {
+ return id === TAG_ID_EXCLUDE_FROM_ANALYSIS;
+ });
}
return {
diff --git a/apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.component.ts b/apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.component.ts
index 2157ea5d3..86fc84711 100644
--- a/apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.component.ts
+++ b/apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.component.ts
@@ -1,5 +1,4 @@
import { UserService } from '@ghostfolio/client/services/user/user.service';
-import { TAG_ID_EXCLUDE_FROM_ANALYSIS } from '@ghostfolio/common/config';
import { CreateAccountDto, UpdateAccountDto } from '@ghostfolio/common/dtos';
import { getStringOrNull } from '@ghostfolio/common/helper';
import { hasPermission, permissions } from '@ghostfolio/common/permissions';
@@ -86,19 +85,13 @@ export class GfCreateOrUpdateAccountDialogComponent {
permissions.createOwnTag
);
- this.tagsAvailable = [
- ...(this.data.user?.tags ?? []),
- {
- id: TAG_ID_EXCLUDE_FROM_ANALYSIS,
- name: 'EXCLUDE_FROM_ANALYSIS',
- userId: null
- }
- ].map((tag) => {
- return {
- ...tag,
- name: translate(tag.name)
- };
- });
+ this.tagsAvailable =
+ this.data.user?.tags?.map((tag) => {
+ return {
+ ...tag,
+ name: translate(tag.name)
+ };
+ }) ?? [];
this.accountForm = this.formBuilder.group({
accountId: [{ disabled: true, value: this.data.account.id }],
diff --git a/libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.util.ts b/libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.util.ts
index ec3114d41..193624c76 100644
--- a/libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.util.ts
+++ b/libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.util.ts
@@ -1,3 +1,4 @@
+import { TAG_ID_EXCLUDE_FROM_ANALYSIS } from '@ghostfolio/common/config';
import { getAssetProfileIdentifier } from '@ghostfolio/common/helper';
import { Filter, PortfolioPosition } from '@ghostfolio/common/interfaces';
@@ -105,8 +106,8 @@ export function getTagFilters(
): Filter[] {
return (
tags
- ?.filter(({ isUsed }) => {
- return isUsed;
+ ?.filter(({ id, isUsed }) => {
+ return id !== TAG_ID_EXCLUDE_FROM_ANALYSIS && isUsed;
})
?.map(({ id, name }) => {
return {
From 3eb10cc2e12aea64a03273faa411825202f6cdb4 Mon Sep 17 00:00:00 2001
From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com>
Date: Tue, 4 Aug 2026 20:31:21 +0200
Subject: [PATCH 66/86] Task/remove unused exchange from portfolio position
interface (#7537)
Remove exchange
---
.../pages/portfolio/allocations/allocations-page.component.ts | 3 +--
libs/common/src/lib/interfaces/portfolio-position.interface.ts | 1 -
2 files changed, 1 insertion(+), 3 deletions(-)
diff --git a/apps/client/src/app/pages/portfolio/allocations/allocations-page.component.ts b/apps/client/src/app/pages/portfolio/allocations/allocations-page.component.ts
index dd2c62f98..0931578cf 100644
--- a/apps/client/src/app/pages/portfolio/allocations/allocations-page.component.ts
+++ b/apps/client/src/app/pages/portfolio/allocations/allocations-page.component.ts
@@ -95,7 +95,7 @@ export class GfAllocationsPageComponent implements OnInit {
| 'assetSubClassLabel'
| 'currency'
| 'name'
- > & { etfProvider: string; exchange?: string; value: number };
+ > & { etfProvider: string; value: number };
};
protected isLoading = false;
protected markets: PortfolioDetails['markets'];
@@ -381,7 +381,6 @@ export class GfAllocationsPageComponent implements OnInit {
assetSubClass: position.assetProfile.assetSubClass,
name: position.assetProfile.name
}),
- exchange: position.exchange,
name: position.assetProfile.name,
value: this.showValuesInPercentage()
? position.allocationInPercentage
diff --git a/libs/common/src/lib/interfaces/portfolio-position.interface.ts b/libs/common/src/lib/interfaces/portfolio-position.interface.ts
index 388e661f7..65d7ea140 100644
--- a/libs/common/src/lib/interfaces/portfolio-position.interface.ts
+++ b/libs/common/src/lib/interfaces/portfolio-position.interface.ts
@@ -26,7 +26,6 @@ export interface PortfolioPosition {
};
dateOfFirstActivity: Date;
dividend: number;
- exchange?: string;
grossPerformance: number;
grossPerformancePercent: number;
grossPerformancePercentWithCurrencyEffect: number;
From 61cac99d54808bd703884801240397e93fd7602a Mon Sep 17 00:00:00 2001
From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com>
Date: Tue, 4 Aug 2026 20:31:57 +0200
Subject: [PATCH 67/86] Task/improve symbol validation for assets with manual
data source (#7467)
* Improve symbol validation for assets with manual data source
* Update changelog
---
CHANGELOG.md | 2 +
.../src/app/activities/activities.service.ts | 12 +-
apps/api/src/app/admin/admin.service.ts | 10 +-
apps/api/src/app/import/import.service.ts | 166 +++++++++++++-----
.../data-provider/data-provider.service.ts | 2 +-
.../symbol-profile/symbol-profile.service.ts | 21 +++
.../app/services/import-activities.service.ts | 79 ++++++---
libs/common/src/lib/helper.spec.ts | 31 +++-
libs/common/src/lib/helper.ts | 15 +-
package-lock.json | 34 +++-
package.json | 1 +
...nvalid-symbol-with-manual-data-source.json | 27 +++
test/import/ok/without-accounts.json | 24 ++-
13 files changed, 337 insertions(+), 87 deletions(-)
create mode 100644 test/import/not-ok/invalid-symbol-with-manual-data-source.json
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 1de1e82b9..538815f1d 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -11,6 +11,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- Extended the support of the _Exclude from Analysis_ tag from accounts to activities
- Optimized the performance of the search in the assistant by reusing the cached portfolio snapshot
+- Improved the validation of the import functionality when referencing an asset profile with the data source `MANUAL`
+- Improved the validation of the endpoint to add a custom asset profile in the admin control panel
### Fixed
diff --git a/apps/api/src/app/activities/activities.service.ts b/apps/api/src/app/activities/activities.service.ts
index da3e99312..ef3839340 100644
--- a/apps/api/src/app/activities/activities.service.ts
+++ b/apps/api/src/app/activities/activities.service.ts
@@ -20,12 +20,12 @@ import {
DATA_GATHERING_QUEUE_PRIORITY_HIGH,
GATHER_ASSET_PROFILE_PROCESS_JOB_NAME,
GATHER_ASSET_PROFILE_PROCESS_JOB_OPTIONS,
- ghostfolioPrefix,
TAG_ID_EXCLUDE_FROM_ANALYSIS
} from '@ghostfolio/common/config';
import {
canDeleteAssetProfile,
- getAssetProfileIdentifier
+ getAssetProfileIdentifier,
+ isValidCustomAssetProfileSymbol
} from '@ghostfolio/common/helper';
import {
ActivitiesResponse,
@@ -48,7 +48,6 @@ import {
Type as ActivityType
} from '@prisma/client';
import { Big } from 'big.js';
-import { isUUID } from 'class-validator';
import { endOfToday, isAfter } from 'date-fns';
import { groupBy, uniqBy } from 'lodash';
import { randomUUID } from 'node:crypto';
@@ -204,10 +203,9 @@ export class ActivitiesService {
let symbol: string;
if (
- data.SymbolProfile.connectOrCreate.create.symbol.startsWith(
- `${ghostfolioPrefix}_`
- ) ||
- isUUID(data.SymbolProfile.connectOrCreate.create.symbol)
+ isValidCustomAssetProfileSymbol(
+ data.SymbolProfile.connectOrCreate.create.symbol
+ )
) {
// Connect custom asset profile (clone)
symbol = data.SymbolProfile.connectOrCreate.create.symbol;
diff --git a/apps/api/src/app/admin/admin.service.ts b/apps/api/src/app/admin/admin.service.ts
index 4c608e0fd..d384e0d55 100644
--- a/apps/api/src/app/admin/admin.service.ts
+++ b/apps/api/src/app/admin/admin.service.ts
@@ -7,6 +7,7 @@ import { PrismaService } from '@ghostfolio/api/services/prisma/prisma.service';
import { PropertyService } from '@ghostfolio/api/services/property/property.service';
import { SymbolProfileService } from '@ghostfolio/api/services/symbol-profile/symbol-profile.service';
import {
+ ghostfolioPrefix,
PROPERTY_CURRENCIES,
PROPERTY_IS_READ_ONLY_MODE,
PROPERTY_IS_USER_SIGNUP_ENABLED
@@ -14,7 +15,8 @@ import {
import {
applyAssetProfileOverrides,
getAssetProfileIdentifier,
- getCurrencyFromSymbol
+ getCurrencyFromSymbol,
+ hasGhostfolioPrefix
} from '@ghostfolio/common/helper';
import {
AdminData,
@@ -63,6 +65,12 @@ export class AdminService {
> {
try {
if (dataSource === 'MANUAL') {
+ if (!hasGhostfolioPrefix(symbol)) {
+ throw new BadRequestException(
+ `symbol ("${symbol}") must start with the prefix "${ghostfolioPrefix}_" for the data source ("${dataSource}")`
+ );
+ }
+
return this.symbolProfileService.add({
currency,
dataSource,
diff --git a/apps/api/src/app/import/import.service.ts b/apps/api/src/app/import/import.service.ts
index 52b0662d6..be511df44 100644
--- a/apps/api/src/app/import/import.service.ts
+++ b/apps/api/src/app/import/import.service.ts
@@ -11,11 +11,13 @@ import { SymbolProfileService } from '@ghostfolio/api/services/symbol-profile/sy
import { TagService } from '@ghostfolio/api/services/tag/tag.service';
import {
DATA_GATHERING_QUEUE_PRIORITY_HIGH,
+ ghostfolioPrefix,
TAG_ID_EXCLUDE_FROM_ANALYSIS
} from '@ghostfolio/common/config';
import { CreateAssetProfileDto, CreateOrderDto } from '@ghostfolio/common/dtos';
import {
getAssetProfileIdentifier,
+ isValidCustomAssetProfileSymbol,
parseDate
} from '@ghostfolio/common/helper';
import {
@@ -196,6 +198,41 @@ export class ImportService {
const tagIdMapping: { [oldTagId: string]: string } = {};
const userCurrency = user.settings.settings.baseCurrency;
+ // Validate the symbols before any data is persisted
+ for (const [index, assetProfileWithMarketData] of (
+ assetProfilesWithMarketDataDto ?? []
+ ).entries()) {
+ if (
+ assetProfileWithMarketData.dataSource === DataSource.MANUAL &&
+ !isValidCustomAssetProfileSymbol(assetProfileWithMarketData.symbol)
+ ) {
+ throw new Error(
+ `assetProfiles.${index}.symbol ("${assetProfileWithMarketData.symbol}") must be a UUID or start with the prefix "${ghostfolioPrefix}_" for the data source ("${DataSource.MANUAL}")`
+ );
+ }
+ }
+
+ // Validate the symbols before any data is persisted. Activities without a
+ // data source are excluded, since a symbol is generated in
+ // createActivity() if needed.
+ for (const [index, activity] of activitiesDto.entries()) {
+ if (!activity.dataSource) {
+ if (['FEE', 'INTEREST', 'LIABILITY'].includes(activity.type)) {
+ activity.dataSource = DataSource.MANUAL;
+ } else {
+ activity.dataSource =
+ this.dataProviderService.getDataSourceForImport();
+ }
+ } else if (
+ activity.dataSource === DataSource.MANUAL &&
+ !isValidCustomAssetProfileSymbol(activity.symbol)
+ ) {
+ throw new Error(
+ `activities.${index}.symbol ("${activity.symbol}") must be a UUID or start with the prefix "${ghostfolioPrefix}_" for the data source ("${DataSource.MANUAL}")`
+ );
+ }
+ }
+
if (platformsDto?.length) {
const canCreatePlatform = hasPermission(
user.permissions,
@@ -384,71 +421,117 @@ export class ImportService {
}
}
- if (!isDryRun && assetProfilesWithMarketDataDto?.length) {
- const existingAssetProfiles =
- await this.symbolProfileService.getSymbolProfiles(
- assetProfilesWithMarketDataDto.map(({ dataSource, symbol }) => {
- return { dataSource, symbol };
+ if (assetProfilesWithMarketDataDto?.length) {
+ const customAssetProfileNames = assetProfilesWithMarketDataDto
+ .filter(({ dataSource, name }) => {
+ return dataSource === DataSource.MANUAL && Boolean(name);
+ })
+ .map(({ name }) => {
+ return name;
+ });
+
+ const [existingAssetProfiles, existingCustomAssetProfilesOfUser] =
+ await Promise.all([
+ this.symbolProfileService.getSymbolProfiles(
+ assetProfilesWithMarketDataDto.map(({ dataSource, symbol }) => {
+ return { dataSource, symbol };
+ })
+ ),
+ this.symbolProfileService.getCustomSymbolProfilesByNames({
+ names: customAssetProfileNames,
+ userId: user.id
})
- );
+ ]);
for (const assetProfileWithMarketData of assetProfilesWithMarketDataDto) {
+ let symbol = assetProfileWithMarketData.symbol;
+
// Check if there is any existing asset profile
const existingAssetProfile = existingAssetProfiles.find(
- ({ dataSource, symbol }) => {
+ (assetProfile) => {
return (
- dataSource === assetProfileWithMarketData.dataSource &&
- symbol === assetProfileWithMarketData.symbol
+ assetProfile.dataSource ===
+ assetProfileWithMarketData.dataSource &&
+ assetProfile.symbol === assetProfileWithMarketData.symbol
);
}
);
- // If there is no asset profile or if the asset profile belongs to a different user, then create a new asset profile
+ // If there is no asset profile or if the asset profile belongs to a
+ // different user, then reuse the custom asset profile of the user or
+ // create a new asset profile
if (!existingAssetProfile || existingAssetProfile.userId !== user.id) {
- const assetProfile: CreateAssetProfileDto = omit(
- assetProfileWithMarketData,
- 'marketData'
- );
+ // Check if the user has a custom asset profile with the same name.
+ // Skip asset profiles with a legacy free-text symbol as they would
+ // fail the symbol validation on a future import.
+ const existingCustomAssetProfileOfUser =
+ assetProfileWithMarketData.dataSource === DataSource.MANUAL
+ ? existingCustomAssetProfilesOfUser.find((customAssetProfile) => {
+ return (
+ customAssetProfile.name ===
+ assetProfileWithMarketData.name &&
+ isValidCustomAssetProfileSymbol(customAssetProfile.symbol)
+ );
+ })
+ : undefined;
+
+ if (existingCustomAssetProfileOfUser) {
+ // Reuse the custom asset profile of the user instead of creating a duplicate
+ symbol = existingCustomAssetProfileOfUser.symbol;
+ } else {
+ const assetProfile: CreateAssetProfileDto = omit(
+ assetProfileWithMarketData,
+ 'marketData'
+ );
+
+ // Asset profile belongs to a different user, generate a new symbol
+ if (existingAssetProfile && !isDryRun) {
+ symbol = randomUUID();
+ }
- // Asset profile belongs to a different user
- if (existingAssetProfile) {
- const symbol = randomUUID();
- assetProfileSymbolMapping[assetProfile.symbol] = symbol;
assetProfile.symbol = symbol;
+
+ if (!isDryRun) {
+ // Create a new asset profile
+ const assetProfileObject: Prisma.SymbolProfileCreateInput = {
+ ...assetProfile,
+ user: { connect: { id: user.id } }
+ };
+
+ await this.symbolProfileService.add(assetProfileObject);
+ }
}
- // Create a new asset profile
- const assetProfileObject: Prisma.SymbolProfileCreateInput = {
- ...assetProfile,
- user: { connect: { id: user.id } }
- };
+ if (symbol !== assetProfileWithMarketData.symbol) {
+ assetProfileSymbolMapping[assetProfileWithMarketData.symbol] =
+ symbol;
- await this.symbolProfileService.add(assetProfileObject);
+ // Keep the asset profile in sync with the activities to validate
+ assetProfileWithMarketData.symbol = symbol;
+ }
}
- // Insert or update market data
- const marketDataObjects = assetProfileWithMarketData.marketData.map(
- (marketData) => {
+ if (!isDryRun) {
+ // Insert or update market data
+ const marketDataObjects = (
+ assetProfileWithMarketData.marketData ?? []
+ ).map((marketData) => {
return {
...marketData,
- dataSource: assetProfileWithMarketData.dataSource,
- symbol: assetProfileWithMarketData.symbol
+ symbol,
+ dataSource: assetProfileWithMarketData.dataSource
} as Prisma.MarketDataUpdateInput;
- }
- );
+ });
- await this.marketDataService.updateMany({ data: marketDataObjects });
+ await this.marketDataService.updateMany({ data: marketDataObjects });
+ }
}
}
for (const activity of activitiesDto) {
- if (!activity.dataSource) {
- if (['FEE', 'INTEREST', 'LIABILITY'].includes(activity.type)) {
- activity.dataSource = DataSource.MANUAL;
- } else {
- activity.dataSource =
- this.dataProviderService.getDataSourceForImport();
- }
+ // If an asset profile is created or reused, then update the symbol in all activities
+ if (assetProfileSymbolMapping[activity.symbol]) {
+ activity.symbol = assetProfileSymbolMapping[activity.symbol];
}
if (!isDryRun) {
@@ -457,11 +540,6 @@ export class ImportService {
activity.accountId = accountIdMapping[activity.accountId];
}
- // If a new asset profile is created, then update the symbol in all activities
- if (assetProfileSymbolMapping[activity.symbol]) {
- activity.symbol = assetProfileSymbolMapping[activity.symbol];
- }
-
// If a new tag is created, then update the tag ID in all activities
activity.tags = (activity.tags ?? []).map((tagId) => {
return tagIdMapping[tagId] ?? tagId;
diff --git a/apps/api/src/services/data-provider/data-provider.service.ts b/apps/api/src/services/data-provider/data-provider.service.ts
index 4c273f2da..6031a8e25 100644
--- a/apps/api/src/services/data-provider/data-provider.service.ts
+++ b/apps/api/src/services/data-provider/data-provider.service.ts
@@ -318,7 +318,7 @@ export class DataProviderService implements OnModuleInit {
if (!assetProfile?.name) {
throw new Error(
- `activities.${index}.symbol ("${symbol}") is not valid for the specified data source ("${maskedDataSource}")`
+ `${activityPath}.symbol ("${symbol}") is not valid for the specified data source ("${maskedDataSource}")`
);
}
diff --git a/apps/api/src/services/symbol-profile/symbol-profile.service.ts b/apps/api/src/services/symbol-profile/symbol-profile.service.ts
index 1854a9f93..ebc8a94c7 100644
--- a/apps/api/src/services/symbol-profile/symbol-profile.service.ts
+++ b/apps/api/src/services/symbol-profile/symbol-profile.service.ts
@@ -105,6 +105,27 @@ export class SymbolProfileService {
};
}
+ public async getCustomSymbolProfilesByNames({
+ names,
+ userId
+ }: {
+ names: string[];
+ userId: string;
+ }): Promise[]> {
+ if (names.length === 0) {
+ return [];
+ }
+
+ return this.prismaService.symbolProfile.findMany({
+ select: { name: true, symbol: true },
+ where: {
+ userId,
+ dataSource: DataSource.MANUAL,
+ name: { in: names }
+ }
+ });
+ }
+
public async getSymbolProfiles(
aAssetProfileIdentifiers: AssetProfileIdentifier[]
): Promise {
diff --git a/apps/client/src/app/services/import-activities.service.ts b/apps/client/src/app/services/import-activities.service.ts
index 6a8f99bda..503149a03 100644
--- a/apps/client/src/app/services/import-activities.service.ts
+++ b/apps/client/src/app/services/import-activities.service.ts
@@ -5,7 +5,10 @@ import {
CreatePlatformDto,
CreateTagDto
} from '@ghostfolio/common/dtos';
-import { parseDate as parseDateHelper } from '@ghostfolio/common/helper';
+import {
+ isValidCustomAssetProfileSymbol,
+ parseDate as parseDateHelper
+} from '@ghostfolio/common/helper';
import { Activity } from '@ghostfolio/common/interfaces';
import { HttpClient } from '@angular/common/http';
@@ -14,6 +17,7 @@ import { Account, DataSource, Type as ActivityType } from '@prisma/client';
import { isFinite, isNumber, isString } from 'lodash';
import { parse as csvToJson } from 'papaparse';
import { firstValueFrom } from 'rxjs';
+import { v4 as uuidv4 } from 'uuid';
@Injectable({
providedIn: 'root'
@@ -57,13 +61,58 @@ export class ImportActivitiesService {
const activities: CreateOrderDto[] = [];
const assetProfiles: CreateAssetProfileWithMarketDataDto[] = [];
+ const assetProfileSymbolMapping = new Map();
for (const [index, item] of content.entries()) {
const currency = this.parseCurrency({ content, index, item });
- const dataSource = this.parseDataSource({ item });
- const symbol = this.parseSymbol({ content, index, item });
const type = this.parseType({ content, index, item });
+ let dataSource = this.parseDataSource({ item });
+ let symbol = this.parseSymbol({ content, index, item });
+
+ if (!dataSource && ['FEE', 'INTEREST', 'LIABILITY'].includes(type)) {
+ // Apply the same data source as the import service
+ dataSource = DataSource.MANUAL;
+ }
+
+ if (dataSource === DataSource.MANUAL) {
+ const name = symbol;
+
+ if (!isValidCustomAssetProfileSymbol(symbol)) {
+ // Generate a symbol and keep the free text as the name
+ symbol = assetProfileSymbolMapping.get(name) ?? uuidv4();
+ assetProfileSymbolMapping.set(name, symbol);
+ }
+
+ const isExistingAssetProfile = assetProfiles.some((assetProfile) => {
+ return assetProfile.symbol === symbol;
+ });
+
+ if (!isExistingAssetProfile) {
+ // Create synthetic asset profile for MANUAL data source
+ assetProfiles.push({
+ currency,
+ name,
+ symbol,
+ assetClass: undefined,
+ assetSubClass: undefined,
+ comment: undefined,
+ countries: [],
+ cusip: undefined,
+ dataSource: DataSource.MANUAL,
+ figi: undefined,
+ figiComposite: undefined,
+ figiShareClass: undefined,
+ holdings: [],
+ isActive: true,
+ isin: undefined,
+ marketData: [],
+ sectors: [],
+ url: undefined
+ });
+ }
+ }
+
activities.push({
currency,
dataSource,
@@ -77,30 +126,6 @@ export class ImportActivitiesService {
unitPrice: this.parseUnitPrice({ content, index, item }),
updateAccountBalance: false
});
-
- if (dataSource === DataSource.MANUAL) {
- // Create synthetic asset profile for MANUAL data source
- assetProfiles.push({
- currency,
- symbol,
- assetClass: undefined,
- assetSubClass: undefined,
- comment: undefined,
- countries: [],
- cusip: undefined,
- dataSource: DataSource.MANUAL,
- figi: undefined,
- figiComposite: undefined,
- figiShareClass: undefined,
- holdings: [],
- isActive: true,
- isin: undefined,
- marketData: [],
- name: symbol,
- sectors: [],
- url: undefined
- });
- }
}
const result = await this.importJson({
diff --git a/libs/common/src/lib/helper.spec.ts b/libs/common/src/lib/helper.spec.ts
index 42441a619..669c42e32 100644
--- a/libs/common/src/lib/helper.spec.ts
+++ b/libs/common/src/lib/helper.spec.ts
@@ -10,7 +10,8 @@ import {
isAccountExcluded,
isCurrency,
isCurrencySymbol,
- isSplitRatio
+ isSplitRatio,
+ isValidCustomAssetProfileSymbol
} from '@ghostfolio/common/helper';
describe('Helper', () => {
@@ -326,4 +327,32 @@ describe('Helper', () => {
);
});
});
+
+ describe('Is valid custom asset profile symbol', () => {
+ it('Empty symbol', () => {
+ expect(isValidCustomAssetProfileSymbol('')).toEqual(false);
+ });
+
+ it('Free-text symbol', () => {
+ expect(isValidCustomAssetProfileSymbol('Penthouse Apartment')).toEqual(
+ false
+ );
+ });
+
+ it('Stock symbol', () => {
+ expect(isValidCustomAssetProfileSymbol('AAPL')).toEqual(false);
+ });
+
+ it('Symbol with Ghostfolio prefix', () => {
+ expect(isValidCustomAssetProfileSymbol('GF_PENTHOUSE_APARTMENT')).toEqual(
+ true
+ );
+ });
+
+ it('UUID', () => {
+ expect(
+ isValidCustomAssetProfileSymbol('7e91b7d4-1430-4212-8380-289a06c9bbc1')
+ ).toEqual(true);
+ });
+ });
});
diff --git a/libs/common/src/lib/helper.ts b/libs/common/src/lib/helper.ts
index 22f969d02..6c0d6ea45 100644
--- a/libs/common/src/lib/helper.ts
+++ b/libs/common/src/lib/helper.ts
@@ -8,7 +8,7 @@ import {
SymbolProfile
} from '@prisma/client';
import { Big } from 'big.js';
-import { isISO4217CurrencyCode } from 'class-validator';
+import { isISO4217CurrencyCode, isUUID } from 'class-validator';
import {
getDate,
getMonth,
@@ -41,6 +41,7 @@ import {
DERIVED_CURRENCIES,
ghostfolioFearAndGreedIndexSymbolCryptocurrencies,
ghostfolioFearAndGreedIndexSymbolStocks,
+ ghostfolioPrefix,
SEARCH_QUERY_MINIMUM_LENGTH,
TAG_ID_EXCLUDE_FROM_ANALYSIS
} from './config';
@@ -466,6 +467,14 @@ export function getYesterday() {
return subDays(new Date(Date.UTC(year, month, day)), 1);
}
+export function hasGhostfolioPrefix(aSymbol: string) {
+ if (!aSymbol) {
+ return false;
+ }
+
+ return aSymbol.startsWith(`${ghostfolioPrefix}_`);
+}
+
export function interpolate(template: string, context: any) {
return template?.replace(/[$]{([^}]+)}/g, (_, objectPath) => {
const properties = objectPath.split('.');
@@ -548,6 +557,10 @@ export function isSplitRatio({
);
}
+export function isValidCustomAssetProfileSymbol(aSymbol: string) {
+ return hasGhostfolioPrefix(aSymbol) || isUUID(aSymbol);
+}
+
export function isValidSearchQuery(aQuery: string) {
return aQuery?.trim().length >= SEARCH_QUERY_MINIMUM_LENGTH;
}
diff --git a/package-lock.json b/package-lock.json
index 87cad3a36..51ee52ea1 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -97,6 +97,7 @@
"tablemark": "4.1.0",
"twitter-api-v2": "1.29.0",
"undici": "8.5.0",
+ "uuid": "14.0.1",
"yahoo-finance2": "4.0.0",
"zod": "4.4.3",
"zone.js": "0.16.1"
@@ -15985,6 +15986,16 @@
"node": ">=12"
}
},
+ "node_modules/bull/node_modules/uuid": {
+ "version": "8.3.2",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
+ "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==",
+ "deprecated": "uuid@10 and below is no longer supported. For ESM codebases, update to uuid@latest. For CommonJS codebases, use uuid@11 (but be aware this version will likely be deprecated in 2028).",
+ "license": "MIT",
+ "bin": {
+ "uuid": "dist/bin/uuid"
+ }
+ },
"node_modules/bundle-name": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz",
@@ -32154,6 +32165,17 @@
"websocket-driver": "^0.7.4"
}
},
+ "node_modules/sockjs/node_modules/uuid": {
+ "version": "8.3.2",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
+ "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==",
+ "deprecated": "uuid@10 and below is no longer supported. For ESM codebases, update to uuid@latest. For CommonJS codebases, use uuid@11 (but be aware this version will likely be deprecated in 2028).",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "uuid": "dist/bin/uuid"
+ }
+ },
"node_modules/socks": {
"version": "2.8.7",
"resolved": "https://registry.npmjs.org/socks/-/socks-2.8.7.tgz",
@@ -34664,12 +34686,16 @@
}
},
"node_modules/uuid": {
- "version": "8.3.2",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
- "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==",
+ "version": "14.0.1",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-14.0.1.tgz",
+ "integrity": "sha512-6ZxzVpzDXDa3bJWaHilVayA+BH/1zmxCJoVgvmqJnid/gPoKHxUrS/aC/T6LGQtNHT+XHG9fXPJB4d+IrU30Ew==",
+ "funding": [
+ "https://github.com/sponsors/broofa",
+ "https://github.com/sponsors/ctavan"
+ ],
"license": "MIT",
"bin": {
- "uuid": "dist/bin/uuid"
+ "uuid": "dist-node/bin/uuid"
}
},
"node_modules/v8-compile-cache-lib": {
diff --git a/package.json b/package.json
index 9ace2cbe8..61bf1c0d4 100644
--- a/package.json
+++ b/package.json
@@ -141,6 +141,7 @@
"tablemark": "4.1.0",
"twitter-api-v2": "1.29.0",
"undici": "8.5.0",
+ "uuid": "14.0.1",
"yahoo-finance2": "4.0.0",
"zod": "4.4.3",
"zone.js": "0.16.1"
diff --git a/test/import/not-ok/invalid-symbol-with-manual-data-source.json b/test/import/not-ok/invalid-symbol-with-manual-data-source.json
new file mode 100644
index 000000000..08d070e61
--- /dev/null
+++ b/test/import/not-ok/invalid-symbol-with-manual-data-source.json
@@ -0,0 +1,27 @@
+{
+ "meta": {
+ "date": "2023-02-05T00:00:00.000Z",
+ "version": "dev"
+ },
+ "activities": [
+ {
+ "accountId": null,
+ "comment": null,
+ "currency": "USD",
+ "dataSource": "MANUAL",
+ "date": "2022-01-01T00:00:00.000Z",
+ "fee": 0,
+ "quantity": 1,
+ "symbol": "Penthouse Apartment",
+ "tags": [],
+ "type": "BUY",
+ "unitPrice": 500000
+ }
+ ],
+ "user": {
+ "settings": {
+ "currency": "USD",
+ "performanceCalculationType": "ROAI"
+ }
+ }
+}
diff --git a/test/import/ok/without-accounts.json b/test/import/ok/without-accounts.json
index 2283dd889..cacbe153e 100644
--- a/test/import/ok/without-accounts.json
+++ b/test/import/ok/without-accounts.json
@@ -3,6 +3,28 @@
"date": "2022-04-01T00:00:00.000Z",
"version": "dev"
},
+ "assetProfiles": [
+ {
+ "assetClass": null,
+ "assetSubClass": null,
+ "comment": null,
+ "countries": [],
+ "currency": "USD",
+ "cusip": null,
+ "dataSource": "MANUAL",
+ "figi": null,
+ "figiComposite": null,
+ "figiShareClass": null,
+ "holdings": [],
+ "isActive": true,
+ "isin": null,
+ "marketData": [],
+ "name": "Penthouse Apartment",
+ "sectors": [],
+ "symbol": "7e91b7d4-1430-4212-8380-289a06c9bbc1",
+ "url": null
+ }
+ ],
"activities": [
{
"fee": 0,
@@ -22,7 +44,7 @@
"currency": "USD",
"dataSource": "MANUAL",
"date": "2022-01-01T00:00:00.000Z",
- "symbol": "Penthouse Apartment"
+ "symbol": "7e91b7d4-1430-4212-8380-289a06c9bbc1"
},
{
"fee": 0,
From f8e8a4772304bbbf460d87f4a05c1ec87f76303c Mon Sep 17 00:00:00 2001
From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com>
Date: Tue, 4 Aug 2026 20:36:17 +0200
Subject: [PATCH 68/86] Task/improve usability of portfolio summary by
collapsing breakdowns (#7536)
* Improve usability by collapsing breakdowns
* Update changelog
---
CHANGELOG.md | 1 +
.../portfolio-summary.component.html | 38 +++++++++++++++++--
.../portfolio-summary.component.scss | 13 +++++++
.../portfolio-summary.component.ts | 25 +++++++++++-
4 files changed, 72 insertions(+), 5 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 538815f1d..8109d54f7 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
### Changed
+- Improved the usability of the portfolio summary by collapsing the _Holdings_ and _Cash_ breakdowns by default
- Extended the support of the _Exclude from Analysis_ tag from accounts to activities
- Optimized the performance of the search in the assistant by reusing the cached portfolio snapshot
- Improved the validation of the import functionality when referencing an asset profile with the data source `MANUAL`
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 e4ff1ba93..9394d7624 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
@@ -164,7 +164,22 @@
-
+
+ @if (hasHoldingsBreakdown) {
+
+
+
+ }
Holdings
@if (
!hasImpersonationId &&
@@ -192,7 +207,7 @@
/>
- @if (isLoading || summary?.emergencyFund?.assets > 0) {
+ @if (hasHoldingsBreakdown && isHoldingsExpanded) {
Investments
@@ -223,7 +238,22 @@
}
-
+
+ @if (hasCashBreakdown) {
+
+
+
+ }
Cash
@if (
!hasImpersonationId &&
@@ -251,7 +281,7 @@
/>
- @if (isLoading || summary?.emergencyFund?.cash > 0) {
+ @if (hasCashBreakdown && isCashExpanded) {
Buying Power
diff --git a/apps/client/src/app/components/portfolio-summary/portfolio-summary.component.scss b/apps/client/src/app/components/portfolio-summary/portfolio-summary.component.scss
index 6feaa22d1..534976f11 100644
--- a/apps/client/src/app/components/portfolio-summary/portfolio-summary.component.scss
+++ b/apps/client/src/app/components/portfolio-summary/portfolio-summary.component.scss
@@ -1,6 +1,19 @@
:host {
display: block;
+ .caret-container {
+ width: 1rem;
+
+ .caret {
+ font-size: 0.7rem;
+ transition: transform 150ms ease-in-out;
+
+ &.caret-expanded {
+ transform: rotate(90deg);
+ }
+ }
+ }
+
.indent-1 {
margin-left: 1rem;
}
diff --git a/apps/client/src/app/components/portfolio-summary/portfolio-summary.component.ts b/apps/client/src/app/components/portfolio-summary/portfolio-summary.component.ts
index eaf71210f..eac5ef9a6 100644
--- a/apps/client/src/app/components/portfolio-summary/portfolio-summary.component.ts
+++ b/apps/client/src/app/components/portfolio-summary/portfolio-summary.component.ts
@@ -18,6 +18,7 @@ import { IonIcon } from '@ionic/angular/standalone';
import { formatDistanceToNow } from 'date-fns';
import { addIcons } from 'ionicons';
import {
+ caretForwardOutline,
ellipsisHorizontalCircleOutline,
informationCircleOutline
} from 'ionicons/icons';
@@ -47,13 +48,19 @@ export class GfPortfolioSummaryComponent implements OnChanges {
'BUY_AND_SELL_ACTIVITIES_TOOLTIP'
);
+ protected isCashExpanded = false;
+ protected isHoldingsExpanded = false;
protected precision = 2;
protected timeInMarket: string | undefined;
private readonly notificationService = inject(NotificationService);
public constructor() {
- addIcons({ ellipsisHorizontalCircleOutline, informationCircleOutline });
+ addIcons({
+ caretForwardOutline,
+ ellipsisHorizontalCircleOutline,
+ informationCircleOutline
+ });
}
protected get cashPercentage() {
@@ -77,6 +84,14 @@ export class GfPortfolioSummaryComponent implements OnChanges {
: 0;
}
+ protected get hasCashBreakdown() {
+ return !this.isLoading && this.summary?.emergencyFund?.cash > 0;
+ }
+
+ protected get hasHoldingsBreakdown() {
+ return !this.isLoading && this.summary?.emergencyFund?.assets > 0;
+ }
+
protected get holdingsInBaseCurrency() {
if (
!isNumber(this.summary?.totalAssetsInBaseCurrency) ||
@@ -145,4 +160,12 @@ export class GfPortfolioSummaryComponent implements OnChanges {
title: $localize`Please set the amount of your emergency fund.`
});
}
+
+ protected onToggleCash() {
+ this.isCashExpanded = !this.isCashExpanded;
+ }
+
+ protected onToggleHoldings() {
+ this.isHoldingsExpanded = !this.isHoldingsExpanded;
+ }
}
From 9f5c231a70d538878ede77df491a3fe98c7b91e0 Mon Sep 17 00:00:00 2001
From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com>
Date: Tue, 4 Aug 2026 20:38:37 +0200
Subject: [PATCH 69/86] Release 3.42.0 (#7539)
---
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 8109d54f7..0b5d73495 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
+## 3.42.0 - 2026-08-04
### Changed
diff --git a/package-lock.json b/package-lock.json
index 51ee52ea1..06b0efda2 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,12 +1,12 @@
{
"name": "ghostfolio",
- "version": "3.41.0",
+ "version": "3.42.0",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "ghostfolio",
- "version": "3.41.0",
+ "version": "3.42.0",
"hasInstallScript": true,
"license": "AGPL-3.0",
"dependencies": {
diff --git a/package.json b/package.json
index 61bf1c0d4..4bbda525e 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "ghostfolio",
- "version": "3.41.0",
+ "version": "3.42.0",
"homepage": "https://ghostfol.io",
"license": "AGPL-3.0",
"repository": "https://github.com/ghostfolio/ghostfolio",
From 5bbdf52e191dc6ff1df3dab56238db121f83de27 Mon Sep 17 00:00:00 2001
From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com>
Date: Tue, 4 Aug 2026 20:57:02 +0200
Subject: [PATCH 70/86] Feature/add platform logo to account selector in create
or update activity dialog (#7524)
* Add platform logo to account selector
* Update changelog
---
CHANGELOG.md | 6 ++++++
apps/api/src/app/user/user.service.ts | 1 +
.../create-or-update-activity-dialog.component.ts | 6 ++++++
.../create-or-update-activity-dialog.html | 13 +++++++++++++
.../interfaces/interfaces.ts | 5 ++---
5 files changed, 28 insertions(+), 3 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 0b5d73495..fb6b3ef37 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 the platform logo to the account selector in the create or update activity dialog
+
## 3.42.0 - 2026-08-04
### Changed
diff --git a/apps/api/src/app/user/user.service.ts b/apps/api/src/app/user/user.service.ts
index 10e9c5240..8fb11ad34 100644
--- a/apps/api/src/app/user/user.service.ts
+++ b/apps/api/src/app/user/user.service.ts
@@ -136,6 +136,7 @@ export class UserService {
where: { granteeUserId: id }
}),
this.prismaService.account.findMany({
+ include: { platform: true },
orderBy: {
name: 'asc'
},
diff --git a/apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.component.ts b/apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.component.ts
index 3b80d2825..07f596711 100644
--- a/apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.component.ts
+++ b/apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.component.ts
@@ -121,6 +121,12 @@ export class GfCreateOrUpdateActivityDialogComponent {
addIcons({ calendarClearOutline, refreshOutline });
}
+ protected get selectedAccount() {
+ return this.data.accounts.find(({ id }) => {
+ return id === this.activityForm.get('accountId')?.value;
+ });
+ }
+
public ngOnInit() {
this.currencyOfAssetProfile = this.data.activity?.assetProfile?.currency;
this.hasPermissionToCreateOwnTag = hasPermission(
diff --git a/apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html b/apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
index b5dbf4669..b3c708167 100644
--- a/apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
+++ b/apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
@@ -85,6 +85,19 @@
>
Account
+
+
+ @if (selectedAccount?.platform?.url) {
+
+ }
+ {{ selectedAccount?.name }}
+
+
+
@for (account of data.accounts; track account) {
diff --git a/apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/interfaces/interfaces.ts b/apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/interfaces/interfaces.ts
index a3d58f8eb..7faed5312 100644
--- a/apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/interfaces/interfaces.ts
+++ b/apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/interfaces/interfaces.ts
@@ -1,9 +1,8 @@
import { Activity, User } from '@ghostfolio/common/interfaces';
-
-import { Account } from '@prisma/client';
+import { AccountWithPlatform } from '@ghostfolio/common/types';
export interface CreateOrUpdateActivityDialogParams {
- accounts: Account[];
+ accounts: AccountWithPlatform[];
activity: Partial> & {
assetProfile: Activity['assetProfile'] | null;
id: string | null;
From b812bc74219bf96c10000b6a15bb3a6f79e5c368 Mon Sep 17 00:00:00 2001
From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com>
Date: Wed, 5 Aug 2026 07:34:21 +0200
Subject: [PATCH 71/86] Task/guard system tags in admin control panel (#7532)
* Guard system tags against deletion and renaming
* Update changelog
---
CHANGELOG.md | 4 ++++
apps/api/src/app/endpoints/tags/tags.controller.ts | 5 +++--
.../components/admin-tag/admin-tag.component.html | 12 ++++++++++--
.../app/components/admin-tag/admin-tag.component.ts | 9 +++++++--
libs/common/src/lib/config.ts | 8 +++++++-
libs/common/src/lib/helper.ts | 9 ++++++++-
6 files changed, 39 insertions(+), 8 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index fb6b3ef37..426cca929 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 the platform logo to the account selector in the create or update activity dialog
+### Changed
+
+- Guarded the system tags against deletion and renaming in the tag management of the admin control panel
+
## 3.42.0 - 2026-08-04
### Changed
diff --git a/apps/api/src/app/endpoints/tags/tags.controller.ts b/apps/api/src/app/endpoints/tags/tags.controller.ts
index 21e29c6ab..cd043b593 100644
--- a/apps/api/src/app/endpoints/tags/tags.controller.ts
+++ b/apps/api/src/app/endpoints/tags/tags.controller.ts
@@ -2,6 +2,7 @@ import { HasPermission } from '@ghostfolio/api/decorators/has-permission.decorat
import { HasPermissionGuard } from '@ghostfolio/api/guards/has-permission.guard';
import { TagService } from '@ghostfolio/api/services/tag/tag.service';
import { CreateTagDto, UpdateTagDto } from '@ghostfolio/common/dtos';
+import { isSystemTag } from '@ghostfolio/common/helper';
import { hasPermission, permissions } from '@ghostfolio/common/permissions';
import { RequestWithUser } from '@ghostfolio/common/types';
@@ -69,7 +70,7 @@ export class TagsController {
id
});
- if (!originalTag) {
+ if (!originalTag || isSystemTag(originalTag)) {
throw new HttpException(
getReasonPhrase(StatusCodes.FORBIDDEN),
StatusCodes.FORBIDDEN
@@ -94,7 +95,7 @@ export class TagsController {
id
});
- if (!originalTag) {
+ if (!originalTag || isSystemTag(originalTag)) {
throw new HttpException(
getReasonPhrase(StatusCodes.FORBIDDEN),
StatusCodes.FORBIDDEN
diff --git a/apps/client/src/app/components/admin-tag/admin-tag.component.html b/apps/client/src/app/components/admin-tag/admin-tag.component.html
index 2edad000d..c7cbe37c0 100644
--- a/apps/client/src/app/components/admin-tag/admin-tag.component.html
+++ b/apps/client/src/app/components/admin-tag/admin-tag.component.html
@@ -83,7 +83,11 @@
-
+
Edit ...
@@ -92,7 +96,11 @@
0 || element.activityCount > 0"
+ [disabled]="
+ element.accountCount > 0 ||
+ element.activityCount > 0 ||
+ isSystemTag(element)
+ "
(click)="onDeleteTag(element.id)"
>
diff --git a/apps/client/src/app/components/admin-tag/admin-tag.component.ts b/apps/client/src/app/components/admin-tag/admin-tag.component.ts
index ca9143e53..12ac1f368 100644
--- a/apps/client/src/app/components/admin-tag/admin-tag.component.ts
+++ b/apps/client/src/app/components/admin-tag/admin-tag.component.ts
@@ -2,7 +2,11 @@ import { UserService } from '@ghostfolio/client/services/user/user.service';
import { DEFAULT_PAGE_SIZE } from '@ghostfolio/common/config';
import { CreateTagDto, UpdateTagDto } from '@ghostfolio/common/dtos';
import { ConfirmationDialogType } from '@ghostfolio/common/enums';
-import { getLocale, getLowercase } from '@ghostfolio/common/helper';
+import {
+ getLocale,
+ getLowercase,
+ isSystemTag
+} from '@ghostfolio/common/helper';
import { translate } from '@ghostfolio/ui/i18n';
import { NotificationService } from '@ghostfolio/ui/notifications';
import { DataService } from '@ghostfolio/ui/services';
@@ -67,6 +71,7 @@ export class GfAdminTagComponent implements OnInit {
'activities',
'actions'
];
+ protected readonly isSystemTag = isSystemTag;
protected readonly pageSize = DEFAULT_PAGE_SIZE;
protected tags: Tag[];
protected readonly translate = translate;
@@ -99,7 +104,7 @@ export class GfAdminTagComponent implements OnInit {
return id === params['tagId'];
});
- if (tag) {
+ if (tag && !isSystemTag(tag)) {
this.openUpdateTagDialog(tag);
}
} else {
diff --git a/libs/common/src/lib/config.ts b/libs/common/src/lib/config.ts
index bb4ace0c5..cbd77740a 100644
--- a/libs/common/src/lib/config.ts
+++ b/libs/common/src/lib/config.ts
@@ -338,10 +338,16 @@ export const SUPPORTED_LANGUAGE_CODES = [
'zh'
] as const;
+export const TAG_ID_DEMO = 'efa08cb3-9b9d-4974-ac68-db13a19c4874';
export const TAG_ID_EMERGENCY_FUND = '4452656d-9fa4-4bd0-ba38-70492e31d180';
export const TAG_ID_EXCLUDE_FROM_ANALYSIS =
'f2e868af-8333-459f-b161-cbc6544c24bd';
-export const TAG_ID_DEMO = 'efa08cb3-9b9d-4974-ac68-db13a19c4874';
+
+export const TAG_IDS_SYSTEM = [
+ TAG_ID_DEMO,
+ TAG_ID_EMERGENCY_FUND,
+ TAG_ID_EXCLUDE_FROM_ANALYSIS
+];
export const THROTTLE_DAILY_KEY = 'daily';
export const THROTTLE_DAILY_TTL = ms('1 day');
diff --git a/libs/common/src/lib/helper.ts b/libs/common/src/lib/helper.ts
index 6c0d6ea45..0778f84f1 100644
--- a/libs/common/src/lib/helper.ts
+++ b/libs/common/src/lib/helper.ts
@@ -43,7 +43,8 @@ import {
ghostfolioFearAndGreedIndexSymbolStocks,
ghostfolioPrefix,
SEARCH_QUERY_MINIMUM_LENGTH,
- TAG_ID_EXCLUDE_FROM_ANALYSIS
+ TAG_ID_EXCLUDE_FROM_ANALYSIS,
+ TAG_IDS_SYSTEM
} from './config';
import {
AssetProfileIdentifier,
@@ -557,6 +558,12 @@ export function isSplitRatio({
);
}
+export function isSystemTag(tag?: { id: string }) {
+ return TAG_IDS_SYSTEM.some((id) => {
+ return id === tag?.id;
+ });
+}
+
export function isValidCustomAssetProfileSymbol(aSymbol: string) {
return hasGhostfolioPrefix(aSymbol) || isUUID(aSymbol);
}
From db44b5a0373680d0af3a4c70cf96018a9e63e6bf Mon Sep 17 00:00:00 2001
From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com>
Date: Wed, 5 Aug 2026 07:35:03 +0200
Subject: [PATCH 72/86] Feature/add platform logo to platform selector in
create or update account dialog (#7528)
* Add platform logo to platform selector
* Update changelog
---
CHANGELOG.md | 1 +
.../create-or-update-account-dialog.component.ts | 6 ++++++
.../create-or-update-account-dialog.html | 8 ++++++++
3 files changed, 15 insertions(+)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 426cca929..4b541d5af 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
### Added
+- Added the platform logo to the platform selector in the create or update account dialog
- Added the platform logo to the account selector in the create or update activity dialog
### Changed
diff --git a/apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.component.ts b/apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.component.ts
index 86fc84711..c1d171b6f 100644
--- a/apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.component.ts
+++ b/apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.component.ts
@@ -76,6 +76,12 @@ export class GfCreateOrUpdateAccountDialogComponent {
private readonly formBuilder = inject(FormBuilder);
private readonly userService = inject(UserService);
+ protected get selectedPlatform() {
+ const platform = this.accountForm.get('platformId')?.value;
+
+ return typeof platform === 'string' ? undefined : (platform as Platform);
+ }
+
public ngOnInit() {
const { currencies } = this.dataService.fetchInfo();
this.currencies = currencies;
diff --git a/apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html b/apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html
index 4e4c62b6f..85cd9dcfe 100644
--- a/apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html
+++ b/apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html
@@ -46,6 +46,14 @@
Platform
+ @if (selectedPlatform?.url) {
+
+ }
Date: Wed, 5 Aug 2026 17:37:51 +0200
Subject: [PATCH 73/86] Task/improve log of symbol lookup in Trackinsight data
enhancer (#7543)
Improve log level and message
---
.../trackinsight/trackinsight.service.ts | 14 ++++++--------
1 file changed, 6 insertions(+), 8 deletions(-)
diff --git a/apps/api/src/services/data-provider/data-enhancer/trackinsight/trackinsight.service.ts b/apps/api/src/services/data-provider/data-enhancer/trackinsight/trackinsight.service.ts
index 64a8bf4ef..29e4e5129 100644
--- a/apps/api/src/services/data-provider/data-enhancer/trackinsight/trackinsight.service.ts
+++ b/apps/api/src/services/data-provider/data-enhancer/trackinsight/trackinsight.service.ts
@@ -50,12 +50,10 @@ export class TrackinsightDataEnhancerService implements DataEnhancerInterface {
response: Partial;
symbol: string;
}): Promise> {
- if (
- !(
- response.assetClass === 'EQUITY' &&
- ['ETF', 'MUTUALFUND'].includes(response.assetSubClass)
- )
- ) {
+ if (!(
+ response.assetClass === 'EQUITY' &&
+ ['ETF', 'MUTUALFUND'].includes(response.assetSubClass)
+ )) {
return response;
}
@@ -214,8 +212,8 @@ export class TrackinsightDataEnhancerService implements DataEnhancerInterface {
return undefined;
})
.catch(({ message }) => {
- this.logger.error(
- `Failed to search Trackinsight symbol for ${symbol} (${message})`
+ this.logger.warn(
+ `Could not search Trackinsight symbol for "${symbol}": ${message}`
);
return undefined;
From ee7c3037715dc0199cdc8866311454661c0d97c9 Mon Sep 17 00:00:00 2001
From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com>
Date: Wed, 5 Aug 2026 17:38:25 +0200
Subject: [PATCH 74/86] Bugfix/handle exception in country weightings parsing
of FMP service (#7544)
* Handle exception in country weightings parsing
* Update changelog
---
CHANGELOG.md | 4 ++++
.../financial-modeling-prep.service.ts | 2 +-
2 files changed, 5 insertions(+), 1 deletion(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 4b541d5af..1ac12156e 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -16,6 +16,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- Guarded the system tags against deletion and renaming in the tag management of the admin control panel
+### Fixed
+
+- Handled an exception in the country weightings parsing of the _Financial Modeling Prep_ service
+
## 3.42.0 - 2026-08-04
### Changed
diff --git a/apps/api/src/services/data-provider/financial-modeling-prep/financial-modeling-prep.service.ts b/apps/api/src/services/data-provider/financial-modeling-prep/financial-modeling-prep.service.ts
index 05df65ad1..f7f2e7eb9 100644
--- a/apps/api/src/services/data-provider/financial-modeling-prep/financial-modeling-prep.service.ts
+++ b/apps/api/src/services/data-provider/financial-modeling-prep/financial-modeling-prep.service.ts
@@ -178,7 +178,7 @@ export class FinancialModelingPrepService
aliases: FinancialModelingPrepService.countriesMapping,
name: countryName
}),
- weight: parseFloat(weightPercentage.slice(0, -1)) / 100
+ weight: parseFloat(`${weightPercentage}`) / 100
};
});
From 52f8068ab048cc25fd3b04bfc7cfa3e975eea7ac Mon Sep 17 00:00:00 2001
From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com>
Date: Wed, 5 Aug 2026 21:31:18 +0200
Subject: [PATCH 75/86] Task/remove deprecated isExcluded attribute from import
test files (#7547)
Remove deprecated attribute
---
test/import/ok/500-activities.json | 1 -
test/import/ok/derived-currency.json | 1 -
test/import/ok/sample.json | 1 -
3 files changed, 3 deletions(-)
diff --git a/test/import/ok/500-activities.json b/test/import/ok/500-activities.json
index 2793c695e..03aabca33 100644
--- a/test/import/ok/500-activities.json
+++ b/test/import/ok/500-activities.json
@@ -8,7 +8,6 @@
"balance": 2000,
"currency": "USD",
"id": "b2d3fe1d-d6a8-41a3-be39-07ef5e9480f0",
- "isExcluded": false,
"name": "My Online Trading Account",
"platformId": null
}
diff --git a/test/import/ok/derived-currency.json b/test/import/ok/derived-currency.json
index 637ab21b6..4b7aa46c3 100644
--- a/test/import/ok/derived-currency.json
+++ b/test/import/ok/derived-currency.json
@@ -8,7 +8,6 @@
"balance": 2000,
"currency": "USD",
"id": "b2d3fe1d-d6a8-41a3-be39-07ef5e9480f0",
- "isExcluded": false,
"name": "My Online Trading Account",
"platformId": null
}
diff --git a/test/import/ok/sample.json b/test/import/ok/sample.json
index be385812a..feca8a379 100644
--- a/test/import/ok/sample.json
+++ b/test/import/ok/sample.json
@@ -19,7 +19,6 @@
"comment": null,
"currency": "USD",
"id": "b2d3fe1d-d6a8-41a3-be39-07ef5e9480f0",
- "isExcluded": false,
"name": "My Online Trading Account",
"platformId": "9da3a8a7-4795-43e3-a6db-ccb914189737"
}
From 9c78bc29a476719f5bd516234bf0c28c17b21a73 Mon Sep 17 00:00:00 2001
From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com>
Date: Thu, 6 Aug 2026 07:41:19 +0200
Subject: [PATCH 76/86] Task/extract non-investment activity types constant
(#7535)
Extract non-investment activity type
---
apps/api/src/app/activities/activities.service.ts | 7 ++++---
apps/api/src/app/import/import.service.ts | 3 ++-
.../src/services/data-provider/data-provider.service.ts | 3 ++-
apps/client/src/app/services/import-activities.service.ts | 3 ++-
libs/common/src/lib/config.ts | 6 ++++++
5 files changed, 16 insertions(+), 6 deletions(-)
diff --git a/apps/api/src/app/activities/activities.service.ts b/apps/api/src/app/activities/activities.service.ts
index ef3839340..140726aeb 100644
--- a/apps/api/src/app/activities/activities.service.ts
+++ b/apps/api/src/app/activities/activities.service.ts
@@ -20,6 +20,7 @@ import {
DATA_GATHERING_QUEUE_PRIORITY_HIGH,
GATHER_ASSET_PROFILE_PROCESS_JOB_NAME,
GATHER_ASSET_PROFILE_PROCESS_JOB_OPTIONS,
+ NON_INVESTMENT_ACTIVITY_TYPES,
TAG_ID_EXCLUDE_FROM_ANALYSIS
} from '@ghostfolio/common/config';
import {
@@ -191,7 +192,7 @@ export class ActivitiesService {
const userId = data.userId;
if (
- ['FEE', 'INTEREST', 'LIABILITY'].includes(data.type) ||
+ NON_INVESTMENT_ACTIVITY_TYPES.includes(data.type) ||
(data.SymbolProfile.connectOrCreate.create.dataSource === 'MANUAL' &&
data.type === 'BUY')
) {
@@ -260,7 +261,7 @@ export class ActivitiesService {
const orderData: Prisma.OrderCreateInput = data;
- const isDraft = ['FEE', 'INTEREST', 'LIABILITY'].includes(data.type)
+ const isDraft = NON_INVESTMENT_ACTIVITY_TYPES.includes(data.type)
? false
: isAfter(data.date as Date, endOfToday());
@@ -981,7 +982,7 @@ export class ActivitiesService {
let isDraft = false;
if (
- ['FEE', 'INTEREST', 'LIABILITY'].includes(data.type) ||
+ NON_INVESTMENT_ACTIVITY_TYPES.includes(data.type) ||
(data.SymbolProfile.connect.dataSource_symbol.dataSource === 'MANUAL' &&
data.type === 'BUY')
) {
diff --git a/apps/api/src/app/import/import.service.ts b/apps/api/src/app/import/import.service.ts
index be511df44..96612522e 100644
--- a/apps/api/src/app/import/import.service.ts
+++ b/apps/api/src/app/import/import.service.ts
@@ -12,6 +12,7 @@ import { TagService } from '@ghostfolio/api/services/tag/tag.service';
import {
DATA_GATHERING_QUEUE_PRIORITY_HIGH,
ghostfolioPrefix,
+ NON_INVESTMENT_ACTIVITY_TYPES,
TAG_ID_EXCLUDE_FROM_ANALYSIS
} from '@ghostfolio/common/config';
import { CreateAssetProfileDto, CreateOrderDto } from '@ghostfolio/common/dtos';
@@ -217,7 +218,7 @@ export class ImportService {
// createActivity() if needed.
for (const [index, activity] of activitiesDto.entries()) {
if (!activity.dataSource) {
- if (['FEE', 'INTEREST', 'LIABILITY'].includes(activity.type)) {
+ if (NON_INVESTMENT_ACTIVITY_TYPES.includes(activity.type)) {
activity.dataSource = DataSource.MANUAL;
} else {
activity.dataSource =
diff --git a/apps/api/src/services/data-provider/data-provider.service.ts b/apps/api/src/services/data-provider/data-provider.service.ts
index 6031a8e25..c5de3e4e5 100644
--- a/apps/api/src/services/data-provider/data-provider.service.ts
+++ b/apps/api/src/services/data-provider/data-provider.service.ts
@@ -9,6 +9,7 @@ import { PropertyService } from '@ghostfolio/api/services/property/property.serv
import {
DEFAULT_CURRENCY,
DERIVED_CURRENCIES,
+ NON_INVESTMENT_ACTIVITY_TYPES,
PROPERTY_API_KEY_GHOSTFOLIO,
PROPERTY_DATA_SOURCE_MAPPING
} from '@ghostfolio/common/config';
@@ -268,7 +269,7 @@ export class DataProviderService implements OnModuleInit {
if (!assetProfiles[assetProfileIdentifier]) {
if (
(dataSource === DataSource.MANUAL && type === 'BUY') ||
- ['FEE', 'INTEREST', 'LIABILITY'].includes(type)
+ NON_INVESTMENT_ACTIVITY_TYPES.includes(type)
) {
const assetProfileInImport = assetProfilesWithMarketDataDto?.find(
(assetProfile) => {
diff --git a/apps/client/src/app/services/import-activities.service.ts b/apps/client/src/app/services/import-activities.service.ts
index 503149a03..b73676252 100644
--- a/apps/client/src/app/services/import-activities.service.ts
+++ b/apps/client/src/app/services/import-activities.service.ts
@@ -1,3 +1,4 @@
+import { NON_INVESTMENT_ACTIVITY_TYPES } from '@ghostfolio/common/config';
import {
CreateAccountWithBalancesDto,
CreateAssetProfileWithMarketDataDto,
@@ -70,7 +71,7 @@ export class ImportActivitiesService {
let dataSource = this.parseDataSource({ item });
let symbol = this.parseSymbol({ content, index, item });
- if (!dataSource && ['FEE', 'INTEREST', 'LIABILITY'].includes(type)) {
+ if (!dataSource && NON_INVESTMENT_ACTIVITY_TYPES.includes(type)) {
// Apply the same data source as the import service
dataSource = DataSource.MANUAL;
}
diff --git a/libs/common/src/lib/config.ts b/libs/common/src/lib/config.ts
index cbd77740a..08a6701dc 100644
--- a/libs/common/src/lib/config.ts
+++ b/libs/common/src/lib/config.ts
@@ -231,6 +231,12 @@ export const INVESTMENT_ACTIVITY_TYPES = [
Type.SELL
] as Type[];
+export const NON_INVESTMENT_ACTIVITY_TYPES = Object.values(Type).filter(
+ (type) => {
+ return !INVESTMENT_ACTIVITY_TYPES.includes(type);
+ }
+);
+
export const PORTFOLIO_SNAPSHOT_PROCESS_JOB_NAME = 'PORTFOLIO';
export const PORTFOLIO_SNAPSHOT_PROCESS_JOB_OPTIONS: JobOptions = {
removeOnComplete: true
From 0530e098fb0fbff08b79b5cac156f944d2205724 Mon Sep 17 00:00:00 2001
From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com>
Date: Thu, 6 Aug 2026 07:45:03 +0200
Subject: [PATCH 77/86] Task/extend value component by isLoading attribute
(#7540)
* Introduce isLoading attribute
* Update changelog
---
CHANGELOG.md | 1 +
.../account-detail-dialog.component.ts | 3 +
.../account-detail-dialog.html | 7 ++
.../asset-profile-dialog.component.ts | 3 +
.../asset-profile-dialog.html | 10 +-
.../admin-overview/admin-overview.html | 3 +
.../holding-detail-dialog.component.ts | 3 +
.../holding-detail-dialog.html | 14 +++
.../portfolio-performance.component.html | 14 +--
.../portfolio-summary.component.html | 97 +++++++++++--------
.../user-account-settings.component.ts | 3 +
.../user-account-settings.html | 1 +
.../user-detail-dialog.html | 39 +++++---
.../allocations/allocations-page.html | 11 ++-
.../portfolio/analysis/analysis-page.html | 69 +++++--------
.../app/pages/public/public-page.component.ts | 3 +
.../src/app/pages/public/public-page.html | 12 +--
.../activities-table.component.html | 18 ++--
.../benchmark-detail-dialog.component.ts | 3 +
.../benchmark-detail-dialog.html | 1 +
.../holdings-table.component.html | 21 ++--
libs/ui/src/lib/value/value.component.html | 26 ++---
.../src/lib/value/value.component.stories.ts | 5 +-
libs/ui/src/lib/value/value.component.ts | 4 +-
24 files changed, 214 insertions(+), 157 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 1ac12156e..e1171d2fb 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -11,6 +11,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- Added the platform logo to the platform selector in the create or update account dialog
- Added the platform logo to the account selector in the create or update activity dialog
+- Extended the value component by an `isLoading` attribute to distinguish the loading state from redacted values
### Changed
diff --git a/apps/client/src/app/components/account-detail-dialog/account-detail-dialog.component.ts b/apps/client/src/app/components/account-detail-dialog/account-detail-dialog.component.ts
index d1845222a..e81b8cf06 100644
--- a/apps/client/src/app/components/account-detail-dialog/account-detail-dialog.component.ts
+++ b/apps/client/src/app/components/account-detail-dialog/account-detail-dialog.component.ts
@@ -102,6 +102,7 @@ export class GfAccountDetailDialogComponent implements OnInit {
protected holdings: PortfolioPosition[];
protected interestInBaseCurrency: number;
protected interestInBaseCurrencyPrecision = 2;
+ protected isLoading = true;
protected isLoadingChart: boolean;
protected name: string | null;
protected pageIndex = 0;
@@ -302,6 +303,8 @@ export class GfAccountDetailDialogComponent implements OnInit {
this.valueInBaseCurrency = valueInBaseCurrency;
+ this.isLoading = false;
+
this.changeDetectorRef.markForCheck();
}
);
diff --git a/apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html b/apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
index ff39f23b3..485af7500 100644
--- a/apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
+++ b/apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
@@ -12,6 +12,7 @@
@@ -108,6 +114,7 @@
Platform Symbol
@@ -191,6 +192,7 @@
}
- Currency
@@ -231,6 +237,7 @@
i18n
size="medium"
[isDate]="assetProfile?.dateOfFirstActivity ? true : false"
+ [isLoading]="isLoading"
[locale]="data.locale"
[value]="assetProfile?.dateOfFirstActivity ?? '-'"
>First Activity Activities Version
@@ -19,6 +20,7 @@
Users ;
protected investmentInBaseCurrencyWithCurrencyEffect: number;
protected investmentInBaseCurrencyWithCurrencyEffectPrecision = 2;
+ protected isLoading = true;
protected readonly isUUID = isUUID;
protected marketDataItems: MarketData[] = [];
protected marketPrice: number;
@@ -571,6 +572,8 @@ export class GfHoldingDetailDialogComponent implements OnInit {
this.fetchMarketData();
}
+ this.isLoading = false;
+
this.changeDetectorRef.markForCheck();
}
);
diff --git a/apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html b/apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
index c4f53497f..eccc62b4c 100644
--- a/apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
+++ b/apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
@@ -12,6 +12,7 @@
First Activity
diff --git a/apps/client/src/app/components/portfolio-performance/portfolio-performance.component.html b/apps/client/src/app/components/portfolio-performance/portfolio-performance.component.html
index 7b9522956..d6339a5ff 100644
--- a/apps/client/src/app/components/portfolio-performance/portfolio-performance.component.html
+++ b/apps/client/src/app/components/portfolio-performance/portfolio-performance.component.html
@@ -38,24 +38,18 @@
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 9394d7624..520986c89 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
@@ -2,7 +2,11 @@
@@ -46,10 +51,11 @@
@@ -62,14 +68,11 @@
@@ -79,12 +82,11 @@
@@ -97,10 +99,11 @@
@@ -113,12 +116,11 @@
@@ -136,13 +138,10 @@
class="justify-content-end"
position="end"
[colorizeSign]="true"
+ [isLoading]="isLoading"
[isPercent]="true"
[locale]="locale"
- [value]="
- isLoading
- ? undefined
- : summary?.netPerformancePercentageWithCurrencyEffect
- "
+ [value]="summary?.netPerformancePercentageWithCurrencyEffect"
/>
@@ -156,10 +155,11 @@
class="justify-content-end"
position="end"
[isCurrency]="true"
+ [isLoading]="isLoading"
[locale]="locale"
[precision]="precision"
[unit]="baseCurrency"
- [value]="isLoading ? undefined : summary?.totalAssetsInBaseCurrency"
+ [value]="summary?.totalAssetsInBaseCurrency"
/>
@@ -188,10 +188,11 @@
) {
}
@@ -200,10 +201,11 @@
class="justify-content-end"
position="end"
[isCurrency]="true"
+ [isLoading]="isLoading"
[locale]="locale"
[precision]="precision"
[unit]="baseCurrency"
- [value]="isLoading ? undefined : holdingsInBaseCurrency"
+ [value]="holdingsInBaseCurrency"
/>
@@ -215,10 +217,11 @@
class="justify-content-end"
position="end"
[isCurrency]="true"
+ [isLoading]="isLoading"
[locale]="locale"
[precision]="precision"
[unit]="baseCurrency"
- [value]="isLoading ? undefined : investmentsInBaseCurrency"
+ [value]="investmentsInBaseCurrency"
/>
@@ -229,10 +232,11 @@
class="justify-content-end"
position="end"
[isCurrency]="true"
+ [isLoading]="isLoading"
[locale]="locale"
[precision]="precision"
[unit]="baseCurrency"
- [value]="isLoading ? undefined : summary?.emergencyFund?.assets"
+ [value]="summary?.emergencyFund?.assets"
/>
@@ -262,10 +266,11 @@
) {
}
@@ -274,10 +279,11 @@
class="justify-content-end"
position="end"
[isCurrency]="true"
+ [isLoading]="isLoading"
[locale]="locale"
[precision]="precision"
[unit]="baseCurrency"
- [value]="isLoading ? undefined : summary?.totalCashInBaseCurrency"
+ [value]="summary?.totalCashInBaseCurrency"
/>
@@ -289,10 +295,11 @@
class="justify-content-end"
position="end"
[isCurrency]="true"
+ [isLoading]="isLoading"
[locale]="locale"
[precision]="precision"
[unit]="baseCurrency"
- [value]="isLoading ? undefined : summary?.cash"
+ [value]="summary?.cash"
/>
@@ -303,10 +310,11 @@
class="justify-content-end"
position="end"
[isCurrency]="true"
+ [isLoading]="isLoading"
[locale]="locale"
[precision]="precision"
[unit]="baseCurrency"
- [value]="isLoading ? undefined : summary?.emergencyFund?.cash"
+ [value]="summary?.emergencyFund?.cash"
/>
@@ -321,20 +329,22 @@
) {
}
@@ -353,10 +363,11 @@
@@ -369,10 +380,11 @@
@@ -385,13 +397,10 @@
class="justify-content-end"
position="end"
[colorizeSign]="true"
+ [isLoading]="isLoading"
[isPercent]="true"
[locale]="locale"
- [value]="
- isLoading
- ? undefined
- : summary?.annualizedPerformancePercentWithCurrencyEffect
- "
+ [value]="summary?.annualizedPerformancePercentWithCurrencyEffect"
/>
@@ -408,10 +417,11 @@
) {
}
@@ -443,10 +453,11 @@
@@ -456,10 +467,11 @@
@@ -469,10 +481,11 @@
diff --git a/apps/client/src/app/components/user-account-settings/user-account-settings.component.ts b/apps/client/src/app/components/user-account-settings/user-account-settings.component.ts
index 0a049a7ae..b48adf59d 100644
--- a/apps/client/src/app/components/user-account-settings/user-account-settings.component.ts
+++ b/apps/client/src/app/components/user-account-settings/user-account-settings.component.ts
@@ -87,6 +87,7 @@ export class GfUserAccountSettingsComponent implements OnInit {
protected hasPermissionToUpdateUserSettings: boolean;
protected isAccessTokenHidden = true;
protected readonly isFingerprintSupported = this.doesBrowserSupportAuthn();
+ protected isLoading = true;
protected isWebAuthnEnabled: boolean;
protected readonly language = document.documentElement.lang;
protected locales = [
@@ -178,6 +179,8 @@ export class GfUserAccountSettingsComponent implements OnInit {
this.locales = Array.from(new Set(this.locales)).sort();
+ this.isLoading = false;
+
this.changeDetectorRef.markForCheck();
}
});
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 e77a89b24..57d3b54d7 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
@@ -273,6 +273,7 @@
diff --git a/apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html b/apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
index b77e0043e..efc4fe5b4 100644
--- a/apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
+++ b/apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
@@ -36,12 +36,17 @@
i18n
size="medium"
[enableCopyToClipboardButton]="true"
- [value]="isLoading ? undefined : user.id"
+ [isLoading]="isLoading"
+ [value]="user?.id"
>User ID
- Role
@@ -53,8 +58,9 @@
i18n
size="medium"
[isDate]="true"
+ [isLoading]="isLoading"
[locale]="data.locale"
- [value]="isLoading ? undefined : user.createdAt"
+ [value]="user?.createdAt"
>Registration Date
@@ -62,8 +68,9 @@
Authentication
@@ -75,10 +82,9 @@
Membership
@@ -86,12 +92,9 @@
Country
@@ -104,8 +107,9 @@
Accounts
@@ -113,8 +117,9 @@
Activities
@@ -126,9 +131,10 @@
Engagement per Day
@@ -136,8 +142,9 @@
API Requests Today
diff --git a/apps/client/src/app/pages/portfolio/allocations/allocations-page.html b/apps/client/src/app/pages/portfolio/allocations/allocations-page.html
index d5c765958..902d04cde 100644
--- a/apps/client/src/app/pages/portfolio/allocations/allocations-page.html
+++ b/apps/client/src/app/pages/portfolio/allocations/allocations-page.html
@@ -14,12 +14,9 @@
@@ -213,6 +210,7 @@
Developed Markets Emerging MarketsOther MarketsNo data availableTotal amount
@@ -104,14 +101,11 @@
size="large"
[colorizeSign]="true"
[isCurrency]="true"
+ [isLoading]="isLoadingInvestmentChart"
[locale]="user?.settings?.locale"
[precision]="precision"
[unit]="user?.settings?.baseCurrency"
- [value]="
- isLoadingInvestmentChart
- ? undefined
- : performance?.netPerformanceWithCurrencyEffect
- "
+ [value]="performance?.netPerformanceWithCurrencyEffect"
>Change with currency effect
@@ -124,13 +118,10 @@
i18n
size="large"
[colorizeSign]="true"
+ [isLoading]="isLoadingInvestmentChart"
[isPercent]="true"
[locale]="user?.settings?.locale"
- [value]="
- isLoadingInvestmentChart
- ? undefined
- : performance?.netPerformancePercentageWithCurrencyEffect
- "
+ [value]="performance?.netPerformancePercentageWithCurrencyEffect"
>Performance with currency effect
@@ -173,13 +164,10 @@
class="justify-content-end"
position="end"
[isCurrency]="true"
+ [isLoading]="isLoadingInvestmentChart"
[locale]="user?.settings?.locale"
[unit]="user?.settings?.baseCurrency"
- [value]="
- isLoadingInvestmentChart
- ? undefined
- : performance?.netPerformance
- "
+ [value]="performance?.netPerformance"
/>
@@ -192,13 +180,10 @@
class="justify-content-end"
position="end"
[colorizeSign]="true"
+ [isLoading]="isLoadingInvestmentChart"
[isPercent]="true"
[locale]="user?.settings?.locale"
- [value]="
- isLoadingInvestmentChart
- ? undefined
- : performance?.netPerformancePercentage
- "
+ [value]="performance?.netPerformancePercentage"
/>
@@ -216,15 +201,14 @@
class="justify-content-end"
position="end"
[isCurrency]="true"
+ [isLoading]="isLoadingInvestmentChart"
[locale]="user?.settings?.locale"
[unit]="user?.settings?.baseCurrency"
[value]="
- isLoadingInvestmentChart
- ? undefined
- : performance?.netPerformance === null
- ? null
- : performance?.netPerformanceWithCurrencyEffect -
- performance?.netPerformance
+ performance?.netPerformance === null
+ ? null
+ : performance?.netPerformanceWithCurrencyEffect -
+ performance?.netPerformance
"
/>
@@ -238,15 +222,14 @@
class="justify-content-end"
position="end"
[colorizeSign]="true"
+ [isLoading]="isLoadingInvestmentChart"
[isPercent]="true"
[locale]="user?.settings?.locale"
[value]="
- isLoadingInvestmentChart
- ? undefined
- : performance?.netPerformancePercentage === null
- ? null
- : performance?.netPerformancePercentageWithCurrencyEffect -
- performance?.netPerformancePercentage
+ performance?.netPerformancePercentage === null
+ ? null
+ : performance?.netPerformancePercentageWithCurrencyEffect -
+ performance?.netPerformancePercentage
"
/>
@@ -261,13 +244,10 @@
class="justify-content-end"
position="end"
[isCurrency]="true"
+ [isLoading]="isLoadingInvestmentChart"
[locale]="user?.settings?.locale"
[unit]="user?.settings?.baseCurrency"
- [value]="
- isLoadingInvestmentChart
- ? undefined
- : performance?.netPerformanceWithCurrencyEffect
- "
+ [value]="performance?.netPerformanceWithCurrencyEffect"
/>
@@ -280,12 +260,11 @@
class="justify-content-end"
position="end"
[colorizeSign]="true"
+ [isLoading]="isLoadingInvestmentChart"
[isPercent]="true"
[locale]="user?.settings?.locale"
[value]="
- isLoadingInvestmentChart
- ? undefined
- : performance?.netPerformancePercentageWithCurrencyEffect
+ performance?.netPerformancePercentageWithCurrencyEffect
"
/>
diff --git a/apps/client/src/app/pages/public/public-page.component.ts b/apps/client/src/app/pages/public/public-page.component.ts
index 3b149cd08..e354f8a1b 100644
--- a/apps/client/src/app/pages/public/public-page.component.ts
+++ b/apps/client/src/app/pages/public/public-page.component.ts
@@ -69,6 +69,7 @@ export class GfPublicPageComponent implements OnInit {
protected hasPermissionForSubscription: boolean;
protected holdings: PublicPortfolioResponse['holdings'][string][];
protected info: InfoItem;
+ protected isLoading = true;
protected latestActivitiesDataSource: MatTableDataSource<
PublicPortfolioResponse['latestActivities'][0]
>;
@@ -138,6 +139,8 @@ export class GfPublicPageComponent implements OnInit {
this.publicPortfolioDetails.latestActivities
);
+ this.isLoading = false;
+
this.changeDetectorRef.markForCheck();
});
}
diff --git a/apps/client/src/app/pages/public/public-page.html b/apps/client/src/app/pages/public/public-page.html
index 57bc1e95f..e0e855585 100644
--- a/apps/client/src/app/pages/public/public-page.html
+++ b/apps/client/src/app/pages/public/public-page.html
@@ -15,11 +15,11 @@
i18n
size="large"
[colorizeSign]="true"
+ [isLoading]="isLoading"
[isPercent]="true"
[precision]="2"
[value]="
- publicPortfolioDetails?.performance?.['1d']?.relativeChange ??
- undefined
+ publicPortfolioDetails?.performance?.['1d']?.relativeChange
"
>Today
@@ -33,11 +33,11 @@
i18n
size="large"
[colorizeSign]="true"
+ [isLoading]="isLoading"
[isPercent]="true"
[precision]="2"
[value]="
- publicPortfolioDetails?.performance?.['ytd']?.relativeChange ??
- undefined
+ publicPortfolioDetails?.performance?.['ytd']?.relativeChange
"
>This year
@@ -51,11 +51,11 @@
i18n
size="large"
[colorizeSign]="true"
+ [isLoading]="isLoading"
[isPercent]="true"
[precision]="2"
[value]="
- publicPortfolioDetails?.performance?.['max']?.relativeChange ??
- undefined
+ publicPortfolioDetails?.performance?.['max']?.relativeChange
"
>From the beginning
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 ffcc77832..bf7fb2caf 100644
--- a/libs/ui/src/lib/activities-table/activities-table.component.html
+++ b/libs/ui/src/lib/activities-table/activities-table.component.html
@@ -210,8 +210,9 @@
@@ -234,8 +235,9 @@
@@ -258,8 +260,9 @@
@@ -282,8 +285,9 @@
@@ -305,8 +309,9 @@
@@ -337,8 +342,9 @@
diff --git a/libs/ui/src/lib/benchmark/benchmark-detail-dialog/benchmark-detail-dialog.component.ts b/libs/ui/src/lib/benchmark/benchmark-detail-dialog/benchmark-detail-dialog.component.ts
index 0c75b5954..8a7e13156 100644
--- a/libs/ui/src/lib/benchmark/benchmark-detail-dialog/benchmark-detail-dialog.component.ts
+++ b/libs/ui/src/lib/benchmark/benchmark-detail-dialog/benchmark-detail-dialog.component.ts
@@ -46,6 +46,7 @@ import { BenchmarkDetailDialogParams } from './interfaces/interfaces';
export class GfBenchmarkDetailDialogComponent implements OnInit {
public assetProfile: AdminMarketDataDetails['assetProfile'];
public historicalDataItems: LineChartItem[];
+ public isLoading = true;
public value: number;
public constructor(
@@ -79,6 +80,8 @@ export class GfBenchmarkDetailDialogComponent implements OnInit {
}
);
+ this.isLoading = false;
+
this.changeDetectorRef.markForCheck();
});
}
diff --git a/libs/ui/src/lib/benchmark/benchmark-detail-dialog/benchmark-detail-dialog.html b/libs/ui/src/lib/benchmark/benchmark-detail-dialog/benchmark-detail-dialog.html
index a8cf3730c..3ff7f03ab 100644
--- a/libs/ui/src/lib/benchmark/benchmark-detail-dialog/benchmark-detail-dialog.html
+++ b/libs/ui/src/lib/benchmark/benchmark-detail-dialog/benchmark-detail-dialog.html
@@ -11,6 +11,7 @@
@@ -105,8 +106,9 @@
@@ -125,9 +127,10 @@
@@ -147,10 +150,9 @@
@@ -170,13 +172,10 @@
diff --git a/libs/ui/src/lib/value/value.component.html b/libs/ui/src/lib/value/value.component.html
index 14ac7154a..3ab711f7e 100644
--- a/libs/ui/src/lib/value/value.component.html
+++ b/libs/ui/src/lib/value/value.component.html
@@ -27,7 +27,20 @@
}
- @if (value || value === 0 || value === null) {
+
+ @if (isLoading() || value === undefined) {
+
+ } @else if (value || value === 0 || value === null) {
}
- @if (value === undefined) {
-
- }
-
@if (size === 'large') {
diff --git a/libs/ui/src/lib/value/value.component.stories.ts b/libs/ui/src/lib/value/value.component.stories.ts
index a5971b252..19139e266 100644
--- a/libs/ui/src/lib/value/value.component.stories.ts
+++ b/libs/ui/src/lib/value/value.component.stories.ts
@@ -30,6 +30,9 @@ export default {
enableCopyToClipboardButton: {
control: 'boolean'
},
+ isLoading: {
+ control: 'boolean'
+ },
size: {
control: 'select',
options: ['small', 'medium', 'large']
@@ -41,7 +44,7 @@ type Story = StoryObj;
export const Loading: Story = {
args: {
- value: undefined
+ isLoading: true
}
};
diff --git a/libs/ui/src/lib/value/value.component.ts b/libs/ui/src/lib/value/value.component.ts
index 494f7a347..cc08e5a24 100644
--- a/libs/ui/src/lib/value/value.component.ts
+++ b/libs/ui/src/lib/value/value.component.ts
@@ -62,6 +62,8 @@ export class GfValueComponent implements AfterViewInit, OnChanges, OnDestroy {
public readonly copiedTitle = $localize`The value has been copied to the clipboard`;
public readonly copyToClipboardTitle = $localize`Copy to clipboard`;
+ public readonly isLoading = input(false);
+ public readonly precision = input();
public constructor(
private changeDetectorRef: ChangeDetectorRef,
@@ -74,8 +76,6 @@ export class GfValueComponent implements AfterViewInit, OnChanges, OnDestroy {
});
}
- public readonly precision = input();
-
private copyToClipboardTimeout: ReturnType;
private readonly formatOptions = computed(() => {
From 154da3782b1e561770309792e49af7b22b87fcfe Mon Sep 17 00:00:00 2001
From: Sebastian Legarraga <64795732+slegarraga@users.noreply.github.com>
Date: Thu, 6 Aug 2026 01:48:16 -0400
Subject: [PATCH 78/86] Task/improve language localization for ES (20260806)
(#7549)
* Update translations
* Update changelog
---
CHANGELOG.md | 1 +
apps/client/src/locales/messages.es.xlf | 22 +++++++++++-----------
2 files changed, 12 insertions(+), 11 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index e1171d2fb..b926d2c52 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -16,6 +16,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
### Changed
- Guarded the system tags against deletion and renaming in the tag management of the admin control panel
+- Improved the language localization for Spanish (`es`)
### Fixed
diff --git a/apps/client/src/locales/messages.es.xlf b/apps/client/src/locales/messages.es.xlf
index ab4e4eb3e..866dac527 100644
--- a/apps/client/src/locales/messages.es.xlf
+++ b/apps/client/src/locales/messages.es.xlf
@@ -356,7 +356,7 @@
Unknown
- Unknown
+ Desconocido
libs/ui/src/lib/i18n.ts
88
@@ -440,7 +440,7 @@
Splits
- Splits
+ Desdoblamientos
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
512
@@ -840,7 +840,7 @@
Split Ratio
- Split Ratio
+ Relación de desdoblamiento
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
526
@@ -1776,7 +1776,7 @@
Invalid API key
- Invalid API key
+ Clave de API no válida
apps/client/src/app/components/admin-settings/admin-settings.component.html
112
@@ -3056,7 +3056,7 @@
Export
- Export
+ Exportar
libs/ui/src/lib/activities-table/activities-table.component.html
68
@@ -4168,7 +4168,7 @@
Cache has been flushed.
- Cache has been flushed.
+ Caché vaciada.
apps/client/src/app/components/admin-overview/admin-overview.component.ts
281
@@ -4324,7 +4324,7 @@
Shares After
- Shares After
+ Acciones después
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
584
@@ -5292,7 +5292,7 @@
Do you really want to delete these activities?
- Do you really want to delete these activities?
+ ¿De verdad quieres eliminar estas actividades?
libs/ui/src/lib/activities-table/activities-table.component.ts
334
@@ -5758,7 +5758,7 @@
Data gathering has been started.
- Data gathering has been started.
+ La recopilación de datos ha comenzado.
apps/client/src/app/components/admin-market-data/admin-market-data.component.ts
413
@@ -7367,7 +7367,7 @@
Shares Before
- Shares Before
+ Acciones antes
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
597
@@ -8170,7 +8170,7 @@
{VAR_PLURAL, plural, =1 {Activity} other {Activities}}
- {VAR_PLURAL, plural, =1 {Activity} other {Activities}}
+ {VAR_PLURAL, plural, =1 {Actividad} other {Actividades}}
libs/ui/src/lib/activities-table/activities-table.component.html
69
From 911e12358937f585602b094ab7ab36c38fcdac8b Mon Sep 17 00:00:00 2001
From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com>
Date: Thu, 6 Aug 2026 07:50:37 +0200
Subject: [PATCH 79/86] Release 3.43.0 (#7552)
---
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 b926d2c52..be20727bd 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
+## 3.43.0 - 2026-08-06
### Added
diff --git a/package-lock.json b/package-lock.json
index 06b0efda2..ce97c403b 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,12 +1,12 @@
{
"name": "ghostfolio",
- "version": "3.42.0",
+ "version": "3.43.0",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "ghostfolio",
- "version": "3.42.0",
+ "version": "3.43.0",
"hasInstallScript": true,
"license": "AGPL-3.0",
"dependencies": {
diff --git a/package.json b/package.json
index 4bbda525e..b13aeab4c 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "ghostfolio",
- "version": "3.42.0",
+ "version": "3.43.0",
"homepage": "https://ghostfol.io",
"license": "AGPL-3.0",
"repository": "https://github.com/ghostfolio/ghostfolio",
From c90bb1dfe5b94bb5482b8278e2908c047cea9237 Mon Sep 17 00:00:00 2001
From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com>
Date: Thu, 6 Aug 2026 20:10:46 +0200
Subject: [PATCH 80/86] Task/refactor abstract Material form field component to
directive (#7555)
* Migrate to directive
* Update changelog
---
CHANGELOG.md | 6 ++++++
libs/ui/src/lib/shared/abstract-mat-form-field.ts | 7 ++-----
2 files changed, 8 insertions(+), 5 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index be20727bd..736c708e2 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
+
+### Changed
+
+- Migrated the abstract _Material_ form field from a component to a directive
+
## 3.43.0 - 2026-08-06
### Added
diff --git a/libs/ui/src/lib/shared/abstract-mat-form-field.ts b/libs/ui/src/lib/shared/abstract-mat-form-field.ts
index 0d547af4e..a6ef16175 100644
--- a/libs/ui/src/lib/shared/abstract-mat-form-field.ts
+++ b/libs/ui/src/lib/shared/abstract-mat-form-field.ts
@@ -1,7 +1,7 @@
import { FocusMonitor } from '@angular/cdk/a11y';
import { coerceBooleanProperty } from '@angular/cdk/coercion';
import {
- Component,
+ Directive,
DoCheck,
ElementRef,
HostBinding,
@@ -13,10 +13,7 @@ import { ControlValueAccessor, NgControl, Validators } from '@angular/forms';
import { MatFormFieldControl } from '@angular/material/form-field';
import { Subject } from 'rxjs';
-@Component({
- template: '',
- standalone: false
-})
+@Directive()
export abstract class AbstractMatFormField
implements ControlValueAccessor, DoCheck, MatFormFieldControl, OnDestroy
{
From 901b52393f8150e91818f1738bfd57210977e963 Mon Sep 17 00:00:00 2001
From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com>
Date: Fri, 7 Aug 2026 07:48:51 +0200
Subject: [PATCH 81/86] Feature/add country flag to currency selector (#7561)
* Add country flag
* Update changelog
---
CHANGELOG.md | 5 +
libs/common/src/lib/helper.spec.ts | 25 +++++
libs/common/src/lib/helper.ts | 11 +++
.../currency-selector.component.html | 10 +-
.../currency-selector.component.scss | 3 -
.../currency-selector.component.stories.ts | 99 +++++++++++++++++++
.../currency-selector.component.ts | 30 +++++-
7 files changed, 176 insertions(+), 7 deletions(-)
delete mode 100644 libs/ui/src/lib/currency-selector/currency-selector.component.scss
create mode 100644 libs/ui/src/lib/currency-selector/currency-selector.component.stories.ts
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 736c708e2..32b949274 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -7,6 +7,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
## Unreleased
+### Added
+
+- Added the country flag to the currency selector
+- Added a _Storybook_ story for the currency selector component
+
### Changed
- Migrated the abstract _Material_ form field from a component to a directive
diff --git a/libs/common/src/lib/helper.spec.ts b/libs/common/src/lib/helper.spec.ts
index 669c42e32..6cc090170 100644
--- a/libs/common/src/lib/helper.spec.ts
+++ b/libs/common/src/lib/helper.spec.ts
@@ -4,6 +4,7 @@ import {
} from '@ghostfolio/common/config';
import {
extractNumberFromString,
+ getCountryCodeFromCurrency,
getNumberFormatGroup,
getStringOrNull,
getStringOrUndefined,
@@ -77,6 +78,30 @@ describe('Helper', () => {
});
});
+ describe('Get country code from currency', () => {
+ it('ISO 4217 currency code', () => {
+ expect(getCountryCodeFromCurrency('CHF')).toEqual('CH');
+ expect(getCountryCodeFromCurrency('USD')).toEqual('US');
+ });
+
+ it('Currency of the European Union', () => {
+ expect(getCountryCodeFromCurrency('EUR')).toEqual('EU');
+ });
+
+ it('Derived currency', () => {
+ expect(getCountryCodeFromCurrency('GBp')).toEqual('GB');
+ });
+
+ it('Supranational currency', () => {
+ expect(getCountryCodeFromCurrency('XAU')).toEqual('');
+ expect(getCountryCodeFromCurrency('XOF')).toEqual('');
+ });
+
+ it('Empty currency', () => {
+ expect(getCountryCodeFromCurrency('')).toEqual('');
+ });
+ });
+
describe('Get number format group', () => {
let languageGetter: jest.SpyInstance;
diff --git a/libs/common/src/lib/helper.ts b/libs/common/src/lib/helper.ts
index 0778f84f1..44fd89aa2 100644
--- a/libs/common/src/lib/helper.ts
+++ b/libs/common/src/lib/helper.ts
@@ -279,6 +279,17 @@ export function getCurrencyFromSymbol(aSymbol = '') {
return aSymbol.replace(DEFAULT_CURRENCY, '');
}
+export function getCountryCodeFromCurrency(aCurrency = '') {
+ // An ISO 4217 currency code is composed of the ISO 3166-1 alpha-2 country
+ // code and the initial of the currency itself, except for the supranational
+ // currencies, which are prefixed with X (like XAU or XOF)
+ if (aCurrency.startsWith('X')) {
+ return '';
+ }
+
+ return aCurrency.slice(0, 2).toUpperCase();
+}
+
export function getCountryName({ code }: { code: string }): string {
try {
return (
diff --git a/libs/ui/src/lib/currency-selector/currency-selector.component.html b/libs/ui/src/lib/currency-selector/currency-selector.component.html
index e07101f9a..594515e24 100644
--- a/libs/ui/src/lib/currency-selector/currency-selector.component.html
+++ b/libs/ui/src/lib/currency-selector/currency-selector.component.html
@@ -1,9 +1,14 @@
+@if (emojiFlagOfSelectedCurrency) {
+ {{ emojiFlagOfSelectedCurrency }}
+}
+
@for (currency of filteredCurrencies; track currency) {
- {{ currency }}
+
+ {{ getEmojiFlagFromCurrency(currency) }}
+ {{ currency }}
+
}
diff --git a/libs/ui/src/lib/currency-selector/currency-selector.component.scss b/libs/ui/src/lib/currency-selector/currency-selector.component.scss
deleted file mode 100644
index 5d4e87f30..000000000
--- a/libs/ui/src/lib/currency-selector/currency-selector.component.scss
+++ /dev/null
@@ -1,3 +0,0 @@
-:host {
- display: block;
-}
diff --git a/libs/ui/src/lib/currency-selector/currency-selector.component.stories.ts b/libs/ui/src/lib/currency-selector/currency-selector.component.stories.ts
new file mode 100644
index 000000000..beb63e369
--- /dev/null
+++ b/libs/ui/src/lib/currency-selector/currency-selector.component.stories.ts
@@ -0,0 +1,99 @@
+import { ANIMATION_MODULE_TYPE } from '@angular/core';
+import { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms';
+import '@angular/localize/init';
+import { MatFormFieldModule } from '@angular/material/form-field';
+import { Meta, moduleMetadata, StoryObj } from '@storybook/angular';
+
+import { GfCurrencySelectorComponent } from './currency-selector.component';
+
+const CURRENCIES = [
+ 'AUD',
+ 'CHF',
+ 'EUR',
+ 'GBP',
+ 'GBp',
+ 'JPY',
+ 'USD',
+ 'XAU',
+ 'ZAR'
+];
+
+const meta: Meta = {
+ title: 'Currency Selector',
+ component: GfCurrencySelectorComponent,
+ decorators: [
+ moduleMetadata({
+ imports: [
+ GfCurrencySelectorComponent,
+ MatFormFieldModule,
+ ReactiveFormsModule
+ ],
+ providers: [
+ {
+ provide: ANIMATION_MODULE_TYPE,
+ useValue: 'NoopAnimations'
+ }
+ ]
+ })
+ ],
+ render: ({ currencies, value }) => {
+ return {
+ props: {
+ currencies,
+ formGroup: new FormGroup({
+ currency: new FormControl(value)
+ })
+ },
+ template: `
+
+ `
+ };
+ }
+};
+
+export default meta;
+
+type Story = StoryObj;
+
+export const Default: Story = {
+ args: {
+ currencies: CURRENCIES,
+ value: 'CHF'
+ }
+};
+
+export const CurrencyOfEuropeanUnion: Story = {
+ args: {
+ currencies: CURRENCIES,
+ value: 'EUR'
+ }
+};
+
+export const DerivedCurrency: Story = {
+ args: {
+ currencies: CURRENCIES,
+ value: 'GBp'
+ }
+};
+
+export const SupranationalCurrency: Story = {
+ args: {
+ currencies: CURRENCIES,
+ value: 'XAU'
+ }
+};
+
+export const WithoutValue: Story = {
+ args: {
+ currencies: CURRENCIES,
+ value: null
+ }
+};
diff --git a/libs/ui/src/lib/currency-selector/currency-selector.component.ts b/libs/ui/src/lib/currency-selector/currency-selector.component.ts
index 724e86712..2eda80aba 100644
--- a/libs/ui/src/lib/currency-selector/currency-selector.component.ts
+++ b/libs/ui/src/lib/currency-selector/currency-selector.component.ts
@@ -1,3 +1,8 @@
+import {
+ getCountryCodeFromCurrency,
+ getEmojiFlag
+} from '@ghostfolio/common/helper';
+
import { FocusMonitor } from '@angular/cdk/a11y';
import {
CUSTOM_ELEMENTS_SCHEMA,
@@ -24,9 +29,11 @@ import {
import {
MatAutocomplete,
MatAutocompleteModule,
+ MatAutocompleteOrigin,
MatOption
} from '@angular/material/autocomplete';
import {
+ MAT_FORM_FIELD,
MatFormFieldControl,
MatFormFieldModule
} from '@angular/material/form-field';
@@ -39,7 +46,8 @@ import { AbstractMatFormField } from '../shared/abstract-mat-form-field';
changeDetection: ChangeDetectionStrategy.OnPush,
host: {
'[attr.aria-describedBy]': 'describedBy',
- '[id]': 'id'
+ '[id]': 'id',
+ class: 'align-items-center d-flex'
},
imports: [
FormsModule,
@@ -56,7 +64,6 @@ import { AbstractMatFormField } from '../shared/abstract-mat-form-field';
],
schemas: [CUSTOM_ELEMENTS_SCHEMA],
selector: 'gf-currency-selector',
- styleUrls: ['./currency-selector.component.scss'],
templateUrl: 'currency-selector.component.html'
})
export class GfCurrencySelectorComponent
@@ -72,6 +79,7 @@ export class GfCurrencySelectorComponent
public readonly formControlName = input.required();
private readonly destroyRef = inject(DestroyRef);
+ private readonly formField = inject(MAT_FORM_FIELD);
private readonly input = viewChild.required(MatInput);
public constructor(
@@ -86,8 +94,20 @@ export class GfCurrencySelectorComponent
this.controlType = 'currency-selector';
}
+ public get autocompleteOrigin(): MatAutocompleteOrigin {
+ return { elementRef: this.formField.getConnectedOverlayOrigin() };
+ }
+
+ public get emojiFlagOfSelectedCurrency() {
+ const selectedCurrency = this.currencies().find((currency) => {
+ return currency === this.control.value;
+ });
+
+ return this.getEmojiFlagFromCurrency(selectedCurrency);
+ }
+
public override get empty() {
- return this.input().empty;
+ return !this.control.value;
}
public override set value(value: string | null) {
@@ -99,6 +119,10 @@ export class GfCurrencySelectorComponent
this.input().focus();
}
+ public getEmojiFlagFromCurrency(aCurrency = '') {
+ return getEmojiFlag(getCountryCodeFromCurrency(aCurrency));
+ }
+
public ngOnInit() {
if (this.disabled) {
this.control.disable();
From 9b24193042d05de4002636d089e2609442a1af4e Mon Sep 17 00:00:00 2001
From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com>
Date: Fri, 7 Aug 2026 08:08:00 +0200
Subject: [PATCH 82/86] Feature/add live preview of date and number format to
user settings (#7558)
* Add live preview of date and number format
* Update changelog
---
CHANGELOG.md | 1 +
.../user-account-settings.component.ts | 9 +++++++
.../user-account-settings.html | 24 +++++++++++++++++--
3 files changed, 32 insertions(+), 2 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 32b949274..a610f56ef 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
### Added
+- Added a live preview of the date and number format to the user settings
- Added the country flag to the currency selector
- Added a _Storybook_ story for the currency selector component
diff --git a/apps/client/src/app/components/user-account-settings/user-account-settings.component.ts b/apps/client/src/app/components/user-account-settings/user-account-settings.component.ts
index b48adf59d..18ce8e07c 100644
--- a/apps/client/src/app/components/user-account-settings/user-account-settings.component.ts
+++ b/apps/client/src/app/components/user-account-settings/user-account-settings.component.ts
@@ -22,6 +22,7 @@ import {
ChangeDetectionStrategy,
ChangeDetectorRef,
Component,
+ computed,
CUSTOM_ELEMENTS_SCHEMA,
DestroyRef,
inject,
@@ -50,6 +51,7 @@ import { format, parseISO } from 'date-fns';
import { addIcons } from 'ionicons';
import { eyeOffOutline, eyeOutline } from 'ionicons/icons';
import ms from 'ms';
+import { DeviceDetectorService } from 'ngx-device-detector';
import { EMPTY, throwError } from 'rxjs';
import { catchError } from 'rxjs/operators';
@@ -108,10 +110,17 @@ export class GfUserAccountSettingsComponent implements OnInit {
'uk',
'zh'
];
+ protected readonly previewDate = new Date().toISOString();
+ protected readonly previewValue = 9999.99;
protected user: User;
+ protected readonly deviceType = computed(
+ () => this.deviceDetectorService.deviceInfo().deviceType
+ );
+
private readonly changeDetectorRef = inject(ChangeDetectorRef);
private readonly dataService = inject(DataService);
+ private readonly deviceDetectorService = inject(DeviceDetectorService);
private readonly destroyRef = inject(DestroyRef);
private readonly notificationService = inject(NotificationService);
private readonly settingsStorageService = inject(SettingsStorageService);
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 57d3b54d7..cb39360f7 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
@@ -146,7 +146,7 @@
-
+
Locale
@@ -154,7 +154,10 @@
-
+
{{ locale }}
}
+
+
+ ·
+
+
From 0e3e17580ab838df4273be2ccb6be40d7f741333 Mon Sep 17 00:00:00 2001
From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com>
Date: Fri, 7 Aug 2026 08:17:56 +0200
Subject: [PATCH 83/86] Task/extend entity logo component by hasPlaceholder
attribute (#7553)
* Extend entity logo component by hasPlaceholder attribute
* Update changelog
---
CHANGELOG.md | 1 +
.../admin-platform.component.html | 13 +++++-----
.../admin-settings.component.html | 6 ++++-
.../create-or-update-account-dialog.html | 4 ++-
.../transfer-balance-dialog.html | 26 +++++++++----------
.../create-or-update-activity-dialog.html | 16 ++++++------
.../accounts-table.component.html | 26 +++++++++----------
.../activities-table.component.html | 13 +++++-----
.../entity-logo/entity-logo.component.html | 7 +++--
.../entity-logo/entity-logo.component.scss | 12 ++++++++-
.../entity-logo.component.stories.ts | 16 ++++++++++++
.../lib/entity-logo/entity-logo.component.ts | 12 ++++++++-
.../entity-logo-image-source.service.mock.ts | 7 +++--
.../portfolio-filter-form.component.html | 13 +++++-----
14 files changed, 107 insertions(+), 65 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index a610f56ef..83861a8d0 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -12,6 +12,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- Added a live preview of the date and number format to the user settings
- Added the country flag to the currency selector
- Added a _Storybook_ story for the currency selector component
+- Extended the entity logo component by a `hasPlaceholder` attribute to reserve the space of a missing logo
### Changed
diff --git a/apps/client/src/app/components/admin-platform/admin-platform.component.html b/apps/client/src/app/components/admin-platform/admin-platform.component.html
index 19682bdc0..7c699e557 100644
--- a/apps/client/src/app/components/admin-platform/admin-platform.component.html
+++ b/apps/client/src/app/components/admin-platform/admin-platform.component.html
@@ -22,13 +22,12 @@
Name
- @if (element.url) {
-
- }
+
{{ element.name }}
diff --git a/apps/client/src/app/components/admin-settings/admin-settings.component.html b/apps/client/src/app/components/admin-settings/admin-settings.component.html
index 99346f0fb..b3ad389d6 100644
--- a/apps/client/src/app/components/admin-settings/admin-settings.component.html
+++ b/apps/client/src/app/components/admin-settings/admin-settings.component.html
@@ -59,7 +59,11 @@
-
+
@if (isGhostfolioDataProvider(element)) {
Platform
- @if (selectedPlatform?.url) {
+ @if (selectedPlatform) {
@@ -71,6 +72,7 @@
diff --git a/apps/client/src/app/pages/accounts/transfer-balance/transfer-balance-dialog.html b/apps/client/src/app/pages/accounts/transfer-balance/transfer-balance-dialog.html
index 50c96be86..2f74bfbe7 100644
--- a/apps/client/src/app/pages/accounts/transfer-balance/transfer-balance-dialog.html
+++ b/apps/client/src/app/pages/accounts/transfer-balance/transfer-balance-dialog.html
@@ -13,13 +13,12 @@
@for (account of accounts; track account) {
- @if (account.platform?.url) {
-
- }
+
{{ account.name }}
@@ -34,13 +33,12 @@
@for (account of accounts; track account) {
- @if (account.platform?.url) {
-
- }
+
{{ account.name }}
diff --git a/apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html b/apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
index b3c708167..9455a9dd6 100644
--- a/apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
+++ b/apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
@@ -87,9 +87,10 @@
- @if (selectedAccount?.platform?.url) {
+ @if (selectedAccount) {
@@ -103,13 +104,12 @@
@for (account of data.accounts; track account) {
- @if (account.platform?.url) {
-
- }
+
{{ account.name }}
diff --git a/libs/ui/src/lib/accounts-table/accounts-table.component.html b/libs/ui/src/lib/accounts-table/accounts-table.component.html
index d252b1488..1d1cbb296 100644
--- a/libs/ui/src/lib/accounts-table/accounts-table.component.html
+++ b/libs/ui/src/lib/accounts-table/accounts-table.component.html
@@ -50,13 +50,12 @@
Name
- @if (element.platform?.url) {
-
- }
+
{{ element.name }}
Total
@@ -98,13 +97,12 @@
mat-cell
>
- @if (element.platform?.url) {
-
- }
+
{{ element.platform?.name }}
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 bf7fb2caf..7f53da4fa 100644
--- a/libs/ui/src/lib/activities-table/activities-table.component.html
+++ b/libs/ui/src/lib/activities-table/activities-table.component.html
@@ -356,13 +356,12 @@
- @if (element.account?.platform?.url) {
-
- }
+
{{
element.account?.name
}}
diff --git a/libs/ui/src/lib/entity-logo/entity-logo.component.html b/libs/ui/src/lib/entity-logo/entity-logo.component.html
index d8aeba136..0a7ecbcd2 100644
--- a/libs/ui/src/lib/entity-logo/entity-logo.component.html
+++ b/libs/ui/src/lib/entity-logo/entity-logo.component.html
@@ -1,8 +1,11 @@
-@if (src) {
+@if (src && !hasError) {
+} @else if (hasPlaceholder) {
+
}
diff --git a/libs/ui/src/lib/entity-logo/entity-logo.component.scss b/libs/ui/src/lib/entity-logo/entity-logo.component.scss
index 23bc7a487..051199346 100644
--- a/libs/ui/src/lib/entity-logo/entity-logo.component.scss
+++ b/libs/ui/src/lib/entity-logo/entity-logo.component.scss
@@ -2,7 +2,7 @@
align-items: center;
display: flex;
- img {
+ .logo {
border-radius: 0.2rem;
height: 0.8rem;
width: 0.8rem;
@@ -11,5 +11,15 @@
height: 1.4rem;
width: 1.4rem;
}
+
+ &.placeholder {
+ border: 1px solid rgba(var(--dark-dividers));
+ }
+ }
+}
+
+:host-context(.theme-dark) {
+ .placeholder {
+ border-color: rgba(var(--light-dividers));
}
}
diff --git a/libs/ui/src/lib/entity-logo/entity-logo.component.stories.ts b/libs/ui/src/lib/entity-logo/entity-logo.component.stories.ts
index 45a996294..786d54cbf 100644
--- a/libs/ui/src/lib/entity-logo/entity-logo.component.stories.ts
+++ b/libs/ui/src/lib/entity-logo/entity-logo.component.stories.ts
@@ -44,3 +44,19 @@ export const LogoByUrl: Story = {
url: 'https://ghostfol.io'
}
};
+
+export const Placeholder: Story = {
+ args: {
+ hasPlaceholder: true,
+ size: 'large'
+ }
+};
+
+export const PlaceholderOnError: Story = {
+ args: {
+ hasPlaceholder: true,
+ size: 'large',
+ tooltip: 'Unknown',
+ url: 'https://unknown.ghostfol.io'
+ }
+};
diff --git a/libs/ui/src/lib/entity-logo/entity-logo.component.ts b/libs/ui/src/lib/entity-logo/entity-logo.component.ts
index ba7d64ae0..ef8e72105 100644
--- a/libs/ui/src/lib/entity-logo/entity-logo.component.ts
+++ b/libs/ui/src/lib/entity-logo/entity-logo.component.ts
@@ -18,18 +18,22 @@ import { DataSource } from '@prisma/client';
})
export class GfEntityLogoComponent implements OnChanges {
@Input() dataSource: DataSource;
+ @Input() hasPlaceholder = false;
@Input() size: 'large';
@Input() symbol: string;
@Input() tooltip: string;
@Input() url: string;
- public src: string;
+ public hasError = false;
+ public src?: string;
public constructor(
private readonly imageSourceService: EntityLogoImageSourceService
) {}
public ngOnChanges() {
+ this.hasError = false;
+
if (this.dataSource && this.symbol) {
this.src = this.imageSourceService.getLogoUrlByAssetProfileIdentifier({
dataSource: this.dataSource,
@@ -37,6 +41,12 @@ export class GfEntityLogoComponent implements OnChanges {
});
} else if (this.url) {
this.src = this.imageSourceService.getLogoUrlByUrl(this.url);
+ } else {
+ this.src = undefined;
}
}
+
+ public onError() {
+ this.hasError = true;
+ }
}
diff --git a/libs/ui/src/lib/mocks/entity-logo-image-source.service.mock.ts b/libs/ui/src/lib/mocks/entity-logo-image-source.service.mock.ts
index 3f4dbbef7..766a4178b 100644
--- a/libs/ui/src/lib/mocks/entity-logo-image-source.service.mock.ts
+++ b/libs/ui/src/lib/mocks/entity-logo-image-source.service.mock.ts
@@ -2,6 +2,9 @@ import { AssetProfileIdentifier } from '@ghostfolio/common/interfaces';
import { DataSource } from '@prisma/client';
+// Resolves like a logo of an unknown entity, but fails to load
+const UNAVAILABLE_LOGO_URL = 'data:image/png;base64,unavailable';
+
export class EntityLogoImageSourceServiceMock {
public getLogoUrlByAssetProfileIdentifier({
dataSource,
@@ -11,7 +14,7 @@ export class EntityLogoImageSourceServiceMock {
return 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAJa0lEQVR4nM2bW2wU1xnHf3vx2t61za5nL/bGKwx2jQnwUh5Q3bqyHYhzIVLUFoIaSKtGSrkkNaQJqlQSKaHQFygQJamUSomaRKpSlYekqSF1HGix6EOktIldOQs0OCEs3ssw48Ve8F77MGuwza4ve2Y3/KR92Ln8z/d9OnPmnG/OZ/jss2FKRA3QCiwDPEAtUAEkgWvAGKAAF4HPgWgpjDIXUdsF3AN0Zn/NVmuFoazMgtlswmw2YTAYyGQgnU6TSqVIpdIkEnFisRsZ4AJwGjgFfAiEi2GkQeceUAn8CPgJ0GG315hsNis2m5XycsuihCYn40xMxJiYiKGq0RRaMP4I/AW4rpfBegXAAfQAu+z2JU6HowabzYbBoIc0ZDIwMTGBokRR1bEI8ApwDO2REUI0AGbgKeB5t1uyS1ItZrNJ1KY5SSZTyPJVQiFZBfYDL6GNIwUhEoDvAr+XJMcaSXIsuouLEo/HiUQUZFkZBHYCA4XoGAu4xwS8APzD5/Ou8Xo9JXcewGKx4PV68Pm8a9DGhxezti2KxfYAF/COJDk63W5n0bv7QkkmU4RCEWRZOQU8wiLeGIvpAY3AgNvt7PR6PXeM8wBmswmv14Pb7exEexQaF3rvQgOwCjhbV+dq8XicBZhYGjweJ3V1rhbgLJrN87KQADQBJ71eT73LJYnYVxJcLgmv11MPnASa57t+vgC4gJP19e4GSXLoYV9JkCQH9fXuBuAEmg95mSsAZcBxt9vZ7HTW6mlfXsbHJzh27CU6Ojppbm7h4sWLBWs5nbW43c5m4DiaLzmZay2wX5Ic7aV65s+dO8fu3U8zNDQEgM1mo7q6WkjT43GSSqXaZVnZD/wq1zX5esD3gGfr6ubsPbpx/vx5tm597KbzAK2tK6itFe95WR+eRfPpNnIFwAy86vN5jUZjIfOkxTE5Ocnu3U8zOjo64/hDD21Ej/aNRiM+n9cIvEqOHp+rhR5Jcqyx22uEG18IfX19DA4OzjhWX1/Pww8/rFsbdnsNkuRYA/xi9rnZAagB9pVq0AN4//3eGf+rq6s5cuSwLt1/Ok6nA+A5NB9vMjsAO10uyW6x5B00dSWRSPDpp/+5+b+lpYW3336LtrY23duyWCy4XJIdbeF0k+nPRCWwR5Lsujeej3Q6zbJly1m6dCnd3d1s27YVs7l4SSpJshMOy3uAo8ANmLkY2mK31/zJ5/Pq1qAsy/T1fcjg4CCKomK1VrJy5Uo6Ojpoalp+2/VDQ0P09X2I33+O8fFrlJdX4PXW09bWRldXJ+Xl5cI2ffVVgLGx6BbgHZgZgL81NjY8UF1dJdxIMpnktdf+wOuvv0EoFLrtfEVFBV1dXWzc+AB33dXA4OAg7733Vz7++GMymUxOzdbWVvbufYb169cL2Xbt2jgjI1/3Ag/CrQC4gMDq1SvMBsE81uTkJDt3PklfX5+QTj4OHjzA1q2PFnx/JpNhaMifBLxAeGoQvMdurxF2PpVK0dOzp2jOA+zb9xx+v7/g+w0GA3Z7jRktY33zLdBls1mFjXvrrbfp7e2d/8ICMRgMHDjwG5qamoR0sr52wa23QGdVlVgAotEoL7/8ipDGfDz//HM8+uiPhXWyAegArQdYgeUWi1he78SJkzkHPL3o7r6Xxx//mS5a2RxmE1BpBJorKsqFJ939/f2iEnkxmUw89dSTumpmff6WEWjVI6s7MvKlsEY+li9fzqpVC8pwLZiszyuMQH1ZmfjsKxodE9bIR3NzEyaTvknY7Iyz3gg49BCfnIwLa+SjslL8DTWbrM8OI1Au+v4HdFm750NRruquaTQaACqMQCrP7HNR2Gw2cZE8DA9/TiwW01Uz63PSCFxLp9PCgnb7EmGNfIyOjnL69GldNbM+jxuBaDqdEhZctmyZsMZcHDlyTNdekPU5agTkZFI8AOvWrRPWmAu/309Pz24SiYQuelmfw0bgcz1G8La271BWVtxM0gcf/J0nntjO5cuXhbWyPp8zAhdu3JgUHgQaGxtZu/bbwobNR39/P5s2PSKsk/X5vBGIAV/E4+K9YMuWLcIaCyGZLHhDCKBtrgC+AK5PvbxPjY+LDzD33deNz+cT1pmPzZs3Cd2f9fUU3MoHfDQxIR4Aq9XKrl07hHXmora2lm3btgppZH2dEYB+VY0m8+XjFsPmzZtZvXq1sE4+duzYjsfjKfj+TCaDqkaTQD/cCkAY6NPjMTCbzezf/0JR0tt3372Sxx7bJqSR9bEPCMHMDyNvqqo+K7q1a9eyd++zumhNUVVl4/DhQ1RWVgrpZH18c+r/9AC8q6rRsF4Tje3bfy78rE5hNps5evSocE4gkUigqtEQ8O5N7WnnrwO/k2X1t3p9Fn/xxReIxa5z/PjxGcdtNhvr199De3s7DQ0NxONx/H4/J06c4JNP/j3j2qoqGwcPHuTeezcI2yPLKsARpm21nb1Nrgb4csWKJl2/D/b29nLmzACJRIKWlhY2bFifc+2QyWQYGBjg7Nl/oSgqdXUeNm58kObmebf6zEs8nsDv/58KLGXaTvRc+wR/KUmOQ15v4SPtnUggEESWlWeAw9OP58piHJNlZUhVS7JdvySoanRqS+2x2edyBSAJ7Lh0KZDWI0/wTZNOp7l0KZBG+yx+2xw6Xx5rADg0OlqUGoWSEgyGAQ6RZzP1XIm8fbKsnAkGI8WwqyQEgxEiEWUAbWdITuYKQAL4YSgUuRCJ6J+ULDaRyFVCocgF4AdA3qXufKncMHD/lSuhr2VZuDijZMiywpUrocvA/cyzc3whuewLwH2BQPBKOCzrYV9RCYdlAoHgFaAbzfY5WWgy/79A2+ho+NydPCYEgxFGR8MXgDY0m+dlMV8zRoD2UChyKhAIokciVS+SyRSBQJBQKHIKrZRnZKH3LvZzTgjYIMvK/uHh8+k7YbKkqlGGh8+ns/uBN5Bd5i4UkaKpduBVSXKsdjprKdXewini8QSRyFVkWRlCm+ScKURHj7K5HuDXLpfkkCQHenxpnotEIoksK4TDsgIcQJvefiNlc9OpAZ4EehyOJW6HYwlWq1XXwslYLIaijKEoYyE0p19Gh/riYpTObgJ+Cnx/qnS2qsrKYrfgxONxxsdnlM7+E6109s/cgaWzufCg7cTqAjqMRmNzRUU5ZWVllJWZMJnyFU8nuHFjknQ6PVU8/VH2FyyGkcUMwGxqgJVoJW11gARYuL18fgQYpkTl8/8HqhBYlUKrXOwAAAAASUVORK5CYII=';
}
- return '';
+ return UNAVAILABLE_LOGO_URL;
}
public getLogoUrlByUrl(url: string) {
@@ -19,6 +22,6 @@ export class EntityLogoImageSourceServiceMock {
return 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAMAAACdt4HsAAAAP1BMVEU2z8v////x/Pspzcn0/Px73drR8/KC3tz6/v6e5eOl5+WM4d7n+PhI08/i9/eu6edV1dJk2NVx2teV4+G87evvttLSAAABDElEQVRYhe2V3Y6EIAyFrQXlTwHd93/WpeBsdiKbtF7tJJwbCKFfDlKO0zQ0NPQJwqrn1ZO2zlk9PWPgusClRcsJmHb4pWUTItDDu4zMBJ5w0yog4HGvB0gCgOoBZrYFdL16AMsmmD5AcQ3ofj3AwbOAX38BIhMw02ZjtQ+tLnht66mCAGA2eka1G3eabUZwD/PLbeuHenKMBODVV0Dru/TTQLgKAc1BvQ/9yAEkOnlon66oehEBIHp7dbSyPoIc0NEADMDnAa4wAvVK+CADRGx/VpNSi+iF3jMTUH4rJQ0aISPmVk+JoJiZeJw1QnaqL2OmWKSFkxnrZWsbXK4TzO5tmS+8TYaGhv6xvgEEfAgHGc7HRgAAAABJRU5ErkJggg==';
}
- return '';
+ return UNAVAILABLE_LOGO_URL;
}
}
diff --git a/libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html b/libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html
index cda9cab3c..6c8902112 100644
--- a/libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html
+++ b/libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html
@@ -7,13 +7,12 @@
@for (account of accounts(); track account.id) {
- @if (account.platform?.url) {
-
- }
+
{{ account.name }}
From 57c21846827688702cd3401c3547ce2800c84bd1 Mon Sep 17 00:00:00 2001
From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com>
Date: Fri, 7 Aug 2026 08:42:30 +0200
Subject: [PATCH 84/86] Task/improve usability of create watchlist item dialog
(#7559)
* Set initial focus to search field
* Update changelog
---
CHANGELOG.md | 1 +
.../app/components/home-watchlist/home-watchlist.component.ts | 1 -
2 files changed, 1 insertion(+), 1 deletion(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 83861a8d0..dc1e4b745 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -16,6 +16,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
### Changed
+- Improved the usability of the create watchlist item dialog by setting the initial focus to the search field
- Migrated the abstract _Material_ form field from a component to a directive
## 3.43.0 - 2026-08-06
diff --git a/apps/client/src/app/components/home-watchlist/home-watchlist.component.ts b/apps/client/src/app/components/home-watchlist/home-watchlist.component.ts
index 0107f36a2..97fa6f744 100644
--- a/apps/client/src/app/components/home-watchlist/home-watchlist.component.ts
+++ b/apps/client/src/app/components/home-watchlist/home-watchlist.component.ts
@@ -146,7 +146,6 @@ export class GfHomeWatchlistComponent implements OnInit {
GfCreateWatchlistItemDialogComponent,
CreateWatchlistItemDialogParams
>(GfCreateWatchlistItemDialogComponent, {
- autoFocus: false,
data: {
deviceType: this.deviceType(),
locale: this.user?.settings?.locale ?? DEFAULT_LOCALE
From ddd20d30998542dcf80ce3dd31b3dd23206e8eb0 Mon Sep 17 00:00:00 2001
From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com>
Date: Fri, 7 Aug 2026 09:00:30 +0200
Subject: [PATCH 85/86] Task/remove redundant balance attribute from account
(#7546)
* Remove redundant balance attribute from account
* Update changelog
---
CHANGELOG.md | 1 +
.../api/src/app/account/account.controller.ts | 92 +++++++++----------
apps/api/src/app/account/account.service.ts | 80 +++++++++-------
.../interfaces/cash-details.interface.ts | 4 +-
apps/api/src/app/export/export.service.ts | 4 +-
apps/api/src/app/import/import.service.ts | 12 ++-
.../app/portfolio/portfolio.service.spec.ts | 7 +-
.../src/app/portfolio/portfolio.service.ts | 4 +-
.../holding-detail-dialog.component.ts | 5 +-
.../pages/accounts/accounts-page.component.ts | 9 +-
.../interfaces/interfaces.ts | 8 +-
libs/common/src/lib/config.ts | 2 -
.../common/src/lib/dtos/create-account.dto.ts | 7 +-
.../common/src/lib/dtos/update-account.dto.ts | 7 +-
.../lib/types/account-with-balance.type.ts | 5 +
.../src/lib/types/account-with-value.type.ts | 6 +-
libs/common/src/lib/types/index.ts | 2 +
.../accounts-table.component.stories.ts | 20 ++--
.../accounts-table.component.ts | 14 +--
.../activities-table.component.stories.ts | 5 -
.../migration.sql | 2 +
prisma/schema.prisma | 1 -
test/import/not-ok/invalid-platform.json | 1 -
test/import/ok/500-activities.json | 1 -
test/import/ok/derived-currency.json | 1 -
test/import/ok/sample.json | 1 -
26 files changed, 171 insertions(+), 130 deletions(-)
create mode 100644 libs/common/src/lib/types/account-with-balance.type.ts
create mode 100644 prisma/migrations/20260805120000_removed_balance_from_account/migration.sql
diff --git a/CHANGELOG.md b/CHANGELOG.md
index dc1e4b745..4656bdedf 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -18,6 +18,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- Improved the usability of the create watchlist item dialog by setting the initial focus to the search field
- Migrated the abstract _Material_ form field from a component to a directive
+- Removed the redundant `balance` attribute of the account in favor of the account balances
## 3.43.0 - 2026-08-06
diff --git a/apps/api/src/app/account/account.controller.ts b/apps/api/src/app/account/account.controller.ts
index 6466a13b2..f43aeedd5 100644
--- a/apps/api/src/app/account/account.controller.ts
+++ b/apps/api/src/app/account/account.controller.ts
@@ -156,32 +156,34 @@ export class AccountController {
public async createAccount(
@Body() data: CreateAccountDto
): Promise
{
- const { tags: tagIds, ...accountData } = data;
+ const { balance, tags: tagIds, ...accountData } = data;
if (accountData.platformId) {
const platformId = accountData.platformId;
delete accountData.platformId;
- return this.accountService.createAccount(
- {
+ return this.accountService.createAccount({
+ balance,
+ tagIds,
+ data: {
...accountData,
platform: { connect: { id: platformId } },
user: { connect: { id: this.request.user.id } }
},
- this.request.user.id,
- tagIds
- );
+ userId: this.request.user.id
+ });
} else {
delete accountData.platformId;
- return this.accountService.createAccount(
- {
+ return this.accountService.createAccount({
+ balance,
+ tagIds,
+ data: {
...accountData,
user: { connect: { id: this.request.user.id } }
},
- this.request.user.id,
- tagIds
- );
+ userId: this.request.user.id
+ });
}
}
@@ -257,52 +259,50 @@ export class AccountController {
);
}
- const { tags: tagIds, ...accountData } = data;
+ const { balance, tags: tagIds, ...accountData } = data;
if (accountData.platformId) {
const platformId = accountData.platformId;
delete accountData.platformId;
- return this.accountService.updateAccount(
- {
- data: {
- ...accountData,
- platform: { connect: { id: platformId } },
- user: { connect: { id: this.request.user.id } }
- },
- where: {
- id_userId: {
- id,
- userId: this.request.user.id
- }
- }
+ return this.accountService.updateAccount({
+ balance,
+ tagIds,
+ data: {
+ ...accountData,
+ platform: { connect: { id: platformId } },
+ user: { connect: { id: this.request.user.id } }
},
- this.request.user.id,
- tagIds
- );
+ userId: this.request.user.id,
+ where: {
+ id_userId: {
+ id,
+ userId: this.request.user.id
+ }
+ }
+ });
} else {
// platformId is null, remove it
delete accountData.platformId;
- return this.accountService.updateAccount(
- {
- data: {
- ...accountData,
- platform: originalAccount.platformId
- ? { disconnect: true }
- : undefined,
- user: { connect: { id: this.request.user.id } }
- },
- where: {
- id_userId: {
- id,
- userId: this.request.user.id
- }
- }
+ return this.accountService.updateAccount({
+ balance,
+ tagIds,
+ data: {
+ ...accountData,
+ platform: originalAccount.platformId
+ ? { disconnect: true }
+ : undefined,
+ user: { connect: { id: this.request.user.id } }
},
- this.request.user.id,
- tagIds
- );
+ userId: this.request.user.id,
+ where: {
+ id_userId: {
+ id,
+ userId: this.request.user.id
+ }
+ }
+ });
}
}
}
diff --git a/apps/api/src/app/account/account.service.ts b/apps/api/src/app/account/account.service.ts
index 7f0451101..3d0bb91bd 100644
--- a/apps/api/src/app/account/account.service.ts
+++ b/apps/api/src/app/account/account.service.ts
@@ -10,6 +10,7 @@ import { PrismaService } from '@ghostfolio/api/services/prisma/prisma.service';
import { TagService } from '@ghostfolio/api/services/tag/tag.service';
import { DATE_FORMAT } from '@ghostfolio/common/helper';
import { Filter } from '@ghostfolio/common/interfaces';
+import { AccountWithBalance } from '@ghostfolio/common/types';
import { Injectable } from '@nestjs/common';
import { EventEmitter2 } from '@nestjs/event-emitter';
@@ -24,7 +25,7 @@ import {
} from '@prisma/client';
import { Big } from 'big.js';
import { endOfToday, format } from 'date-fns';
-import { groupBy } from 'lodash';
+import { groupBy, isNil } from 'lodash';
import { CashDetails } from './interfaces/cash-details.interface';
@@ -40,7 +41,7 @@ export class AccountService {
public async account({
id_userId
- }: Prisma.AccountWhereUniqueInput): Promise {
+ }: Prisma.AccountWhereUniqueInput): Promise {
const account = await this.prismaService.account.findUnique({
include: {
balances: {
@@ -87,7 +88,7 @@ export class AccountService {
where?: Prisma.AccountWhereInput;
orderBy?: Prisma.AccountOrderByWithRelationInput;
}): Promise<
- (Account & {
+ (AccountWithBalance & {
activities?: (Order & { SymbolProfile?: SymbolProfile })[];
balances?: AccountBalance[];
platform?: Platform;
@@ -160,12 +161,18 @@ export class AccountService {
});
}
- public async createAccount(
- data: Prisma.AccountCreateInput,
- aUserId: string,
- tagIds?: string[]
- ): Promise {
- await this.tagService.validateTagIds({ tagIds, userId: aUserId });
+ public async createAccount({
+ balance,
+ data,
+ tagIds,
+ userId
+ }: {
+ balance?: number;
+ data: Prisma.AccountCreateInput;
+ tagIds?: string[];
+ userId: string;
+ }): Promise {
+ await this.tagService.validateTagIds({ tagIds, userId });
const account = await this.prismaService.account.create({
data: {
@@ -182,12 +189,14 @@ export class AccountService {
}
});
- await this.accountBalanceService.createOrUpdateAccountBalance({
- accountId: account.id,
- balance: data.balance,
- date: format(new Date(), DATE_FORMAT),
- userId: aUserId
- });
+ if (!isNil(balance)) {
+ await this.accountBalanceService.createOrUpdateAccountBalance({
+ balance,
+ userId,
+ accountId: account.id,
+ date: format(new Date(), DATE_FORMAT)
+ });
+ }
this.eventEmitter.emit(
PortfolioChangedEvent.getName(),
@@ -216,7 +225,7 @@ export class AccountService {
return account;
}
- public async getAccounts(aUserId: string): Promise {
+ public async getAccounts(aUserId: string): Promise {
const accounts = await this.accounts({
include: {
activities: true,
@@ -295,17 +304,20 @@ export class AccountService {
};
}
- public async updateAccount(
- params: {
- data: Prisma.AccountUpdateInput;
- where: Prisma.AccountWhereUniqueInput;
- },
- aUserId: string,
- tagIds?: string[]
- ): Promise {
- const { data, where } = params;
-
- await this.tagService.validateTagIds({ tagIds, userId: aUserId });
+ public async updateAccount({
+ balance,
+ data,
+ tagIds,
+ userId,
+ where
+ }: {
+ balance?: number;
+ data: Prisma.AccountUpdateInput;
+ tagIds?: string[];
+ userId: string;
+ where: Prisma.AccountWhereUniqueInput;
+ }): Promise {
+ await this.tagService.validateTagIds({ tagIds, userId });
const account = await this.prismaService.account.update({
data: {
@@ -324,12 +336,14 @@ export class AccountService {
where
});
- await this.accountBalanceService.createOrUpdateAccountBalance({
- accountId: account.id,
- balance: data.balance as number,
- date: format(new Date(), DATE_FORMAT),
- userId: aUserId
- });
+ if (!isNil(balance)) {
+ await this.accountBalanceService.createOrUpdateAccountBalance({
+ balance,
+ userId,
+ accountId: account.id,
+ date: format(new Date(), DATE_FORMAT)
+ });
+ }
this.eventEmitter.emit(
PortfolioChangedEvent.getName(),
diff --git a/apps/api/src/app/account/interfaces/cash-details.interface.ts b/apps/api/src/app/account/interfaces/cash-details.interface.ts
index 715343766..b396328a5 100644
--- a/apps/api/src/app/account/interfaces/cash-details.interface.ts
+++ b/apps/api/src/app/account/interfaces/cash-details.interface.ts
@@ -1,6 +1,6 @@
-import { Account } from '@prisma/client';
+import { AccountWithBalance } from '@ghostfolio/common/types';
export interface CashDetails {
- accounts: Account[];
+ accounts: AccountWithBalance[];
balanceInBaseCurrency: number;
}
diff --git a/apps/api/src/app/export/export.service.ts b/apps/api/src/app/export/export.service.ts
index 02ccb46b3..35db20993 100644
--- a/apps/api/src/app/export/export.service.ts
+++ b/apps/api/src/app/export/export.service.ts
@@ -102,7 +102,6 @@ export class ExportService {
})
.map(
({
- balance,
balances,
comment,
currency,
@@ -111,13 +110,12 @@ export class ExportService {
platform,
platformId,
tags
- }) => {
+ }): ExportResponse['accounts'][number] => {
if (platformId) {
platformsMap[platformId] = platform;
}
return {
- balance,
balances: balances.map(({ date, value }) => {
return { date: date.toISOString(), value };
}),
diff --git a/apps/api/src/app/import/import.service.ts b/apps/api/src/app/import/import.service.ts
index 96612522e..9d1e899c3 100644
--- a/apps/api/src/app/import/import.service.ts
+++ b/apps/api/src/app/import/import.service.ts
@@ -355,6 +355,7 @@ export class ImportService {
// If there is no account or if the account belongs to a different user then create a new account
if (!accountWithSameId || accountWithSameId.userId !== user.id) {
const account = omit(accountWithBalances, [
+ 'balance',
'balances',
'isExcluded',
'tags'
@@ -408,11 +409,12 @@ export class ImportService {
};
}
- const newAccount = await this.accountService.createAccount(
- accountObject,
- user.id,
- tagIds
- );
+ const newAccount = await this.accountService.createAccount({
+ tagIds,
+ balance: accountWithBalances.balance,
+ data: accountObject,
+ userId: user.id
+ });
// Store the new to old account ID mappings for updating activities
if (accountWithSameId && oldAccountId) {
diff --git a/apps/api/src/app/portfolio/portfolio.service.spec.ts b/apps/api/src/app/portfolio/portfolio.service.spec.ts
index 97635553f..eed3a27cb 100644
--- a/apps/api/src/app/portfolio/portfolio.service.spec.ts
+++ b/apps/api/src/app/portfolio/portfolio.service.spec.ts
@@ -16,8 +16,9 @@ import {
AssetProfileIdentifier,
PortfolioSummary
} from '@ghostfolio/common/interfaces';
+import { AccountWithBalance } from '@ghostfolio/common/types';
-import { Account, DataSource } from '@prisma/client';
+import { DataSource } from '@prisma/client';
import { Big } from 'big.js';
import { randomUUID } from 'node:crypto';
@@ -219,7 +220,7 @@ describe('PortfolioService', () => {
it('should return cash holdings when the calculator emits cash positions with the exchange-rate data source', async () => {
const accountId = randomUUID();
- const cashAccount: Account = {
+ const cashAccount: AccountWithBalance = {
balance: 2000,
comment: null,
createdAt: parseDate('2024-01-01'),
@@ -444,7 +445,7 @@ describe('PortfolioService', () => {
beforeEach(() => {
jest
.spyOn(accountService, 'getAccounts')
- .mockResolvedValue([account] as unknown as Account[]);
+ .mockResolvedValue([account] as unknown as AccountWithBalance[]);
jest
.spyOn(exchangeRateDataService, 'toCurrency')
diff --git a/apps/api/src/app/portfolio/portfolio.service.ts b/apps/api/src/app/portfolio/portfolio.service.ts
index 70106bdc1..ef79fd717 100644
--- a/apps/api/src/app/portfolio/portfolio.service.ts
+++ b/apps/api/src/app/portfolio/portfolio.service.ts
@@ -64,6 +64,7 @@ import {
} from '@ghostfolio/common/interfaces';
import { TimelinePosition } from '@ghostfolio/common/models';
import {
+ AccountWithBalance,
AccountWithValue,
DateRange,
GroupBy,
@@ -75,7 +76,6 @@ import { PerformanceCalculationType } from '@ghostfolio/common/types/performance
import { Inject, Injectable, Logger } from '@nestjs/common';
import { REQUEST } from '@nestjs/core';
import {
- Account,
Type as ActivityType,
AssetClass,
AssetSubClass,
@@ -2142,7 +2142,7 @@ export class PortfolioService {
const accounts: PortfolioDetails['accounts'] = {};
const platforms: PortfolioDetails['platforms'] = {};
- let currentAccounts: (Account & {
+ let currentAccounts: (AccountWithBalance & {
Order?: Order[];
platform?: Platform;
tags?: Tag[];
diff --git a/apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts b/apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts
index d58349fa0..57b8196d6 100644
--- a/apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts
+++ b/apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts
@@ -22,6 +22,7 @@ import {
} from '@ghostfolio/common/interfaces';
import { hasPermission, permissions } from '@ghostfolio/common/permissions';
import { internalRoutes } from '@ghostfolio/common/routes/routes';
+import { AccountWithValue } from '@ghostfolio/common/types';
import { GfAccountsTableComponent } from '@ghostfolio/ui/accounts-table';
import { GfActivitiesTableComponent } from '@ghostfolio/ui/activities-table';
import { GfDataProviderCreditsComponent } from '@ghostfolio/ui/data-provider-credits';
@@ -65,7 +66,7 @@ import { MatTableDataSource } from '@angular/material/table';
import { MatTabsModule } from '@angular/material/tabs';
import { NavigationStart, Router, RouterModule } from '@angular/router';
import { IonIcon } from '@ionic/angular/standalone';
-import { Account, MarketData, Tag } from '@prisma/client';
+import { MarketData, Tag } from '@prisma/client';
import { isUUID } from 'class-validator';
import { format, isSameMonth, isToday, parseISO } from 'date-fns';
import { addIcons } from 'ionicons';
@@ -117,7 +118,7 @@ import {
templateUrl: 'holding-detail-dialog.html'
})
export class GfHoldingDetailDialogComponent implements OnInit {
- protected accounts: Account[];
+ protected accounts: AccountWithValue[];
protected activitiesCount: number;
protected assetClass: string;
protected assetProfile: Pick<
diff --git a/apps/client/src/app/pages/accounts/accounts-page.component.ts b/apps/client/src/app/pages/accounts/accounts-page.component.ts
index 291a7f3f9..e45c1d003 100644
--- a/apps/client/src/app/pages/accounts/accounts-page.component.ts
+++ b/apps/client/src/app/pages/accounts/accounts-page.component.ts
@@ -12,6 +12,7 @@ import {
} from '@ghostfolio/common/dtos';
import { User } from '@ghostfolio/common/interfaces';
import { hasPermission, permissions } from '@ghostfolio/common/permissions';
+import { AccountWithValue } from '@ghostfolio/common/types';
import { GfAccountsTableComponent } from '@ghostfolio/ui/accounts-table';
import { GfFabComponent } from '@ghostfolio/ui/fab';
import { NotificationService } from '@ghostfolio/ui/notifications';
@@ -29,7 +30,7 @@ import {
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
import { MatDialog } from '@angular/material/dialog';
import { ActivatedRoute, Router, RouterModule } from '@angular/router';
-import { Account as AccountModel, Tag } from '@prisma/client';
+import { Tag } from '@prisma/client';
import { DeviceDetectorService } from 'ngx-device-detector';
import { EMPTY } from 'rxjs';
import { catchError } from 'rxjs/operators';
@@ -48,7 +49,7 @@ import { GfTransferBalanceDialogComponent } from './transfer-balance/transfer-ba
templateUrl: './accounts-page.html'
})
export class GfAccountsPageComponent implements OnInit {
- protected accounts: AccountModel[];
+ protected accounts: AccountWithValue[];
protected activitiesCount = 0;
protected hasImpersonationId: boolean;
protected hasPermissionToCreateAccount: boolean;
@@ -155,7 +156,7 @@ export class GfAccountsPageComponent implements OnInit {
});
}
- protected onUpdateAccount(aAccount: AccountModel) {
+ protected onUpdateAccount(aAccount: AccountWithValue) {
this.router.navigate([], {
queryParams: { accountId: aAccount.id, editDialog: true }
});
@@ -194,7 +195,7 @@ export class GfAccountsPageComponent implements OnInit {
name,
platformId,
tags
- }: AccountModel & { tags?: Tag[] }) {
+ }: AccountWithValue & { tags?: Tag[] }) {
const dialogRef = this.dialog.open<
GfCreateOrUpdateAccountDialogComponent,
CreateOrUpdateAccountDialogParams
diff --git a/apps/client/src/app/pages/accounts/create-or-update-account-dialog/interfaces/interfaces.ts b/apps/client/src/app/pages/accounts/create-or-update-account-dialog/interfaces/interfaces.ts
index c51503277..43015de00 100644
--- a/apps/client/src/app/pages/accounts/create-or-update-account-dialog/interfaces/interfaces.ts
+++ b/apps/client/src/app/pages/accounts/create-or-update-account-dialog/interfaces/interfaces.ts
@@ -1,9 +1,13 @@
import { User } from '@ghostfolio/common/interfaces';
+import { AccountWithBalance } from '@ghostfolio/common/types';
-import { Account, Tag } from '@prisma/client';
+import { Tag } from '@prisma/client';
export interface CreateOrUpdateAccountDialogParams {
- account: Omit & {
+ account: Omit<
+ AccountWithBalance,
+ 'createdAt' | 'id' | 'updatedAt' | 'userId'
+ > & {
id: string | null;
tags?: Tag[];
};
diff --git a/libs/common/src/lib/config.ts b/libs/common/src/lib/config.ts
index 08a6701dc..23c8aab69 100644
--- a/libs/common/src/lib/config.ts
+++ b/libs/common/src/lib/config.ts
@@ -115,7 +115,6 @@ export const DEFAULT_REDACTED_PATHS = [
'accounts[*].interestInBaseCurrency',
'accounts[*].value',
'accounts[*].valueInBaseCurrency',
- 'activities[*].account.balance',
'activities[*].account.comment',
'activities[*].assetProfile.symbolMapping',
'activities[*].assetProfile.watchedByCount',
@@ -128,7 +127,6 @@ export const DEFAULT_REDACTED_PATHS = [
'activities[*].valueInBaseCurrency',
'balance',
'balanceInBaseCurrency',
- 'balances[*].account.balance',
'balances[*].account.comment',
'balances[*].value',
'balances[*].valueInBaseCurrency',
diff --git a/libs/common/src/lib/dtos/create-account.dto.ts b/libs/common/src/lib/dtos/create-account.dto.ts
index cae8293ee..ccadff5f9 100644
--- a/libs/common/src/lib/dtos/create-account.dto.ts
+++ b/libs/common/src/lib/dtos/create-account.dto.ts
@@ -12,8 +12,13 @@ import {
import { isString } from 'lodash';
export class CreateAccountDto {
+ /**
+ * The initial balance, stored as the account balance of today.
+ * Optional because callers may instead supply the full history via `balances`.
+ */
@IsNumber()
- balance: number;
+ @IsOptional()
+ balance?: number;
@IsOptional()
@IsString()
diff --git a/libs/common/src/lib/dtos/update-account.dto.ts b/libs/common/src/lib/dtos/update-account.dto.ts
index d8bfc7b8d..4e1570aad 100644
--- a/libs/common/src/lib/dtos/update-account.dto.ts
+++ b/libs/common/src/lib/dtos/update-account.dto.ts
@@ -12,8 +12,13 @@ import {
import { isString } from 'lodash';
export class UpdateAccountDto {
+ /**
+ * The balance, stored as the account balance of today.
+ * Optional because the account balances are the source of truth.
+ */
@IsNumber()
- balance: number;
+ @IsOptional()
+ balance?: number;
@IsOptional()
@IsString()
diff --git a/libs/common/src/lib/types/account-with-balance.type.ts b/libs/common/src/lib/types/account-with-balance.type.ts
new file mode 100644
index 000000000..72732f3a6
--- /dev/null
+++ b/libs/common/src/lib/types/account-with-balance.type.ts
@@ -0,0 +1,5 @@
+import { Account as AccountModel } from '@prisma/client';
+
+export type AccountWithBalance = AccountModel & {
+ balance: number;
+};
diff --git a/libs/common/src/lib/types/account-with-value.type.ts b/libs/common/src/lib/types/account-with-value.type.ts
index a13530632..27b7541dc 100644
--- a/libs/common/src/lib/types/account-with-value.type.ts
+++ b/libs/common/src/lib/types/account-with-value.type.ts
@@ -1,6 +1,8 @@
-import { Account as AccountModel, Platform, Tag } from '@prisma/client';
+import { Platform, Tag } from '@prisma/client';
-export type AccountWithValue = AccountModel & {
+import { AccountWithBalance } from './account-with-balance.type';
+
+export type AccountWithValue = AccountWithBalance & {
activitiesCount: number;
allocationInPercentage: number;
balanceInBaseCurrency: number;
diff --git a/libs/common/src/lib/types/index.ts b/libs/common/src/lib/types/index.ts
index aa6893bc6..f61bfdca7 100644
--- a/libs/common/src/lib/types/index.ts
+++ b/libs/common/src/lib/types/index.ts
@@ -1,5 +1,6 @@
import type { AccessType } from './access-type.type';
import type { AccessWithGranteeUser } from './access-with-grantee-user.type';
+import type { AccountWithBalance } from './account-with-balance.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';
@@ -28,6 +29,7 @@ import type { ViewMode } from './view-mode.type';
export type {
AccessType,
AccessWithGranteeUser,
+ AccountWithBalance,
AccountWithPlatform,
AccountWithValue,
AiPromptMode,
diff --git a/libs/ui/src/lib/accounts-table/accounts-table.component.stories.ts b/libs/ui/src/lib/accounts-table/accounts-table.component.stories.ts
index a38ca826c..68da20ec6 100644
--- a/libs/ui/src/lib/accounts-table/accounts-table.component.stories.ts
+++ b/libs/ui/src/lib/accounts-table/accounts-table.component.stories.ts
@@ -1,3 +1,5 @@
+import { AccountWithValue } from '@ghostfolio/common/types';
+
import { CommonModule } from '@angular/common';
import { MatButtonModule } from '@angular/material/button';
import { MatMenuModule } from '@angular/material/menu';
@@ -14,16 +16,18 @@ import { NotificationService } from '../notifications';
import { GfValueComponent } from '../value';
import { GfAccountsTableComponent } from './accounts-table.component';
-const accounts = [
+const accounts: AccountWithValue[] = [
{
activitiesCount: 0,
- allocationInPercentage: null,
+ allocationInPercentage: 0.002574748676949956,
balance: 278,
balanceInBaseCurrency: 278,
comment: null,
createdAt: new Date('2025-06-01T06:52:49.063Z'),
currency: 'USD',
+ dividendInBaseCurrency: 0,
id: '460d7401-ca43-4ed4-b08e-349f1822e9db',
+ interestInBaseCurrency: 0,
name: 'Coinbase Account',
platform: {
id: '8dc24b88-bb92-4152-af25-fe6a31643e26',
@@ -38,13 +42,15 @@ const accounts = [
},
{
activitiesCount: 0,
- allocationInPercentage: null,
+ allocationInPercentage: 0.11114023065971035,
balance: 12000,
balanceInBaseCurrency: 12000,
comment: null,
createdAt: new Date('2025-06-01T06:48:53.055Z'),
currency: 'USD',
+ dividendInBaseCurrency: 0,
id: '6d773e31-0583-4c85-a247-e69870b4f1ee',
+ interestInBaseCurrency: 0,
name: 'Private Banking Account',
platform: {
id: '43e8fcd1-5b79-4100-b678-d2229bd1660d',
@@ -59,13 +65,15 @@ const accounts = [
},
{
activitiesCount: 12,
- allocationInPercentage: null,
+ allocationInPercentage: 0.8862850206633397,
balance: 150.2,
balanceInBaseCurrency: 150.2,
comment: null,
createdAt: new Date('2025-05-31T13:00:13.940Z'),
currency: 'USD',
+ dividendInBaseCurrency: 0,
id: '776bd1e9-b2f6-4f7e-933d-18756c2f0625',
+ interestInBaseCurrency: 0,
name: 'Trading Account',
platform: {
id: '9da3a8a7-4795-43e3-a6db-ccb914189737',
@@ -73,10 +81,10 @@ const accounts = [
url: 'https://interactivebrokers.com'
},
platformId: '9da3a8a7-4795-43e3-a6db-ccb914189737',
- valueInBaseCurrency: 95693.70321466809,
updatedAt: new Date('2025-06-01T06:53:10.569Z'),
userId: '081aa387-487d-4438-83a4-3060eb2a016e',
- value: 95693.70321466809
+ value: 95693.70321466809,
+ valueInBaseCurrency: 95693.70321466809
}
];
diff --git a/libs/ui/src/lib/accounts-table/accounts-table.component.ts b/libs/ui/src/lib/accounts-table/accounts-table.component.ts
index 3e531e844..ab49c8cb5 100644
--- a/libs/ui/src/lib/accounts-table/accounts-table.component.ts
+++ b/libs/ui/src/lib/accounts-table/accounts-table.component.ts
@@ -4,6 +4,7 @@ import {
getLowercase,
isAccountExcluded
} from '@ghostfolio/common/helper';
+import { AccountWithValue } from '@ghostfolio/common/types';
import { GfEntityLogoComponent } from '@ghostfolio/ui/entity-logo';
import { NotificationService } from '@ghostfolio/ui/notifications';
import { GfValueComponent } from '@ghostfolio/ui/value';
@@ -24,7 +25,6 @@ import { MatSort, MatSortModule } from '@angular/material/sort';
import { MatTableDataSource, MatTableModule } from '@angular/material/table';
import { Router, RouterModule } from '@angular/router';
import { IonIcon } from '@ionic/angular/standalone';
-import { Account } from '@prisma/client';
import { addIcons } from 'ionicons';
import {
arrowRedoOutline,
@@ -55,7 +55,7 @@ import { NgxSkeletonLoaderModule } from 'ngx-skeleton-loader';
templateUrl: './accounts-table.component.html'
})
export class GfAccountsTableComponent {
- public readonly accounts = input.required();
+ public readonly accounts = input.required();
public readonly activitiesCount = input();
public readonly baseCurrency = input();
public readonly hasPermissionToOpenDetails = input(true);
@@ -71,12 +71,12 @@ export class GfAccountsTableComponent {
public readonly totalValueInBaseCurrency = input();
public readonly accountDeleted = output();
- public readonly accountToUpdate = output();
+ public readonly accountToUpdate = output();
public readonly transferBalance = output();
public readonly sort = viewChild.required(MatSort);
- protected readonly dataSource = new MatTableDataSource([]);
+ protected readonly dataSource = new MatTableDataSource([]);
protected readonly displayedColumns = computed(() => {
const columns = ['status', 'account', 'platform'];
@@ -141,7 +141,9 @@ export class GfAccountsTableComponent {
});
}
- protected isExcluded(account: Account & { tags?: { id: string }[] }) {
+ protected isExcluded(
+ account: AccountWithValue & { tags?: { id: string }[] }
+ ) {
return isAccountExcluded(account);
}
@@ -173,7 +175,7 @@ export class GfAccountsTableComponent {
this.transferBalance.emit();
}
- protected onUpdateAccount(aAccount: Account) {
+ protected onUpdateAccount(aAccount: AccountWithValue) {
this.accountToUpdate.emit(aAccount);
}
}
diff --git a/libs/ui/src/lib/activities-table/activities-table.component.stories.ts b/libs/ui/src/lib/activities-table/activities-table.component.stories.ts
index 0136545cf..929c71787 100644
--- a/libs/ui/src/lib/activities-table/activities-table.component.stories.ts
+++ b/libs/ui/src/lib/activities-table/activities-table.component.stories.ts
@@ -39,7 +39,6 @@ const activities: Activity[] = [
updatedAt: new Date('2025-05-31T18:43:01.840Z'),
userId: '081aa387-487d-4438-83a4-3060eb2a016e',
account: {
- balance: 150.2,
comment: null,
createdAt: new Date('2025-05-31T13:00:13.940Z'),
currency: 'USD',
@@ -105,7 +104,6 @@ const activities: Activity[] = [
updatedAt: new Date('2025-05-31T18:46:14.175Z'),
userId: '081aa387-487d-4438-83a4-3060eb2a016e',
account: {
- balance: 150.2,
comment: null,
createdAt: new Date('2025-05-31T13:00:13.940Z'),
currency: 'USD',
@@ -171,7 +169,6 @@ const activities: Activity[] = [
updatedAt: new Date('2025-05-31T18:49:54.064Z'),
userId: '081aa387-487d-4438-83a4-3060eb2a016e',
account: {
- balance: 150.2,
comment: null,
createdAt: new Date('2025-05-31T13:00:13.940Z'),
currency: 'USD',
@@ -237,7 +234,6 @@ const activities: Activity[] = [
updatedAt: new Date('2025-05-31T18:48:48.209Z'),
userId: '081aa387-487d-4438-83a4-3060eb2a016e',
account: {
- balance: 150.2,
comment: null,
createdAt: new Date('2025-05-31T13:00:13.940Z'),
currency: 'USD',
@@ -303,7 +299,6 @@ const activities: Activity[] = [
updatedAt: new Date('2025-05-31T18:46:44.616Z'),
userId: '081aa387-487d-4438-83a4-3060eb2a016e',
account: {
- balance: 150.2,
comment: null,
createdAt: new Date('2025-05-31T13:00:13.940Z'),
currency: 'USD',
diff --git a/prisma/migrations/20260805120000_removed_balance_from_account/migration.sql b/prisma/migrations/20260805120000_removed_balance_from_account/migration.sql
new file mode 100644
index 000000000..2371cb748
--- /dev/null
+++ b/prisma/migrations/20260805120000_removed_balance_from_account/migration.sql
@@ -0,0 +1,2 @@
+-- AlterTable
+ALTER TABLE "Account" DROP COLUMN "balance";
diff --git a/prisma/schema.prisma b/prisma/schema.prisma
index 77faccd49..4451be4e2 100644
--- a/prisma/schema.prisma
+++ b/prisma/schema.prisma
@@ -27,7 +27,6 @@ model Access {
model Account {
activities Order[]
- balance Float @default(0)
balances AccountBalance[]
comment String?
createdAt DateTime @default(now())
diff --git a/test/import/not-ok/invalid-platform.json b/test/import/not-ok/invalid-platform.json
index 69a8e29ca..d280228b8 100644
--- a/test/import/not-ok/invalid-platform.json
+++ b/test/import/not-ok/invalid-platform.json
@@ -5,7 +5,6 @@
},
"accounts": [
{
- "balance": 0,
"balances": [],
"currency": "USD",
"id": "e62be662-a2c8-4cff-8b79-dc0a46576659",
diff --git a/test/import/ok/500-activities.json b/test/import/ok/500-activities.json
index 03aabca33..3c74d8517 100644
--- a/test/import/ok/500-activities.json
+++ b/test/import/ok/500-activities.json
@@ -5,7 +5,6 @@
},
"accounts": [
{
- "balance": 2000,
"currency": "USD",
"id": "b2d3fe1d-d6a8-41a3-be39-07ef5e9480f0",
"name": "My Online Trading Account",
diff --git a/test/import/ok/derived-currency.json b/test/import/ok/derived-currency.json
index 4b7aa46c3..100ab6739 100644
--- a/test/import/ok/derived-currency.json
+++ b/test/import/ok/derived-currency.json
@@ -5,7 +5,6 @@
},
"accounts": [
{
- "balance": 2000,
"currency": "USD",
"id": "b2d3fe1d-d6a8-41a3-be39-07ef5e9480f0",
"name": "My Online Trading Account",
diff --git a/test/import/ok/sample.json b/test/import/ok/sample.json
index feca8a379..3c75c492b 100644
--- a/test/import/ok/sample.json
+++ b/test/import/ok/sample.json
@@ -5,7 +5,6 @@
},
"accounts": [
{
- "balance": 2000,
"balances": [
{
"date": "2024-12-31T00:00:00.000Z",
From 4386d22e53047e555bbf3ad1600fd78baa0cb46d Mon Sep 17 00:00:00 2001
From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com>
Date: Fri, 7 Aug 2026 09:16:57 +0200
Subject: [PATCH 86/86] Bugfix/percentage values in impersonation mode with
unrestricted access (#7522)
* Fix percentage values in impersonation mode with unrestricted access
* Fix savings rate in impersonation mode
* Improve savingsRate on FIRE page
* Update changelog
---
CHANGELOG.md | 6 ++++
.../src/app/portfolio/portfolio.controller.ts | 30 ++++++++--------
.../src/app/portfolio/portfolio.service.ts | 5 +--
.../redact-values-in-response.interceptor.ts | 2 +-
apps/client/src/app/app.component.ts | 10 +++---
.../account-detail-dialog.component.ts | 11 ++++--
.../account-detail-dialog.html | 4 +--
.../interfaces/interfaces.ts | 2 +-
.../holding-detail-dialog.html | 4 +--
.../interfaces/interfaces.ts | 2 +-
.../pages/accounts/accounts-page.component.ts | 12 ++++---
.../allocations/allocations-page.component.ts | 23 +++++++++----
.../analysis/analysis-page.component.ts | 34 ++++++++++++-------
.../portfolio/analysis/analysis-page.html | 12 ++-----
.../app/pages/portfolio/fire/fire-page.html | 2 +-
.../portfolio-investments.interface.ts | 1 +
libs/common/src/lib/permissions.ts | 12 +++----
17 files changed, 103 insertions(+), 69 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 4656bdedf..c32f0535b 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -20,6 +20,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- Migrated the abstract _Material_ form field from a component to a directive
- Removed the redundant `balance` attribute of the account in favor of the account balances
+### Fixed
+
+- Fixed the values of the charts and tables in impersonation mode with an unrestricted access to show absolute values instead of percentages
+- Fixed the savings rate of the investment timeline chart and the streaks on the analysis page in impersonation mode to be based on the impersonated user
+- Fixed the savings rate of the _FIRE_ calculator in impersonation mode to not be based on the impersonating user
+
## 3.43.0 - 2026-08-06
### Added
diff --git a/apps/api/src/app/portfolio/portfolio.controller.ts b/apps/api/src/app/portfolio/portfolio.controller.ts
index f6e8648d5..953976a4a 100644
--- a/apps/api/src/app/portfolio/portfolio.controller.ts
+++ b/apps/api/src/app/portfolio/portfolio.controller.ts
@@ -136,7 +136,7 @@ export class PortfolioController {
if (
hasReadRestrictedAccessPermission({
impersonationId,
- user: this.request.user
+ accesses: this.request.user?.accessesGet
}) ||
isRestrictedView(this.request.user)
) {
@@ -180,7 +180,7 @@ export class PortfolioController {
hasDetails === false ||
hasReadRestrictedAccessPermission({
impersonationId,
- user: this.request.user
+ accesses: this.request.user?.accessesGet
}) ||
isRestrictedView(this.request.user)
) {
@@ -374,7 +374,7 @@ export class PortfolioController {
if (
hasReadRestrictedAccessPermission({
impersonationId,
- user: this.request.user
+ accesses: this.request.user?.accessesGet
}) ||
isRestrictedView(this.request.user)
) {
@@ -491,19 +491,19 @@ export class PortfolioController {
filterByTags: tags
});
- let { investments, streaks } = await this.portfolioService.getInvestments({
- filters,
- groupBy,
- impersonationId,
- dateRange: range,
- savingsRate: this.request.user?.settings?.settings.savingsRate,
- userId: this.request.user.id
- });
+ let { investments, savingsRate, streaks } =
+ await this.portfolioService.getInvestments({
+ filters,
+ groupBy,
+ impersonationId,
+ dateRange: range,
+ userId: this.request.user.id
+ });
if (
hasReadRestrictedAccessPermission({
impersonationId,
- user: this.request.user
+ accesses: this.request.user?.accessesGet
}) ||
isRestrictedView(this.request.user)
) {
@@ -521,6 +521,8 @@ export class PortfolioController {
'currentStreak',
'longestStreak'
]);
+
+ savingsRate = null;
}
if (
@@ -537,7 +539,7 @@ export class PortfolioController {
]);
}
- return { investments, streaks };
+ return { investments, savingsRate, streaks };
}
@Get('performance')
@@ -578,7 +580,7 @@ export class PortfolioController {
if (
hasReadRestrictedAccessPermission({
impersonationId,
- user: this.request.user
+ accesses: this.request.user?.accessesGet
}) ||
isRestrictedView(this.request.user) ||
this.request.user.settings.settings.viewMode === 'ZEN'
diff --git a/apps/api/src/app/portfolio/portfolio.service.ts b/apps/api/src/app/portfolio/portfolio.service.ts
index ef79fd717..48ea66dac 100644
--- a/apps/api/src/app/portfolio/portfolio.service.ts
+++ b/apps/api/src/app/portfolio/portfolio.service.ts
@@ -413,19 +413,18 @@ export class PortfolioService {
filters,
groupBy,
impersonationId,
- savingsRate,
userId
}: {
dateRange: DateRange;
filters?: Filter[];
groupBy?: GroupBy;
impersonationId: string;
- savingsRate: number;
userId: string;
}): Promise {
userId = await this.getUserId(impersonationId, userId);
const user = await this.userService.user({ id: userId });
const userCurrency = this.getUserCurrency(user);
+ const savingsRate = (user.settings?.settings as UserSettings)?.savingsRate;
const { endDate, startDate } = getIntervalFromDateRange({ dateRange });
@@ -438,6 +437,7 @@ export class PortfolioService {
if (activities.length === 0) {
return {
+ savingsRate,
investments: [],
streaks: { currentStreak: 0, longestStreak: 0 }
};
@@ -484,6 +484,7 @@ export class PortfolioService {
return {
investments,
+ savingsRate,
streaks
};
}
diff --git a/apps/api/src/interceptors/redact-values-in-response/redact-values-in-response.interceptor.ts b/apps/api/src/interceptors/redact-values-in-response/redact-values-in-response.interceptor.ts
index 60b994cac..6a9596298 100644
--- a/apps/api/src/interceptors/redact-values-in-response/redact-values-in-response.interceptor.ts
+++ b/apps/api/src/interceptors/redact-values-in-response/redact-values-in-response.interceptor.ts
@@ -38,7 +38,7 @@ export class RedactValuesInResponseInterceptor implements NestInterceptor<
if (
hasReadRestrictedAccessPermission({
impersonationId,
- user
+ accesses: user?.accessesGet
}) ||
isRestrictedView(user)
) {
diff --git a/apps/client/src/app/app.component.ts b/apps/client/src/app/app.component.ts
index fd17bcd6e..65b5e95b0 100644
--- a/apps/client/src/app/app.component.ts
+++ b/apps/client/src/app/app.component.ts
@@ -57,12 +57,12 @@ export class GfAppComponent implements OnInit {
public currentRoute: string;
public currentSubRoute: string;
public deviceType: string;
- public hasImpersonationId: boolean;
public hasInfoMessage: boolean;
public hasPermissionToChangeDateRange: boolean;
public hasPermissionToChangeFilters: boolean;
public hasPromotion = false;
public hasTabs = false;
+ public impersonationId: string | null;
public info: InfoItem;
public pageTitle: string;
public routerLinkRegister = publicRoutes.register.routerLink;
@@ -116,7 +116,7 @@ export class GfAppComponent implements OnInit {
.onChangeHasImpersonation()
.pipe(takeUntilDestroyed(this.destroyRef))
.subscribe((impersonationId) => {
- this.hasImpersonationId = !!impersonationId;
+ this.impersonationId = impersonationId;
});
this.router.events
@@ -291,13 +291,12 @@ export class GfAppComponent implements OnInit {
baseCurrency: this.user?.settings?.baseCurrency,
colorScheme: this.user?.settings?.colorScheme,
deviceType: this.deviceType,
- hasImpersonationId: this.hasImpersonationId,
hasPermissionToAccessAdminControl: hasPermission(
this.user?.permissions,
permissions.accessAdminControl
),
hasPermissionToCreateActivity:
- !this.hasImpersonationId &&
+ !this.impersonationId &&
hasPermission(
this.user?.permissions,
permissions.createActivity
@@ -308,12 +307,13 @@ export class GfAppComponent implements OnInit {
permissions.reportDataGlitch
),
hasPermissionToUpdateActivity:
- !this.hasImpersonationId &&
+ !this.impersonationId &&
hasPermission(
this.user?.permissions,
permissions.updateActivity
) &&
!this.user?.settings?.isRestrictedView,
+ impersonationId: this.impersonationId,
locale: this.user?.settings?.locale
},
height: this.deviceType === 'mobile' ? '98vh' : '80vh',
diff --git a/apps/client/src/app/components/account-detail-dialog/account-detail-dialog.component.ts b/apps/client/src/app/components/account-detail-dialog/account-detail-dialog.component.ts
index e81b8cf06..a0350ee6b 100644
--- a/apps/client/src/app/components/account-detail-dialog/account-detail-dialog.component.ts
+++ b/apps/client/src/app/components/account-detail-dialog/account-detail-dialog.component.ts
@@ -14,7 +14,11 @@ import {
PortfolioPosition,
User
} from '@ghostfolio/common/interfaces';
-import { hasPermission, permissions } from '@ghostfolio/common/permissions';
+import {
+ hasPermission,
+ hasReadRestrictedAccessPermission,
+ permissions
+} from '@ghostfolio/common/permissions';
import { GfAccountBalancesComponent } from '@ghostfolio/ui/account-balances';
import { GfActivitiesTableComponent } from '@ghostfolio/ui/activities-table';
import { GfDialogFooterComponent } from '@ghostfolio/ui/dialog-footer';
@@ -225,7 +229,10 @@ export class GfAccountDetailDialogComponent implements OnInit {
protected showValuesInPercentage() {
return (
- this.data.hasImpersonationId || this.user?.settings?.isRestrictedView
+ hasReadRestrictedAccessPermission({
+ accesses: this.user?.access,
+ impersonationId: this.data.impersonationId
+ }) || this.user?.settings?.isRestrictedView
);
}
diff --git a/apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html b/apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
index 485af7500..cb3246c00 100644
--- a/apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
+++ b/apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html
@@ -158,8 +158,8 @@
[pageSize]="pageSize"
[showAccountColumn]="false"
[showActions]="
- !data.hasImpersonationId &&
data.hasPermissionToCreateActivity &&
+ !data.impersonationId &&
user?.settings?.isExperimentalFeatures &&
!user?.settings?.isRestrictedView
"
@@ -183,8 +183,8 @@
[currentBalance]="balance"
[locale]="user?.settings?.locale"
[showActions]="
- !data.hasImpersonationId &&
hasPermissionToDeleteAccountBalance &&
+ !data.impersonationId &&
!user.settings.isRestrictedView
"
(accountBalanceCreated)="onAddAccountBalance($event)"
diff --git a/apps/client/src/app/components/account-detail-dialog/interfaces/interfaces.ts b/apps/client/src/app/components/account-detail-dialog/interfaces/interfaces.ts
index 2f80dac36..0e7d04f2c 100644
--- a/apps/client/src/app/components/account-detail-dialog/interfaces/interfaces.ts
+++ b/apps/client/src/app/components/account-detail-dialog/interfaces/interfaces.ts
@@ -1,8 +1,8 @@
export interface AccountDetailDialogParams {
accountId: string;
deviceType: string;
- hasImpersonationId: boolean;
hasPermissionToCreateActivity: boolean;
+ impersonationId: string | null;
}
export interface AccountDetailDialogResult {
diff --git a/apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html b/apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
index eccc62b4c..8292ff598 100644
--- a/apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
+++ b/apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
@@ -382,7 +382,7 @@
[hasPermissionToCreateActivity]="false"
[hasPermissionToDeleteActivity]="false"
[hasPermissionToExportActivities]="
- !data.hasImpersonationId && !user?.settings?.isRestrictedView
+ !data.impersonationId && !user?.settings?.isRestrictedView
"
[hasPermissionToFilter]="false"
[hasPermissionToOpenDetails]="false"
@@ -390,8 +390,8 @@
[pageIndex]="pageIndex"
[pageSize]="pageSize"
[showActions]="
- !data.hasImpersonationId &&
data.hasPermissionToCreateActivity &&
+ !data.impersonationId &&
user?.settings?.isExperimentalFeatures &&
!user?.settings?.isRestrictedView
"
diff --git a/apps/client/src/app/components/holding-detail-dialog/interfaces/interfaces.ts b/apps/client/src/app/components/holding-detail-dialog/interfaces/interfaces.ts
index 40c94ca60..efc10d6ac 100644
--- a/apps/client/src/app/components/holding-detail-dialog/interfaces/interfaces.ts
+++ b/apps/client/src/app/components/holding-detail-dialog/interfaces/interfaces.ts
@@ -7,11 +7,11 @@ export interface HoldingDetailDialogParams {
colorScheme: ColorScheme;
dataSource: DataSource;
deviceType: string;
- hasImpersonationId: boolean;
hasPermissionToAccessAdminControl: boolean;
hasPermissionToCreateActivity: boolean;
hasPermissionToReportDataGlitch: boolean;
hasPermissionToUpdateActivity: boolean;
+ impersonationId: string | null;
locale: string;
symbol: string;
}
diff --git a/apps/client/src/app/pages/accounts/accounts-page.component.ts b/apps/client/src/app/pages/accounts/accounts-page.component.ts
index e45c1d003..9b10fb222 100644
--- a/apps/client/src/app/pages/accounts/accounts-page.component.ts
+++ b/apps/client/src/app/pages/accounts/accounts-page.component.ts
@@ -51,9 +51,9 @@ import { GfTransferBalanceDialogComponent } from './transfer-balance/transfer-ba
export class GfAccountsPageComponent implements OnInit {
protected accounts: AccountWithValue[];
protected activitiesCount = 0;
- protected hasImpersonationId: boolean;
protected hasPermissionToCreateAccount: boolean;
protected hasPermissionToUpdateAccount: boolean;
+ protected impersonationId: string | null;
protected totalBalanceInBaseCurrency = 0;
protected totalValueInBaseCurrency = 0;
protected user: User;
@@ -104,12 +104,16 @@ export class GfAccountsPageComponent implements OnInit {
});
}
+ protected get hasImpersonationId() {
+ return !!this.impersonationId;
+ }
+
public ngOnInit() {
this.impersonationStorageService
.onChangeHasImpersonation()
.pipe(takeUntilDestroyed(this.destroyRef))
.subscribe((impersonationId) => {
- this.hasImpersonationId = !!impersonationId;
+ this.impersonationId = impersonationId;
});
this.userService.stateChanged
@@ -252,11 +256,11 @@ export class GfAccountsPageComponent implements OnInit {
data: {
accountId: aAccountId,
deviceType: this.deviceType(),
- hasImpersonationId: this.hasImpersonationId,
hasPermissionToCreateActivity:
!this.hasImpersonationId &&
hasPermission(this.user?.permissions, permissions.createActivity) &&
- !this.user?.settings?.isRestrictedView
+ !this.user?.settings?.isRestrictedView,
+ impersonationId: this.impersonationId
},
height: this.deviceType() === 'mobile' ? '98vh' : '80vh',
width: this.deviceType() === 'mobile' ? '100vw' : '50rem'
diff --git a/apps/client/src/app/pages/portfolio/allocations/allocations-page.component.ts b/apps/client/src/app/pages/portfolio/allocations/allocations-page.component.ts
index 0931578cf..be7d49bea 100644
--- a/apps/client/src/app/pages/portfolio/allocations/allocations-page.component.ts
+++ b/apps/client/src/app/pages/portfolio/allocations/allocations-page.component.ts
@@ -17,7 +17,11 @@ import {
PortfolioPosition,
User
} from '@ghostfolio/common/interfaces';
-import { hasPermission, permissions } from '@ghostfolio/common/permissions';
+import {
+ hasPermission,
+ hasReadRestrictedAccessPermission,
+ permissions
+} from '@ghostfolio/common/permissions';
import { MarketAdvanced } from '@ghostfolio/common/types';
import { translate } from '@ghostfolio/ui/i18n';
import { GfPortfolioProportionChartComponent } from '@ghostfolio/ui/portfolio-proportion-chart';
@@ -85,7 +89,6 @@ export class GfAllocationsPageComponent implements OnInit {
protected readonly deviceType = computed(
() => this.deviceDetectorService.deviceInfo().deviceType
);
- protected hasImpersonationId: boolean;
protected holdings: {
[symbol: string]: Pick<
PortfolioPosition['assetProfile'],
@@ -97,6 +100,7 @@ export class GfAllocationsPageComponent implements OnInit {
| 'name'
> & { etfProvider: string; value: number };
};
+ protected impersonationId: string | null;
protected isLoading = false;
protected markets: PortfolioDetails['markets'];
protected marketsAdvanced: {
@@ -169,7 +173,7 @@ export class GfAllocationsPageComponent implements OnInit {
.onChangeHasImpersonation()
.pipe(takeUntilDestroyed(this.destroyRef))
.subscribe((impersonationId) => {
- this.hasImpersonationId = !!impersonationId;
+ this.impersonationId = impersonationId;
this.changeDetectorRef.markForCheck();
});
@@ -224,7 +228,12 @@ export class GfAllocationsPageComponent implements OnInit {
}
protected showValuesInPercentage() {
- return this.hasImpersonationId || this.user?.settings?.isRestrictedView;
+ return (
+ hasReadRestrictedAccessPermission({
+ accesses: this.user?.access,
+ impersonationId: this.impersonationId
+ }) || this.user?.settings?.isRestrictedView
+ );
}
private extractCurrency({
@@ -618,11 +627,11 @@ export class GfAllocationsPageComponent implements OnInit {
data: {
accountId: aAccountId,
deviceType: this.deviceType(),
- hasImpersonationId: this.hasImpersonationId,
hasPermissionToCreateActivity:
- !this.hasImpersonationId &&
+ !this.impersonationId &&
hasPermission(this.user?.permissions, permissions.createActivity) &&
- !this.user?.settings?.isRestrictedView
+ !this.user?.settings?.isRestrictedView,
+ impersonationId: this.impersonationId
},
height: this.deviceType() === 'mobile' ? '98vh' : '80vh',
width: this.deviceType() === 'mobile' ? '100vw' : '50rem'
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 c2d23dbc6..424f1bf5b 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
@@ -16,7 +16,11 @@ import {
ToggleOption,
User
} from '@ghostfolio/common/interfaces';
-import { hasPermission, permissions } from '@ghostfolio/common/permissions';
+import {
+ hasPermission,
+ hasReadRestrictedAccessPermission,
+ permissions
+} from '@ghostfolio/common/permissions';
import type { AiPromptMode, GroupBy } from '@ghostfolio/common/types';
import { translate } from '@ghostfolio/ui/i18n';
import { GfPremiumIndicatorComponent } from '@ghostfolio/ui/premium-indicator';
@@ -79,8 +83,8 @@ export class GfAnalysisPageComponent implements OnInit {
protected bottom3: PortfolioPosition[];
protected dividendsByGroup: InvestmentItem[];
protected readonly dividendTimelineDataLabel = $localize`Dividend`;
- protected hasImpersonationId: boolean;
protected hasPermissionToReadAiPrompt: boolean;
+ protected impersonationId: string | null;
protected investments: InvestmentItem[];
protected readonly investmentTimelineDataLabel = $localize`Invested Capital`;
protected investmentsByGroup: InvestmentItem[];
@@ -100,6 +104,7 @@ export class GfAnalysisPageComponent implements OnInit {
protected performanceDataItemsInPercentage: HistoricalDataItem[];
protected readonly portfolioEvolutionDataLabel = $localize`Investment`;
protected precision = 2;
+ protected savingsRatePerMonth: number | undefined;
protected streaks: PortfolioInvestmentsResponse['streaks'];
protected top3: PortfolioPosition[];
protected unitCurrentStreak: string;
@@ -131,18 +136,13 @@ export class GfAnalysisPageComponent implements OnInit {
}
get savingsRate() {
- const savingsRatePerMonth =
- this.hasImpersonationId || this.user.settings.isRestrictedView
- ? undefined
- : this.user?.settings?.savingsRate;
-
- if (savingsRatePerMonth === undefined) {
+ if (!this.savingsRatePerMonth) {
return undefined;
}
return this.mode() === 'year'
- ? savingsRatePerMonth * 12
- : savingsRatePerMonth;
+ ? this.savingsRatePerMonth * 12
+ : this.savingsRatePerMonth;
}
public ngOnInit() {
@@ -150,7 +150,7 @@ export class GfAnalysisPageComponent implements OnInit {
.onChangeHasImpersonation()
.pipe(takeUntilDestroyed(this.destroyRef))
.subscribe((impersonationId) => {
- this.hasImpersonationId = !!impersonationId;
+ this.impersonationId = impersonationId;
this.changeDetectorRef.markForCheck();
});
@@ -241,6 +241,15 @@ export class GfAnalysisPageComponent implements OnInit {
});
}
+ protected showValuesInPercentage() {
+ return (
+ hasReadRestrictedAccessPermission({
+ accesses: this.user?.access,
+ impersonationId: this.impersonationId
+ }) || this.user?.settings?.isRestrictedView
+ );
+ }
+
private fetchDividendsAndInvestments() {
this.isLoadingDividendTimelineChart = true;
this.isLoadingInvestmentTimelineChart = true;
@@ -267,8 +276,9 @@ export class GfAnalysisPageComponent implements OnInit {
range: this.user?.settings?.dateRange ?? DEFAULT_DATE_RANGE
})
.pipe(takeUntilDestroyed(this.destroyRef))
- .subscribe(({ investments, streaks }) => {
+ .subscribe(({ investments, savingsRate, streaks }) => {
this.investmentsByGroup = investments;
+ this.savingsRatePerMonth = savingsRate;
this.streaks = streaks;
this.unitCurrentStreak =
this.mode() === 'year'
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 0fac204f9..82751b882 100644
--- a/apps/client/src/app/pages/portfolio/analysis/analysis-page.html
+++ b/apps/client/src/app/pages/portfolio/analysis/analysis-page.html
@@ -398,9 +398,7 @@
[benchmarkDataLabel]="portfolioEvolutionDataLabel"
[currency]="user?.settings?.baseCurrency"
[historicalDataItems]="performanceDataItems"
- [isInPercentage]="
- hasImpersonationId || user.settings.isRestrictedView
- "
+ [isInPercentage]="showValuesInPercentage()"
[isLoading]="isLoadingInvestmentChart"
[locale]="user?.settings?.locale"
/>
@@ -456,9 +454,7 @@
[benchmarkDataLabel]="investmentTimelineDataLabel"
[currency]="user?.settings?.baseCurrency"
[groupBy]="mode()"
- [isInPercentage]="
- hasImpersonationId || user.settings.isRestrictedView
- "
+ [isInPercentage]="showValuesInPercentage()"
[isLoading]="isLoadingInvestmentTimelineChart"
[locale]="user?.settings?.locale"
[savingsRate]="savingsRate"
@@ -493,9 +489,7 @@
[benchmarkDataLabel]="dividendTimelineDataLabel"
[currency]="user?.settings?.baseCurrency"
[groupBy]="mode()"
- [isInPercentage]="
- hasImpersonationId || user.settings.isRestrictedView
- "
+ [isInPercentage]="showValuesInPercentage()"
[isLoading]="isLoadingDividendTimelineChart"
[locale]="user?.settings?.locale"
/>
diff --git a/apps/client/src/app/pages/portfolio/fire/fire-page.html b/apps/client/src/app/pages/portfolio/fire/fire-page.html
index 7315f10cb..13693a15a 100644
--- a/apps/client/src/app/pages/portfolio/fire/fire-page.html
+++ b/apps/client/src/app/pages/portfolio/fire/fire-page.html
@@ -21,7 +21,7 @@
[locale]="user?.settings?.locale"
[projectedTotalAmount]="user?.settings?.projectedTotalAmount"
[retirementDate]="user?.settings?.retirementDate"
- [savingsRate]="user?.settings?.savingsRate"
+ [savingsRate]="hasImpersonationId ? 0 : user?.settings?.savingsRate"
[style.opacity]="
user?.subscription?.type === 'Basic' ? '0.67' : 'initial'
"
diff --git a/libs/common/src/lib/interfaces/responses/portfolio-investments.interface.ts b/libs/common/src/lib/interfaces/responses/portfolio-investments.interface.ts
index 6d0d60002..30ac53765 100644
--- a/libs/common/src/lib/interfaces/responses/portfolio-investments.interface.ts
+++ b/libs/common/src/lib/interfaces/responses/portfolio-investments.interface.ts
@@ -2,5 +2,6 @@ import { InvestmentItem } from '../investment-item.interface';
export interface PortfolioInvestmentsResponse {
investments: InvestmentItem[];
+ savingsRate?: number;
streaks: { currentStreak: number; longestStreak: number };
}
diff --git a/libs/common/src/lib/permissions.ts b/libs/common/src/lib/permissions.ts
index 811ded68c..96533a9e7 100644
--- a/libs/common/src/lib/permissions.ts
+++ b/libs/common/src/lib/permissions.ts
@@ -1,6 +1,6 @@
import { UserWithSettings } from '@ghostfolio/common/types';
-import { Role } from '@prisma/client';
+import { Access, Role } from '@prisma/client';
export const permissions = {
accessAdminControl: 'accessAdminControl',
@@ -198,17 +198,17 @@ export function hasPermission(
}
export function hasReadRestrictedAccessPermission({
- impersonationId,
- user
+ accesses = [],
+ impersonationId
}: {
- impersonationId: string;
- user: UserWithSettings;
+ accesses?: Pick[];
+ impersonationId: string | null;
}) {
if (!impersonationId) {
return false;
}
- const access = user?.accessesGet?.find(({ id }) => {
+ const access = accesses.find(({ id }) => {
return id === impersonationId;
});