From 26cce42375993c3a8d1ce35d4ef87d36c3bdb605 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Mon, 28 Sep 2026 17:54:38 +0200 Subject: [PATCH 01/27] Feature/include dividends in portfolio performance (#7961) * Include dividends in portfolio performance * Update changelog --- CHANGELOG.md | 2 + .../src/app/portfolio/portfolio.service.ts | 2 + .../portfolio-summary.component.html | 58 ++++++++----- .../portfolio-summary.component.ts | 31 +++++++ .../analysis/analysis-page.component.ts | 30 +++++++ .../portfolio/analysis/analysis-page.html | 85 +++++++++---------- 6 files changed, 144 insertions(+), 64 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e5036ab1ab..46ffe1b2ec 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed +- Extended the net performance on the analysis page to include the dividends (experimental) +- Extended the net performance in the portfolio summary to include the dividends (experimental) - Improved the get quotes functionality of the _Manual_ service - Migrated the _ESLint_ configuration to the flat config format without `FlatCompat` - Upgraded `chartjs-chart-treemap` from version `4.2.0` to `4.2.2` diff --git a/apps/api/src/app/portfolio/portfolio.service.ts b/apps/api/src/app/portfolio/portfolio.service.ts index 21e615bc21..7350f5fc01 100644 --- a/apps/api/src/app/portfolio/portfolio.service.ts +++ b/apps/api/src/app/portfolio/portfolio.service.ts @@ -2140,6 +2140,7 @@ export class PortfolioService { const { currentValueInBaseCurrency, + dividendPercentageWithCurrencyEffect, netPerformance, netPerformancePercentage, netPerformancePercentageWithCurrencyEffect, @@ -2236,6 +2237,7 @@ export class PortfolioService { cash, currentValueInBaseCurrency, dateOfFirstActivity, + dividendPercentageWithCurrencyEffect, excludedAccountsAndActivities, netPerformance, netPerformancePercentage, 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 8846c14a7c..2130493f03 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 @@ -98,10 +98,29 @@ /> + @if (user?.settings?.isExperimentalFeatures) { +
+
Dividend
+
+ @if (isNumber(summary?.dividendInBaseCurrency)) { + + + } + +
+
+ }
Fees
- @if (summary?.fees || summary?.fees === 0) { + @if (isNumber(summary?.fees)) { - }
@@ -154,7 +173,7 @@ [isLoading]="isLoading" [isPercent]="true" [locale]="locale" - [value]="summary?.netPerformancePercentageWithCurrencyEffect" + [value]="netPerformancePercentageWithCurrencyEffect" /> @@ -367,10 +386,7 @@
Liabilities
- @if ( - summary?.liabilitiesInBaseCurrency || - summary?.liabilitiesInBaseCurrency === 0 - ) { + @if (isNumber(summary?.liabilitiesInBaseCurrency)) { - }
-
-
Dividend
-
- + @if (!user?.settings?.isExperimentalFeatures) { +
+
Dividend
+
+ +
-
+ }
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 dec65ddad9..23e32a0c9c 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 @@ -55,6 +55,7 @@ export class GfPortfolioSummaryComponent implements OnChanges { 'BUY_AND_SELL_ACTIVITIES_TOOLTIP' ); + protected readonly isNumber = isNumber; protected readonly PerformanceCalculationType = PerformanceCalculationType; protected isCashExpanded = false; @@ -136,6 +137,36 @@ export class GfPortfolioSummaryComponent implements OnChanges { ); } + protected get netPerformancePercentageWithCurrencyEffect() { + if ( + !this.user?.settings?.isExperimentalFeatures || + !isNumber(this.summary?.netPerformancePercentageWithCurrencyEffect) + ) { + return this.summary?.netPerformancePercentageWithCurrencyEffect; + } + + // Include the dividends (total return) + return ( + this.summary.netPerformancePercentageWithCurrencyEffect + + (this.summary.dividendPercentageWithCurrencyEffect ?? 0) + ); + } + + protected get netPerformanceWithCurrencyEffect() { + if ( + !this.user?.settings?.isExperimentalFeatures || + !isNumber(this.summary?.netPerformanceWithCurrencyEffect) + ) { + return this.summary?.netPerformanceWithCurrencyEffect; + } + + // Include the dividends (total return) + return ( + this.summary.netPerformanceWithCurrencyEffect + + this.summary.dividendInBaseCurrency + ); + } + public ngOnChanges() { if (this.summary) { if ( 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 aa57e3d9c8..450749925e 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 @@ -133,6 +133,36 @@ export class GfAnalysisPageComponent implements OnInit { addIcons({ copyOutline, ellipsisVertical }); } + protected get netPerformancePercentageWithCurrencyEffect() { + if ( + !this.user?.settings?.isExperimentalFeatures || + !isNumber(this.performance?.netPerformancePercentageWithCurrencyEffect) + ) { + return this.performance?.netPerformancePercentageWithCurrencyEffect; + } + + // Include the dividends (total return) + return ( + this.performance.netPerformancePercentageWithCurrencyEffect + + (this.performance.dividendPercentageWithCurrencyEffect ?? 0) + ); + } + + protected get netPerformanceWithCurrencyEffect() { + if ( + !this.user?.settings?.isExperimentalFeatures || + !isNumber(this.performance?.netPerformanceWithCurrencyEffect) + ) { + return this.performance?.netPerformanceWithCurrencyEffect; + } + + // Include the dividends (total return) + return ( + this.performance.netPerformanceWithCurrencyEffect + + this.performance.dividendInBaseCurrency + ); + } + get savingsRate() { if (!this.savingsRatePerMonth) { return undefined; 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 94a0328755..47cee7af6e 100644 --- a/apps/client/src/app/pages/portfolio/analysis/analysis-page.html +++ b/apps/client/src/app/pages/portfolio/analysis/analysis-page.html @@ -187,6 +187,45 @@ /> + @if (user?.settings?.isExperimentalFeatures) { +
+
+ Absolute Dividend Performance + @if (user?.subscription?.type === 'Basic') { + + } +
+
+ +
+
+
+
+ Dividend Performance +
+
+ +
+
+ }
@@ -273,52 +312,10 @@ [isLoading]="isLoadingInvestmentChart" [isPercent]="true" [locale]="user?.settings?.locale" - [value]=" - performance?.netPerformancePercentageWithCurrencyEffect - " + [value]="netPerformancePercentageWithCurrencyEffect" /> - @if (user?.settings?.isExperimentalFeatures) { -

-
-
- Absolute Dividend Performance - @if (user?.subscription?.type === 'Basic') { - - } -
-
- -
-
-
-
- Dividend Performance -
-
- -
-
- } From 301565baca022b9f2a25038de7ce5fb1161b05fb Mon Sep 17 00:00:00 2001 From: nidhal karchoud <114624188+yar01110@users.noreply.github.com> Date: Mon, 28 Sep 2026 18:20:25 +0200 Subject: [PATCH 02/27] Task/migrate historical market data editor dialog from ngModel to form control (#7933) * Migrate from ngModel to form control * Update changelog --- CHANGELOG.md | 1 + ...cal-market-data-editor-dialog.component.ts | 25 ++++++++++---- .../historical-market-data-editor-dialog.html | 34 +++++++++---------- 3 files changed, 36 insertions(+), 24 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 46ffe1b2ec..c09e057b2d 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 - Extended the net performance on the analysis page to include the dividends (experimental) - Extended the net performance in the portfolio summary to include the dividends (experimental) - Improved the get quotes functionality of the _Manual_ service +- Migrated the historical market data editor dialog from `ngModel` to form control - Migrated the _ESLint_ configuration to the flat config format without `FlatCompat` - Upgraded `chartjs-chart-treemap` from version `4.2.0` to `4.2.2` diff --git a/libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.component.ts b/libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.component.ts index 1b7b99fa21..17a5a5e612 100644 --- a/libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.component.ts +++ b/libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.component.ts @@ -7,11 +7,15 @@ import { CUSTOM_ELEMENTS_SCHEMA, DestroyRef, OnInit, - inject, - signal + inject } from '@angular/core'; import { takeUntilDestroyed } from '@angular/core/rxjs-interop'; -import { FormsModule, ReactiveFormsModule } from '@angular/forms'; +import { + FormControl, + FormGroup, + ReactiveFormsModule, + Validators +} from '@angular/forms'; import { MatButtonModule } from '@angular/material/button'; import { DateAdapter, MAT_DATE_LOCALE } from '@angular/material/core'; import { MatDatepickerModule } from '@angular/material/datepicker'; @@ -33,7 +37,6 @@ import { HistoricalMarketDataEditorDialogParams } from './interfaces/interfaces' changeDetection: ChangeDetectionStrategy.OnPush, host: { class: 'h-100' }, imports: [ - FormsModule, IonIcon, MatButtonModule, MatDatepickerModule, @@ -51,7 +54,10 @@ export class GfHistoricalMarketDataEditorDialogComponent implements OnInit { public readonly data = inject(MAT_DIALOG_DATA); - protected readonly marketPrice = signal(this.data.marketPrice); + protected readonly historicalMarketDataForm = new FormGroup({ + date: new FormControl({ disabled: true, value: this.data.dateString }), + marketPrice: new FormControl(this.data.marketPrice, Validators.required) + }); private readonly destroyRef = inject(DestroyRef); private readonly locale = @@ -84,14 +90,19 @@ export class GfHistoricalMarketDataEditorDialogComponent implements OnInit { }) .pipe(takeUntilDestroyed(this.destroyRef)) .subscribe(({ marketPrice }) => { - this.marketPrice.set(marketPrice); + this.historicalMarketDataForm.controls.marketPrice.setValue( + marketPrice + ); + + this.historicalMarketDataForm.controls.marketPrice.markAsDirty(); this.changeDetectorRef.markForCheck(); }); } public onUpdate() { - const marketPrice = this.marketPrice(); + const marketPrice = + this.historicalMarketDataForm.controls.marketPrice.value; if (isNil(marketPrice)) { return; diff --git a/libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html b/libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html index 7e81836646..6e52114058 100644 --- a/libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html +++ b/libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html @@ -1,16 +1,14 @@ -
+

Details for {{ data.symbol }}

Date - + Market Price - + {{ data.currency }}
- - +
From d1764863ffeb87dab38415dccd9470be8c262c1d Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Mon, 28 Sep 2026 18:28:33 +0200 Subject: [PATCH 03/27] Task/clean up ESLint configuration (#7963) Clean up ESLint configuration --- eslint.config.cjs | 9 +++------ nx.json | 1 + package-lock.json | 2 -- package.json | 2 -- 4 files changed, 4 insertions(+), 10 deletions(-) diff --git a/eslint.config.cjs b/eslint.config.cjs index 9c1b2024b6..1b4aa6a0c0 100644 --- a/eslint.config.cjs +++ b/eslint.config.cjs @@ -1,6 +1,7 @@ const nxEslintPlugin = require('@nx/eslint-plugin'); const importPlugin = require('eslint-plugin-import'); const storybook = require('eslint-plugin-storybook'); +const { defineConfig } = require('eslint/config'); const typescriptEslint = require('typescript-eslint'); module.exports = [ @@ -25,14 +26,12 @@ module.exports = [ ], enforceBuildableLibDependency: true } - ], - '@typescript-eslint/no-extra-semi': 'error', - 'no-extra-semi': 'off' + ] } }, ...nxEslintPlugin.configs['flat/typescript'], ...nxEslintPlugin.configs['flat/javascript'], - ...typescriptEslint.config({ + ...defineConfig({ files: ['**/*.ts'], plugins: { import: importPlugin }, extends: [ @@ -91,8 +90,6 @@ module.exports = [ } ], '@typescript-eslint/unified-signatures': 'error', - '@typescript-eslint/no-loss-of-precision': 'warn', - '@typescript-eslint/no-var-requires': 'warn', 'arrow-body-style': 'off', 'constructor-super': 'error', eqeqeq: ['error', 'smart'], diff --git a/nx.json b/nx.json index 3b8c3846a1..e0a41e9835 100644 --- a/nx.json +++ b/nx.json @@ -98,6 +98,7 @@ "cache": true }, "lint": { + "inputs": ["default", "^default", "{workspaceRoot}/eslint.config.cjs"], "cache": true }, "@nx/jest:jest": { diff --git a/package-lock.json b/package-lock.json index c4896f0436..22665183a4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -152,8 +152,6 @@ "@types/papaparse": "5.5.2", "@types/passport-google-oauth20": "2.0.17", "@types/passport-openidconnect": "0.1.3", - "@typescript-eslint/eslint-plugin": "8.67.0", - "@typescript-eslint/parser": "8.67.0", "eslint": "9.35.0", "eslint-config-prettier": "10.1.8", "eslint-plugin-import": "2.32.0", diff --git a/package.json b/package.json index 3361c354ba..755f661d28 100644 --- a/package.json +++ b/package.json @@ -196,8 +196,6 @@ "@types/papaparse": "5.5.2", "@types/passport-google-oauth20": "2.0.17", "@types/passport-openidconnect": "0.1.3", - "@typescript-eslint/eslint-plugin": "8.67.0", - "@typescript-eslint/parser": "8.67.0", "eslint": "9.35.0", "eslint-config-prettier": "10.1.8", "eslint-plugin-import": "2.32.0", From 68f99609f55b68c353114ee60c6e6240a7b8ed4b Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Mon, 28 Sep 2026 20:16:55 +0200 Subject: [PATCH 04/27] Bugfix/OIDC discovery with trailing slash (#7886) * Fix OIDC discovery with trailing slash * Update changelog --- CHANGELOG.md | 1 + apps/api/src/app/auth/auth.module.ts | 9 ++++++++- apps/api/src/app/auth/oidc.helper.spec.ts | 20 ++++++++++++++++++++ apps/api/src/app/auth/oidc.helper.ts | 4 ++++ 4 files changed, 33 insertions(+), 1 deletion(-) create mode 100644 apps/api/src/app/auth/oidc.helper.spec.ts create mode 100644 apps/api/src/app/auth/oidc.helper.ts diff --git a/CHANGELOG.md b/CHANGELOG.md index c09e057b2d..91586f2345 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -19,6 +19,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Fixed - Fixed an issue where holdings without a quote have been valued at the unit price of the latest activity instead of the latest market price +- Fixed the discovery of the _OpenID Connect_ (`OIDC`) configuration for issuer URLs with a trailing slash (experimental) ## 3.74.0 - 2026-09-27 diff --git a/apps/api/src/app/auth/auth.module.ts b/apps/api/src/app/auth/auth.module.ts index e2a71ca843..879463cc13 100644 --- a/apps/api/src/app/auth/auth.module.ts +++ b/apps/api/src/app/auth/auth.module.ts @@ -22,6 +22,7 @@ import { AuthController } from './auth.controller'; import { AuthService } from './auth.service'; import { GoogleStrategy } from './google.strategy'; import { JwtStrategy } from './jwt.strategy'; +import { getOidcDiscoveryUrl } from './oidc.helper'; import { OidcStrategy } from './oidc.strategy'; @Module({ @@ -94,9 +95,15 @@ import { OidcStrategy } from './oidc.strategy'; // Fetch OIDC configuration from discovery endpoint try { const response = await fetchService.fetch( - `${issuer}/.well-known/openid-configuration` + getOidcDiscoveryUrl(issuer) ); + if (!response.ok) { + throw new Error( + `OIDC discovery request failed with status ${response.status}` + ); + } + const config = (await response.json()) as { authorization_endpoint: string; token_endpoint: string; diff --git a/apps/api/src/app/auth/oidc.helper.spec.ts b/apps/api/src/app/auth/oidc.helper.spec.ts new file mode 100644 index 0000000000..9234f12c95 --- /dev/null +++ b/apps/api/src/app/auth/oidc.helper.spec.ts @@ -0,0 +1,20 @@ +import { getOidcDiscoveryUrl } from './oidc.helper'; + +describe('getOidcDiscoveryUrl', () => { + it.each([ + [ + 'https://auth.example.com', + 'https://auth.example.com/.well-known/openid-configuration' + ], + [ + 'https://auth.example.com/', + 'https://auth.example.com/.well-known/openid-configuration' + ], + [ + 'https://auth.example.com/application/o/ghostfolio/', + 'https://auth.example.com/application/o/ghostfolio/.well-known/openid-configuration' + ] + ])('creates the discovery URL for %s', (issuer, expected) => { + expect(getOidcDiscoveryUrl(issuer)).toBe(expected); + }); +}); diff --git a/apps/api/src/app/auth/oidc.helper.ts b/apps/api/src/app/auth/oidc.helper.ts new file mode 100644 index 0000000000..4e8de829fc --- /dev/null +++ b/apps/api/src/app/auth/oidc.helper.ts @@ -0,0 +1,4 @@ +export function getOidcDiscoveryUrl(issuer: string) { + // Remove trailing slashes + return `${issuer.replace(/\/+$/, '')}/.well-known/openid-configuration`; +} From bf96d35b5e3932d3e62382b6a1f1791d7b13d3d1 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Mon, 28 Sep 2026 20:19:14 +0200 Subject: [PATCH 05/27] Release 3.75.0 (#7968) --- 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 91586f2345..e795778177 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.75.0 - 2026-09-28 ### Changed diff --git a/package-lock.json b/package-lock.json index 22665183a4..3f8ee0f880 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "ghostfolio", - "version": "3.74.0", + "version": "3.75.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "ghostfolio", - "version": "3.74.0", + "version": "3.75.0", "hasInstallScript": true, "license": "AGPL-3.0", "dependencies": { diff --git a/package.json b/package.json index 755f661d28..a3f94b74b6 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ghostfolio", - "version": "3.74.0", + "version": "3.75.0", "homepage": "https://ghostfol.io", "license": "AGPL-3.0", "repository": "https://github.com/ghostfolio/ghostfolio", From 7b899489b8b04e76cd9b812d65310dc9708ca5b9 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Tue, 29 Sep 2026 18:57:59 +0200 Subject: [PATCH 06/27] Feature/add total column to tag management (#7970) * Add total column (accountCount + activityCount) * Update changelog --- CHANGELOG.md | 6 ++++ .../admin-tag/admin-tag.component.html | 18 ++++++++++++ .../admin-tag/admin-tag.component.ts | 28 ++++++++++++++----- libs/common/src/lib/types/index.ts | 2 ++ ...ag-with-account-and-activity-count.type.ts | 6 ++++ libs/ui/src/lib/services/data.service.ts | 5 ++-- 6 files changed, 56 insertions(+), 9 deletions(-) create mode 100644 libs/common/src/lib/types/tag-with-account-and-activity-count.type.ts diff --git a/CHANGELOG.md b/CHANGELOG.md index e795778177..ff42504d49 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 total column to the table of the tag management in the admin control panel + ## 3.75.0 - 2026-09-28 ### Changed 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 6cd9c12599..83f7b559d4 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 @@ -77,6 +77,24 @@ + + + Total + + + + + + 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 12ac1f368b..b08b144cf8 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 @@ -7,6 +7,7 @@ import { getLowercase, isSystemTag } from '@ghostfolio/common/helper'; +import { TagWithAccountAndActivityCount } from '@ghostfolio/common/types'; import { translate } from '@ghostfolio/ui/i18n'; import { NotificationService } from '@ghostfolio/ui/notifications'; import { DataService } from '@ghostfolio/ui/services'; @@ -32,7 +33,6 @@ import { MatSort, MatSortModule } from '@angular/material/sort'; import { MatTableDataSource, MatTableModule } from '@angular/material/table'; import { ActivatedRoute, Router, RouterModule } from '@angular/router'; import { IonIcon } from '@ionic/angular/standalone'; -import { Tag } from '@prisma/client'; import { addIcons } from 'ionicons'; import { createOutline, @@ -63,17 +63,20 @@ import { CreateOrUpdateTagDialogParams } from './create-or-update-tag-dialog/int export class GfAdminTagComponent implements OnInit { public readonly locale = input(getLocale()); - protected dataSource = new MatTableDataSource(); + protected dataSource = + new MatTableDataSource(); + protected readonly displayedColumns = [ 'name', 'userId', 'accounts', 'activities', + 'total', 'actions' ]; protected readonly isSystemTag = isSystemTag; protected readonly pageSize = DEFAULT_PAGE_SIZE; - protected tags: Tag[]; + protected tags: TagWithAccountAndActivityCount[]; protected readonly translate = translate; private readonly deviceType = computed( @@ -120,6 +123,13 @@ export class GfAdminTagComponent implements OnInit { this.fetchTags(); } + protected getTotalCount({ + accountCount, + activityCount + }: TagWithAccountAndActivityCount) { + return accountCount + activityCount; + } + protected onDeleteTag(aId: string) { this.notificationService.confirm({ confirmFn: () => { @@ -130,7 +140,7 @@ export class GfAdminTagComponent implements OnInit { }); } - protected onUpdateTag({ id }: Tag) { + protected onUpdateTag({ id }: TagWithAccountAndActivityCount) { this.router.navigate([], { queryParams: { editTagDialog: true, tagId: id } }); @@ -164,9 +174,13 @@ export class GfAdminTagComponent implements OnInit { this.dataSource.sort = this.sort(); this.dataSource.sortingDataAccessor = (tag, path) => { - return path === 'name' - ? translate(tag.name).toLocaleLowerCase() - : (getLowercase(tag, path) as number | string); + if (path === 'name') { + return translate(tag.name).toLocaleLowerCase(); + } else if (path === 'totalCount') { + return this.getTotalCount(tag); + } + + return getLowercase(tag, path) as number | string; }; this.dataService.updateInfo(); diff --git a/libs/common/src/lib/types/index.ts b/libs/common/src/lib/types/index.ts index 9a44efc1af..fb0f6462c6 100644 --- a/libs/common/src/lib/types/index.ts +++ b/libs/common/src/lib/types/index.ts @@ -24,6 +24,7 @@ import type { PropertyKey } from './property-key.type'; import type { RequestWithUser } from './request-with-user.type'; import type { SectorName } from './sector-name.type'; import type { SubscriptionOfferKey } from './subscription-offer-key.type'; +import type { TagWithAccountAndActivityCount } from './tag-with-account-and-activity-count.type'; import type { ToggleOption } from './toggle-option.type'; import type { UserWithSettings } from './user-with-settings.type'; import type { ViewMode } from './view-mode.type'; @@ -55,6 +56,7 @@ export type { RequestWithUser, SectorName, SubscriptionOfferKey, + TagWithAccountAndActivityCount, ToggleOption, UserWithSettings, ViewMode diff --git a/libs/common/src/lib/types/tag-with-account-and-activity-count.type.ts b/libs/common/src/lib/types/tag-with-account-and-activity-count.type.ts new file mode 100644 index 0000000000..662e0f5ce9 --- /dev/null +++ b/libs/common/src/lib/types/tag-with-account-and-activity-count.type.ts @@ -0,0 +1,6 @@ +import { Tag } from '@prisma/client'; + +export type TagWithAccountAndActivityCount = Tag & { + accountCount: number; + activityCount: number; +}; diff --git a/libs/ui/src/lib/services/data.service.ts b/libs/ui/src/lib/services/data.service.ts index 2b390df3c5..e09632079c 100644 --- a/libs/ui/src/lib/services/data.service.ts +++ b/libs/ui/src/lib/services/data.service.ts @@ -62,7 +62,8 @@ import { filterGlobalPermissions } from '@ghostfolio/common/permissions'; import type { AiPromptMode, DateRange, - GroupBy + GroupBy, + TagWithAccountAndActivityCount } from '@ghostfolio/common/types'; import { translate } from '@ghostfolio/ui/i18n'; @@ -843,7 +844,7 @@ export class DataService { } public fetchTags() { - return this.http.get('/api/v1/tags'); + return this.http.get('/api/v1/tags'); } public fetchWatchlist() { From c1c73e145a30357d787899ad165e9e7169b15423 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Szymon=20=C5=81=C4=85giewka?= Date: Tue, 29 Sep 2026 19:40:51 +0200 Subject: [PATCH 07/27] Task/migrate client to prisma-client generated code (#7868) * Migrate client to prisma-client generated code * Update changelog --- .gitignore | 1 + CHANGELOG.md | 4 ++++ apps/api/eslint.config.cjs | 5 ++++- .../account-detail-dialog.component.ts | 2 +- .../admin-market-data.component.ts | 3 ++- .../asset-profile-dialog-host.component.ts | 2 +- .../asset-profile-dialog.component.ts | 22 ++++++++++--------- .../interfaces/interfaces.ts | 3 +-- .../create-asset-profile-dialog.component.ts | 2 +- .../admin-platform.component.ts | 2 +- .../interfaces/interfaces.ts | 2 +- .../interfaces/interfaces.ts | 2 +- .../benchmark-comparator.component.ts | 2 +- .../data-provider-status.component.ts | 2 +- .../holding-detail-dialog.component.ts | 2 +- .../interfaces/interfaces.ts | 3 +-- ...reate-or-update-access-dialog.component.ts | 2 +- .../user-detail-dialog.component.ts | 2 +- apps/client/src/app/interfaces/interfaces.ts | 3 ++- ...eate-or-update-account-dialog.component.ts | 2 +- .../interfaces/interfaces.ts | 3 +-- ...ate-or-update-activity-dialog.component.ts | 3 ++- .../types/activity-type.type.ts | 2 +- .../import-activities-dialog.component.ts | 2 +- .../interfaces/interfaces.ts | 3 +-- .../allocations/allocations-page.component.ts | 13 +++++------ .../analysis/analysis-page.component.ts | 2 +- .../src/app/services/ics/ics.service.ts | 2 +- .../app/services/import-activities.service.ts | 3 ++- eslint.config.cjs | 12 ++++++++++ libs/common/src/lib/config.ts | 8 ++++++- libs/common/src/lib/dtos/create-access.dto.ts | 2 +- ...eate-asset-profile-with-market-data.dto.ts | 2 +- .../src/lib/dtos/create-asset-profile.dto.ts | 7 +++++- libs/common/src/lib/dtos/create-order.dto.ts | 7 +++++- .../src/lib/dtos/create-watchlist-item.dto.ts | 2 +- .../src/lib/dtos/merge-asset-profile.dto.ts | 3 ++- .../lib/dtos/update-asset-profile-data.dto.ts | 3 ++- .../src/lib/dtos/update-asset-profile.dto.ts | 8 +++---- libs/common/src/lib/dtos/update-order.dto.ts | 7 +++++- libs/common/src/lib/helper.ts | 17 ++++++++------ .../src/lib/interfaces/access.interface.ts | 2 +- .../lib/interfaces/activities.interface.ts | 3 +-- .../admin-market-data-details.interface.ts | 2 +- .../lib/interfaces/admin-user.interface.ts | 3 ++- .../asset-class-selector-option.interface.ts | 2 +- .../asset-profile-identifier.interface.ts | 2 +- .../asset-profile-item.interface.ts | 6 ++++- .../data-provider-info.interface.ts | 2 +- .../enhanced-asset-profile.interface.ts | 2 +- .../src/lib/interfaces/info-item.interface.ts | 2 +- .../lib/interfaces/lookup-item.interface.ts | 6 ++++- .../portfolio-position.interface.ts | 3 +-- .../account-balances-response.interface.ts | 2 +- .../asset-profile-response.interface.ts | 2 +- ...tfolio-asset-profile-response.interface.ts | 2 +- .../data-provider-response.interface.ts | 3 +-- .../responses/export-response.interface.ts | 8 ++++++- .../responses/platforms-response.interface.ts | 2 +- .../portfolio-holding-response.interface.ts | 3 +-- .../public-portfolio-response.interface.ts | 3 +-- .../src/lib/interfaces/user-item.interface.ts | 2 +- .../lib/interfaces/user-settings.interface.ts | 3 +-- .../src/lib/interfaces/user.interface.ts | 4 ++-- .../lib/models/portfolio-snapshot-holding.ts | 3 ++- libs/common/src/lib/permissions.ts | 3 +-- libs/common/src/lib/scopes.ts | 3 +-- .../types/access-with-grantee-user.type.ts | 2 +- .../lib/types/account-with-balance.type.ts | 2 +- .../lib/types/account-with-platform.type.ts | 2 +- .../src/lib/types/account-with-value.type.ts | 2 +- .../src/lib/types/order-with-account.type.ts | 2 +- ...ag-with-account-and-activity-count.type.ts | 2 +- .../src/lib/types/user-with-settings.type.ts | 3 +-- .../activities-table.component.ts | 2 +- .../activity-type/activity-type.component.ts | 3 ++- .../interfaces/interfaces.ts | 3 +-- .../lib/entity-logo/entity-logo.component.ts | 2 +- .../interfaces/interfaces.ts | 3 +-- ...historical-market-data-editor.component.ts | 3 ++- .../entity-logo-image-source.service.mock.ts | 3 +-- .../portfolio-filter-form.util.ts | 4 ++-- .../portfolio-proportion-chart.component.ts | 2 +- libs/ui/src/lib/services/admin.service.ts | 6 ++++- libs/ui/src/lib/services/data.service.ts | 18 +++++++-------- .../tags-selector/interfaces/interfaces.ts | 2 +- nx.json | 3 ++- prisma/schema.prisma | 9 ++++++-- tsconfig.base.json | 2 ++ 89 files changed, 201 insertions(+), 136 deletions(-) diff --git a/.gitignore b/.gitignore index 58520c230b..5699a5929d 100644 --- a/.gitignore +++ b/.gitignore @@ -2,6 +2,7 @@ # compiled output /out-tsc +/prisma/generated /tmp # dependencies diff --git a/CHANGELOG.md b/CHANGELOG.md index ff42504d49..d90f853cd0 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 total column to the table of the tag management in the admin control panel +### Changed + +- Migrated the client to the code generated by the new `prisma-client` generator of _Prisma_ + ## 3.75.0 - 2026-09-28 ### Changed diff --git a/apps/api/eslint.config.cjs b/apps/api/eslint.config.cjs index 043802a0df..07054e44b9 100644 --- a/apps/api/eslint.config.cjs +++ b/apps/api/eslint.config.cjs @@ -21,7 +21,10 @@ module.exports = [ { files: ['**/*.ts', '**/*.tsx'], // Override or add rules here - rules: {} + rules: { + // TODO: Remove once the API uses the code generated by the new prisma-client generator + '@typescript-eslint/no-restricted-imports': 'off' + } }, { files: ['**/*.js', '**/*.jsx'], 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 75186b1744..b8c7f16dbc 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 @@ -16,6 +16,7 @@ import { } from '@ghostfolio/common/interfaces'; import { hasPermission, permissions } from '@ghostfolio/common/permissions'; import { hasScope, scopes } from '@ghostfolio/common/scopes'; +import type { Tag } from '@ghostfolio/prisma/browser'; import { GfAccountBalancesComponent } from '@ghostfolio/ui/account-balances'; import { GfActivitiesTableComponent } from '@ghostfolio/ui/activities-table'; import { GfDialogFooterComponent } from '@ghostfolio/ui/dialog-footer'; @@ -45,7 +46,6 @@ import { MatTableDataSource } from '@angular/material/table'; import { MatTabsModule } from '@angular/material/tabs'; import { NavigationStart, Router } from '@angular/router'; import { IonIcon } from '@ionic/angular/standalone'; -import { Tag } from '@prisma/client'; import { Big } from 'big.js'; import { format, parseISO } from 'date-fns'; import { addIcons } from 'ionicons'; 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 c01932b603..d1ea9d97eb 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 @@ -10,6 +10,8 @@ import { } from '@ghostfolio/common/interfaces'; import { hasPermission, permissions } from '@ghostfolio/common/permissions'; import { internalRoutes } from '@ghostfolio/common/routes/routes'; +import type { SymbolProfile } from '@ghostfolio/prisma/browser'; +import { AssetSubClass, DataSource } from '@ghostfolio/prisma/enums'; import { GfActivitiesFilterComponent } from '@ghostfolio/ui/activities-filter'; import { GfFabComponent } from '@ghostfolio/ui/fab'; import { translate } from '@ghostfolio/ui/i18n'; @@ -48,7 +50,6 @@ import { import { MatTableDataSource, MatTableModule } from '@angular/material/table'; import { Router, RouterModule } from '@angular/router'; import { IonIcon } from '@ionic/angular/standalone'; -import { AssetSubClass, DataSource, SymbolProfile } from '@prisma/client'; import { isUUID } from 'class-validator'; import { addIcons } from 'ionicons'; import { diff --git a/apps/client/src/app/components/admin-market-data/asset-profile-dialog-host/asset-profile-dialog-host.component.ts b/apps/client/src/app/components/admin-market-data/asset-profile-dialog-host/asset-profile-dialog-host.component.ts index 7b03762ff9..af83ef4a7d 100644 --- a/apps/client/src/app/components/admin-market-data/asset-profile-dialog-host/asset-profile-dialog-host.component.ts +++ b/apps/client/src/app/components/admin-market-data/asset-profile-dialog-host/asset-profile-dialog-host.component.ts @@ -5,6 +5,7 @@ import { } from '@ghostfolio/common/config'; import { AssetProfileIdentifier, User } from '@ghostfolio/common/interfaces'; import { internalRoutes } from '@ghostfolio/common/routes/routes'; +import { DataSource } from '@ghostfolio/prisma/enums'; import { AdminService } from '@ghostfolio/ui/services'; import { @@ -19,7 +20,6 @@ import { import { takeUntilDestroyed } from '@angular/core/rxjs-interop'; import { MatDialog, MatDialogRef } from '@angular/material/dialog'; import { ActivatedRoute, Router } from '@angular/router'; -import { DataSource } from '@prisma/client'; import { DeviceDetectorService } from 'ngx-device-detector'; import { Subject } from 'rxjs'; import { distinctUntilChanged, map, takeUntil, tap } from 'rxjs/operators'; 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 b2b2293e1a..154211b918 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 @@ -29,6 +29,18 @@ import { } from '@ghostfolio/common/interfaces'; import { DateRange } from '@ghostfolio/common/types'; import { jsonValidator, validateObjectForForm } from '@ghostfolio/common/utils'; +import type { + AssetProfileSplit, + MarketData, + Prisma, + SymbolProfile +} from '@ghostfolio/prisma/browser'; +import { + AssetClass, + AssetSubClass, + DataGatheringFrequency, + DataSource +} from '@ghostfolio/prisma/enums'; import { GfCurrencySelectorComponent } from '@ghostfolio/ui/currency-selector'; import { GfEntityLogoComponent } from '@ghostfolio/ui/entity-logo'; import { GfHistoricalMarketDataEditorComponent } from '@ghostfolio/ui/historical-market-data-editor'; @@ -80,16 +92,6 @@ import { MatSelectModule } from '@angular/material/select'; import { MatSnackBar, MatSnackBarModule } from '@angular/material/snack-bar'; import { MatTabsModule } from '@angular/material/tabs'; import { IonIcon } from '@ionic/angular/standalone'; -import { - AssetClass, - AssetProfileSplit, - AssetSubClass, - DataGatheringFrequency, - DataSource, - MarketData, - Prisma, - SymbolProfile -} from '@prisma/client'; import { isUUID } from 'class-validator'; import { format } from 'date-fns'; import { StatusCodes } from 'http-status-codes'; diff --git a/apps/client/src/app/components/admin-market-data/asset-profile-dialog/interfaces/interfaces.ts b/apps/client/src/app/components/admin-market-data/asset-profile-dialog/interfaces/interfaces.ts index 6a966b4270..0f000364ee 100644 --- a/apps/client/src/app/components/admin-market-data/asset-profile-dialog/interfaces/interfaces.ts +++ b/apps/client/src/app/components/admin-market-data/asset-profile-dialog/interfaces/interfaces.ts @@ -1,6 +1,5 @@ import { ColorScheme } from '@ghostfolio/common/types'; - -import { DataSource } from '@prisma/client'; +import { DataSource } from '@ghostfolio/prisma/enums'; export interface AssetProfileDialogParams { colorScheme: ColorScheme; diff --git a/apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.component.ts b/apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.component.ts index b948708c2e..8b7ef793fc 100644 --- a/apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.component.ts +++ b/apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.component.ts @@ -4,6 +4,7 @@ import { PROPERTY_CURRENCIES } from '@ghostfolio/common/config'; import type { AssetProfileIdentifier } from '@ghostfolio/common/interfaces'; +import { DataSource } from '@ghostfolio/prisma/enums'; import { AdminService, DataService } from '@ghostfolio/ui/services'; import { GfSymbolAutocompleteComponent } from '@ghostfolio/ui/symbol-autocomplete'; @@ -31,7 +32,6 @@ import { MatDialogModule, MatDialogRef } from '@angular/material/dialog'; import { MatFormFieldModule } from '@angular/material/form-field'; import { MatInputModule } from '@angular/material/input'; import { MatRadioModule } from '@angular/material/radio'; -import { DataSource } from '@prisma/client'; import { isISO4217CurrencyCode } from 'class-validator'; import { switchMap } from 'rxjs'; diff --git a/apps/client/src/app/components/admin-platform/admin-platform.component.ts b/apps/client/src/app/components/admin-platform/admin-platform.component.ts index 00b5ff0db2..0e6ed66d9b 100644 --- a/apps/client/src/app/components/admin-platform/admin-platform.component.ts +++ b/apps/client/src/app/components/admin-platform/admin-platform.component.ts @@ -3,6 +3,7 @@ import { DEFAULT_PAGE_SIZE } from '@ghostfolio/common/config'; import { CreatePlatformDto, UpdatePlatformDto } from '@ghostfolio/common/dtos'; import { ConfirmationDialogType } from '@ghostfolio/common/enums'; import { getLocale, getLowercase } from '@ghostfolio/common/helper'; +import type { Platform } from '@ghostfolio/prisma/browser'; import { GfEntityLogoComponent } from '@ghostfolio/ui/entity-logo'; import { NotificationService } from '@ghostfolio/ui/notifications'; import { AdminService, DataService } from '@ghostfolio/ui/services'; @@ -28,7 +29,6 @@ import { MatSort, MatSortModule } from '@angular/material/sort'; import { MatTableDataSource, MatTableModule } from '@angular/material/table'; import { ActivatedRoute, Router, RouterModule } from '@angular/router'; import { IonIcon } from '@ionic/angular/standalone'; -import { Platform } from '@prisma/client'; import { addIcons } from 'ionicons'; import { createOutline, diff --git a/apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/interfaces/interfaces.ts b/apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/interfaces/interfaces.ts index d3b9ae5288..206cc14e79 100644 --- a/apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/interfaces/interfaces.ts +++ b/apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/interfaces/interfaces.ts @@ -1,4 +1,4 @@ -import { Platform } from '@prisma/client'; +import type { Platform } from '@ghostfolio/prisma/browser'; export interface CreateOrUpdatePlatformDialogParams { platform?: Platform; diff --git a/apps/client/src/app/components/admin-tag/create-or-update-tag-dialog/interfaces/interfaces.ts b/apps/client/src/app/components/admin-tag/create-or-update-tag-dialog/interfaces/interfaces.ts index f4b1104d00..b866ea47dd 100644 --- a/apps/client/src/app/components/admin-tag/create-or-update-tag-dialog/interfaces/interfaces.ts +++ b/apps/client/src/app/components/admin-tag/create-or-update-tag-dialog/interfaces/interfaces.ts @@ -1,4 +1,4 @@ -import { Tag } from '@prisma/client'; +import type { Tag } from '@ghostfolio/prisma/browser'; export interface CreateOrUpdateTagDialogParams { tag?: Pick; diff --git a/apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts b/apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts index 8d5e3ff62b..ef14b404e4 100644 --- a/apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts +++ b/apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts @@ -12,6 +12,7 @@ import { LineChartItem, User } from '@ghostfolio/common/interfaces'; import { hasPermission, permissions } from '@ghostfolio/common/permissions'; import { internalRoutes } from '@ghostfolio/common/routes/routes'; import { ColorScheme } from '@ghostfolio/common/types'; +import type { SymbolProfile } from '@ghostfolio/prisma/browser'; import { getTimeSeriesTooltipOptions, registerChartConfiguration @@ -32,7 +33,6 @@ import { FormsModule, ReactiveFormsModule } from '@angular/forms'; import { MatSelectModule } from '@angular/material/select'; import { RouterModule } from '@angular/router'; import { IonIcon } from '@ionic/angular/standalone'; -import { SymbolProfile } from '@prisma/client'; import { Chart, ChartData, diff --git a/apps/client/src/app/components/data-provider-status/data-provider-status.component.ts b/apps/client/src/app/components/data-provider-status/data-provider-status.component.ts index a77d65961a..13218623a0 100644 --- a/apps/client/src/app/components/data-provider-status/data-provider-status.component.ts +++ b/apps/client/src/app/components/data-provider-status/data-provider-status.component.ts @@ -1,3 +1,4 @@ +import type { DataSource } from '@ghostfolio/prisma/enums'; import { DataService } from '@ghostfolio/ui/services'; import { CommonModule } from '@angular/common'; @@ -9,7 +10,6 @@ import { OnInit } from '@angular/core'; import { takeUntilDestroyed } from '@angular/core/rxjs-interop'; -import type { DataSource } from '@prisma/client'; import { NgxSkeletonLoaderModule } from 'ngx-skeleton-loader'; import { catchError, map, type Observable, of } from 'rxjs'; 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 d8385d70e2..4a16c1a4e2 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 @@ -25,6 +25,7 @@ import { import { hasPermission, permissions } from '@ghostfolio/common/permissions'; import { internalRoutes } from '@ghostfolio/common/routes/routes'; import { AccountWithValue } from '@ghostfolio/common/types'; +import type { MarketData, Tag } from '@ghostfolio/prisma/browser'; import { GfAccountsTableComponent } from '@ghostfolio/ui/accounts-table'; import { GfActivitiesTableComponent } from '@ghostfolio/ui/activities-table'; import { GfDataProviderCreditsComponent } from '@ghostfolio/ui/data-provider-credits'; @@ -69,7 +70,6 @@ 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 { MarketData, Tag } from '@prisma/client'; import { isUUID } from 'class-validator'; import { format, isSameMonth, isToday, parseISO } from 'date-fns'; import { addIcons } from 'ionicons'; 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 efc10d6ac3..5f33db42a3 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 @@ -1,6 +1,5 @@ import { ColorScheme } from '@ghostfolio/common/types'; - -import { DataSource } from '@prisma/client'; +import { DataSource } from '@ghostfolio/prisma/enums'; export interface HoldingDetailDialogParams { baseCurrency: string; diff --git a/apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.component.ts b/apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.component.ts index 9f119fc439..f58b19212b 100644 --- a/apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.component.ts +++ b/apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.component.ts @@ -15,6 +15,7 @@ import { } from '@ghostfolio/common/scopes'; import { AccessLevel, AccountWithPlatform } from '@ghostfolio/common/types'; import { validateObjectForForm } from '@ghostfolio/common/utils'; +import { AccessType } from '@ghostfolio/prisma/enums'; import { GfAccessLevelIconComponent } from '@ghostfolio/ui/access-level-icon'; import { NotificationService } from '@ghostfolio/ui/notifications'; import { @@ -57,7 +58,6 @@ import { MatFormFieldModule } from '@angular/material/form-field'; import { MatInputModule } from '@angular/material/input'; import { MatSelectModule } from '@angular/material/select'; import { IonIcon } from '@ionic/angular/standalone'; -import { AccessType } from '@prisma/client'; import { addDays, endOfDay, isValid, startOfDay } from 'date-fns'; import { StatusCodes } from 'http-status-codes'; import { addIcons } from 'ionicons'; 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 3aec4d42c7..926fb8d8cd 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 @@ -4,6 +4,7 @@ import { getSum } from '@ghostfolio/common/helper'; import { AdminUserResponse } from '@ghostfolio/common/interfaces'; +import type { Subscription } from '@ghostfolio/prisma/browser'; import { AdminService, DataService } from '@ghostfolio/ui/services'; import { GfValueComponent } from '@ghostfolio/ui/value'; @@ -23,7 +24,6 @@ import { MatDialogModule } from '@angular/material/dialog'; import { MatMenuModule } from '@angular/material/menu'; import { MatTableDataSource, MatTableModule } from '@angular/material/table'; import { IonIcon } from '@ionic/angular/standalone'; -import { Subscription } from '@prisma/client'; import { Big } from 'big.js'; import { differenceInDays } from 'date-fns'; import { addIcons } from 'ionicons'; diff --git a/apps/client/src/app/interfaces/interfaces.ts b/apps/client/src/app/interfaces/interfaces.ts index 493eff4ab4..191fb42290 100644 --- a/apps/client/src/app/interfaces/interfaces.ts +++ b/apps/client/src/app/interfaces/interfaces.ts @@ -1,5 +1,6 @@ +import type { DataSource } from '@ghostfolio/prisma/enums'; + import type { Params } from '@angular/router'; -import type { DataSource } from '@prisma/client'; export interface GfAppQueryParams extends Params { dataSource?: DataSource; 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 ab3854b931..12f9075247 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 @@ -8,6 +8,7 @@ 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 type { Platform, Tag } from '@ghostfolio/prisma/browser'; import { GfCurrencySelectorComponent } from '@ghostfolio/ui/currency-selector'; import { GfEntityLogoComponent } from '@ghostfolio/ui/entity-logo'; import { translate } from '@ghostfolio/ui/i18n'; @@ -39,7 +40,6 @@ import { } from '@angular/material/dialog'; import { MatFormFieldModule } from '@angular/material/form-field'; import { MatInputModule } from '@angular/material/input'; -import { Platform, Tag } from '@prisma/client'; import { Observable } from 'rxjs'; import { map, startWith } from 'rxjs/operators'; 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 43015de004..c99cd17b7a 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,7 +1,6 @@ import { User } from '@ghostfolio/common/interfaces'; import { AccountWithBalance } from '@ghostfolio/common/types'; - -import { Tag } from '@prisma/client'; +import type { Tag } from '@ghostfolio/prisma/browser'; export interface CreateOrUpdateAccountDialogParams { account: Omit< 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 3b7938c8c4..f24297dbd0 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 @@ -16,6 +16,8 @@ import { } from '@ghostfolio/common/interfaces'; import { hasPermission, permissions } from '@ghostfolio/common/permissions'; import { validateObjectForForm } from '@ghostfolio/common/utils'; +import type { Tag } from '@ghostfolio/prisma/browser'; +import { AssetClass, Type } from '@ghostfolio/prisma/enums'; import { GfAccountSelectorComponent } from '@ghostfolio/ui/account-selector'; import { translate } from '@ghostfolio/ui/i18n'; import { DataService } from '@ghostfolio/ui/services'; @@ -50,7 +52,6 @@ import { MatFormFieldModule } from '@angular/material/form-field'; import { MatInputModule } from '@angular/material/input'; import { MatSelectModule } from '@angular/material/select'; import { IonIcon } from '@ionic/angular/standalone'; -import { AssetClass, Tag, Type } from '@prisma/client'; import { isAfter, isToday } from 'date-fns'; import { addIcons } from 'ionicons'; import { calendarClearOutline, refreshOutline } from 'ionicons/icons'; diff --git a/apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/types/activity-type.type.ts b/apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/types/activity-type.type.ts index 6c3f32f284..cfb8452da4 100644 --- a/apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/types/activity-type.type.ts +++ b/apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/types/activity-type.type.ts @@ -1,4 +1,4 @@ -import { Type } from '@prisma/client'; +import { Type } from '@ghostfolio/prisma/enums'; export const ActivityType = { ...Type, 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 98e0c0ad82..26255f2061 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 @@ -8,6 +8,7 @@ import { CreateTagDto } from '@ghostfolio/common/dtos'; import { Activity, PortfolioPosition } from '@ghostfolio/common/interfaces'; +import { AssetClass } from '@ghostfolio/prisma/enums'; import { GfActivitiesTableComponent } from '@ghostfolio/ui/activities-table'; import { GfDialogFooterComponent } from '@ghostfolio/ui/dialog-footer'; import { GfDialogHeaderComponent } from '@ghostfolio/ui/dialog-header'; @@ -48,7 +49,6 @@ import { SortDirection } from '@angular/material/sort'; import { MatStepper, MatStepperModule } from '@angular/material/stepper'; import { MatTableDataSource } from '@angular/material/table'; import { IonIcon } from '@ionic/angular/standalone'; -import { AssetClass } from '@prisma/client'; import { addIcons } from 'ionicons'; import { cloudUploadOutline, warningOutline } from 'ionicons/icons'; import { isArray, sortBy } from 'lodash'; diff --git a/apps/client/src/app/pages/portfolio/activities/import-activities-dialog/interfaces/interfaces.ts b/apps/client/src/app/pages/portfolio/activities/import-activities-dialog/interfaces/interfaces.ts index 051345e603..39749b1222 100644 --- a/apps/client/src/app/pages/portfolio/activities/import-activities-dialog/interfaces/interfaces.ts +++ b/apps/client/src/app/pages/portfolio/activities/import-activities-dialog/interfaces/interfaces.ts @@ -1,6 +1,5 @@ import { User } from '@ghostfolio/common/interfaces'; - -import { Type } from '@prisma/client'; +import { Type } from '@ghostfolio/prisma/enums'; export interface ImportActivitiesDialogParams { activityTypes?: Type[]; 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 ceda1d4c07..6d67b0253c 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 @@ -22,6 +22,12 @@ import { import { hasPermission, permissions } from '@ghostfolio/common/permissions'; import { hasScope, scopes } from '@ghostfolio/common/scopes'; import { MarketAdvanced } from '@ghostfolio/common/types'; +import type { Account, Platform } from '@ghostfolio/prisma/browser'; +import { + AssetClass, + AssetSubClass, + DataSource +} from '@ghostfolio/prisma/enums'; import { translate } from '@ghostfolio/ui/i18n'; import { GfPortfolioProportionChartComponent, @@ -47,13 +53,6 @@ import { MatCardModule } from '@angular/material/card'; import { MatDialog } from '@angular/material/dialog'; import { MatProgressBarModule } from '@angular/material/progress-bar'; import { ActivatedRoute, Router } from '@angular/router'; -import { - Account, - AssetClass, - AssetSubClass, - DataSource, - Platform -} from '@prisma/client'; import { isNumber } from 'lodash'; import { DeviceDetectorService } from 'ngx-device-detector'; import { filter, switchMap, tap } from 'rxjs'; 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 450749925e..898c7f51a8 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 @@ -22,6 +22,7 @@ import type { ToggleOption } from '@ghostfolio/common/types'; import { PerformanceCalculationType } from '@ghostfolio/common/types/performance-calculation-type.type'; +import type { SymbolProfile } from '@ghostfolio/prisma/browser'; import { translate } from '@ghostfolio/ui/i18n'; import { GfPremiumIndicatorComponent } from '@ghostfolio/ui/premium-indicator'; import { DataService } from '@ghostfolio/ui/services'; @@ -48,7 +49,6 @@ import { MatProgressSpinnerModule } from '@angular/material/progress-spinner'; import { MatSnackBar } from '@angular/material/snack-bar'; import { RouterModule } from '@angular/router'; import { IonIcon } from '@ionic/angular/standalone'; -import { SymbolProfile } from '@prisma/client'; import { addIcons } from 'ionicons'; import { copyOutline, ellipsisVertical } from 'ionicons/icons'; import { isNumber, keyBy, sortBy, union } from 'lodash'; diff --git a/apps/client/src/app/services/ics/ics.service.ts b/apps/client/src/app/services/ics/ics.service.ts index d97b427c9e..90170dbb75 100644 --- a/apps/client/src/app/services/ics/ics.service.ts +++ b/apps/client/src/app/services/ics/ics.service.ts @@ -1,8 +1,8 @@ import { capitalize } from '@ghostfolio/common/helper'; import { ExportResponse } from '@ghostfolio/common/interfaces'; +import { Type } from '@ghostfolio/prisma/enums'; import { Service } from '@angular/core'; -import { Type } from '@prisma/client'; import { format, parseISO } from 'date-fns'; @Service() diff --git a/apps/client/src/app/services/import-activities.service.ts b/apps/client/src/app/services/import-activities.service.ts index 5c06b0e136..599c66551a 100644 --- a/apps/client/src/app/services/import-activities.service.ts +++ b/apps/client/src/app/services/import-activities.service.ts @@ -11,10 +11,11 @@ import { parseDate as parseDateHelper } from '@ghostfolio/common/helper'; import { Activity } from '@ghostfolio/common/interfaces'; +import type { Account } from '@ghostfolio/prisma/browser'; +import { DataSource, Type as ActivityType } from '@ghostfolio/prisma/enums'; import { HttpClient } from '@angular/common/http'; import { inject, Service } from '@angular/core'; -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'; diff --git a/eslint.config.cjs b/eslint.config.cjs index 1b4aa6a0c0..ee5e0a557c 100644 --- a/eslint.config.cjs +++ b/eslint.config.cjs @@ -83,6 +83,18 @@ module.exports = [ } ], '@typescript-eslint/no-non-null-assertion': 'warn', + '@typescript-eslint/no-restricted-imports': [ + 'error', + { + paths: [ + { + message: + 'Import the types from @ghostfolio/prisma/browser and the enums from @ghostfolio/prisma/enums instead.', + name: '@prisma/client' + } + ] + } + ], '@typescript-eslint/no-shadow': [ 'warn', { diff --git a/libs/common/src/lib/config.ts b/libs/common/src/lib/config.ts index 77e8542398..beedb741cb 100644 --- a/libs/common/src/lib/config.ts +++ b/libs/common/src/lib/config.ts @@ -1,4 +1,10 @@ -import { AssetClass, AssetSubClass, DataSource, Type } from '@prisma/client'; +import { + AssetClass, + AssetSubClass, + DataSource, + Type +} from '@ghostfolio/prisma/enums'; + import { JobOptions, JobStatus } from 'bull'; import ms from 'ms'; diff --git a/libs/common/src/lib/dtos/create-access.dto.ts b/libs/common/src/lib/dtos/create-access.dto.ts index 6fee6fcb66..82feac222c 100644 --- a/libs/common/src/lib/dtos/create-access.dto.ts +++ b/libs/common/src/lib/dtos/create-access.dto.ts @@ -1,8 +1,8 @@ import { Filter } from '@ghostfolio/common/interfaces'; import { Scope, scopes } from '@ghostfolio/common/scopes'; import { IsInTheFutureConstraint } from '@ghostfolio/common/validator-constraints/is-in-the-future'; +import { AccessType } from '@ghostfolio/prisma/enums'; -import { AccessType } from '@prisma/client'; import { IsArray, IsEnum, diff --git a/libs/common/src/lib/dtos/create-asset-profile-with-market-data.dto.ts b/libs/common/src/lib/dtos/create-asset-profile-with-market-data.dto.ts index 60afcb558b..096f9e27ca 100644 --- a/libs/common/src/lib/dtos/create-asset-profile-with-market-data.dto.ts +++ b/libs/common/src/lib/dtos/create-asset-profile-with-market-data.dto.ts @@ -1,6 +1,6 @@ import { MarketData } from '@ghostfolio/common/interfaces'; +import { DataSource } from '@ghostfolio/prisma/enums'; -import { DataSource } from '@prisma/client'; import { IsArray, IsIn, IsOptional } from 'class-validator'; import { CreateAssetProfileDto } from './create-asset-profile.dto'; diff --git a/libs/common/src/lib/dtos/create-asset-profile.dto.ts b/libs/common/src/lib/dtos/create-asset-profile.dto.ts index 4197137fb3..b4fe347071 100644 --- a/libs/common/src/lib/dtos/create-asset-profile.dto.ts +++ b/libs/common/src/lib/dtos/create-asset-profile.dto.ts @@ -3,8 +3,13 @@ import { SYMBOL_MAXIMUM_LENGTH } from '@ghostfolio/common/config'; import { IsCurrencyCode } from '@ghostfolio/common/validators/is-currency-code'; +import type { Prisma } from '@ghostfolio/prisma/browser'; +import { + AssetClass, + AssetSubClass, + DataSource +} from '@ghostfolio/prisma/enums'; -import { AssetClass, AssetSubClass, DataSource, Prisma } from '@prisma/client'; import { Type } from 'class-transformer'; import { IsArray, diff --git a/libs/common/src/lib/dtos/create-order.dto.ts b/libs/common/src/lib/dtos/create-order.dto.ts index 1345f418a1..fd062b610b 100644 --- a/libs/common/src/lib/dtos/create-order.dto.ts +++ b/libs/common/src/lib/dtos/create-order.dto.ts @@ -4,8 +4,13 @@ import { } from '@ghostfolio/common/config'; import { IsAfter1970Constraint } from '@ghostfolio/common/validator-constraints/is-after-1970'; import { IsCurrencyCode } from '@ghostfolio/common/validators/is-currency-code'; +import { + AssetClass, + AssetSubClass, + DataSource, + Type +} from '@ghostfolio/prisma/enums'; -import { AssetClass, AssetSubClass, DataSource, Type } from '@prisma/client'; import { Transform, TransformFnParams } from 'class-transformer'; import { ArrayUnique, diff --git a/libs/common/src/lib/dtos/create-watchlist-item.dto.ts b/libs/common/src/lib/dtos/create-watchlist-item.dto.ts index 78808a0246..ccf9414fa1 100644 --- a/libs/common/src/lib/dtos/create-watchlist-item.dto.ts +++ b/libs/common/src/lib/dtos/create-watchlist-item.dto.ts @@ -1,6 +1,6 @@ import { SYMBOL_MAXIMUM_LENGTH } from '@ghostfolio/common/config'; +import { DataSource } from '@ghostfolio/prisma/enums'; -import { DataSource } from '@prisma/client'; import { IsEnum, IsString, MaxLength } from 'class-validator'; export class CreateWatchlistItemDto { diff --git a/libs/common/src/lib/dtos/merge-asset-profile.dto.ts b/libs/common/src/lib/dtos/merge-asset-profile.dto.ts index f7b74bc4e2..9df79a6b8c 100644 --- a/libs/common/src/lib/dtos/merge-asset-profile.dto.ts +++ b/libs/common/src/lib/dtos/merge-asset-profile.dto.ts @@ -1,4 +1,5 @@ -import { DataSource } from '@prisma/client'; +import { DataSource } from '@ghostfolio/prisma/enums'; + import { IsEnum, IsString } from 'class-validator'; export class MergeAssetProfileDto { diff --git a/libs/common/src/lib/dtos/update-asset-profile-data.dto.ts b/libs/common/src/lib/dtos/update-asset-profile-data.dto.ts index a2f600fcd0..f94ea40fce 100644 --- a/libs/common/src/lib/dtos/update-asset-profile-data.dto.ts +++ b/libs/common/src/lib/dtos/update-asset-profile-data.dto.ts @@ -1,4 +1,5 @@ -import { Prisma } from '@prisma/client'; +import type { Prisma } from '@ghostfolio/prisma/browser'; + import { IsArray, IsOptional } from 'class-validator'; export class UpdateAssetProfileDataDto { 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 965778761d..6e48ef0e04 100644 --- a/libs/common/src/lib/dtos/update-asset-profile.dto.ts +++ b/libs/common/src/lib/dtos/update-asset-profile.dto.ts @@ -3,14 +3,14 @@ import { SYMBOL_MAXIMUM_LENGTH } from '@ghostfolio/common/config'; import { IsCurrencyCode } from '@ghostfolio/common/validators/is-currency-code'; - +import type { Prisma } from '@ghostfolio/prisma/browser'; import { AssetClass, AssetSubClass, DataGatheringFrequency, - DataSource, - Prisma -} from '@prisma/client'; + DataSource +} from '@ghostfolio/prisma/enums'; + import { Type } from 'class-transformer'; import { IsArray, diff --git a/libs/common/src/lib/dtos/update-order.dto.ts b/libs/common/src/lib/dtos/update-order.dto.ts index 69d993559e..0e381f2069 100644 --- a/libs/common/src/lib/dtos/update-order.dto.ts +++ b/libs/common/src/lib/dtos/update-order.dto.ts @@ -4,8 +4,13 @@ import { } from '@ghostfolio/common/config'; import { IsAfter1970Constraint } from '@ghostfolio/common/validator-constraints/is-after-1970'; import { IsCurrencyCode } from '@ghostfolio/common/validators/is-currency-code'; +import { + AssetClass, + AssetSubClass, + DataSource, + Type +} from '@ghostfolio/prisma/enums'; -import { AssetClass, AssetSubClass, DataSource, Type } from '@prisma/client'; import { Transform, TransformFnParams } from 'class-transformer'; import { ArrayUnique, diff --git a/libs/common/src/lib/helper.ts b/libs/common/src/lib/helper.ts index 6e50911322..69764935d1 100644 --- a/libs/common/src/lib/helper.ts +++ b/libs/common/src/lib/helper.ts @@ -1,14 +1,17 @@ -import { utc } from '@date-fns/utc'; -import { NumberParser } from '@internationalized/number'; -import { - AccessType, - Type as ActivityType, +import type { AssetProfileOverrides, - AssetSubClass, MarketData, Prisma, SymbolProfile -} from '@prisma/client'; +} from '@ghostfolio/prisma/browser'; +import { + AccessType, + Type as ActivityType, + AssetSubClass +} from '@ghostfolio/prisma/enums'; + +import { utc } from '@date-fns/utc'; +import { NumberParser } from '@internationalized/number'; import { Big } from 'big.js'; import { isISO4217CurrencyCode, isUUID } from 'class-validator'; import { countries } from 'countries-list'; diff --git a/libs/common/src/lib/interfaces/access.interface.ts b/libs/common/src/lib/interfaces/access.interface.ts index 040bc2a8cc..182a0f3a49 100644 --- a/libs/common/src/lib/interfaces/access.interface.ts +++ b/libs/common/src/lib/interfaces/access.interface.ts @@ -1,4 +1,4 @@ -import { AccessType } from '@prisma/client'; +import { AccessType } from '@ghostfolio/prisma/enums'; import { AccessSettings } from './access-settings.interface'; diff --git a/libs/common/src/lib/interfaces/activities.interface.ts b/libs/common/src/lib/interfaces/activities.interface.ts index 4b8dd34350..2e9be921e3 100644 --- a/libs/common/src/lib/interfaces/activities.interface.ts +++ b/libs/common/src/lib/interfaces/activities.interface.ts @@ -1,7 +1,6 @@ import { EnhancedAssetProfile } from '@ghostfolio/common/interfaces'; import { AccountWithPlatform } from '@ghostfolio/common/types'; - -import { Order, Tag } from '@prisma/client'; +import type { Order, Tag } from '@ghostfolio/prisma/browser'; export interface Activity extends Order { account?: AccountWithPlatform; 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 8cfe70f9c5..7a7bba7159 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,4 +1,4 @@ -import { AssetProfileSplit, MarketData } from '@prisma/client'; +import type { AssetProfileSplit, MarketData } from '@ghostfolio/prisma/browser'; import { EnhancedAssetProfile } from './enhanced-asset-profile.interface'; diff --git a/libs/common/src/lib/interfaces/admin-user.interface.ts b/libs/common/src/lib/interfaces/admin-user.interface.ts index a7cda68a81..a5c46d92f8 100644 --- a/libs/common/src/lib/interfaces/admin-user.interface.ts +++ b/libs/common/src/lib/interfaces/admin-user.interface.ts @@ -1,4 +1,5 @@ -import { Provider, Role, Subscription } from '@prisma/client'; +import type { Subscription } from '@ghostfolio/prisma/browser'; +import { Provider, Role } from '@ghostfolio/prisma/enums'; export interface AdminUser { accountCount: number; diff --git a/libs/common/src/lib/interfaces/asset-class-selector-option.interface.ts b/libs/common/src/lib/interfaces/asset-class-selector-option.interface.ts index b4b1060e43..ed8d580f9d 100644 --- a/libs/common/src/lib/interfaces/asset-class-selector-option.interface.ts +++ b/libs/common/src/lib/interfaces/asset-class-selector-option.interface.ts @@ -1,4 +1,4 @@ -import { AssetClass, AssetSubClass } from '@prisma/client'; +import { AssetClass, AssetSubClass } from '@ghostfolio/prisma/enums'; export interface AssetClassSelectorOption { id: AssetClass | AssetSubClass; diff --git a/libs/common/src/lib/interfaces/asset-profile-identifier.interface.ts b/libs/common/src/lib/interfaces/asset-profile-identifier.interface.ts index 48fc18c2f4..a031f3a488 100644 --- a/libs/common/src/lib/interfaces/asset-profile-identifier.interface.ts +++ b/libs/common/src/lib/interfaces/asset-profile-identifier.interface.ts @@ -1,4 +1,4 @@ -import { DataSource } from '@prisma/client'; +import { DataSource } from '@ghostfolio/prisma/enums'; export interface AssetProfileIdentifier { dataSource: DataSource; diff --git a/libs/common/src/lib/interfaces/asset-profile-item.interface.ts b/libs/common/src/lib/interfaces/asset-profile-item.interface.ts index 382e824cc6..a982f5050a 100644 --- a/libs/common/src/lib/interfaces/asset-profile-item.interface.ts +++ b/libs/common/src/lib/interfaces/asset-profile-item.interface.ts @@ -1,4 +1,8 @@ -import { AssetClass, AssetSubClass, DataSource } from '@prisma/client'; +import { + AssetClass, + AssetSubClass, + DataSource +} from '@ghostfolio/prisma/enums'; import { DataProviderInfo } from './data-provider-info.interface'; diff --git a/libs/common/src/lib/interfaces/data-provider-info.interface.ts b/libs/common/src/lib/interfaces/data-provider-info.interface.ts index 9fba0e62de..dd3c67d4f9 100644 --- a/libs/common/src/lib/interfaces/data-provider-info.interface.ts +++ b/libs/common/src/lib/interfaces/data-provider-info.interface.ts @@ -1,4 +1,4 @@ -import { DataSource } from '@prisma/client'; +import { DataSource } from '@ghostfolio/prisma/enums'; export interface DataProviderInfo { dataSource?: DataSource; diff --git a/libs/common/src/lib/interfaces/enhanced-asset-profile.interface.ts b/libs/common/src/lib/interfaces/enhanced-asset-profile.interface.ts index 9e3a022f78..88226d9872 100644 --- a/libs/common/src/lib/interfaces/enhanced-asset-profile.interface.ts +++ b/libs/common/src/lib/interfaces/enhanced-asset-profile.interface.ts @@ -3,7 +3,7 @@ import { AssetSubClass, DataGatheringFrequency, DataSource -} from '@prisma/client'; +} from '@ghostfolio/prisma/enums'; import { Country } from './country.interface'; import { DataProviderInfo } from './data-provider-info.interface'; diff --git a/libs/common/src/lib/interfaces/info-item.interface.ts b/libs/common/src/lib/interfaces/info-item.interface.ts index 96db7f9b06..355b19203c 100644 --- a/libs/common/src/lib/interfaces/info-item.interface.ts +++ b/libs/common/src/lib/interfaces/info-item.interface.ts @@ -1,4 +1,4 @@ -import { SymbolProfile } from '@prisma/client'; +import type { SymbolProfile } from '@ghostfolio/prisma/browser'; import { Statistics } from './statistics.interface'; import { SubscriptionOffer } from './subscription-offer.interface'; diff --git a/libs/common/src/lib/interfaces/lookup-item.interface.ts b/libs/common/src/lib/interfaces/lookup-item.interface.ts index 6cedeca09e..5c653acddd 100644 --- a/libs/common/src/lib/interfaces/lookup-item.interface.ts +++ b/libs/common/src/lib/interfaces/lookup-item.interface.ts @@ -1,4 +1,8 @@ -import { AssetClass, AssetSubClass, DataSource } from '@prisma/client'; +import { + AssetClass, + AssetSubClass, + DataSource +} from '@ghostfolio/prisma/enums'; import { DataProviderInfo } from './data-provider-info.interface'; diff --git a/libs/common/src/lib/interfaces/portfolio-position.interface.ts b/libs/common/src/lib/interfaces/portfolio-position.interface.ts index 65d7ea1405..dcb150d963 100644 --- a/libs/common/src/lib/interfaces/portfolio-position.interface.ts +++ b/libs/common/src/lib/interfaces/portfolio-position.interface.ts @@ -1,6 +1,5 @@ import { Market, MarketAdvanced } from '@ghostfolio/common/types'; - -import { Tag } from '@prisma/client'; +import type { Tag } from '@ghostfolio/prisma/browser'; import { EnhancedAssetProfile } from './enhanced-asset-profile.interface'; diff --git a/libs/common/src/lib/interfaces/responses/account-balances-response.interface.ts b/libs/common/src/lib/interfaces/responses/account-balances-response.interface.ts index a623baaff9..f56cd6ce89 100644 --- a/libs/common/src/lib/interfaces/responses/account-balances-response.interface.ts +++ b/libs/common/src/lib/interfaces/responses/account-balances-response.interface.ts @@ -1,4 +1,4 @@ -import { AccountBalance } from '@prisma/client'; +import type { AccountBalance } from '@ghostfolio/prisma/browser'; export interface AccountBalancesResponse { balances: (Pick & { 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 26082c2c42..26ca5b29f9 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,4 +1,4 @@ -import { AssetProfileSplit, MarketData } from '@prisma/client'; +import type { AssetProfileSplit, MarketData } from '@ghostfolio/prisma/browser'; import { EnhancedAssetProfile } from '../enhanced-asset-profile.interface'; diff --git a/libs/common/src/lib/interfaces/responses/data-provider-ghostfolio-asset-profile-response.interface.ts b/libs/common/src/lib/interfaces/responses/data-provider-ghostfolio-asset-profile-response.interface.ts index 3ea635c6d2..41a9c513c0 100644 --- a/libs/common/src/lib/interfaces/responses/data-provider-ghostfolio-asset-profile-response.interface.ts +++ b/libs/common/src/lib/interfaces/responses/data-provider-ghostfolio-asset-profile-response.interface.ts @@ -1,3 +1,3 @@ -import { SymbolProfile } from '@prisma/client'; +import type { SymbolProfile } from '@ghostfolio/prisma/browser'; export interface DataProviderGhostfolioAssetProfileResponse extends Partial {} diff --git a/libs/common/src/lib/interfaces/responses/data-provider-response.interface.ts b/libs/common/src/lib/interfaces/responses/data-provider-response.interface.ts index ff152b1b2f..d46c6ff5e3 100644 --- a/libs/common/src/lib/interfaces/responses/data-provider-response.interface.ts +++ b/libs/common/src/lib/interfaces/responses/data-provider-response.interface.ts @@ -1,7 +1,6 @@ import { DataProviderInfo } from '@ghostfolio/common/interfaces'; import { MarketState } from '@ghostfolio/common/types'; - -import { DataSource } from '@prisma/client'; +import { DataSource } from '@ghostfolio/prisma/enums'; export interface DataProviderHistoricalResponse { marketPrice: number; diff --git a/libs/common/src/lib/interfaces/responses/export-response.interface.ts b/libs/common/src/lib/interfaces/responses/export-response.interface.ts index 4d49afebd9..6f643ec1a1 100644 --- a/libs/common/src/lib/interfaces/responses/export-response.interface.ts +++ b/libs/common/src/lib/interfaces/responses/export-response.interface.ts @@ -1,4 +1,10 @@ -import { Account, Order, Platform, SymbolProfile, Tag } from '@prisma/client'; +import type { + Account, + Order, + Platform, + SymbolProfile, + Tag +} from '@ghostfolio/prisma/browser'; import { AccountBalance } from '../account-balance.interface'; import { AssetProfileIdentifier } from '../asset-profile-identifier.interface'; diff --git a/libs/common/src/lib/interfaces/responses/platforms-response.interface.ts b/libs/common/src/lib/interfaces/responses/platforms-response.interface.ts index 552912d9d6..a6bfc4326c 100644 --- a/libs/common/src/lib/interfaces/responses/platforms-response.interface.ts +++ b/libs/common/src/lib/interfaces/responses/platforms-response.interface.ts @@ -1,4 +1,4 @@ -import { Platform } from '@prisma/client'; +import type { Platform } from '@ghostfolio/prisma/browser'; export interface PlatformsResponse { platforms: Platform[]; diff --git a/libs/common/src/lib/interfaces/responses/portfolio-holding-response.interface.ts b/libs/common/src/lib/interfaces/responses/portfolio-holding-response.interface.ts index 80eaa6458c..a3ab21705c 100644 --- a/libs/common/src/lib/interfaces/responses/portfolio-holding-response.interface.ts +++ b/libs/common/src/lib/interfaces/responses/portfolio-holding-response.interface.ts @@ -4,8 +4,7 @@ import { EnhancedAssetProfile, HistoricalDataItem } from '@ghostfolio/common/interfaces'; - -import { Tag } from '@prisma/client'; +import type { Tag } from '@ghostfolio/prisma/browser'; export interface PortfolioHoldingResponse { activitiesCount: number; diff --git a/libs/common/src/lib/interfaces/responses/public-portfolio-response.interface.ts b/libs/common/src/lib/interfaces/responses/public-portfolio-response.interface.ts index 616dbac992..bf6e91bd9a 100644 --- a/libs/common/src/lib/interfaces/responses/public-portfolio-response.interface.ts +++ b/libs/common/src/lib/interfaces/responses/public-portfolio-response.interface.ts @@ -4,8 +4,7 @@ import { PortfolioPosition } from '@ghostfolio/common/interfaces'; import { Market } from '@ghostfolio/common/types'; - -import { Order } from '@prisma/client'; +import type { Order } from '@ghostfolio/prisma/browser'; export interface PublicPortfolioResponse extends PublicPortfolioResponseV1 { alias?: string; diff --git a/libs/common/src/lib/interfaces/user-item.interface.ts b/libs/common/src/lib/interfaces/user-item.interface.ts index 32230b69ef..b5ca9d9ce6 100644 --- a/libs/common/src/lib/interfaces/user-item.interface.ts +++ b/libs/common/src/lib/interfaces/user-item.interface.ts @@ -1,4 +1,4 @@ -import { Role } from '@prisma/client'; +import { Role } from '@ghostfolio/prisma/enums'; export interface UserItem { accessToken?: string; diff --git a/libs/common/src/lib/interfaces/user-settings.interface.ts b/libs/common/src/lib/interfaces/user-settings.interface.ts index 65325a42f8..dc6fb5c369 100644 --- a/libs/common/src/lib/interfaces/user-settings.interface.ts +++ b/libs/common/src/lib/interfaces/user-settings.interface.ts @@ -6,8 +6,7 @@ import { ViewMode } from '@ghostfolio/common/types'; import { PerformanceCalculationType } from '@ghostfolio/common/types/performance-calculation-type.type'; - -import { AssetClass } from '@prisma/client'; +import { AssetClass } from '@ghostfolio/prisma/enums'; export interface UserSettings { annualInterestRate?: number; diff --git a/libs/common/src/lib/interfaces/user.interface.ts b/libs/common/src/lib/interfaces/user.interface.ts index b6493c814a..ff0f6646f5 100644 --- a/libs/common/src/lib/interfaces/user.interface.ts +++ b/libs/common/src/lib/interfaces/user.interface.ts @@ -1,7 +1,7 @@ import { SubscriptionType } from '@ghostfolio/common/enums'; import { AccountWithPlatform } from '@ghostfolio/common/types'; - -import { Access, Tag, Type as ActivityType } from '@prisma/client'; +import type { Access, Tag } from '@ghostfolio/prisma/browser'; +import { Type as ActivityType } from '@ghostfolio/prisma/enums'; import { ReferralPartner } from './referral-partner.interface'; import { SubscriptionOffer } from './subscription-offer.interface'; diff --git a/libs/common/src/lib/models/portfolio-snapshot-holding.ts b/libs/common/src/lib/models/portfolio-snapshot-holding.ts index 21d375fd4a..9b440b9782 100644 --- a/libs/common/src/lib/models/portfolio-snapshot-holding.ts +++ b/libs/common/src/lib/models/portfolio-snapshot-holding.ts @@ -3,8 +3,9 @@ import { transformToMapOfBig } from '@ghostfolio/common/class-transformer'; import { DateRange } from '@ghostfolio/common/types'; +import type { Tag } from '@ghostfolio/prisma/browser'; +import { DataSource } from '@ghostfolio/prisma/enums'; -import { DataSource, Tag } from '@prisma/client'; import { Big } from 'big.js'; import { Expose, Transform, Type } from 'class-transformer'; diff --git a/libs/common/src/lib/permissions.ts b/libs/common/src/lib/permissions.ts index 753bdf131a..d2b23e871a 100644 --- a/libs/common/src/lib/permissions.ts +++ b/libs/common/src/lib/permissions.ts @@ -1,6 +1,5 @@ import { UserWithSettings } from '@ghostfolio/common/types'; - -import { Role } from '@prisma/client'; +import { Role } from '@ghostfolio/prisma/enums'; export const permissions = { accessAdminControl: 'accessAdminControl', diff --git a/libs/common/src/lib/scopes.ts b/libs/common/src/lib/scopes.ts index 1c8efab431..635530a9e2 100644 --- a/libs/common/src/lib/scopes.ts +++ b/libs/common/src/lib/scopes.ts @@ -1,6 +1,5 @@ import { AccessLevel } from '@ghostfolio/common/types'; - -import { AccessType } from '@prisma/client'; +import { AccessType } from '@ghostfolio/prisma/enums'; /** * Scopes describe what a grantee may do on behalf of the granting user. They diff --git a/libs/common/src/lib/types/access-with-grantee-user.type.ts b/libs/common/src/lib/types/access-with-grantee-user.type.ts index 2fc2488eec..ea04986979 100644 --- a/libs/common/src/lib/types/access-with-grantee-user.type.ts +++ b/libs/common/src/lib/types/access-with-grantee-user.type.ts @@ -1,3 +1,3 @@ -import { Access, User } from '@prisma/client'; +import type { Access, User } from '@ghostfolio/prisma/browser'; export type AccessWithGranteeUser = Access & { granteeUser?: User | null }; diff --git a/libs/common/src/lib/types/account-with-balance.type.ts b/libs/common/src/lib/types/account-with-balance.type.ts index 72732f3a6d..46e0e16548 100644 --- a/libs/common/src/lib/types/account-with-balance.type.ts +++ b/libs/common/src/lib/types/account-with-balance.type.ts @@ -1,4 +1,4 @@ -import { Account as AccountModel } from '@prisma/client'; +import type { Account as AccountModel } from '@ghostfolio/prisma/browser'; export type AccountWithBalance = AccountModel & { balance: number; diff --git a/libs/common/src/lib/types/account-with-platform.type.ts b/libs/common/src/lib/types/account-with-platform.type.ts index 640245e3bc..cccec2e522 100644 --- a/libs/common/src/lib/types/account-with-platform.type.ts +++ b/libs/common/src/lib/types/account-with-platform.type.ts @@ -1,4 +1,4 @@ -import { Account, Platform, Tag } from '@prisma/client'; +import type { Account, Platform, Tag } from '@ghostfolio/prisma/browser'; export type AccountWithPlatform = Account & { platform?: Platform; 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 0d43c612f7..0fb9a58e2b 100644 --- a/libs/common/src/lib/types/account-with-value.type.ts +++ b/libs/common/src/lib/types/account-with-value.type.ts @@ -1,4 +1,4 @@ -import { Platform, Tag } from '@prisma/client'; +import type { Platform, Tag } from '@ghostfolio/prisma/browser'; import { AccountWithBalance } from './account-with-balance.type'; diff --git a/libs/common/src/lib/types/order-with-account.type.ts b/libs/common/src/lib/types/order-with-account.type.ts index b3ae4a990a..cff844707f 100644 --- a/libs/common/src/lib/types/order-with-account.type.ts +++ b/libs/common/src/lib/types/order-with-account.type.ts @@ -1,4 +1,4 @@ -import { Order, SymbolProfile, Tag } from '@prisma/client'; +import type { Order, SymbolProfile, Tag } from '@ghostfolio/prisma/browser'; import { AccountWithPlatform } from './account-with-platform.type'; diff --git a/libs/common/src/lib/types/tag-with-account-and-activity-count.type.ts b/libs/common/src/lib/types/tag-with-account-and-activity-count.type.ts index 662e0f5ce9..36ef4a56e4 100644 --- a/libs/common/src/lib/types/tag-with-account-and-activity-count.type.ts +++ b/libs/common/src/lib/types/tag-with-account-and-activity-count.type.ts @@ -1,4 +1,4 @@ -import { Tag } from '@prisma/client'; +import type { Tag } from '@ghostfolio/prisma/browser'; export type TagWithAccountAndActivityCount = Tag & { accountCount: number; diff --git a/libs/common/src/lib/types/user-with-settings.type.ts b/libs/common/src/lib/types/user-with-settings.type.ts index 4c4a85a45c..24be244b39 100644 --- a/libs/common/src/lib/types/user-with-settings.type.ts +++ b/libs/common/src/lib/types/user-with-settings.type.ts @@ -1,7 +1,6 @@ import { SubscriptionType } from '@ghostfolio/common/enums'; import { SubscriptionOffer, UserSettings } from '@ghostfolio/common/interfaces'; - -import { Account, Settings, User } from '@prisma/client'; +import type { Account, Settings, User } from '@ghostfolio/prisma/browser'; // TODO: Compare with User interface export type UserWithSettings = User & { 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 4646606577..56a2c6abec 100644 --- a/libs/ui/src/lib/activities-table/activities-table.component.ts +++ b/libs/ui/src/lib/activities-table/activities-table.component.ts @@ -6,6 +6,7 @@ import { AssetProfileIdentifier } from '@ghostfolio/common/interfaces'; import { internalRoutes } from '@ghostfolio/common/routes/routes'; +import { Type as ActivityType } from '@ghostfolio/prisma/enums'; import { translate } from '@ghostfolio/ui/i18n'; import { NotificationService } from '@ghostfolio/ui/notifications'; @@ -48,7 +49,6 @@ import { MatTableDataSource, MatTableModule } from '@angular/material/table'; import { MatTooltipModule } from '@angular/material/tooltip'; import { RouterModule } from '@angular/router'; import { IonIcon } from '@ionic/angular/standalone'; -import { Type as ActivityType } from '@prisma/client'; import { isUUID } from 'class-validator'; import { addIcons } from 'ionicons'; import { diff --git a/libs/ui/src/lib/activity-type/activity-type.component.ts b/libs/ui/src/lib/activity-type/activity-type.component.ts index 7bd0e6975d..acc7a27e25 100644 --- a/libs/ui/src/lib/activity-type/activity-type.component.ts +++ b/libs/ui/src/lib/activity-type/activity-type.component.ts @@ -1,3 +1,5 @@ +import { Type as ActivityType } from '@ghostfolio/prisma/enums'; + import { CUSTOM_ELEMENTS_SCHEMA, ChangeDetectionStrategy, @@ -6,7 +8,6 @@ import { OnChanges } from '@angular/core'; import { IonIcon } from '@ionic/angular/standalone'; -import { Type as ActivityType } from '@prisma/client'; import { addIcons } from 'ionicons'; import { addCircleOutline, diff --git a/libs/ui/src/lib/benchmark/benchmark-detail-dialog/interfaces/interfaces.ts b/libs/ui/src/lib/benchmark/benchmark-detail-dialog/interfaces/interfaces.ts index b01403284b..80d09148c9 100644 --- a/libs/ui/src/lib/benchmark/benchmark-detail-dialog/interfaces/interfaces.ts +++ b/libs/ui/src/lib/benchmark/benchmark-detail-dialog/interfaces/interfaces.ts @@ -1,6 +1,5 @@ import { ColorScheme } from '@ghostfolio/common/types'; - -import { DataSource } from '@prisma/client'; +import { DataSource } from '@ghostfolio/prisma/enums'; export interface BenchmarkDetailDialogParams { colorScheme?: ColorScheme; 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 8a788e0c80..989a67214e 100644 --- a/libs/ui/src/lib/entity-logo/entity-logo.component.ts +++ b/libs/ui/src/lib/entity-logo/entity-logo.component.ts @@ -1,4 +1,5 @@ import { getEmojiFlag } from '@ghostfolio/common/helper'; +import { DataSource } from '@ghostfolio/prisma/enums'; import { EntityLogoImageSourceService } from '@ghostfolio/ui/entity-logo/entity-logo-image-source.service'; import { @@ -8,7 +9,6 @@ import { Input, OnChanges } from '@angular/core'; -import { DataSource } from '@prisma/client'; @Component({ changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/interfaces/interfaces.ts b/libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/interfaces/interfaces.ts index edb9a852f5..fcc98c271e 100644 --- a/libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/interfaces/interfaces.ts +++ b/libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/interfaces/interfaces.ts @@ -1,6 +1,5 @@ import { User } from '@ghostfolio/common/interfaces'; - -import { DataSource } from '@prisma/client'; +import { DataSource } from '@ghostfolio/prisma/enums'; export interface HistoricalMarketDataEditorDialogParams { currency: string; diff --git a/libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor.component.ts b/libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor.component.ts index aa6177cff9..401fd84523 100644 --- a/libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor.component.ts +++ b/libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor.component.ts @@ -5,6 +5,8 @@ import { getLocale } from '@ghostfolio/common/helper'; import { LineChartItem, User } from '@ghostfolio/common/interfaces'; +import type { MarketData } from '@ghostfolio/prisma/browser'; +import { DataSource } from '@ghostfolio/prisma/enums'; import { DataService } from '@ghostfolio/ui/services'; import { CommonModule } from '@angular/common'; @@ -28,7 +30,6 @@ import { MatButtonModule } from '@angular/material/button'; import { MatDialog } from '@angular/material/dialog'; import { MatInputModule } from '@angular/material/input'; import { MatSnackBar } from '@angular/material/snack-bar'; -import { DataSource, MarketData } from '@prisma/client'; import { addDays, addMonths, 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 766a4178b0..4160485bce 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 @@ -1,6 +1,5 @@ import { AssetProfileIdentifier } from '@ghostfolio/common/interfaces'; - -import { DataSource } from '@prisma/client'; +import { DataSource } from '@ghostfolio/prisma/enums'; // Resolves like a logo of an unknown entity, but fails to load const UNAVAILABLE_LOGO_URL = 'data:image/png;base64,unavailable'; 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 193624c768..163029258a 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,8 +1,8 @@ import { TAG_ID_EXCLUDE_FROM_ANALYSIS } from '@ghostfolio/common/config'; import { getAssetProfileIdentifier } from '@ghostfolio/common/helper'; import { Filter, PortfolioPosition } from '@ghostfolio/common/interfaces'; - -import { AssetClass, DataSource, Tag } from '@prisma/client'; +import type { Tag } from '@ghostfolio/prisma/browser'; +import { AssetClass, DataSource } from '@ghostfolio/prisma/enums'; import { translate } from '../i18n'; import { PortfolioFilterFormValue } from './interfaces'; diff --git a/libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts b/libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts index bf2f595c26..e90c446b41 100644 --- a/libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts +++ b/libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts @@ -3,6 +3,7 @@ import { DEFAULT_COLOR_SCHEME, UNKNOWN_KEY } from '@ghostfolio/common/config'; import { getLocale, getSum, getTextColor } from '@ghostfolio/common/helper'; import { PortfolioPosition } from '@ghostfolio/common/interfaces'; import { ColorScheme } from '@ghostfolio/common/types'; +import { DataSource } from '@ghostfolio/prisma/enums'; import { AfterViewInit, @@ -15,7 +16,6 @@ import { output, viewChild } from '@angular/core'; -import { DataSource } from '@prisma/client'; import { Big } from 'big.js'; import { ArcElement, diff --git a/libs/ui/src/lib/services/admin.service.ts b/libs/ui/src/lib/services/admin.service.ts index aa048faaf2..aba02c9b3f 100644 --- a/libs/ui/src/lib/services/admin.service.ts +++ b/libs/ui/src/lib/services/admin.service.ts @@ -21,11 +21,15 @@ import { EnhancedAssetProfile } from '@ghostfolio/common/interfaces'; import { DateRange } from '@ghostfolio/common/types'; +import type { + AssetProfileSplit, + MarketData, + Platform +} from '@ghostfolio/prisma/browser'; import { GF_ENVIRONMENT } from '@ghostfolio/ui/environment'; import { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http'; import { inject, Service } from '@angular/core'; -import { AssetProfileSplit, MarketData, Platform } from '@prisma/client'; import { JobStatus } from 'bull'; import { isNumber } from 'lodash'; diff --git a/libs/ui/src/lib/services/data.service.ts b/libs/ui/src/lib/services/data.service.ts index e09632079c..9bbb0bf5fa 100644 --- a/libs/ui/src/lib/services/data.service.ts +++ b/libs/ui/src/lib/services/data.service.ts @@ -65,22 +65,22 @@ import type { GroupBy, TagWithAccountAndActivityCount } from '@ghostfolio/common/types'; -import { translate } from '@ghostfolio/ui/i18n'; - -import { HttpClient, HttpParams } from '@angular/common/http'; -import { inject, Service } from '@angular/core'; -import { SortDirection } from '@angular/material/sort'; -import { utc } from '@date-fns/utc'; -import { +import type { Account, AccountBalance, - DataSource, MarketData, Order, SymbolProfile, Tag, User as UserModel -} from '@prisma/client'; +} from '@ghostfolio/prisma/browser'; +import { DataSource } from '@ghostfolio/prisma/enums'; +import { translate } from '@ghostfolio/ui/i18n'; + +import { HttpClient, HttpParams } from '@angular/common/http'; +import { inject, Service } from '@angular/core'; +import { SortDirection } from '@angular/material/sort'; +import { utc } from '@date-fns/utc'; import { format, parseISO } from 'date-fns'; import { cloneDeep, groupBy, isNumber } from 'lodash'; import { Observable } from 'rxjs'; diff --git a/libs/ui/src/lib/tags-selector/interfaces/interfaces.ts b/libs/ui/src/lib/tags-selector/interfaces/interfaces.ts index fe9af9882c..616ffa2487 100644 --- a/libs/ui/src/lib/tags-selector/interfaces/interfaces.ts +++ b/libs/ui/src/lib/tags-selector/interfaces/interfaces.ts @@ -1,4 +1,4 @@ -import { Tag } from '@prisma/client'; +import type { Tag } from '@ghostfolio/prisma/browser'; export interface NewTag extends Omit { id: undefined; diff --git a/nx.json b/nx.json index e0a41e9835..d42873bda8 100644 --- a/nx.json +++ b/nx.json @@ -125,7 +125,8 @@ "sharedGlobals": [ "{workspaceRoot}/angular.json", "{workspaceRoot}/tsconfig.base.json", - "{workspaceRoot}/nx.json" + "{workspaceRoot}/nx.json", + "{workspaceRoot}/prisma/schema.prisma" ], "production": [ "default", diff --git a/prisma/schema.prisma b/prisma/schema.prisma index 8d874b4de6..d2181e13be 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -1,7 +1,12 @@ generator client { - provider = "prisma-client-js" - previewFeatures = [] binaryTargets = ["debian-openssl-3.0.x", "linux-arm64-openssl-3.0.x", "native"] + previewFeatures = [] + provider = "prisma-client-js" +} + +generator workspaceClient { + output = "./generated" + provider = "prisma-client" } datasource db { diff --git a/tsconfig.base.json b/tsconfig.base.json index a74d9910f3..f5771c4e9d 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -19,6 +19,8 @@ "@ghostfolio/api/*": ["./apps/api/src/*"], "@ghostfolio/client/*": ["./apps/client/src/app/*"], "@ghostfolio/common/*": ["./libs/common/src/lib/*"], + "@ghostfolio/prisma/browser": ["./prisma/generated/browser"], + "@ghostfolio/prisma/enums": ["./prisma/generated/enums"], "@ghostfolio/ui/*": ["./libs/ui/src/lib/*"] }, "noFallthroughCasesInSwitch": true, From cce3f7bdc4a399a059ca60bba7c1c5a620c55a8c Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Tue, 29 Sep 2026 19:48:31 +0200 Subject: [PATCH 08/27] Feature/add currency suffix to emergency fund dialog (#7969) * Add currency suffix to emergency fund dialog * Update changelog --- CHANGELOG.md | 1 + .../portfolio-summary/portfolio-summary.component.ts | 3 ++- libs/ui/src/lib/notifications/interfaces/interfaces.ts | 1 + libs/ui/src/lib/notifications/notification.service.ts | 3 ++- .../lib/notifications/prompt-dialog/interfaces/interfaces.ts | 1 + .../notifications/prompt-dialog/prompt-dialog.component.ts | 5 ++++- .../src/lib/notifications/prompt-dialog/prompt-dialog.html | 3 +++ 7 files changed, 14 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d90f853cd0..1e3529e9e6 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 ### Changed +- Extended the emergency fund dialog in the portfolio summary to include the currency suffix - Migrated the client to the code generated by the new `prisma-client` generator of _Prisma_ ## 3.75.0 - 2026-09-28 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 23e32a0c9c..feedddacae 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 @@ -201,7 +201,8 @@ export class GfPortfolioSummaryComponent implements OnChanges { }, confirmLabel: $localize`Save`, defaultValue: this.summary.emergencyFund?.total?.toString() ?? '0', - title: $localize`Please set the amount of your emergency fund.` + title: $localize`Please set the amount of your emergency fund.`, + valueSuffix: this.baseCurrency }); } diff --git a/libs/ui/src/lib/notifications/interfaces/interfaces.ts b/libs/ui/src/lib/notifications/interfaces/interfaces.ts index dcea7d53c9..a9e065d83d 100644 --- a/libs/ui/src/lib/notifications/interfaces/interfaces.ts +++ b/libs/ui/src/lib/notifications/interfaces/interfaces.ts @@ -26,4 +26,5 @@ export interface PromptParams { discardLabel?: string; title: string; valueLabel?: string; + valueSuffix?: string; } diff --git a/libs/ui/src/lib/notifications/notification.service.ts b/libs/ui/src/lib/notifications/notification.service.ts index b0758b5763..4eb1cbd54d 100644 --- a/libs/ui/src/lib/notifications/notification.service.ts +++ b/libs/ui/src/lib/notifications/notification.service.ts @@ -87,7 +87,8 @@ export class NotificationService { defaultValue: aParams.defaultValue, discardLabel: aParams.discardLabel, title: aParams.title, - valueLabel: aParams.valueLabel + valueLabel: aParams.valueLabel, + valueSuffix: aParams.valueSuffix }); return dialog.afterClosed().subscribe((result: string) => { diff --git a/libs/ui/src/lib/notifications/prompt-dialog/interfaces/interfaces.ts b/libs/ui/src/lib/notifications/prompt-dialog/interfaces/interfaces.ts index 607577dfa0..d3dcccf596 100644 --- a/libs/ui/src/lib/notifications/prompt-dialog/interfaces/interfaces.ts +++ b/libs/ui/src/lib/notifications/prompt-dialog/interfaces/interfaces.ts @@ -4,4 +4,5 @@ export interface PromptDialogParams { discardLabel: string; title: string; valueLabel?: string; + valueSuffix?: string; } diff --git a/libs/ui/src/lib/notifications/prompt-dialog/prompt-dialog.component.ts b/libs/ui/src/lib/notifications/prompt-dialog/prompt-dialog.component.ts index e9750c3f52..e74056401c 100644 --- a/libs/ui/src/lib/notifications/prompt-dialog/prompt-dialog.component.ts +++ b/libs/ui/src/lib/notifications/prompt-dialog/prompt-dialog.component.ts @@ -26,6 +26,7 @@ export class GfPromptDialogComponent { public formControl = new FormControl(''); public title: string; public valueLabel?: string; + public valueSuffix?: string; protected readonly dialogRef = inject>(MatDialogRef); @@ -35,7 +36,8 @@ export class GfPromptDialogComponent { defaultValue, discardLabel, title, - valueLabel + valueLabel, + valueSuffix }: PromptDialogParams) { this.confirmLabel = confirmLabel; this.defaultValue = defaultValue; @@ -43,5 +45,6 @@ export class GfPromptDialogComponent { this.formControl.setValue(defaultValue ?? null); this.title = title; this.valueLabel = valueLabel; + this.valueSuffix = valueSuffix; } } diff --git a/libs/ui/src/lib/notifications/prompt-dialog/prompt-dialog.html b/libs/ui/src/lib/notifications/prompt-dialog/prompt-dialog.html index d73c8dabb5..0b39f22e17 100644 --- a/libs/ui/src/lib/notifications/prompt-dialog/prompt-dialog.html +++ b/libs/ui/src/lib/notifications/prompt-dialog/prompt-dialog.html @@ -8,6 +8,9 @@ {{ valueLabel }} } + @if (valueSuffix) { + {{ valueSuffix }} + } From cdeff7e5884026df84e706d35412ca86af13f874 Mon Sep 17 00:00:00 2001 From: Kenrick Tandrian <60643640+KenTandrian@users.noreply.github.com> Date: Wed, 30 Sep 2026 01:12:24 +0700 Subject: [PATCH 09/27] Task/widen input types in investment chart component (#7966) Widen input types --- .../investment-chart/investment-chart.component.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/apps/client/src/app/components/investment-chart/investment-chart.component.ts b/apps/client/src/app/components/investment-chart/investment-chart.component.ts index 43ac5ff99b..8250133eb2 100644 --- a/apps/client/src/app/components/investment-chart/investment-chart.component.ts +++ b/apps/client/src/app/components/investment-chart/investment-chart.component.ts @@ -56,13 +56,13 @@ export class GfInvestmentChartComponent implements OnChanges, OnDestroy { @Input() public benchmarkDataItems: InvestmentItem[] = []; @Input() public benchmarkDataLabel = ''; @Input() public colorScheme: ColorScheme; - @Input() public currency: string; + @Input() public currency?: string; @Input() public groupBy: GroupBy; @Input() public historicalDataItems: LineChartItem[] = []; - @Input() public isInPercentage = false; + @Input() public isInPercentage?: boolean = false; @Input() public isLoading = false; - @Input() public locale = getLocale(); - @Input() public savingsRate = 0; + @Input() public locale?: string = getLocale(); + @Input() public savingsRate?: number = 0; private readonly chartCanvas = viewChild.required>('chartCanvas'); From 720ad531a1cce98590867e853c1c00c91b8d86c7 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Tue, 29 Sep 2026 20:25:50 +0200 Subject: [PATCH 10/27] Bugfix/endless loading state of values (#7971) * Fix value column of top holdings in Presenter View * Fix projected sustainable retirement income for projected total amount of zero * Fix emergency fund in portfolio summary for redacted values * Update changelog --- CHANGELOG.md | 6 ++++++ .../portfolio-summary.component.html | 4 +++- .../portfolio/allocations/allocations-page.html | 1 + .../pages/portfolio/fire/fire-page.component.ts | 4 +++- .../lib/top-holdings/top-holdings.component.ts | 15 ++++++++++----- 5 files changed, 23 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1e3529e9e6..998d9fe239 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,6 +16,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Extended the emergency fund dialog in the portfolio summary to include the currency suffix - Migrated the client to the code generated by the new `prisma-client` generator of _Prisma_ +### Fixed + +- Fixed the value column of the top holdings on the allocations page in the _Presenter View_ +- Fixed the projected sustainable retirement income on the _FIRE_ page for a projected total amount of zero (experimental) +- Fixed the emergency fund in the portfolio summary for redacted values + ## 3.75.0 - 2026-09-28 ### Changed 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 2130493f03..0a0beba910 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 @@ -486,7 +486,9 @@ [locale]="locale" [precision]="precision" [unit]="displayedCurrency" - [value]="summary?.emergencyFund?.total" + [value]=" + summary?.emergencyFund === null ? null : summary?.emergencyFund?.total + " /> 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 adb4f188d7..79f5e4ecbf 100644 --- a/apps/client/src/app/pages/portfolio/allocations/allocations-page.html +++ b/apps/client/src/app/pages/portfolio/allocations/allocations-page.html @@ -341,6 +341,7 @@ (); - public displayedColumns: string[] = [ - 'name', - 'valueInBaseCurrency', - 'allocationInPercentage' - ]; + public displayedColumns: string[] = []; public isLoading = true; public ngOnChanges() { + this.displayedColumns = ['name']; + + if (this.hasPermissionToShowValues) { + this.displayedColumns.push('valueInBaseCurrency'); + } + + this.displayedColumns.push('allocationInPercentage'); + this.isLoading = true; this.dataSource = new MatTableDataSource(this.topHoldings); From 2db2a471147598b1e583264284e04268530a3fc9 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Tue, 29 Sep 2026 20:51:37 +0200 Subject: [PATCH 11/27] Bugfix/color scheme of investment chart (#7972) * Fix color scheme of investment chart component * Update changelog --- CHANGELOG.md | 1 + .../account-detail-dialog.html | 1 + .../investment-chart.component.ts | 24 ++++++++++++------- .../portfolio/analysis/analysis-page.html | 3 +++ 4 files changed, 20 insertions(+), 9 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 998d9fe239..7c55df458c 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 ### Fixed +- Fixed the colors of the investment chart component (dark mode) - Fixed the value column of the top holdings on the allocations page in the _Presenter View_ - Fixed the projected sustainable retirement income on the _FIRE_ page for a projected total amount of zero (experimental) - Fixed the emergency fund in the portfolio summary for redacted values 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 a87179ecb9..5a86e4aa9b 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 @@ -23,6 +23,7 @@
( this.chartCanvas().nativeElement, { data: chartData, options: { animation: false, - elements: getChartElementsOptions(this.colorScheme), + elements: getChartElementsOptions(colorScheme), interaction: { intersect: false, mode: 'index' }, maintainAspectRatio: true, plugins: { @@ -204,7 +210,7 @@ export class GfInvestmentChartComponent implements OnChanges, OnDestroy { value: this.savingsRate } : undefined, - yAxis: getZeroLineAnnotation(this.colorScheme) + yAxis: getZeroLineAnnotation(colorScheme) } }, legend: { @@ -212,18 +218,18 @@ export class GfInvestmentChartComponent implements OnChanges, OnDestroy { }, tooltip: this.getTooltipPluginConfiguration(), verticalHoverLine: { - color: getChartBorderColor(this.colorScheme) + color: getChartBorderColor(colorScheme) } }, responsive: true, scales: { x: getTimeAxisOptions({ + colorScheme, borderWidth: this.groupBy ? 0 : 1, - colorScheme: this.colorScheme, locale: this.locale }), y: getValueAxisOptions({ - colorScheme: this.colorScheme, + colorScheme, display: !this.isInPercentage, tickCallback: (tickValue) => { return transformTickToAbbreviation(Number(tickValue)); @@ -232,7 +238,7 @@ export class GfInvestmentChartComponent implements OnChanges, OnDestroy { } }, plugins: [ - getVerticalHoverLinePlugin(this.chartCanvas(), this.colorScheme) + getVerticalHoverLinePlugin(this.chartCanvas(), colorScheme) ], type: this.groupBy ? 'bar' : 'line' } @@ -245,7 +251,7 @@ export class GfInvestmentChartComponent implements OnChanges, OnDestroy { TooltipOptions<'bar' | 'line'> > { return getTimeSeriesTooltipOptions<'bar' | 'line'>({ - colorScheme: this.colorScheme, + colorScheme: this.colorScheme ?? DEFAULT_COLOR_SCHEME, currency: this.isInPercentage ? undefined : this.currency, groupBy: this.groupBy, locale: this.isInPercentage ? undefined : this.locale, 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 47cee7af6e..2756076b7a 100644 --- a/apps/client/src/app/pages/portfolio/analysis/analysis-page.html +++ b/apps/client/src/app/pages/portfolio/analysis/analysis-page.html @@ -443,6 +443,7 @@ class="h-100" [benchmarkDataItems]="investments" [benchmarkDataLabel]="portfolioEvolutionDataLabel" + [colorScheme]="user?.settings?.colorScheme" [currency]="user?.settings?.baseCurrency" [historicalDataItems]="performanceDataItems" [isInPercentage]="showValuesInPercentage()" @@ -499,6 +500,7 @@ class="h-100" [benchmarkDataItems]="investmentsByGroup" [benchmarkDataLabel]="investmentTimelineDataLabel" + [colorScheme]="user?.settings?.colorScheme" [currency]="user?.settings?.baseCurrency" [groupBy]="mode()" [isInPercentage]="showValuesInPercentage()" @@ -534,6 +536,7 @@ class="h-100" [benchmarkDataItems]="dividendsByGroup" [benchmarkDataLabel]="dividendTimelineDataLabel" + [colorScheme]="user?.settings?.colorScheme" [currency]="user?.settings?.baseCurrency" [groupBy]="mode()" [isInPercentage]="showValuesInPercentage()" From c13a0c18fb9c221adc4fed02d3ba32b274c8dc80 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Tue, 29 Sep 2026 21:53:38 +0200 Subject: [PATCH 12/27] Bugfix/redaction of values of ETF holdings (#7973) * Fix redaction of values of ETF holdings * Update changelog --- CHANGELOG.md | 1 + apps/api/src/helper/object.helper.spec.ts | 1050 ++++++++++++--------- libs/common/src/lib/config.ts | 2 +- 3 files changed, 582 insertions(+), 471 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7c55df458c..4bbf0a08dd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -22,6 +22,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Fixed the value column of the top holdings on the allocations page in the _Presenter View_ - Fixed the projected sustainable retirement income on the _FIRE_ page for a projected total amount of zero (experimental) - Fixed the emergency fund in the portfolio summary for redacted values +- Fixed the redaction of `valueInBaseCurrency` in the holdings of ETFs in a restricted view ## 3.75.0 - 2026-09-28 diff --git a/apps/api/src/helper/object.helper.spec.ts b/apps/api/src/helper/object.helper.spec.ts index 415851a6c6..ca487ed8f7 100644 --- a/apps/api/src/helper/object.helper.spec.ts +++ b/apps/api/src/helper/object.helper.spec.ts @@ -1,4 +1,5 @@ import { DEFAULT_REDACTED_PATHS } from '@ghostfolio/common/config'; +import { PortfolioDetails } from '@ghostfolio/common/interfaces'; import { query, redactPaths } from './object.helper'; @@ -133,6 +134,7 @@ describe('redactAttributes', () => { tags: [], allocationInPercentage: 0.044900865255793135, assetClass: 'EQUITY', + assetProfile: { holdings: [] }, assetSubClass: 'STOCK', countries: [ { @@ -149,7 +151,6 @@ describe('redactAttributes', () => { grossPerformancePercent: 0.3183066634822068, grossPerformancePercentWithCurrencyEffect: 0.3183066634822068, grossPerformanceWithCurrencyEffect: 2665.5, - holdings: [], investment: 0.060265768702233234, name: 'Apple Inc', netPerformance: 2664.5, @@ -185,6 +186,7 @@ describe('redactAttributes', () => { tags: [], allocationInPercentage: 0.026912563036519527, assetClass: 'EQUITY', + assetProfile: { holdings: [] }, assetSubClass: 'STOCK', countries: [ { code: 'DE', weight: 1, continent: 'Europe', name: 'Germany' } @@ -196,7 +198,6 @@ describe('redactAttributes', () => { grossPerformancePercent: 0.3719230057375532, grossPerformancePercentWithCurrencyEffect: 0.2650716044872953, grossPerformanceWithCurrencyEffect: 1386.429698978564, - holdings: [], investment: 0.03471025137190358, name: 'Allianz SE', netPerformance: 1789.1095737558583, @@ -232,6 +233,7 @@ describe('redactAttributes', () => { tags: [], allocationInPercentage: 0.07646101417126275, assetClass: 'EQUITY', + assetProfile: { holdings: [] }, assetSubClass: 'STOCK', countries: [ { @@ -248,7 +250,6 @@ describe('redactAttributes', () => { grossPerformancePercent: 0.8594552890963852, grossPerformancePercentWithCurrencyEffect: 0.8594552890963852, grossPerformanceWithCurrencyEffect: 8689.05, - holdings: [], investment: 0.07275900505029173, name: 'Amazon.com, Inc.', netPerformance: 8608.26, @@ -290,6 +291,7 @@ describe('redactAttributes', () => { ], allocationInPercentage: 0.15042891393226654, assetClass: 'LIQUIDITY', + assetProfile: { holdings: [] }, assetSubClass: 'CRYPTOCURRENCY', countries: [], dataSource: 'COINGECKO', @@ -299,7 +301,6 @@ describe('redactAttributes', () => { grossPerformancePercent: 17.4925166352, grossPerformancePercentWithCurrencyEffect: 17.4925166352, grossPerformanceWithCurrencyEffect: 34985.0332704, - holdings: [], investment: 0.014393543993846005, name: 'Bitcoin', netPerformance: 34955.1332704, @@ -341,6 +342,7 @@ describe('redactAttributes', () => { ], allocationInPercentage: 0.009076749759365777, assetClass: 'FIXED_INCOME', + assetProfile: { holdings: [] }, assetSubClass: 'BOND', countries: [], dataSource: 'MANUAL', @@ -350,7 +352,6 @@ describe('redactAttributes', () => { grossPerformancePercent: 0, grossPerformancePercentWithCurrencyEffect: -0.06153834320225245, grossPerformanceWithCurrencyEffect: -125.68932723700505, - holdings: [], investment: 0.016060638243523776, name: 'Bondora Go & Grow', netPerformance: 0, @@ -392,6 +393,7 @@ describe('redactAttributes', () => { ], allocationInPercentage: 0.09095764645669335, assetClass: 'EQUITY', + assetProfile: { holdings: [] }, assetSubClass: 'ETF', countries: [ { @@ -474,7 +476,6 @@ describe('redactAttributes', () => { grossPerformancePercent: 0.27579517683678895, grossPerformancePercentWithCurrencyEffect: 0.458553421589667, grossPerformanceWithCurrencyEffect: 5322.44900391902, - holdings: [], investment: 0.13551383737034509, name: 'frankly Extreme 95 Index', netPerformance: 3533.389614611676, @@ -510,6 +511,7 @@ describe('redactAttributes', () => { tags: [], allocationInPercentage: 0.05222646409742627, assetClass: 'EQUITY', + assetProfile: { holdings: [] }, assetSubClass: 'STOCK', countries: [ { @@ -526,7 +528,6 @@ describe('redactAttributes', () => { grossPerformancePercent: 0.7865431171216295, grossPerformancePercentWithCurrencyEffect: 0.7865431171216295, grossPerformanceWithCurrencyEffect: 5653.2, - holdings: [], investment: 0.051726079050684395, name: 'Microsoft Corporation', netPerformance: 5653.2, @@ -562,6 +563,7 @@ describe('redactAttributes', () => { tags: [], allocationInPercentage: 0.1589050142378352, assetClass: 'EQUITY', + assetProfile: { holdings: [] }, assetSubClass: 'STOCK', countries: [ { @@ -578,7 +580,6 @@ describe('redactAttributes', () => { grossPerformancePercent: 17.184314638161936, grossPerformancePercentWithCurrencyEffect: 17.184314638161936, grossPerformanceWithCurrencyEffect: 36920.500000005, - holdings: [], investment: 0.01546226463535309, name: 'Tesla, Inc.', netPerformance: 36890.500000005, @@ -614,6 +615,85 @@ describe('redactAttributes', () => { tags: [], allocationInPercentage: 0.057358979326040366, assetClass: 'EQUITY', + assetProfile: { + holdings: [ + { + allocationInPercentage: 0.06099941636982121, + name: 'APPLE INC', + valueInBaseCurrency: 860.2442693554036 + }, + { + allocationInPercentage: 0.05862464529372787, + name: 'MICROSOFT CORP', + valueInBaseCurrency: 826.7540602547973 + }, + { + allocationInPercentage: 0.05156070760128074, + name: 'NVIDIA CORP', + valueInBaseCurrency: 727.1348789470617 + }, + { + allocationInPercentage: 0.03301535551128066, + name: 'AMAZON COM INC', + valueInBaseCurrency: 465.5990510978355 + }, + { + allocationInPercentage: 0.01962204914568647, + name: 'FACEBOOK CLASS A INC', + valueInBaseCurrency: 276.71994807704345 + }, + { + allocationInPercentage: 0.01902835637666313, + name: 'ALPHABET INC CLASS A', + valueInBaseCurrency: 268.34739580189176 + }, + { + allocationInPercentage: 0.01555676306627245, + name: 'ALPHABET INC CLASS C', + valueInBaseCurrency: 219.3892511421072 + }, + { + allocationInPercentage: 0.01463100485016827, + name: 'BERKSHIRE HATHAWAY INC CLASS B', + valueInBaseCurrency: 206.33374589949804 + }, + { + allocationInPercentage: 0.01403731208114493, + name: 'BROADCOM INC', + valueInBaseCurrency: 197.96119362434638 + }, + { + allocationInPercentage: 0.01297067761476403, + name: 'ELI LILLY', + valueInBaseCurrency: 182.91898106220972 + }, + { + allocationInPercentage: 0.0118637927911612, + name: 'TESLA INC', + valueInBaseCurrency: 167.30913783735082 + }, + { + allocationInPercentage: 0.01152166475477487, + name: 'JPMORGAN CHASE & CO', + valueInBaseCurrency: 162.48427720421262 + }, + { + allocationInPercentage: 0.0100324015375638, + name: 'EXXON MOBIL CORP', + valueInBaseCurrency: 141.4819426834935 + }, + { + allocationInPercentage: 0.01000221376964736, + name: 'UNITEDHEALTH GROUP INC', + valueInBaseCurrency: 141.0562196864519 + }, + { + allocationInPercentage: 0.007818631890358146, + name: 'VISA INC CLASS A', + valueInBaseCurrency: 110.26225623377576 + } + ] + }, assetSubClass: 'ETF', countries: [ { @@ -660,83 +740,6 @@ describe('redactAttributes', () => { grossPerformancePercent: 0.8832083851170418, grossPerformancePercentWithCurrencyEffect: 0.8832083851170418, grossPerformanceWithCurrencyEffect: 5856.3, - holdings: [ - { - allocationInPercentage: 0.06099941636982121, - name: 'APPLE INC', - valueInBaseCurrency: 860.2442693554036 - }, - { - allocationInPercentage: 0.05862464529372787, - name: 'MICROSOFT CORP', - valueInBaseCurrency: 826.7540602547973 - }, - { - allocationInPercentage: 0.05156070760128074, - name: 'NVIDIA CORP', - valueInBaseCurrency: 727.1348789470617 - }, - { - allocationInPercentage: 0.03301535551128066, - name: 'AMAZON COM INC', - valueInBaseCurrency: 465.5990510978355 - }, - { - allocationInPercentage: 0.01962204914568647, - name: 'FACEBOOK CLASS A INC', - valueInBaseCurrency: 276.71994807704345 - }, - { - allocationInPercentage: 0.01902835637666313, - name: 'ALPHABET INC CLASS A', - valueInBaseCurrency: 268.34739580189176 - }, - { - allocationInPercentage: 0.01555676306627245, - name: 'ALPHABET INC CLASS C', - valueInBaseCurrency: 219.3892511421072 - }, - { - allocationInPercentage: 0.01463100485016827, - name: 'BERKSHIRE HATHAWAY INC CLASS B', - valueInBaseCurrency: 206.33374589949804 - }, - { - allocationInPercentage: 0.01403731208114493, - name: 'BROADCOM INC', - valueInBaseCurrency: 197.96119362434638 - }, - { - allocationInPercentage: 0.01297067761476403, - name: 'ELI LILLY', - valueInBaseCurrency: 182.91898106220972 - }, - { - allocationInPercentage: 0.0118637927911612, - name: 'TESLA INC', - valueInBaseCurrency: 167.30913783735082 - }, - { - allocationInPercentage: 0.01152166475477487, - name: 'JPMORGAN CHASE & CO', - valueInBaseCurrency: 162.48427720421262 - }, - { - allocationInPercentage: 0.0100324015375638, - name: 'EXXON MOBIL CORP', - valueInBaseCurrency: 141.4819426834935 - }, - { - allocationInPercentage: 0.01000221376964736, - name: 'UNITEDHEALTH GROUP INC', - valueInBaseCurrency: 141.0562196864519 - }, - { - allocationInPercentage: 0.007818631890358146, - name: 'VISA INC CLASS A', - valueInBaseCurrency: 110.26225623377576 - } - ], investment: 0.05934602124102648, name: 'Vanguard Total Stock Market Index Fund ETF Shares', netPerformance: 5756.8, @@ -786,6 +789,85 @@ describe('redactAttributes', () => { tags: [], allocationInPercentage: 0.09386983901959013, assetClass: 'EQUITY', + assetProfile: { + holdings: [ + { + allocationInPercentage: 0.042520261085, + name: 'APPLE INC', + valueInBaseCurrency: 981.3336460398625 + }, + { + allocationInPercentage: 0.037017038038, + name: 'MICROSOFT CORP', + valueInBaseCurrency: 854.3236559815404 + }, + { + allocationInPercentage: 0.018861883836, + name: 'AMAZON COM INC', + valueInBaseCurrency: 435.31720557783655 + }, + { + allocationInPercentage: 0.017806548325, + name: 'NVIDIA CORP', + valueInBaseCurrency: 410.9609053487602 + }, + { + allocationInPercentage: 0.012188534864, + name: 'ALPHABET INC CLASS A', + valueInBaseCurrency: 281.3016442693628 + }, + { + allocationInPercentage: 0.010831709166, + name: 'ALPHABET INC CLASS C', + valueInBaseCurrency: 249.98719145833246 + }, + { + allocationInPercentage: 0.010813551981, + name: 'TESLA INC', + valueInBaseCurrency: 249.56813813873381 + }, + { + allocationInPercentage: 0.009934819182, + name: 'FACEBOOK CLASS A INC', + valueInBaseCurrency: 229.28768737165962 + }, + { + allocationInPercentage: 0.007403227621000001, + name: 'BERKSHIRE HATHAWAY INC CLASS B', + valueInBaseCurrency: 170.8605772494153 + }, + { + allocationInPercentage: 0.007076883908, + name: 'ELI LILLY', + valueInBaseCurrency: 163.32882514892185 + }, + { + allocationInPercentage: 0.006844271583, + name: 'EXXON MOBIL CORP', + valueInBaseCurrency: 157.96031857861325 + }, + { + allocationInPercentage: 0.006718061670999999, + name: 'UNITEDHEALTH GROUP INC', + valueInBaseCurrency: 155.0474946695187 + }, + { + allocationInPercentage: 0.006456949621, + name: 'JPMORGAN CHASE & CO', + valueInBaseCurrency: 149.02123722158794 + }, + { + allocationInPercentage: 0.006293890054, + name: 'TAIWAN SEMICONDUCTOR MANUFACTURING', + valueInBaseCurrency: 145.25795272326576 + }, + { + allocationInPercentage: 0.00600392555, + name: 'VISA INC CLASS A', + valueInBaseCurrency: 138.56580369427397 + } + ] + }, assetSubClass: 'ETF', countries: [ { @@ -1060,83 +1142,6 @@ describe('redactAttributes', () => { grossPerformancePercent: 0.3683200415015591, grossPerformancePercentWithCurrencyEffect: 0.5806366182968891, grossPerformanceWithCurrencyEffect: 6402.248165662604, - holdings: [ - { - allocationInPercentage: 0.042520261085, - name: 'APPLE INC', - valueInBaseCurrency: 981.3336460398625 - }, - { - allocationInPercentage: 0.037017038038, - name: 'MICROSOFT CORP', - valueInBaseCurrency: 854.3236559815404 - }, - { - allocationInPercentage: 0.018861883836, - name: 'AMAZON COM INC', - valueInBaseCurrency: 435.31720557783655 - }, - { - allocationInPercentage: 0.017806548325, - name: 'NVIDIA CORP', - valueInBaseCurrency: 410.9609053487602 - }, - { - allocationInPercentage: 0.012188534864, - name: 'ALPHABET INC CLASS A', - valueInBaseCurrency: 281.3016442693628 - }, - { - allocationInPercentage: 0.010831709166, - name: 'ALPHABET INC CLASS C', - valueInBaseCurrency: 249.98719145833246 - }, - { - allocationInPercentage: 0.010813551981, - name: 'TESLA INC', - valueInBaseCurrency: 249.56813813873381 - }, - { - allocationInPercentage: 0.009934819182, - name: 'FACEBOOK CLASS A INC', - valueInBaseCurrency: 229.28768737165962 - }, - { - allocationInPercentage: 0.007403227621000001, - name: 'BERKSHIRE HATHAWAY INC CLASS B', - valueInBaseCurrency: 170.8605772494153 - }, - { - allocationInPercentage: 0.007076883908, - name: 'ELI LILLY', - valueInBaseCurrency: 163.32882514892185 - }, - { - allocationInPercentage: 0.006844271583, - name: 'EXXON MOBIL CORP', - valueInBaseCurrency: 157.96031857861325 - }, - { - allocationInPercentage: 0.006718061670999999, - name: 'UNITEDHEALTH GROUP INC', - valueInBaseCurrency: 155.0474946695187 - }, - { - allocationInPercentage: 0.006456949621, - name: 'JPMORGAN CHASE & CO', - valueInBaseCurrency: 149.02123722158794 - }, - { - allocationInPercentage: 0.006293890054, - name: 'TAIWAN SEMICONDUCTOR MANUFACTURING', - valueInBaseCurrency: 145.25795272326576 - }, - { - allocationInPercentage: 0.00600392555, - name: 'VISA INC CLASS A', - valueInBaseCurrency: 138.56580369427397 - } - ], investment: 0.13346122254229614, name: 'Vanguard FTSE All-World UCITS ETF', netPerformance: 4438.993935069568, @@ -1194,6 +1199,80 @@ describe('redactAttributes', () => { tags: [], allocationInPercentage: 0.03598477442100562, assetClass: 'EQUITY', + assetProfile: { + holdings: [ + { + allocationInPercentage: 0.051778373, + name: 'APPLE INC', + valueInBaseCurrency: 458.1016731945994 + }, + { + allocationInPercentage: 0.0403267055, + name: 'MICROSOFT CORP', + valueInBaseCurrency: 356.78469974280296 + }, + { + allocationInPercentage: 0.0221895862, + name: 'AMAZON COM INC', + valueInBaseCurrency: 196.3191575315778 + }, + { + allocationInPercentage: 0.0208100035, + name: 'NVIDIA CORP', + valueInBaseCurrency: 184.1134989416425 + }, + { + allocationInPercentage: 0.0139820061, + name: 'ALPHABET INC CLASS A', + valueInBaseCurrency: 123.70377858390985 + }, + { + allocationInPercentage: 0.0126263246, + name: 'ALPHABET INC CLASS C', + valueInBaseCurrency: 111.70958240727516 + }, + { + allocationInPercentage: 0.0121596126, + name: 'TESLA INC', + valueInBaseCurrency: 107.58041542669048 + }, + { + allocationInPercentage: 0.0114079282, + name: 'FACEBOOK CLASS A INC', + valueInBaseCurrency: 100.92999631533141 + }, + { + allocationInPercentage: 0.0081570352, + name: 'BERKSHIRE HATHAWAY INC CLASS B', + valueInBaseCurrency: 72.16819024860523 + }, + { + allocationInPercentage: 0.0079471416, + name: 'EXXON MOBIL CORP', + valueInBaseCurrency: 70.31118695201964 + }, + { + allocationInPercentage: 0.0078190388, + name: 'ELI LILLY', + valueInBaseCurrency: 69.1778159397456 + }, + { + allocationInPercentage: 0.0077121293, + name: 'UNITEDHEALTH GROUP INC', + valueInBaseCurrency: 68.23194958681098 + }, + { + allocationInPercentage: 0.0074484861, + name: 'JPMORGAN CHASE & CO', + valueInBaseCurrency: 65.89940447098863 + }, + { + allocationInPercentage: 0.006978079, + name: 'VISA INC CLASS A', + valueInBaseCurrency: 61.73754562709217 + } + ] + }, assetSubClass: 'ETF', countries: [ { @@ -1342,78 +1421,6 @@ describe('redactAttributes', () => { grossPerformancePercent: 0.3474381850624522, grossPerformancePercentWithCurrencyEffect: 0.28744846894552306, grossPerformanceWithCurrencyEffect: 1975.348026988124, - holdings: [ - { - allocationInPercentage: 0.051778373, - name: 'APPLE INC', - valueInBaseCurrency: 458.1016731945994 - }, - { - allocationInPercentage: 0.0403267055, - name: 'MICROSOFT CORP', - valueInBaseCurrency: 356.78469974280296 - }, - { - allocationInPercentage: 0.0221895862, - name: 'AMAZON COM INC', - valueInBaseCurrency: 196.3191575315778 - }, - { - allocationInPercentage: 0.0208100035, - name: 'NVIDIA CORP', - valueInBaseCurrency: 184.1134989416425 - }, - { - allocationInPercentage: 0.0139820061, - name: 'ALPHABET INC CLASS A', - valueInBaseCurrency: 123.70377858390985 - }, - { - allocationInPercentage: 0.0126263246, - name: 'ALPHABET INC CLASS C', - valueInBaseCurrency: 111.70958240727516 - }, - { - allocationInPercentage: 0.0121596126, - name: 'TESLA INC', - valueInBaseCurrency: 107.58041542669048 - }, - { - allocationInPercentage: 0.0114079282, - name: 'FACEBOOK CLASS A INC', - valueInBaseCurrency: 100.92999631533141 - }, - { - allocationInPercentage: 0.0081570352, - name: 'BERKSHIRE HATHAWAY INC CLASS B', - valueInBaseCurrency: 72.16819024860523 - }, - { - allocationInPercentage: 0.0079471416, - name: 'EXXON MOBIL CORP', - valueInBaseCurrency: 70.31118695201964 - }, - { - allocationInPercentage: 0.0078190388, - name: 'ELI LILLY', - valueInBaseCurrency: 69.1778159397456 - }, - { - allocationInPercentage: 0.0077121293, - name: 'UNITEDHEALTH GROUP INC', - valueInBaseCurrency: 68.23194958681098 - }, - { - allocationInPercentage: 0.0074484861, - name: 'JPMORGAN CHASE & CO', - valueInBaseCurrency: 65.89940447098863 - }, - { - allocationInPercentage: 0.006978079, - name: 'VISA INC CLASS A', - valueInBaseCurrency: 61.73754562709217 - } - ], investment: 0.04725441287200783, name: 'Xtrackers MSCI World UCITS ETF 1C', netPerformance: 2247.935728632002, @@ -1454,6 +1461,7 @@ describe('redactAttributes', () => { currency: 'USD', allocationInPercentage: 0.20291717628620132, assetClass: 'LIQUIDITY', + assetProfile: { holdings: [] }, assetSubClass: 'CASH', countries: [], dividend: 0, @@ -1461,7 +1469,6 @@ describe('redactAttributes', () => { grossPerformancePercent: 0, grossPerformancePercentWithCurrencyEffect: 0, grossPerformanceWithCurrencyEffect: 0, - holdings: [], investment: 0.35904695492648864, marketPrice: 0, name: 'USD', @@ -1637,6 +1644,7 @@ describe('redactAttributes', () => { tags: [], allocationInPercentage: 0.044900865255793135, assetClass: 'EQUITY', + assetProfile: { holdings: [] }, assetSubClass: 'STOCK', countries: [ { @@ -1653,7 +1661,6 @@ describe('redactAttributes', () => { grossPerformancePercent: 0.3183066634822068, grossPerformancePercentWithCurrencyEffect: 0.3183066634822068, grossPerformanceWithCurrencyEffect: null, - holdings: [], investment: null, name: 'Apple Inc', netPerformance: null, @@ -1689,6 +1696,7 @@ describe('redactAttributes', () => { tags: [], allocationInPercentage: 0.026912563036519527, assetClass: 'EQUITY', + assetProfile: { holdings: [] }, assetSubClass: 'STOCK', countries: [ { code: 'DE', weight: 1, continent: 'Europe', name: 'Germany' } @@ -1700,7 +1708,6 @@ describe('redactAttributes', () => { grossPerformancePercent: 0.3719230057375532, grossPerformancePercentWithCurrencyEffect: 0.2650716044872953, grossPerformanceWithCurrencyEffect: null, - holdings: [], investment: null, name: 'Allianz SE', netPerformance: null, @@ -1736,6 +1743,7 @@ describe('redactAttributes', () => { tags: [], allocationInPercentage: 0.07646101417126275, assetClass: 'EQUITY', + assetProfile: { holdings: [] }, assetSubClass: 'STOCK', countries: [ { @@ -1752,7 +1760,6 @@ describe('redactAttributes', () => { grossPerformancePercent: 0.8594552890963852, grossPerformancePercentWithCurrencyEffect: 0.8594552890963852, grossPerformanceWithCurrencyEffect: null, - holdings: [], investment: null, name: 'Amazon.com, Inc.', netPerformance: null, @@ -1794,6 +1801,7 @@ describe('redactAttributes', () => { ], allocationInPercentage: 0.15042891393226654, assetClass: 'LIQUIDITY', + assetProfile: { holdings: [] }, assetSubClass: 'CRYPTOCURRENCY', countries: [], dataSource: 'COINGECKO', @@ -1803,7 +1811,6 @@ describe('redactAttributes', () => { grossPerformancePercent: 17.4925166352, grossPerformancePercentWithCurrencyEffect: 17.4925166352, grossPerformanceWithCurrencyEffect: null, - holdings: [], investment: null, name: 'Bitcoin', netPerformance: null, @@ -1845,6 +1852,7 @@ describe('redactAttributes', () => { ], allocationInPercentage: 0.009076749759365777, assetClass: 'FIXED_INCOME', + assetProfile: { holdings: [] }, assetSubClass: 'BOND', countries: [], dataSource: 'MANUAL', @@ -1854,7 +1862,6 @@ describe('redactAttributes', () => { grossPerformancePercent: 0, grossPerformancePercentWithCurrencyEffect: -0.06153834320225245, grossPerformanceWithCurrencyEffect: null, - holdings: [], investment: null, name: 'Bondora Go & Grow', netPerformance: null, @@ -1896,6 +1903,7 @@ describe('redactAttributes', () => { ], allocationInPercentage: 0.09095764645669335, assetClass: 'EQUITY', + assetProfile: { holdings: [] }, assetSubClass: 'ETF', countries: [ { @@ -1958,7 +1966,6 @@ describe('redactAttributes', () => { grossPerformancePercent: 0.27579517683678895, grossPerformancePercentWithCurrencyEffect: 0.458553421589667, grossPerformanceWithCurrencyEffect: null, - holdings: [], investment: null, name: 'frankly Extreme 95 Index', netPerformance: null, @@ -1994,6 +2001,7 @@ describe('redactAttributes', () => { tags: [], allocationInPercentage: 0.05222646409742627, assetClass: 'EQUITY', + assetProfile: { holdings: [] }, assetSubClass: 'STOCK', countries: [ { @@ -2010,7 +2018,6 @@ describe('redactAttributes', () => { grossPerformancePercent: 0.7865431171216295, grossPerformancePercentWithCurrencyEffect: 0.7865431171216295, grossPerformanceWithCurrencyEffect: null, - holdings: [], investment: null, name: 'Microsoft Corporation', netPerformance: null, @@ -2046,6 +2053,7 @@ describe('redactAttributes', () => { tags: [], allocationInPercentage: 0.1589050142378352, assetClass: 'EQUITY', + assetProfile: { holdings: [] }, assetSubClass: 'STOCK', countries: [ { @@ -2062,7 +2070,6 @@ describe('redactAttributes', () => { grossPerformancePercent: 17.184314638161936, grossPerformancePercentWithCurrencyEffect: 17.184314638161936, grossPerformanceWithCurrencyEffect: null, - holdings: [], investment: null, name: 'Tesla, Inc.', netPerformance: null, @@ -2098,6 +2105,85 @@ describe('redactAttributes', () => { tags: [], allocationInPercentage: 0.057358979326040366, assetClass: 'EQUITY', + assetProfile: { + holdings: [ + { + allocationInPercentage: 0.06099941636982121, + name: 'APPLE INC', + valueInBaseCurrency: null + }, + { + allocationInPercentage: 0.05862464529372787, + name: 'MICROSOFT CORP', + valueInBaseCurrency: null + }, + { + allocationInPercentage: 0.05156070760128074, + name: 'NVIDIA CORP', + valueInBaseCurrency: null + }, + { + allocationInPercentage: 0.03301535551128066, + name: 'AMAZON COM INC', + valueInBaseCurrency: null + }, + { + allocationInPercentage: 0.01962204914568647, + name: 'FACEBOOK CLASS A INC', + valueInBaseCurrency: null + }, + { + allocationInPercentage: 0.01902835637666313, + name: 'ALPHABET INC CLASS A', + valueInBaseCurrency: null + }, + { + allocationInPercentage: 0.01555676306627245, + name: 'ALPHABET INC CLASS C', + valueInBaseCurrency: null + }, + { + allocationInPercentage: 0.01463100485016827, + name: 'BERKSHIRE HATHAWAY INC CLASS B', + valueInBaseCurrency: null + }, + { + allocationInPercentage: 0.01403731208114493, + name: 'BROADCOM INC', + valueInBaseCurrency: null + }, + { + allocationInPercentage: 0.01297067761476403, + name: 'ELI LILLY', + valueInBaseCurrency: null + }, + { + allocationInPercentage: 0.0118637927911612, + name: 'TESLA INC', + valueInBaseCurrency: null + }, + { + allocationInPercentage: 0.01152166475477487, + name: 'JPMORGAN CHASE & CO', + valueInBaseCurrency: null + }, + { + allocationInPercentage: 0.0100324015375638, + name: 'EXXON MOBIL CORP', + valueInBaseCurrency: null + }, + { + allocationInPercentage: 0.01000221376964736, + name: 'UNITEDHEALTH GROUP INC', + valueInBaseCurrency: null + }, + { + allocationInPercentage: 0.007818631890358146, + name: 'VISA INC CLASS A', + valueInBaseCurrency: null + } + ] + }, assetSubClass: 'ETF', countries: [ { @@ -2144,83 +2230,6 @@ describe('redactAttributes', () => { grossPerformancePercent: 0.8832083851170418, grossPerformancePercentWithCurrencyEffect: 0.8832083851170418, grossPerformanceWithCurrencyEffect: null, - holdings: [ - { - allocationInPercentage: 0.06099941636982121, - name: 'APPLE INC', - valueInBaseCurrency: null - }, - { - allocationInPercentage: 0.05862464529372787, - name: 'MICROSOFT CORP', - valueInBaseCurrency: null - }, - { - allocationInPercentage: 0.05156070760128074, - name: 'NVIDIA CORP', - valueInBaseCurrency: null - }, - { - allocationInPercentage: 0.03301535551128066, - name: 'AMAZON COM INC', - valueInBaseCurrency: null - }, - { - allocationInPercentage: 0.01962204914568647, - name: 'FACEBOOK CLASS A INC', - valueInBaseCurrency: null - }, - { - allocationInPercentage: 0.01902835637666313, - name: 'ALPHABET INC CLASS A', - valueInBaseCurrency: null - }, - { - allocationInPercentage: 0.01555676306627245, - name: 'ALPHABET INC CLASS C', - valueInBaseCurrency: null - }, - { - allocationInPercentage: 0.01463100485016827, - name: 'BERKSHIRE HATHAWAY INC CLASS B', - valueInBaseCurrency: null - }, - { - allocationInPercentage: 0.01403731208114493, - name: 'BROADCOM INC', - valueInBaseCurrency: null - }, - { - allocationInPercentage: 0.01297067761476403, - name: 'ELI LILLY', - valueInBaseCurrency: null - }, - { - allocationInPercentage: 0.0118637927911612, - name: 'TESLA INC', - valueInBaseCurrency: null - }, - { - allocationInPercentage: 0.01152166475477487, - name: 'JPMORGAN CHASE & CO', - valueInBaseCurrency: null - }, - { - allocationInPercentage: 0.0100324015375638, - name: 'EXXON MOBIL CORP', - valueInBaseCurrency: null - }, - { - allocationInPercentage: 0.01000221376964736, - name: 'UNITEDHEALTH GROUP INC', - valueInBaseCurrency: null - }, - { - allocationInPercentage: 0.007818631890358146, - name: 'VISA INC CLASS A', - valueInBaseCurrency: null - } - ], investment: null, name: 'Vanguard Total Stock Market Index Fund ETF Shares', netPerformance: null, @@ -2270,6 +2279,85 @@ describe('redactAttributes', () => { tags: [], allocationInPercentage: 0.09386983901959013, assetClass: 'EQUITY', + assetProfile: { + holdings: [ + { + allocationInPercentage: 0.042520261085, + name: 'APPLE INC', + valueInBaseCurrency: null + }, + { + allocationInPercentage: 0.037017038038, + name: 'MICROSOFT CORP', + valueInBaseCurrency: null + }, + { + allocationInPercentage: 0.018861883836, + name: 'AMAZON COM INC', + valueInBaseCurrency: null + }, + { + allocationInPercentage: 0.017806548325, + name: 'NVIDIA CORP', + valueInBaseCurrency: null + }, + { + allocationInPercentage: 0.012188534864, + name: 'ALPHABET INC CLASS A', + valueInBaseCurrency: null + }, + { + allocationInPercentage: 0.010831709166, + name: 'ALPHABET INC CLASS C', + valueInBaseCurrency: null + }, + { + allocationInPercentage: 0.010813551981, + name: 'TESLA INC', + valueInBaseCurrency: null + }, + { + allocationInPercentage: 0.009934819182, + name: 'FACEBOOK CLASS A INC', + valueInBaseCurrency: null + }, + { + allocationInPercentage: 0.007403227621000001, + name: 'BERKSHIRE HATHAWAY INC CLASS B', + valueInBaseCurrency: null + }, + { + allocationInPercentage: 0.007076883908, + name: 'ELI LILLY', + valueInBaseCurrency: null + }, + { + allocationInPercentage: 0.006844271583, + name: 'EXXON MOBIL CORP', + valueInBaseCurrency: null + }, + { + allocationInPercentage: 0.006718061670999999, + name: 'UNITEDHEALTH GROUP INC', + valueInBaseCurrency: null + }, + { + allocationInPercentage: 0.006456949621, + name: 'JPMORGAN CHASE & CO', + valueInBaseCurrency: null + }, + { + allocationInPercentage: 0.006293890054, + name: 'TAIWAN SEMICONDUCTOR MANUFACTURING', + valueInBaseCurrency: null + }, + { + allocationInPercentage: 0.00600392555, + name: 'VISA INC CLASS A', + valueInBaseCurrency: null + } + ] + }, assetSubClass: 'ETF', countries: [ { @@ -2539,83 +2627,6 @@ describe('redactAttributes', () => { grossPerformancePercent: 0.3683200415015591, grossPerformancePercentWithCurrencyEffect: 0.5806366182968891, grossPerformanceWithCurrencyEffect: null, - holdings: [ - { - allocationInPercentage: 0.042520261085, - name: 'APPLE INC', - valueInBaseCurrency: null - }, - { - allocationInPercentage: 0.037017038038, - name: 'MICROSOFT CORP', - valueInBaseCurrency: null - }, - { - allocationInPercentage: 0.018861883836, - name: 'AMAZON COM INC', - valueInBaseCurrency: null - }, - { - allocationInPercentage: 0.017806548325, - name: 'NVIDIA CORP', - valueInBaseCurrency: null - }, - { - allocationInPercentage: 0.012188534864, - name: 'ALPHABET INC CLASS A', - valueInBaseCurrency: null - }, - { - allocationInPercentage: 0.010831709166, - name: 'ALPHABET INC CLASS C', - valueInBaseCurrency: null - }, - { - allocationInPercentage: 0.010813551981, - name: 'TESLA INC', - valueInBaseCurrency: null - }, - { - allocationInPercentage: 0.009934819182, - name: 'FACEBOOK CLASS A INC', - valueInBaseCurrency: null - }, - { - allocationInPercentage: 0.007403227621000001, - name: 'BERKSHIRE HATHAWAY INC CLASS B', - valueInBaseCurrency: null - }, - { - allocationInPercentage: 0.007076883908, - name: 'ELI LILLY', - valueInBaseCurrency: null - }, - { - allocationInPercentage: 0.006844271583, - name: 'EXXON MOBIL CORP', - valueInBaseCurrency: null - }, - { - allocationInPercentage: 0.006718061670999999, - name: 'UNITEDHEALTH GROUP INC', - valueInBaseCurrency: null - }, - { - allocationInPercentage: 0.006456949621, - name: 'JPMORGAN CHASE & CO', - valueInBaseCurrency: null - }, - { - allocationInPercentage: 0.006293890054, - name: 'TAIWAN SEMICONDUCTOR MANUFACTURING', - valueInBaseCurrency: null - }, - { - allocationInPercentage: 0.00600392555, - name: 'VISA INC CLASS A', - valueInBaseCurrency: null - } - ], investment: null, name: 'Vanguard FTSE All-World UCITS ETF', netPerformance: null, @@ -2670,6 +2681,80 @@ describe('redactAttributes', () => { tags: [], allocationInPercentage: 0.03598477442100562, assetClass: 'EQUITY', + assetProfile: { + holdings: [ + { + allocationInPercentage: 0.051778373, + name: 'APPLE INC', + valueInBaseCurrency: null + }, + { + allocationInPercentage: 0.0403267055, + name: 'MICROSOFT CORP', + valueInBaseCurrency: null + }, + { + allocationInPercentage: 0.0221895862, + name: 'AMAZON COM INC', + valueInBaseCurrency: null + }, + { + allocationInPercentage: 0.0208100035, + name: 'NVIDIA CORP', + valueInBaseCurrency: null + }, + { + allocationInPercentage: 0.0139820061, + name: 'ALPHABET INC CLASS A', + valueInBaseCurrency: null + }, + { + allocationInPercentage: 0.0126263246, + name: 'ALPHABET INC CLASS C', + valueInBaseCurrency: null + }, + { + allocationInPercentage: 0.0121596126, + name: 'TESLA INC', + valueInBaseCurrency: null + }, + { + allocationInPercentage: 0.0114079282, + name: 'FACEBOOK CLASS A INC', + valueInBaseCurrency: null + }, + { + allocationInPercentage: 0.0081570352, + name: 'BERKSHIRE HATHAWAY INC CLASS B', + valueInBaseCurrency: null + }, + { + allocationInPercentage: 0.0079471416, + name: 'EXXON MOBIL CORP', + valueInBaseCurrency: null + }, + { + allocationInPercentage: 0.0078190388, + name: 'ELI LILLY', + valueInBaseCurrency: null + }, + { + allocationInPercentage: 0.0077121293, + name: 'UNITEDHEALTH GROUP INC', + valueInBaseCurrency: null + }, + { + allocationInPercentage: 0.0074484861, + name: 'JPMORGAN CHASE & CO', + valueInBaseCurrency: null + }, + { + allocationInPercentage: 0.006978079, + name: 'VISA INC CLASS A', + valueInBaseCurrency: null + } + ] + }, assetSubClass: 'ETF', countries: [ { @@ -2818,78 +2903,6 @@ describe('redactAttributes', () => { grossPerformancePercent: 0.3474381850624522, grossPerformancePercentWithCurrencyEffect: 0.28744846894552306, grossPerformanceWithCurrencyEffect: null, - holdings: [ - { - allocationInPercentage: 0.051778373, - name: 'APPLE INC', - valueInBaseCurrency: null - }, - { - allocationInPercentage: 0.0403267055, - name: 'MICROSOFT CORP', - valueInBaseCurrency: null - }, - { - allocationInPercentage: 0.0221895862, - name: 'AMAZON COM INC', - valueInBaseCurrency: null - }, - { - allocationInPercentage: 0.0208100035, - name: 'NVIDIA CORP', - valueInBaseCurrency: null - }, - { - allocationInPercentage: 0.0139820061, - name: 'ALPHABET INC CLASS A', - valueInBaseCurrency: null - }, - { - allocationInPercentage: 0.0126263246, - name: 'ALPHABET INC CLASS C', - valueInBaseCurrency: null - }, - { - allocationInPercentage: 0.0121596126, - name: 'TESLA INC', - valueInBaseCurrency: null - }, - { - allocationInPercentage: 0.0114079282, - name: 'FACEBOOK CLASS A INC', - valueInBaseCurrency: null - }, - { - allocationInPercentage: 0.0081570352, - name: 'BERKSHIRE HATHAWAY INC CLASS B', - valueInBaseCurrency: null - }, - { - allocationInPercentage: 0.0079471416, - name: 'EXXON MOBIL CORP', - valueInBaseCurrency: null - }, - { - allocationInPercentage: 0.0078190388, - name: 'ELI LILLY', - valueInBaseCurrency: null - }, - { - allocationInPercentage: 0.0077121293, - name: 'UNITEDHEALTH GROUP INC', - valueInBaseCurrency: null - }, - { - allocationInPercentage: 0.0074484861, - name: 'JPMORGAN CHASE & CO', - valueInBaseCurrency: null - }, - { - allocationInPercentage: 0.006978079, - name: 'VISA INC CLASS A', - valueInBaseCurrency: null - } - ], investment: null, name: 'Xtrackers MSCI World UCITS ETF 1C', netPerformance: null, @@ -2930,6 +2943,7 @@ describe('redactAttributes', () => { currency: 'USD', allocationInPercentage: 0.20291717628620132, assetClass: 'LIQUIDITY', + assetProfile: { holdings: [] }, assetSubClass: 'CASH', countries: [], dividend: null, @@ -2937,7 +2951,6 @@ describe('redactAttributes', () => { grossPerformancePercent: 0, grossPerformancePercentWithCurrencyEffect: 0, grossPerformanceWithCurrencyEffect: null, - holdings: [], investment: null, marketPrice: 0, name: 'USD', @@ -3237,4 +3250,101 @@ describe('redactAttributes', () => { ] }); }); + + // The type makes sure that the object keeps the shape of the response, in + // which the holdings of an ETF are part of its asset profile + it('should redact the values of the holdings of an ETF', () => { + expect( + redactPaths({ + object: { + holdings: [ + { + activitiesCount: 5, + allocationInPercentage: 0.057358979326040366, + assetProfile: { + assetClass: 'EQUITY', + assetSubClass: 'ETF', + countries: [], + currency: 'USD', + dataSource: 'YAHOO', + holdings: [ + { + allocationInPercentage: 0.06099941636982121, + name: 'APPLE INC', + valueInBaseCurrency: 860.2442693554036 + }, + { + allocationInPercentage: 0.05862464529372787, + name: 'MICROSOFT CORP', + valueInBaseCurrency: 826.7540602547973 + } + ], + name: 'Vanguard Total Stock Market Index Fund ETF Shares', + sectors: [], + symbol: 'VTI' + }, + dateOfFirstActivity: new Date('2019-02-28T23:00:00.000Z'), + dividend: 0, + grossPerformance: 5856.3, + grossPerformancePercent: 0.8832083851170418, + grossPerformancePercentWithCurrencyEffect: 0.8832083851170418, + grossPerformanceWithCurrencyEffect: 5856.3, + investment: 8246.2, + marketPrice: 282.05, + netPerformance: 5756.8, + netPerformancePercent: 0.8682024540139314, + netPerformancePercentWithCurrencyEffect: 0.8328704068843998, + netPerformanceWithCurrencyEffect: 5756.8, + quantity: 50, + valueInBaseCurrency: 14102.5 + } + ] + } satisfies Pick, + paths: DEFAULT_REDACTED_PATHS + }) + ).toStrictEqual({ + holdings: [ + { + activitiesCount: 5, + allocationInPercentage: 0.057358979326040366, + assetProfile: { + assetClass: 'EQUITY', + assetSubClass: 'ETF', + countries: [], + currency: 'USD', + dataSource: 'YAHOO', + holdings: [ + { + allocationInPercentage: 0.06099941636982121, + name: 'APPLE INC', + valueInBaseCurrency: null + }, + { + allocationInPercentage: 0.05862464529372787, + name: 'MICROSOFT CORP', + valueInBaseCurrency: null + } + ], + name: 'Vanguard Total Stock Market Index Fund ETF Shares', + sectors: [], + symbol: 'VTI' + }, + dateOfFirstActivity: '2019-02-28T23:00:00.000Z', + dividend: null, + grossPerformance: null, + grossPerformancePercent: 0.8832083851170418, + grossPerformancePercentWithCurrencyEffect: 0.8832083851170418, + grossPerformanceWithCurrencyEffect: null, + investment: null, + marketPrice: 282.05, + netPerformance: null, + netPerformancePercent: 0.8682024540139314, + netPerformancePercentWithCurrencyEffect: 0.8328704068843998, + netPerformanceWithCurrencyEffect: null, + quantity: null, + valueInBaseCurrency: null + } + ] + }); + }); }); diff --git a/libs/common/src/lib/config.ts b/libs/common/src/lib/config.ts index beedb741cb..03d36f577b 100644 --- a/libs/common/src/lib/config.ts +++ b/libs/common/src/lib/config.ts @@ -158,10 +158,10 @@ export const DEFAULT_REDACTED_PATHS = [ 'grossPerformance', 'grossPerformanceWithCurrencyEffect', 'historicalData[*].quantity', + 'holdings[*].assetProfile.holdings[*].valueInBaseCurrency', 'holdings[*].dividend', 'holdings[*].grossPerformance', 'holdings[*].grossPerformanceWithCurrencyEffect', - 'holdings[*].holdings[*].valueInBaseCurrency', 'holdings[*].investment', 'holdings[*].netPerformance', 'holdings[*].netPerformanceWithCurrencyEffect', From f46f77f352d50728361d62ed73613d69acf67e80 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Szymon=20=C5=81=C4=85giewka?= Date: Wed, 30 Sep 2026 10:15:01 +0200 Subject: [PATCH 13/27] Task/migrate from lodash to lodash-es (#7850) * Migrate from lodash to lodash-es * Update changelog --- CHANGELOG.md | 1 + .../account-balance.service.ts | 2 +- apps/api/src/app/account/account.service.ts | 2 +- .../app/activities/activities-filter.dto.ts | 2 +- .../src/app/activities/activities.service.ts | 2 +- apps/api/src/app/asset/asset.controller.ts | 2 +- .../asset-profiles/asset-profiles.service.ts | 2 +- .../benchmarks/benchmarks.service.ts | 2 +- .../ghostfolio/ghostfolio.service.ts | 2 +- apps/api/src/app/export/export.service.ts | 2 +- apps/api/src/app/export/get-export.dto.ts | 2 +- apps/api/src/app/import/import.service.ts | 2 +- apps/api/src/app/info/info.service.ts | 2 +- .../calculator/portfolio-calculator.ts | 2 +- .../calculator/roai/portfolio-calculator.ts | 2 +- .../src/app/portfolio/current-rate.service.ts | 2 +- .../src/app/portfolio/portfolio.service.ts | 2 +- apps/api/src/app/symbol/symbol.controller.ts | 2 +- apps/api/src/app/user/user.controller.ts | 2 +- apps/api/src/app/user/user.service.ts | 2 +- apps/api/src/dtos/filter.dto.ts | 2 +- apps/api/src/helper/activity.helper.ts | 2 +- apps/api/src/helper/object.helper.ts | 2 +- apps/api/src/models/rule.ts | 2 +- .../services/benchmark/benchmark.service.ts | 2 +- .../data-provider/data-provider.service.ts | 2 +- .../eod-historical-data.service.ts | 2 +- .../financial-modeling-prep.service.ts | 2 +- .../yahoo-finance/yahoo-finance.service.ts | 2 +- .../exchange-rate-data.service.ts | 2 +- .../data-gathering/data-gathering.service.ts | 2 +- .../twitter-bot/twitter-bot.service.ts | 2 +- apps/client/jest.config.ts | 2 +- .../account-detail-dialog.component.ts | 2 +- .../admin-jobs/admin-jobs.component.ts | 2 +- .../asset-profile-dialog.component.ts | 2 +- .../admin-settings.component.ts | 2 +- .../holding-detail-dialog.component.ts | 2 +- .../portfolio-performance.component.ts | 2 +- .../portfolio-summary.component.ts | 2 +- .../src/app/pages/api/api-page.component.ts | 2 +- .../import-activities-dialog.component.ts | 2 +- .../allocations/allocations-page.component.ts | 2 +- .../analysis/analysis-page.component.ts | 2 +- .../portfolio/fire/fire-page.component.ts | 2 +- .../app/services/import-activities.service.ts | 2 +- eslint.config.cjs | 19 ++++++++++++++++++- jest.preset.js | 5 ++++- libs/common/src/lib/calculation-helper.ts | 2 +- .../common/src/lib/dtos/create-account.dto.ts | 2 +- libs/common/src/lib/dtos/create-order.dto.ts | 2 +- .../common/src/lib/dtos/update-account.dto.ts | 2 +- libs/common/src/lib/dtos/update-order.dto.ts | 2 +- libs/common/src/lib/helper.ts | 2 +- libs/ui/jest.config.ts | 2 +- .../account-balances.component.ts | 2 +- .../activities-filter.component.ts | 2 +- .../src/lib/assistant/assistant.component.ts | 2 +- .../src/lib/benchmark/benchmark.component.ts | 2 +- .../fire-calculator.component.ts | 2 +- ...cal-market-data-editor-dialog.component.ts | 2 +- .../lib/notifications/notification.service.ts | 2 +- libs/ui/src/lib/services/admin.service.ts | 2 +- libs/ui/src/lib/services/data.service.ts | 2 +- .../symbol-autocomplete.component.ts | 2 +- .../top-holdings/top-holdings.component.ts | 2 +- .../treemap-chart/treemap-chart.component.ts | 2 +- libs/ui/src/lib/value/value.component.ts | 2 +- package-lock.json | 15 ++++++++++++--- package.json | 4 ++-- 70 files changed, 102 insertions(+), 72 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4bbf0a08dd..c9937fcb31 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 - Extended the emergency fund dialog in the portfolio summary to include the currency suffix - Migrated the client to the code generated by the new `prisma-client` generator of _Prisma_ +- Migrated from `lodash` to `lodash-es` ### Fixed diff --git a/apps/api/src/app/account-balance/account-balance.service.ts b/apps/api/src/app/account-balance/account-balance.service.ts index 3823498df3..ad990c66bd 100644 --- a/apps/api/src/app/account-balance/account-balance.service.ts +++ b/apps/api/src/app/account-balance/account-balance.service.ts @@ -24,7 +24,7 @@ import { EventEmitter2 } from '@nestjs/event-emitter'; import { AccountBalance, Prisma } from '@prisma/client'; import { Big } from 'big.js'; import { endOfToday, format, min, parseISO } from 'date-fns'; -import { groupBy } from 'lodash'; +import { groupBy } from 'lodash-es'; @Injectable() export class AccountBalanceService { diff --git a/apps/api/src/app/account/account.service.ts b/apps/api/src/app/account/account.service.ts index 59315602a8..d1a895a5a3 100644 --- a/apps/api/src/app/account/account.service.ts +++ b/apps/api/src/app/account/account.service.ts @@ -28,7 +28,7 @@ import { } from '@prisma/client'; import { Big } from 'big.js'; import { format } from 'date-fns'; -import { groupBy, isNil } from 'lodash'; +import { groupBy, isNil } from 'lodash-es'; import { CashDetails } from './interfaces/cash-details.interface'; diff --git a/apps/api/src/app/activities/activities-filter.dto.ts b/apps/api/src/app/activities/activities-filter.dto.ts index 0c56aacc85..17385148cc 100644 --- a/apps/api/src/app/activities/activities-filter.dto.ts +++ b/apps/api/src/app/activities/activities-filter.dto.ts @@ -5,7 +5,7 @@ import { DateRange } from '@ghostfolio/common/types'; import { Type as ActivityType } from '@prisma/client'; import { Transform, TransformFnParams } from 'class-transformer'; import { IsEnum, IsOptional, Matches } from 'class-validator'; -import { isString } from 'lodash'; +import { isString } from 'lodash-es'; export class ActivitiesFilterDto extends FilterDto { @IsEnum(ActivityType, { each: true }) diff --git a/apps/api/src/app/activities/activities.service.ts b/apps/api/src/app/activities/activities.service.ts index ecc2296a90..59d1ba9c33 100644 --- a/apps/api/src/app/activities/activities.service.ts +++ b/apps/api/src/app/activities/activities.service.ts @@ -60,7 +60,7 @@ import { Type as ActivityType } from '@prisma/client'; import { Big } from 'big.js'; -import { groupBy, uniqBy } from 'lodash'; +import { groupBy, uniqBy } from 'lodash-es'; import { randomUUID } from 'node:crypto'; @Injectable() diff --git a/apps/api/src/app/asset/asset.controller.ts b/apps/api/src/app/asset/asset.controller.ts index 49afb43d71..352d3e18b1 100644 --- a/apps/api/src/app/asset/asset.controller.ts +++ b/apps/api/src/app/asset/asset.controller.ts @@ -5,7 +5,7 @@ import type { AssetResponse } from '@ghostfolio/common/interfaces'; import { Controller, Get, Param, UseInterceptors } from '@nestjs/common'; import { DataSource } from '@prisma/client'; -import { pick } from 'lodash'; +import { pick } from 'lodash-es'; @Controller('asset') export class AssetController { 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 e9aad6911f..4a2507e697 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 @@ -29,7 +29,7 @@ import { MarketDataPreset } from '@ghostfolio/common/types'; import { Injectable, Logger, NotFoundException } from '@nestjs/common'; import { EventEmitter2 } from '@nestjs/event-emitter'; import { AssetClass, AssetSubClass, DataSource, Prisma } from '@prisma/client'; -import { groupBy } from 'lodash'; +import { groupBy } from 'lodash-es'; @Injectable() export class AssetProfilesService { diff --git a/apps/api/src/app/endpoints/benchmarks/benchmarks.service.ts b/apps/api/src/app/endpoints/benchmarks/benchmarks.service.ts index beff7ffa60..908db59b7f 100644 --- a/apps/api/src/app/endpoints/benchmarks/benchmarks.service.ts +++ b/apps/api/src/app/endpoints/benchmarks/benchmarks.service.ts @@ -14,7 +14,7 @@ import { DateRange } from '@ghostfolio/common/types'; import { Injectable, Logger } from '@nestjs/common'; import { format, isSameDay } from 'date-fns'; -import { isNumber } from 'lodash'; +import { isNumber } from 'lodash-es'; @Injectable() export class BenchmarksService { 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 ec0eeeb868..4042241449 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 @@ -40,7 +40,7 @@ import { Injectable, Logger } from '@nestjs/common'; import { DataSource, SymbolProfile } from '@prisma/client'; import { Big } from 'big.js'; import { addMilliseconds, isBefore } from 'date-fns'; -import { isEmpty } from 'lodash'; +import { isEmpty } from 'lodash-es'; @Injectable() export class GhostfolioService { diff --git a/apps/api/src/app/export/export.service.ts b/apps/api/src/app/export/export.service.ts index 35db209935..db08f62052 100644 --- a/apps/api/src/app/export/export.service.ts +++ b/apps/api/src/app/export/export.service.ts @@ -11,7 +11,7 @@ import { import { Injectable } from '@nestjs/common'; import { Platform, Prisma, Type as ActivityType } from '@prisma/client'; -import { groupBy, uniqBy } from 'lodash'; +import { groupBy, uniqBy } from 'lodash-es'; @Injectable() export class ExportService { diff --git a/apps/api/src/app/export/get-export.dto.ts b/apps/api/src/app/export/get-export.dto.ts index 5fc3c81baa..524c357112 100644 --- a/apps/api/src/app/export/get-export.dto.ts +++ b/apps/api/src/app/export/get-export.dto.ts @@ -2,7 +2,7 @@ import { ActivitiesFilterDto } from '@ghostfolio/api/app/activities/activities-f import { Transform, TransformFnParams } from 'class-transformer'; import { IsOptional, IsUUID } from 'class-validator'; -import { isString } from 'lodash'; +import { isString } from 'lodash-es'; export class GetExportDto extends ActivitiesFilterDto { @IsOptional() diff --git a/apps/api/src/app/import/import.service.ts b/apps/api/src/app/import/import.service.ts index 5f202f4ac4..5afa4c33dd 100644 --- a/apps/api/src/app/import/import.service.ts +++ b/apps/api/src/app/import/import.service.ts @@ -47,7 +47,7 @@ import { Account, DataSource, Prisma } from '@prisma/client'; import { Big } from 'big.js'; import { isISIN } from 'class-validator'; import { isSameSecond, parseISO } from 'date-fns'; -import { omit, uniqBy } from 'lodash'; +import { omit, uniqBy } from 'lodash-es'; import { randomUUID } from 'node:crypto'; import { ImportValidationError } from './errors/import-validation.error'; diff --git a/apps/api/src/app/info/info.service.ts b/apps/api/src/app/info/info.service.ts index a0759b1698..2a7382446c 100644 --- a/apps/api/src/app/info/info.service.ts +++ b/apps/api/src/app/info/info.service.ts @@ -26,7 +26,7 @@ import { Injectable } from '@nestjs/common'; import { JwtService } from '@nestjs/jwt'; import { MarketData } from '@prisma/client'; import { subDays } from 'date-fns'; -import { isNil } from 'lodash'; +import { isNil } from 'lodash-es'; @Injectable() export class InfoService { diff --git a/apps/api/src/app/portfolio/calculator/portfolio-calculator.ts b/apps/api/src/app/portfolio/calculator/portfolio-calculator.ts index d868b65b3f..e03b530258 100644 --- a/apps/api/src/app/portfolio/calculator/portfolio-calculator.ts +++ b/apps/api/src/app/portfolio/calculator/portfolio-calculator.ts @@ -72,7 +72,7 @@ import { startOfYear, subDays } from 'date-fns'; -import { groupBy, sortBy, uniqBy } from 'lodash'; +import { groupBy, sortBy, uniqBy } from 'lodash-es'; export abstract class PortfolioCalculator { protected static readonly ENABLE_LOGGING = false; diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator.ts index 2b7b4e6dce..c0b7337350 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator.ts @@ -32,7 +32,7 @@ import { isBefore, isThisYear } from 'date-fns'; -import { sum } from 'lodash'; +import { sum } from 'lodash-es'; export class RoaiPortfolioCalculator extends PortfolioCalculator { protected calculateOverallPerformance( diff --git a/apps/api/src/app/portfolio/current-rate.service.ts b/apps/api/src/app/portfolio/current-rate.service.ts index 79363c6344..80d37259a4 100644 --- a/apps/api/src/app/portfolio/current-rate.service.ts +++ b/apps/api/src/app/portfolio/current-rate.service.ts @@ -14,7 +14,7 @@ import { import { Injectable } from '@nestjs/common'; import { isBefore, isToday } from 'date-fns'; -import { isEmpty, uniqBy } from 'lodash'; +import { isEmpty, uniqBy } from 'lodash-es'; import { GetValueObject } from './interfaces/get-value-object.interface'; import { GetValuesObject } from './interfaces/get-values-object.interface'; diff --git a/apps/api/src/app/portfolio/portfolio.service.ts b/apps/api/src/app/portfolio/portfolio.service.ts index 7350f5fc01..72c5b5946a 100644 --- a/apps/api/src/app/portfolio/portfolio.service.ts +++ b/apps/api/src/app/portfolio/portfolio.service.ts @@ -104,7 +104,7 @@ import { set, startOfDay } from 'date-fns'; -import { groupBy } from 'lodash'; +import { groupBy } from 'lodash-es'; import { PortfolioCalculator } from './calculator/portfolio-calculator'; import { PortfolioCalculatorFactory } from './calculator/portfolio-calculator.factory'; diff --git a/apps/api/src/app/symbol/symbol.controller.ts b/apps/api/src/app/symbol/symbol.controller.ts index 9d8abb47ba..cf26d39d54 100644 --- a/apps/api/src/app/symbol/symbol.controller.ts +++ b/apps/api/src/app/symbol/symbol.controller.ts @@ -25,7 +25,7 @@ import { AuthGuard } from '@nestjs/passport'; import { DataSource } from '@prisma/client'; import { isValid, parseISO } from 'date-fns'; import { StatusCodes, getReasonPhrase } from 'http-status-codes'; -import { isEmpty } from 'lodash'; +import { isEmpty } from 'lodash-es'; import { GetLookupDto } from './get-lookup.dto'; import { SymbolService } from './symbol.service'; diff --git a/apps/api/src/app/user/user.controller.ts b/apps/api/src/app/user/user.controller.ts index ae9e7d680b..32ac353351 100644 --- a/apps/api/src/app/user/user.controller.ts +++ b/apps/api/src/app/user/user.controller.ts @@ -53,7 +53,7 @@ import { AuthGuard } from '@nestjs/passport'; import { Throttle } from '@nestjs/throttler'; import { User as UserModel } from '@prisma/client'; import { StatusCodes, getReasonPhrase } from 'http-status-codes'; -import { merge, size } from 'lodash'; +import { merge, size } from 'lodash-es'; import { UserService } from './user.service'; diff --git a/apps/api/src/app/user/user.service.ts b/apps/api/src/app/user/user.service.ts index a74e32ca93..2e54a7ddc3 100644 --- a/apps/api/src/app/user/user.service.ts +++ b/apps/api/src/app/user/user.service.ts @@ -46,7 +46,7 @@ import { EventEmitter2 } from '@nestjs/event-emitter'; import { InjectThrottlerStorage, ThrottlerStorage } from '@nestjs/throttler'; import { Prisma, Role, User } from '@prisma/client'; import { differenceInDays, subDays } from 'date-fns'; -import { isNil, without } from 'lodash'; +import { isNil, without } from 'lodash-es'; import { createHmac } from 'node:crypto'; @Injectable() diff --git a/apps/api/src/dtos/filter.dto.ts b/apps/api/src/dtos/filter.dto.ts index 09206984ab..84d9ffc0d0 100644 --- a/apps/api/src/dtos/filter.dto.ts +++ b/apps/api/src/dtos/filter.dto.ts @@ -9,7 +9,7 @@ import { IsUUID, MaxLength } from 'class-validator'; -import { isString } from 'lodash'; +import { isString } from 'lodash-es'; export class FilterDto { @IsOptional() diff --git a/apps/api/src/helper/activity.helper.ts b/apps/api/src/helper/activity.helper.ts index b281106c77..f7cb20505e 100644 --- a/apps/api/src/helper/activity.helper.ts +++ b/apps/api/src/helper/activity.helper.ts @@ -5,7 +5,7 @@ import { import { Prisma, Type as ActivityType } from '@prisma/client'; import { endOfToday, isAfter } from 'date-fns'; -import { uniqBy } from 'lodash'; +import { uniqBy } from 'lodash-es'; export const WHERE_ACTIVITY_NOT_DRAFT: Prisma.OrderWhereInput = { tags: { diff --git a/apps/api/src/helper/object.helper.ts b/apps/api/src/helper/object.helper.ts index 350d5fe04a..c040c5e0fc 100644 --- a/apps/api/src/helper/object.helper.ts +++ b/apps/api/src/helper/object.helper.ts @@ -1,6 +1,6 @@ import fastRedact from 'fast-redact'; import jsonpath from 'jsonpath'; -import { cloneDeep, isObject } from 'lodash'; +import { cloneDeep, isObject } from 'lodash-es'; export function hasNotDefinedValuesInObject(aObject: Object): boolean { for (const key in aObject) { diff --git a/apps/api/src/models/rule.ts b/apps/api/src/models/rule.ts index 4985b26477..f7f6c53637 100644 --- a/apps/api/src/models/rule.ts +++ b/apps/api/src/models/rule.ts @@ -7,7 +7,7 @@ import { } from '@ghostfolio/common/interfaces'; import { Big } from 'big.js'; -import { groupBy } from 'lodash'; +import { groupBy } from 'lodash-es'; import { EvaluationResult } from './interfaces/evaluation-result.interface'; import { RuleInterface } from './interfaces/rule.interface'; diff --git a/apps/api/src/services/benchmark/benchmark.service.ts b/apps/api/src/services/benchmark/benchmark.service.ts index 953939caac..4ea27b2f2e 100644 --- a/apps/api/src/services/benchmark/benchmark.service.ts +++ b/apps/api/src/services/benchmark/benchmark.service.ts @@ -23,7 +23,7 @@ import { Injectable, Logger } from '@nestjs/common'; import { SymbolProfile } from '@prisma/client'; import { Big } from 'big.js'; import { addHours, isPast, subDays } from 'date-fns'; -import { round, uniqBy } from 'lodash'; +import { round, uniqBy } from 'lodash-es'; import ms from 'ms'; import { BenchmarkValue } from './interfaces/benchmark-value.interface'; 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 87c1e85c61..cfacab3231 100644 --- a/apps/api/src/services/data-provider/data-provider.service.ts +++ b/apps/api/src/services/data-provider/data-provider.service.ts @@ -42,7 +42,7 @@ import { Inject, Injectable, Logger, OnModuleInit } from '@nestjs/common'; import { DataSource, MarketData, Prisma, SymbolProfile } from '@prisma/client'; import { Big } from 'big.js'; import { eachDayOfInterval, format, isValid } from 'date-fns'; -import { groupBy, isEmpty, isNumber, omit, uniqWith } from 'lodash'; +import { groupBy, isEmpty, isNumber, omit, uniqWith } from 'lodash-es'; import ms from 'ms'; import { AssetProfileInvalidError } from './errors/asset-profile-invalid.error'; diff --git a/apps/api/src/services/data-provider/eod-historical-data/eod-historical-data.service.ts b/apps/api/src/services/data-provider/eod-historical-data/eod-historical-data.service.ts index 6bc003fc23..7dbb3b859c 100644 --- a/apps/api/src/services/data-provider/eod-historical-data/eod-historical-data.service.ts +++ b/apps/api/src/services/data-provider/eod-historical-data/eod-historical-data.service.ts @@ -31,7 +31,7 @@ import { SymbolProfile } from '@prisma/client'; import { addDays, format, isSameDay, isToday } from 'date-fns'; -import { isNumber } from 'lodash'; +import { isNumber } from 'lodash-es'; @Injectable() export class EodHistoricalDataService 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 7c840b5fc6..a8f1c6287c 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 @@ -47,7 +47,7 @@ import { isSameDay, parseISO } from 'date-fns'; -import { isArray, uniqBy } from 'lodash'; +import { isArray, uniqBy } from 'lodash-es'; @Injectable() export class FinancialModelingPrepService 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 ca6357e257..d2b741d372 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 @@ -24,7 +24,7 @@ import { Injectable, Logger } from '@nestjs/common'; import { DataSource, SymbolProfile } from '@prisma/client'; import { addDays, format, isSameDay } from 'date-fns'; import { ReasonPhrases, StatusCodes } from 'http-status-codes'; -import { uniqBy } from 'lodash'; +import { uniqBy } from 'lodash-es'; import YahooFinance from 'yahoo-finance2'; import type { ChartResultArray } from 'yahoo-finance2/modules/chart'; import type { diff --git a/apps/api/src/services/exchange-rate-data/exchange-rate-data.service.ts b/apps/api/src/services/exchange-rate-data/exchange-rate-data.service.ts index 0d7e98e2e0..824149e74f 100644 --- a/apps/api/src/services/exchange-rate-data/exchange-rate-data.service.ts +++ b/apps/api/src/services/exchange-rate-data/exchange-rate-data.service.ts @@ -26,7 +26,7 @@ import { isToday, subDays } from 'date-fns'; -import { isNumber } from 'lodash'; +import { isNumber } from 'lodash-es'; import ms from 'ms'; import { ExchangeRatesByCurrency } from './interfaces/exchange-rate-data.interface'; diff --git a/apps/api/src/services/queues/data-gathering/data-gathering.service.ts b/apps/api/src/services/queues/data-gathering/data-gathering.service.ts index 4cbe6969ae..3a98757591 100644 --- a/apps/api/src/services/queues/data-gathering/data-gathering.service.ts +++ b/apps/api/src/services/queues/data-gathering/data-gathering.service.ts @@ -33,7 +33,7 @@ import { Inject, Injectable, Logger } from '@nestjs/common'; import { Prisma } from '@prisma/client'; import { Job, JobOptions, Queue } from 'bull'; import { format, min, subDays, subMilliseconds, subYears } from 'date-fns'; -import { isEmpty } from 'lodash'; +import { isEmpty } from 'lodash-es'; import ms, { StringValue } from 'ms'; @Injectable() diff --git a/apps/api/src/services/twitter-bot/twitter-bot.service.ts b/apps/api/src/services/twitter-bot/twitter-bot.service.ts index 2dbed82d21..6282b4363b 100644 --- a/apps/api/src/services/twitter-bot/twitter-bot.service.ts +++ b/apps/api/src/services/twitter-bot/twitter-bot.service.ts @@ -10,7 +10,7 @@ import { import { Injectable, Logger, OnModuleInit } from '@nestjs/common'; import { isWeekend } from 'date-fns'; -import { round } from 'lodash'; +import { round } from 'lodash-es'; import { TwitterApi, TwitterApiReadWrite } from 'twitter-api-v2'; @Injectable() diff --git a/apps/client/jest.config.ts b/apps/client/jest.config.ts index 26d772e11f..d60a24ae4f 100644 --- a/apps/client/jest.config.ts +++ b/apps/client/jest.config.ts @@ -18,6 +18,6 @@ export default { } ] }, - transformIgnorePatterns: ['node_modules/(?!.*.mjs$)'], + transformIgnorePatterns: ['node_modules/(?!.*.mjs$|lodash-es/)'], preset: '../../jest.preset.js' }; 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 b8c7f16dbc..44f7280473 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 @@ -55,7 +55,7 @@ import { readerOutline, swapVerticalOutline } from 'ionicons/icons'; -import { isNumber } from 'lodash'; +import { isNumber } from 'lodash-es'; import { NgxSkeletonLoaderModule } from 'ngx-skeleton-loader'; import { filter, forkJoin } from 'rxjs'; diff --git a/apps/client/src/app/components/admin-jobs/admin-jobs.component.ts b/apps/client/src/app/components/admin-jobs/admin-jobs.component.ts index fd90bff2c1..e8e3a21255 100644 --- a/apps/client/src/app/components/admin-jobs/admin-jobs.component.ts +++ b/apps/client/src/app/components/admin-jobs/admin-jobs.component.ts @@ -49,7 +49,7 @@ import { removeCircleOutline, timeOutline } from 'ionicons/icons'; -import { get } from 'lodash'; +import { get } from 'lodash-es'; import { NgxSkeletonLoaderModule } from 'ngx-skeleton-loader'; @Component({ 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 154211b918..ba119b565f 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 @@ -106,7 +106,7 @@ import { serverOutline, trashOutline } from 'ionicons/icons'; -import { isBoolean } from 'lodash'; +import { isBoolean } from 'lodash-es'; import ms from 'ms'; import { EMPTY } from 'rxjs'; import { catchError } from 'rxjs/operators'; diff --git a/apps/client/src/app/components/admin-settings/admin-settings.component.ts b/apps/client/src/app/components/admin-settings/admin-settings.component.ts index b0c3dc2d22..d49f3fb0aa 100644 --- a/apps/client/src/app/components/admin-settings/admin-settings.component.ts +++ b/apps/client/src/app/components/admin-settings/admin-settings.component.ts @@ -42,7 +42,7 @@ import { RouterModule } from '@angular/router'; import { IonIcon } from '@ionic/angular/standalone'; import { addIcons } from 'ionicons'; import { ellipsisHorizontal, trashOutline } from 'ionicons/icons'; -import { get } from 'lodash'; +import { get } from 'lodash-es'; import { NgxSkeletonLoaderModule } from 'ngx-skeleton-loader'; import { catchError, filter, of } from 'rxjs'; 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 4a16c1a4e2..8c3ec2206e 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 @@ -82,7 +82,7 @@ import { swapVerticalOutline, walletOutline } from 'ionicons/icons'; -import { isNumber, round, uniqBy } from 'lodash'; +import { isNumber, round, uniqBy } from 'lodash-es'; import { NgxSkeletonLoaderModule } from 'ngx-skeleton-loader'; import { filter, switchMap } from 'rxjs/operators'; diff --git a/apps/client/src/app/components/portfolio-performance/portfolio-performance.component.ts b/apps/client/src/app/components/portfolio-performance/portfolio-performance.component.ts index a48d77a2dd..4f7f35dd1e 100644 --- a/apps/client/src/app/components/portfolio-performance/portfolio-performance.component.ts +++ b/apps/client/src/app/components/portfolio-performance/portfolio-performance.component.ts @@ -23,7 +23,7 @@ import { IonIcon } from '@ionic/angular/standalone'; import { CountUp } from 'countup.js'; import { addIcons } from 'ionicons'; import { timeOutline } from 'ionicons/icons'; -import { isNumber } from 'lodash'; +import { isNumber } from 'lodash-es'; import { NgxSkeletonLoaderModule } from 'ngx-skeleton-loader'; @Component({ 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 feedddacae..13686624f7 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 @@ -23,7 +23,7 @@ import { ellipsisHorizontalCircleOutline, informationCircleOutline } from 'ionicons/icons'; -import { isNumber } from 'lodash'; +import { isNumber } from 'lodash-es'; import { NgxSkeletonLoaderModule } from 'ngx-skeleton-loader'; @Component({ 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 8b80370e8d..36c780a04e 100644 --- a/apps/client/src/app/pages/api/api-page.component.ts +++ b/apps/client/src/app/pages/api/api-page.component.ts @@ -32,7 +32,7 @@ import { import { takeUntilDestroyed } from '@angular/core/rxjs-interop'; import { MatCardModule } from '@angular/material/card'; import { format, startOfYear } from 'date-fns'; -import { isObject } from 'lodash'; +import { isObject } from 'lodash-es'; import { NgxSkeletonLoaderModule } from 'ngx-skeleton-loader'; import { catchError, map, Observable, of, OperatorFunction } from 'rxjs'; 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 26255f2061..a1a9bddd6b 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 @@ -51,7 +51,7 @@ import { MatTableDataSource } from '@angular/material/table'; import { IonIcon } from '@ionic/angular/standalone'; import { addIcons } from 'ionicons'; import { cloudUploadOutline, warningOutline } from 'ionicons/icons'; -import { isArray, sortBy } from 'lodash'; +import { isArray, sortBy } from 'lodash-es'; import ms from 'ms'; import { ImportStep } from './enums/import-step'; 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 6d67b0253c..487bcf6086 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 @@ -53,7 +53,7 @@ import { MatCardModule } from '@angular/material/card'; import { MatDialog } from '@angular/material/dialog'; import { MatProgressBarModule } from '@angular/material/progress-bar'; import { ActivatedRoute, Router } from '@angular/router'; -import { isNumber } from 'lodash'; +import { isNumber } from 'lodash-es'; import { DeviceDetectorService } from 'ngx-device-detector'; import { filter, switchMap, tap } from 'rxjs'; 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 898c7f51a8..880753cce5 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 @@ -51,7 +51,7 @@ import { RouterModule } from '@angular/router'; import { IonIcon } from '@ionic/angular/standalone'; import { addIcons } from 'ionicons'; import { copyOutline, ellipsisVertical } from 'ionicons/icons'; -import { isNumber, keyBy, sortBy, union } from 'lodash'; +import { isNumber, keyBy, sortBy, union } from 'lodash-es'; import ms from 'ms'; import { DeviceDetectorService } from 'ngx-device-detector'; import { NgxSkeletonLoaderModule } from 'ngx-skeleton-loader'; diff --git a/apps/client/src/app/pages/portfolio/fire/fire-page.component.ts b/apps/client/src/app/pages/portfolio/fire/fire-page.component.ts index dc787ae26a..33b877d42f 100644 --- a/apps/client/src/app/pages/portfolio/fire/fire-page.component.ts +++ b/apps/client/src/app/pages/portfolio/fire/fire-page.component.ts @@ -27,7 +27,7 @@ import { takeUntilDestroyed } from '@angular/core/rxjs-interop'; import { FormsModule, ReactiveFormsModule } from '@angular/forms'; import { FormControl } from '@angular/forms'; import { Big } from 'big.js'; -import { isFinite, isNumber } from 'lodash'; +import { isFinite, isNumber } from 'lodash-es'; import { DeviceDetectorService } from 'ngx-device-detector'; import { NgxSkeletonLoaderModule } from 'ngx-skeleton-loader'; diff --git a/apps/client/src/app/services/import-activities.service.ts b/apps/client/src/app/services/import-activities.service.ts index 599c66551a..e302f00f9b 100644 --- a/apps/client/src/app/services/import-activities.service.ts +++ b/apps/client/src/app/services/import-activities.service.ts @@ -16,7 +16,7 @@ import { DataSource, Type as ActivityType } from '@ghostfolio/prisma/enums'; import { HttpClient } from '@angular/common/http'; import { inject, Service } from '@angular/core'; -import { isFinite, isNumber, isString } from 'lodash'; +import { isFinite, isNumber, isString } from 'lodash-es'; import { parse as csvToJson } from 'papaparse'; import { firstValueFrom } from 'rxjs'; import { v4 as uuidv4 } from 'uuid'; diff --git a/eslint.config.cjs b/eslint.config.cjs index ee5e0a557c..282e1b548c 100644 --- a/eslint.config.cjs +++ b/eslint.config.cjs @@ -116,7 +116,24 @@ module.exports = [ 'no-eval': 'error', 'no-fallthrough': 'error', 'no-new-wrappers': 'error', - 'no-restricted-imports': ['error', 'rxjs/Rx'], + 'no-restricted-imports': [ + 'error', + { + paths: [ + 'rxjs/Rx', + { + message: 'Import from lodash-es instead.', + name: 'lodash' + } + ], + patterns: [ + { + group: ['lodash/*'], + message: 'Import from lodash-es instead.' + } + ] + } + ], 'no-undef-init': 'error', 'no-underscore-dangle': 'off', 'no-var': 'error', diff --git a/jest.preset.js b/jest.preset.js index f078ddcec1..3cdca44c04 100644 --- a/jest.preset.js +++ b/jest.preset.js @@ -1,3 +1,6 @@ const nxPreset = require('@nx/jest/preset').default; -module.exports = { ...nxPreset }; +module.exports = { + ...nxPreset, + transformIgnorePatterns: ['node_modules/(?!lodash-es/)'] +}; diff --git a/libs/common/src/lib/calculation-helper.ts b/libs/common/src/lib/calculation-helper.ts index d49663d6cf..2cc1fa2d1c 100644 --- a/libs/common/src/lib/calculation-helper.ts +++ b/libs/common/src/lib/calculation-helper.ts @@ -10,7 +10,7 @@ import { subMilliseconds, subYears } from 'date-fns'; -import { isFinite, isNumber } from 'lodash'; +import { isFinite, isNumber } from 'lodash-es'; import { resetHours } from './helper'; import { DateRange } from './types'; diff --git a/libs/common/src/lib/dtos/create-account.dto.ts b/libs/common/src/lib/dtos/create-account.dto.ts index 92879dbb2c..5c1275db76 100644 --- a/libs/common/src/lib/dtos/create-account.dto.ts +++ b/libs/common/src/lib/dtos/create-account.dto.ts @@ -11,7 +11,7 @@ import { MaxLength, ValidateIf } from 'class-validator'; -import { isString } from 'lodash'; +import { isString } from 'lodash-es'; export class CreateAccountDto { /** diff --git a/libs/common/src/lib/dtos/create-order.dto.ts b/libs/common/src/lib/dtos/create-order.dto.ts index fd062b610b..d473e8e7b6 100644 --- a/libs/common/src/lib/dtos/create-order.dto.ts +++ b/libs/common/src/lib/dtos/create-order.dto.ts @@ -25,7 +25,7 @@ import { Min, Validate } from 'class-validator'; -import { isString } from 'lodash'; +import { isString } from 'lodash-es'; export class CreateOrderDto { @IsOptional() diff --git a/libs/common/src/lib/dtos/update-account.dto.ts b/libs/common/src/lib/dtos/update-account.dto.ts index deec684aae..c5f9f34679 100644 --- a/libs/common/src/lib/dtos/update-account.dto.ts +++ b/libs/common/src/lib/dtos/update-account.dto.ts @@ -11,7 +11,7 @@ import { MaxLength, ValidateIf } from 'class-validator'; -import { isString } from 'lodash'; +import { isString } from 'lodash-es'; export class UpdateAccountDto { /** diff --git a/libs/common/src/lib/dtos/update-order.dto.ts b/libs/common/src/lib/dtos/update-order.dto.ts index 0e381f2069..f7dfb0df53 100644 --- a/libs/common/src/lib/dtos/update-order.dto.ts +++ b/libs/common/src/lib/dtos/update-order.dto.ts @@ -24,7 +24,7 @@ import { Min, Validate } from 'class-validator'; -import { isString } from 'lodash'; +import { isString } from 'lodash-es'; export class UpdateOrderDto { @IsOptional() diff --git a/libs/common/src/lib/helper.ts b/libs/common/src/lib/helper.ts index 69764935d1..e10ca215cc 100644 --- a/libs/common/src/lib/helper.ts +++ b/libs/common/src/lib/helper.ts @@ -42,7 +42,7 @@ import { uk, zhCN } from 'date-fns/locale'; -import { get, isNil, isString } from 'lodash'; +import { get, isNil, isString } from 'lodash-es'; import { DEFAULT_CURRENCY, diff --git a/libs/ui/jest.config.ts b/libs/ui/jest.config.ts index 116fe6d54f..f9b97fe1a4 100644 --- a/libs/ui/jest.config.ts +++ b/libs/ui/jest.config.ts @@ -14,7 +14,7 @@ export default { } ] }, - transformIgnorePatterns: ['node_modules/(?!.*.mjs$)'], + transformIgnorePatterns: ['node_modules/(?!.*.mjs$|lodash-es/)'], snapshotSerializers: [ 'jest-preset-angular/build/serializers/no-ng-attributes', 'jest-preset-angular/build/serializers/ng-snapshot', diff --git a/libs/ui/src/lib/account-balances/account-balances.component.ts b/libs/ui/src/lib/account-balances/account-balances.component.ts index e27d29516c..04f13ccf10 100644 --- a/libs/ui/src/lib/account-balances/account-balances.component.ts +++ b/libs/ui/src/lib/account-balances/account-balances.component.ts @@ -40,7 +40,7 @@ import { ellipsisHorizontal, trashOutline } from 'ionicons/icons'; -import { get, isNil } from 'lodash'; +import { get, isNil } from 'lodash-es'; import { GfValueComponent } from '../value'; diff --git a/libs/ui/src/lib/activities-filter/activities-filter.component.ts b/libs/ui/src/lib/activities-filter/activities-filter.component.ts index 7a434d94c8..b6af11b0dc 100644 --- a/libs/ui/src/lib/activities-filter/activities-filter.component.ts +++ b/libs/ui/src/lib/activities-filter/activities-filter.component.ts @@ -29,7 +29,7 @@ import { MatProgressSpinnerModule } from '@angular/material/progress-spinner'; import { IonIcon } from '@ionic/angular/standalone'; import { addIcons } from 'ionicons'; import { closeOutline, searchOutline } from 'ionicons/icons'; -import { groupBy } from 'lodash'; +import { groupBy } from 'lodash-es'; import { BehaviorSubject } from 'rxjs'; import { translate } from '../i18n'; diff --git a/libs/ui/src/lib/assistant/assistant.component.ts b/libs/ui/src/lib/assistant/assistant.component.ts index 6babc10398..ef0fb554ce 100644 --- a/libs/ui/src/lib/assistant/assistant.component.ts +++ b/libs/ui/src/lib/assistant/assistant.component.ts @@ -39,7 +39,7 @@ import { closeOutline, searchOutline } from 'ionicons/icons'; -import { isFunction, sample } from 'lodash'; +import { isFunction, sample } from 'lodash-es'; import { NgxSkeletonLoaderModule } from 'ngx-skeleton-loader'; import { EMPTY, Observable, merge, of } from 'rxjs'; import { diff --git a/libs/ui/src/lib/benchmark/benchmark.component.ts b/libs/ui/src/lib/benchmark/benchmark.component.ts index 4f76978d45..bee06e3265 100644 --- a/libs/ui/src/lib/benchmark/benchmark.component.ts +++ b/libs/ui/src/lib/benchmark/benchmark.component.ts @@ -33,7 +33,7 @@ import { ActivatedRoute, Router, RouterModule } from '@angular/router'; import { IonIcon } from '@ionic/angular/standalone'; import { addIcons } from 'ionicons'; import { ellipsisHorizontal, trashOutline } from 'ionicons/icons'; -import { isNumber, round } from 'lodash'; +import { isNumber, round } from 'lodash-es'; import { NgxSkeletonLoaderModule } from 'ngx-skeleton-loader'; import { GfEntityLogoComponent } from '../entity-logo/entity-logo.component'; diff --git a/libs/ui/src/lib/fire-calculator/fire-calculator.component.ts b/libs/ui/src/lib/fire-calculator/fire-calculator.component.ts index cfa2ee5cd2..959e934553 100644 --- a/libs/ui/src/lib/fire-calculator/fire-calculator.component.ts +++ b/libs/ui/src/lib/fire-calculator/fire-calculator.component.ts @@ -59,7 +59,7 @@ import { } from 'date-fns'; import { addIcons } from 'ionicons'; import { calendarClearOutline } from 'ionicons/icons'; -import { isNumber } from 'lodash'; +import { isNumber } from 'lodash-es'; import { NgxSkeletonLoaderModule } from 'ngx-skeleton-loader'; import { debounceTime } from 'rxjs'; diff --git a/libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.component.ts b/libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.component.ts index 17a5a5e612..4f8540974f 100644 --- a/libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.component.ts +++ b/libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.component.ts @@ -29,7 +29,7 @@ import { MatInputModule } from '@angular/material/input'; import { IonIcon } from '@ionic/angular/standalone'; import { addIcons } from 'ionicons'; import { calendarClearOutline, refreshOutline } from 'ionicons/icons'; -import { isNil } from 'lodash'; +import { isNil } from 'lodash-es'; import { HistoricalMarketDataEditorDialogParams } from './interfaces/interfaces'; diff --git a/libs/ui/src/lib/notifications/notification.service.ts b/libs/ui/src/lib/notifications/notification.service.ts index 4eb1cbd54d..d1c8459a6c 100644 --- a/libs/ui/src/lib/notifications/notification.service.ts +++ b/libs/ui/src/lib/notifications/notification.service.ts @@ -3,7 +3,7 @@ import { translate } from '@ghostfolio/ui/i18n'; import { inject, Service } from '@angular/core'; import { MatDialog } from '@angular/material/dialog'; -import { isFunction } from 'lodash'; +import { isFunction } from 'lodash-es'; import { GfAlertDialogComponent } from './alert-dialog/alert-dialog.component'; import { GfConfirmationDialogComponent } from './confirmation-dialog/confirmation-dialog.component'; diff --git a/libs/ui/src/lib/services/admin.service.ts b/libs/ui/src/lib/services/admin.service.ts index aba02c9b3f..0307909dc1 100644 --- a/libs/ui/src/lib/services/admin.service.ts +++ b/libs/ui/src/lib/services/admin.service.ts @@ -31,7 +31,7 @@ import { GF_ENVIRONMENT } from '@ghostfolio/ui/environment'; import { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http'; import { inject, Service } from '@angular/core'; import { JobStatus } from 'bull'; -import { isNumber } from 'lodash'; +import { isNumber } from 'lodash-es'; @Service() export class AdminService { diff --git a/libs/ui/src/lib/services/data.service.ts b/libs/ui/src/lib/services/data.service.ts index 9bbb0bf5fa..8545c36ba4 100644 --- a/libs/ui/src/lib/services/data.service.ts +++ b/libs/ui/src/lib/services/data.service.ts @@ -82,7 +82,7 @@ import { inject, Service } from '@angular/core'; import { SortDirection } from '@angular/material/sort'; import { utc } from '@date-fns/utc'; import { format, parseISO } from 'date-fns'; -import { cloneDeep, groupBy, isNumber } from 'lodash'; +import { cloneDeep, groupBy, isNumber } from 'lodash-es'; import { Observable } from 'rxjs'; import { map } from 'rxjs/operators'; 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 683f7c9252..d56aa177bf 100644 --- a/libs/ui/src/lib/symbol-autocomplete/symbol-autocomplete.component.ts +++ b/libs/ui/src/lib/symbol-autocomplete/symbol-autocomplete.component.ts @@ -36,7 +36,7 @@ import { } from '@angular/material/form-field'; import { MatInput, MatInputModule } from '@angular/material/input'; import { MatProgressSpinnerModule } from '@angular/material/progress-spinner'; -import { isString } from 'lodash'; +import { isString } from 'lodash-es'; import { tap } from 'rxjs'; import { debounceTime, diff --git a/libs/ui/src/lib/top-holdings/top-holdings.component.ts b/libs/ui/src/lib/top-holdings/top-holdings.component.ts index 03e7f6cc46..1a675a5531 100644 --- a/libs/ui/src/lib/top-holdings/top-holdings.component.ts +++ b/libs/ui/src/lib/top-holdings/top-holdings.component.ts @@ -18,7 +18,7 @@ import { import { MatButtonModule } from '@angular/material/button'; import { MatPaginator, MatPaginatorModule } from '@angular/material/paginator'; import { MatTableDataSource, MatTableModule } from '@angular/material/table'; -import { capitalize } from 'lodash'; +import { capitalize } from 'lodash-es'; import { NgxSkeletonLoaderModule } from 'ngx-skeleton-loader'; import { GfValueComponent } from '../value/value.component'; diff --git a/libs/ui/src/lib/treemap-chart/treemap-chart.component.ts b/libs/ui/src/lib/treemap-chart/treemap-chart.component.ts index 54c8d7f907..a35d3deef5 100644 --- a/libs/ui/src/lib/treemap-chart/treemap-chart.component.ts +++ b/libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -32,7 +32,7 @@ import { Chart, LinearScale, Tooltip } from 'chart.js'; import { TreemapController, TreemapElement } from 'chartjs-chart-treemap'; import { isUUID } from 'class-validator'; import { differenceInDays, max } from 'date-fns'; -import { orderBy, round } from 'lodash'; +import { orderBy, round } from 'lodash-es'; import { NgxSkeletonLoaderModule } from 'ngx-skeleton-loader'; import OpenColor from 'open-color'; diff --git a/libs/ui/src/lib/value/value.component.ts b/libs/ui/src/lib/value/value.component.ts index c2c7d4621d..4101b4066f 100644 --- a/libs/ui/src/lib/value/value.component.ts +++ b/libs/ui/src/lib/value/value.component.ts @@ -21,7 +21,7 @@ import { MatSnackBar } from '@angular/material/snack-bar'; import { IonIcon } from '@ionic/angular/standalone'; import { addIcons } from 'ionicons'; import { checkmarkOutline, copyOutline } from 'ionicons/icons'; -import { isNumber } from 'lodash'; +import { isNumber } from 'lodash-es'; import ms from 'ms'; import { NgxSkeletonLoaderModule } from 'ngx-skeleton-loader'; diff --git a/package-lock.json b/package-lock.json index 3f8ee0f880..c3ee51dc53 100644 --- a/package-lock.json +++ b/package-lock.json @@ -83,7 +83,7 @@ "ionicons": "8.0.13", "jsonpath": "1.3.0", "katex": "0.16.47", - "lodash": "4.18.1", + "lodash-es": "4.18.1", "marked": "18.0.12", "marked-katex-extension": "5.1.12", "ms": "3.0.0-canary.1", @@ -147,7 +147,7 @@ "@types/google-spreadsheet": "3.1.5", "@types/jest": "30.0.0", "@types/jsonpath": "0.2.4", - "@types/lodash": "4.17.25", + "@types/lodash-es": "4.17.12", "@types/node": "22.20.1", "@types/papaparse": "5.5.2", "@types/passport-google-oauth20": "2.0.17", @@ -15221,6 +15221,16 @@ "devOptional": true, "license": "MIT" }, + "node_modules/@types/lodash-es": { + "version": "4.17.12", + "resolved": "https://registry.npmjs.org/@types/lodash-es/-/lodash-es-4.17.12.tgz", + "integrity": "sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/lodash": "*" + } + }, "node_modules/@types/luxon": { "version": "3.7.1", "resolved": "https://registry.npmjs.org/@types/luxon/-/luxon-3.7.1.tgz", @@ -27042,7 +27052,6 @@ "version": "4.18.1", "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.18.1.tgz", "integrity": "sha512-J8xewKD/Gk22OZbhpOVSwcs60zhd95ESDwezOFuA3/099925PdHJ7OFHNTGtajL3AlZkykD32HykiMo+BIBI8A==", - "dev": true, "license": "MIT" }, "node_modules/lodash.debounce": { diff --git a/package.json b/package.json index a3f94b74b6..ca4f3ebcff 100644 --- a/package.json +++ b/package.json @@ -127,7 +127,7 @@ "ionicons": "8.0.13", "jsonpath": "1.3.0", "katex": "0.16.47", - "lodash": "4.18.1", + "lodash-es": "4.18.1", "marked": "18.0.12", "marked-katex-extension": "5.1.12", "ms": "3.0.0-canary.1", @@ -191,7 +191,7 @@ "@types/google-spreadsheet": "3.1.5", "@types/jest": "30.0.0", "@types/jsonpath": "0.2.4", - "@types/lodash": "4.17.25", + "@types/lodash-es": "4.17.12", "@types/node": "22.20.1", "@types/papaparse": "5.5.2", "@types/passport-google-oauth20": "2.0.17", From d85772d4034bcacdd6af686276842b382456bd91 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Wed, 30 Sep 2026 12:13:31 +0200 Subject: [PATCH 14/27] Bugfix/allocation column of top holdings (#7974) * Fix allocation column of top holdings of ETFs * Update changelog --- CHANGELOG.md | 3 ++- .../allocations/allocations-page.component.ts | 21 +++++++++---------- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c9937fcb31..5ae63148f2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,7 +20,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Fixed - Fixed the colors of the investment chart component (dark mode) -- Fixed the value column of the top holdings on the allocations page in the _Presenter View_ +- Fixed the allocation column of the top holdings of ETFs on the allocations page after a change of the user settings +- Fixed the value column of the top holdings of ETFs on the allocations page in the _Presenter View_ - Fixed the projected sustainable retirement income on the _FIRE_ page for a projected total amount of zero (experimental) - Fixed the emergency fund in the portfolio summary for redacted values - Fixed the redaction of `valueInBaseCurrency` in the holdings of ETFs in a restricted view 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 487bcf6086..647bc761e3 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 @@ -134,11 +134,6 @@ export class GfAllocationsPageComponent implements OnInit { protected readonly UNKNOWN_KEY = UNKNOWN_KEY; protected user: User; - private topHoldingsMap: { - [name: string]: { name: string; value: number }; - }; - private totalValueInEtf = 0; - private readonly changeDetectorRef = inject(ChangeDetectorRef); private readonly dataService = inject(DataService); private readonly destroyRef = inject(DestroyRef); @@ -365,7 +360,6 @@ export class GfAllocationsPageComponent implements OnInit { value: 0 } }; - this.topHoldingsMap = {}; } private initializeAllocationsData() { @@ -388,7 +382,12 @@ export class GfAllocationsPageComponent implements OnInit { }; } + const topHoldingsMap: { + [name: string]: { name: string; value: number }; + } = {}; + let totalValueExcludingCashPositions = 0; + let totalValueInEtf = 0; for (const position of this.portfolioDetails.holdings) { const assetProfileIdentifier = getAssetProfileIdentifier( @@ -474,12 +473,12 @@ export class GfAllocationsPageComponent implements OnInit { ? valueInBaseCurrency : allocationInPercentage * (position.valueInPercentage ?? 0); - const holdingData = this.topHoldingsMap[normalizedAssetName]; + const holdingData = topHoldingsMap[normalizedAssetName]; if (holdingData) { holdingData.value += value; } else { - this.topHoldingsMap[normalizedAssetName] = { + topHoldingsMap[normalizedAssetName] = { name, value }; @@ -515,7 +514,7 @@ export class GfAllocationsPageComponent implements OnInit { } if (this.holdings[assetProfileIdentifier].assetSubClass === 'ETF') { - this.totalValueInEtf += this.holdings[assetProfileIdentifier].value; + totalValueInEtf += this.holdings[assetProfileIdentifier].value; } const symbol = position.assetProfile.symbol; @@ -582,7 +581,7 @@ export class GfAllocationsPageComponent implements OnInit { }; } - this.topHoldings = Object.values(this.topHoldingsMap) + this.topHoldings = Object.values(topHoldingsMap) .map(({ name, value }): HoldingWithParents => { if (this.showValuesInPercentage()) { return { @@ -594,7 +593,7 @@ export class GfAllocationsPageComponent implements OnInit { return { name, allocationInPercentage: - this.totalValueInEtf > 0 ? value / this.totalValueInEtf : 0, + totalValueInEtf > 0 ? value / totalValueInEtf : 0, parents: this.portfolioDetails.holdings .map((holding) => { if (holding.assetProfile.holdings.length > 0) { From 435aeeb1f7acd164907103aca979aa50e43e1cc3 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Wed, 30 Sep 2026 16:25:49 +0200 Subject: [PATCH 15/27] Bugfix/light color scheme in chart helpers (#7975) * Fix colors of charts if appearance is set to light and OS uses dark mode * Update changelog --- CHANGELOG.md | 1 + apps/client/src/app/app.component.ts | 8 ++--- .../asset-profile-dialog-host.component.ts | 7 ++-- .../interfaces/interfaces.ts | 2 +- .../investment-chart.component.ts | 22 +++++------- libs/common/src/lib/chart-helper.ts | 14 ++++---- libs/common/src/lib/config.ts | 3 +- libs/common/src/lib/helper.spec.ts | 35 +++++++++++++++++++ libs/common/src/lib/helper.ts | 20 ++++++----- libs/ui/src/lib/chart/chart.options.ts | 2 +- .../lib/line-chart/line-chart.component.ts | 8 ++--- .../portfolio-proportion-chart.component.ts | 6 ++-- .../treemap-chart.component.stories.ts | 4 +-- 13 files changed, 76 insertions(+), 56 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5ae63148f2..be16617266 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,6 +20,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Fixed - Fixed the colors of the investment chart component (dark mode) +- Fixed the colors of the charts if the appearance is set to light and the operating system uses dark mode - Fixed the allocation column of the top holdings of ETFs on the allocations page after a change of the user settings - Fixed the value column of the top holdings of ETFs on the allocations page in the _Presenter View_ - Fixed the projected sustainable retirement income on the _FIRE_ page for a projected total amount of zero (experimental) diff --git a/apps/client/src/app/app.component.ts b/apps/client/src/app/app.component.ts index 7252ad1646..a1f8ebfe9c 100644 --- a/apps/client/src/app/app.component.ts +++ b/apps/client/src/app/app.component.ts @@ -1,4 +1,4 @@ -import { getCssVariable } from '@ghostfolio/common/helper'; +import { getCssVariable, isDarkColorScheme } from '@ghostfolio/common/helper'; import { AssetProfileIdentifier, InfoItem, @@ -260,11 +260,7 @@ export class GfAppComponent implements OnInit { } private initializeTheme(userPreferredColorScheme?: ColorScheme) { - const isDarkTheme = userPreferredColorScheme - ? userPreferredColorScheme === 'DARK' - : window.matchMedia('(prefers-color-scheme: dark)').matches; - - this.toggleTheme(isDarkTheme); + this.toggleTheme(isDarkColorScheme(userPreferredColorScheme)); // Default chart styles Chart.defaults.font.family = getCssVariable('--font-family-sans-serif'); diff --git a/apps/client/src/app/components/admin-market-data/asset-profile-dialog-host/asset-profile-dialog-host.component.ts b/apps/client/src/app/components/admin-market-data/asset-profile-dialog-host/asset-profile-dialog-host.component.ts index af83ef4a7d..26af45e20b 100644 --- a/apps/client/src/app/components/admin-market-data/asset-profile-dialog-host/asset-profile-dialog-host.component.ts +++ b/apps/client/src/app/components/admin-market-data/asset-profile-dialog-host/asset-profile-dialog-host.component.ts @@ -1,8 +1,5 @@ import { UserService } from '@ghostfolio/client/services/user/user.service'; -import { - DEFAULT_COLOR_SCHEME, - DEFAULT_LOCALE -} from '@ghostfolio/common/config'; +import { DEFAULT_LOCALE } from '@ghostfolio/common/config'; import { AssetProfileIdentifier, User } from '@ghostfolio/common/interfaces'; import { internalRoutes } from '@ghostfolio/common/routes/routes'; import { DataSource } from '@ghostfolio/prisma/enums'; @@ -150,7 +147,7 @@ export class GfAssetProfileDialogHostComponent implements OnDestroy, OnInit { data: { dataSource, symbol, - colorScheme: user?.settings.colorScheme ?? DEFAULT_COLOR_SCHEME, + colorScheme: user?.settings?.colorScheme, deviceType: this.deviceType(), locale: user?.settings?.locale ?? DEFAULT_LOCALE } satisfies AssetProfileDialogParams, diff --git a/apps/client/src/app/components/admin-market-data/asset-profile-dialog/interfaces/interfaces.ts b/apps/client/src/app/components/admin-market-data/asset-profile-dialog/interfaces/interfaces.ts index 0f000364ee..2e2bb7b118 100644 --- a/apps/client/src/app/components/admin-market-data/asset-profile-dialog/interfaces/interfaces.ts +++ b/apps/client/src/app/components/admin-market-data/asset-profile-dialog/interfaces/interfaces.ts @@ -2,7 +2,7 @@ import { ColorScheme } from '@ghostfolio/common/types'; import { DataSource } from '@ghostfolio/prisma/enums'; export interface AssetProfileDialogParams { - colorScheme: ColorScheme; + colorScheme?: ColorScheme; dataSource: DataSource; deviceType: string; locale: string; diff --git a/apps/client/src/app/components/investment-chart/investment-chart.component.ts b/apps/client/src/app/components/investment-chart/investment-chart.component.ts index f51fc4d641..b3cc0d753e 100644 --- a/apps/client/src/app/components/investment-chart/investment-chart.component.ts +++ b/apps/client/src/app/components/investment-chart/investment-chart.component.ts @@ -7,11 +7,7 @@ import { getZeroLineAnnotation, transformTickToAbbreviation } from '@ghostfolio/common/chart-helper'; -import { - DEFAULT_COLOR_SCHEME, - primaryColorRgb, - secondaryColorRgb -} from '@ghostfolio/common/config'; +import { primaryColorRgb, secondaryColorRgb } from '@ghostfolio/common/config'; import { getLocale, parseDate } from '@ghostfolio/common/helper'; import { LineChartItem } from '@ghostfolio/common/interfaces'; import { InvestmentItem } from '@ghostfolio/common/interfaces/investment-item.interface'; @@ -174,15 +170,13 @@ export class GfInvestmentChartComponent implements OnChanges, OnDestroy { this.chart.update(); } else { - const colorScheme = this.colorScheme ?? DEFAULT_COLOR_SCHEME; - this.chart = new Chart<'bar' | 'line'>( this.chartCanvas().nativeElement, { data: chartData, options: { animation: false, - elements: getChartElementsOptions(colorScheme), + elements: getChartElementsOptions(this.colorScheme), interaction: { intersect: false, mode: 'index' }, maintainAspectRatio: true, plugins: { @@ -210,7 +204,7 @@ export class GfInvestmentChartComponent implements OnChanges, OnDestroy { value: this.savingsRate } : undefined, - yAxis: getZeroLineAnnotation(colorScheme) + yAxis: getZeroLineAnnotation(this.colorScheme) } }, legend: { @@ -218,18 +212,18 @@ export class GfInvestmentChartComponent implements OnChanges, OnDestroy { }, tooltip: this.getTooltipPluginConfiguration(), verticalHoverLine: { - color: getChartBorderColor(colorScheme) + color: getChartBorderColor(this.colorScheme) } }, responsive: true, scales: { x: getTimeAxisOptions({ - colorScheme, borderWidth: this.groupBy ? 0 : 1, + colorScheme: this.colorScheme, locale: this.locale }), y: getValueAxisOptions({ - colorScheme, + colorScheme: this.colorScheme, display: !this.isInPercentage, tickCallback: (tickValue) => { return transformTickToAbbreviation(Number(tickValue)); @@ -238,7 +232,7 @@ export class GfInvestmentChartComponent implements OnChanges, OnDestroy { } }, plugins: [ - getVerticalHoverLinePlugin(this.chartCanvas(), colorScheme) + getVerticalHoverLinePlugin(this.chartCanvas(), this.colorScheme) ], type: this.groupBy ? 'bar' : 'line' } @@ -251,7 +245,7 @@ export class GfInvestmentChartComponent implements OnChanges, OnDestroy { TooltipOptions<'bar' | 'line'> > { return getTimeSeriesTooltipOptions<'bar' | 'line'>({ - colorScheme: this.colorScheme ?? DEFAULT_COLOR_SCHEME, + colorScheme: this.colorScheme, currency: this.isInPercentage ? undefined : this.currency, groupBy: this.groupBy, locale: this.isInPercentage ? undefined : this.locale, diff --git a/libs/common/src/lib/chart-helper.ts b/libs/common/src/lib/chart-helper.ts index 23a00ca973..58f370d06d 100644 --- a/libs/common/src/lib/chart-helper.ts +++ b/libs/common/src/lib/chart-helper.ts @@ -41,12 +41,12 @@ export function formatGroupedDate({ return format(date, DATE_FORMAT); } -export function getChartBorderColor(colorScheme: ColorScheme) { +export function getChartBorderColor(colorScheme?: ColorScheme) { return `rgba(${getTextColor(colorScheme)}, 0.1)`; } export function getChartElementsOptions( - colorScheme: ColorScheme + colorScheme?: ColorScheme ): ChartOptions<'bar' | 'line'>['elements'] { return { line: { @@ -67,7 +67,7 @@ export function getTimeAxisOptions({ locale = getLocale() }: { borderWidth?: number; - colorScheme: ColorScheme; + colorScheme?: ColorScheme; display?: boolean; locale?: string; }): ScaleOptions<'time'> { @@ -95,7 +95,7 @@ export function getTooltipOptions({ locale = getLocale(), unit = '' }: { - colorScheme: ColorScheme; + colorScheme?: ColorScheme; currency?: string; groupBy?: GroupBy; locale?: string; @@ -174,7 +174,7 @@ export function getValueAxisOptions({ highlightedValues = [], tickCallback }: { - colorScheme: ColorScheme; + colorScheme?: ColorScheme; display?: boolean; highlightedValues?: number[]; tickCallback: ( @@ -214,7 +214,7 @@ export function getValueAxisOptions({ export function getVerticalHoverLinePlugin( chartCanvas: ElementRef, - colorScheme: ColorScheme + colorScheme?: ColorScheme ): Plugin { return { afterDatasetsDraw: (chart, _, options) => { @@ -249,7 +249,7 @@ export function getVerticalHoverLinePlugin( } export function getZeroLineAnnotation( - colorScheme: ColorScheme + colorScheme?: ColorScheme ): AnnotationOptions<'line'> { return { borderColor: getChartBorderColor(colorScheme), diff --git a/libs/common/src/lib/config.ts b/libs/common/src/lib/config.ts index 03d36f577b..6ff492f671 100644 --- a/libs/common/src/lib/config.ts +++ b/libs/common/src/lib/config.ts @@ -8,7 +8,7 @@ import { import { JobOptions, JobStatus } from 'bull'; import ms from 'ms'; -import { ColorScheme, DateRange } from './types'; +import { DateRange } from './types'; export const ghostfolioPrefix = 'GF'; @@ -100,7 +100,6 @@ export const PORTFOLIO_SNAPSHOT_COMPUTATION_QUEUE_PRIORITY_LOW = export const STATISTICS_GATHERING_QUEUE = 'STATISTICS_GATHERING_QUEUE'; -export const DEFAULT_COLOR_SCHEME: ColorScheme = 'LIGHT'; export const DEFAULT_CURRENCY = 'USD'; export const DEFAULT_DATE_FORMAT_MONTH_YEAR = 'MMM yyyy'; export const DEFAULT_DATE_RANGE: DateRange = 'max'; diff --git a/libs/common/src/lib/helper.spec.ts b/libs/common/src/lib/helper.spec.ts index d1130f0d75..b7e7635670 100644 --- a/libs/common/src/lib/helper.spec.ts +++ b/libs/common/src/lib/helper.spec.ts @@ -13,6 +13,7 @@ import { isAccountExcluded, isCurrency, isCurrencySymbol, + isDarkColorScheme, isSplitRatio, isValidCurrencyCode, isValidCustomAssetProfileSymbol, @@ -348,6 +349,40 @@ describe('Helper', () => { }); }); + describe('Is dark color scheme', () => { + const mockPrefersColorSchemeDark = (matches: boolean) => { + window.matchMedia = jest.fn(() => { + return { matches } as MediaQueryList; + }); + }; + + afterEach(() => { + Reflect.deleteProperty(window, 'matchMedia'); + }); + + it('Dark color scheme with operating system in light mode', () => { + mockPrefersColorSchemeDark(false); + expect(isDarkColorScheme('DARK')).toEqual(true); + }); + + it('Light color scheme with operating system in dark mode', () => { + mockPrefersColorSchemeDark(true); + expect(isDarkColorScheme('LIGHT')).toEqual(false); + }); + + it('Auto color scheme with operating system in dark mode', () => { + mockPrefersColorSchemeDark(true); + expect(isDarkColorScheme()).toEqual(true); + expect(isDarkColorScheme(null)).toEqual(true); + }); + + it('Auto color scheme with operating system in light mode', () => { + mockPrefersColorSchemeDark(false); + expect(isDarkColorScheme()).toEqual(false); + expect(isDarkColorScheme(null)).toEqual(false); + }); + }); + describe('Is split ratio', () => { it('Forward split', () => { expect(isSplitRatio({ denominator: 1, numerator: 2 })).toEqual(true); diff --git a/libs/common/src/lib/helper.ts b/libs/common/src/lib/helper.ts index e10ca215cc..2a76261dae 100644 --- a/libs/common/src/lib/helper.ts +++ b/libs/common/src/lib/helper.ts @@ -345,12 +345,9 @@ export function getAssetProfileIdentifier({ return `${dataSource}-${symbol}`; } -export function getBackgroundColor(aColorScheme: ColorScheme) { +export function getBackgroundColor(aColorScheme?: ColorScheme) { return getCssVariable( - aColorScheme === 'DARK' || - window.matchMedia('(prefers-color-scheme: dark)').matches - ? '--dark-background' - : '--light-background' + isDarkColorScheme(aColorScheme) ? '--dark-background' : '--light-background' ); } @@ -531,10 +528,9 @@ export function getSum(aArray: Big[]) { return new Big(0); } -export function getTextColor(aColorScheme: ColorScheme) { +export function getTextColor(aColorScheme?: ColorScheme) { const cssVariable = getCssVariable( - aColorScheme === 'DARK' || - window.matchMedia('(prefers-color-scheme: dark)').matches + isDarkColorScheme(aColorScheme) ? '--light-primary-text' : '--dark-primary-text' ); @@ -612,6 +608,14 @@ export function isCurrencySymbol(aSymbol: string) { ); } +export function isDarkColorScheme(aColorScheme?: ColorScheme | null) { + if (aColorScheme) { + return aColorScheme === 'DARK'; + } + + return window.matchMedia('(prefers-color-scheme: dark)').matches; +} + export function isDerivedCurrency(aCurrency: string) { if (aCurrency === 'USX') { return true; diff --git a/libs/ui/src/lib/chart/chart.options.ts b/libs/ui/src/lib/chart/chart.options.ts index cd2802cfb3..277704b76f 100644 --- a/libs/ui/src/lib/chart/chart.options.ts +++ b/libs/ui/src/lib/chart/chart.options.ts @@ -12,7 +12,7 @@ export function getTimeSeriesTooltipOptions({ locale, unit }: { - colorScheme: ColorScheme; + colorScheme?: ColorScheme; currency?: string; groupBy?: GroupBy; locale?: string; diff --git a/libs/ui/src/lib/line-chart/line-chart.component.ts b/libs/ui/src/lib/line-chart/line-chart.component.ts index 5dbb6cc31c..49eae2f5df 100644 --- a/libs/ui/src/lib/line-chart/line-chart.component.ts +++ b/libs/ui/src/lib/line-chart/line-chart.component.ts @@ -4,11 +4,7 @@ import { getValueAxisOptions, getVerticalHoverLinePlugin } from '@ghostfolio/common/chart-helper'; -import { - DEFAULT_COLOR_SCHEME, - primaryColorRgb, - secondaryColorRgb -} from '@ghostfolio/common/config'; +import { primaryColorRgb, secondaryColorRgb } from '@ghostfolio/common/config'; import { getBackgroundColor, getLocale } from '@ghostfolio/common/helper'; import { LineChartItem } from '@ghostfolio/common/interfaces'; import { ColorScheme } from '@ghostfolio/common/types'; @@ -56,7 +52,7 @@ export class GfLineChartComponent { @Input() benchmarkDataItems: LineChartItem[] = []; @Input() benchmarkLabel = ''; - @Input() colorScheme: ColorScheme = DEFAULT_COLOR_SCHEME; + @Input() colorScheme?: ColorScheme; @Input() currency: string; @Input() historicalDataItems: LineChartItem[]; @Input() isAnimated = false; diff --git a/libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts b/libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts index e90c446b41..ff61830f04 100644 --- a/libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts +++ b/libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts @@ -1,5 +1,5 @@ import { getTooltipOptions } from '@ghostfolio/common/chart-helper'; -import { DEFAULT_COLOR_SCHEME, UNKNOWN_KEY } from '@ghostfolio/common/config'; +import { UNKNOWN_KEY } from '@ghostfolio/common/config'; import { getLocale, getSum, getTextColor } from '@ghostfolio/common/helper'; import { PortfolioPosition } from '@ghostfolio/common/interfaces'; import { ColorScheme } from '@ghostfolio/common/types'; @@ -124,7 +124,7 @@ export class GfPortfolioProportionChartComponent }; } = {}; - const textColor = getTextColor(this.colorScheme ?? DEFAULT_COLOR_SCHEME); + const textColor = getTextColor(this.colorScheme); this.colorMap = { [this.OTHER_KEY]: `rgba(${textColor}, 0.24)`, @@ -448,7 +448,7 @@ export class GfPortfolioProportionChartComponent ): Partial> { return { ...getTooltipOptions({ - colorScheme: this.colorScheme ?? DEFAULT_COLOR_SCHEME, + colorScheme: this.colorScheme, currency: this.baseCurrency, locale: this.locale }), diff --git a/libs/ui/src/lib/treemap-chart/treemap-chart.component.stories.ts b/libs/ui/src/lib/treemap-chart/treemap-chart.component.stories.ts index 04ea5c65f0..72f34e8027 100644 --- a/libs/ui/src/lib/treemap-chart/treemap-chart.component.stories.ts +++ b/libs/ui/src/lib/treemap-chart/treemap-chart.component.stories.ts @@ -1,5 +1,3 @@ -import { DEFAULT_COLOR_SCHEME } from '@ghostfolio/common/config'; - import { CommonModule } from '@angular/common'; import { moduleMetadata } from '@storybook/angular'; import type { Meta, StoryObj } from '@storybook/angular'; @@ -38,7 +36,7 @@ export const Default: Story = { args: { holdings, baseCurrency: 'USD', - colorScheme: DEFAULT_COLOR_SCHEME, + colorScheme: 'LIGHT', cursor: undefined, dateRange: 'mtd', locale: 'en-US' From 11749d0c9adf829f011f831af8a2ed52ad61d17a Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Wed, 30 Sep 2026 17:14:31 +0200 Subject: [PATCH 16/27] Bugfix/sustainable retirement income for redacted values (#7976) * Fix sustainable retirement income for redacted values * Update changelog --- CHANGELOG.md | 1 + .../portfolio/fire/fire-page.component.ts | 6 ++++ .../app/pages/portfolio/fire/fire-page.html | 30 +++++++++++++++---- 3 files changed, 32 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index be16617266..a31f5f7b3a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -24,6 +24,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Fixed the allocation column of the top holdings of ETFs on the allocations page after a change of the user settings - Fixed the value column of the top holdings of ETFs on the allocations page in the _Presenter View_ - Fixed the projected sustainable retirement income on the _FIRE_ page for a projected total amount of zero (experimental) +- Fixed the sustainable retirement income on the _FIRE_ page for redacted values - Fixed the emergency fund in the portfolio summary for redacted values - Fixed the redaction of `valueInBaseCurrency` in the holdings of ETFs in a restricted view diff --git a/apps/client/src/app/pages/portfolio/fire/fire-page.component.ts b/apps/client/src/app/pages/portfolio/fire/fire-page.component.ts index 33b877d42f..a6a6c7dfd8 100644 --- a/apps/client/src/app/pages/portfolio/fire/fire-page.component.ts +++ b/apps/client/src/app/pages/portfolio/fire/fire-page.component.ts @@ -8,6 +8,7 @@ import { User } from '@ghostfolio/common/interfaces'; import { hasPermission, permissions } from '@ghostfolio/common/permissions'; +import { hasScope, scopes } from '@ghostfolio/common/scopes'; import { GfFireCalculatorComponent } from '@ghostfolio/ui/fire-calculator'; import { GfPremiumIndicatorComponent } from '@ghostfolio/ui/premium-indicator'; import { DataService } from '@ghostfolio/ui/services'; @@ -53,6 +54,7 @@ export class GfFirePageComponent implements OnInit { protected fireWealth: FireWealth; protected hasImpersonationId: boolean; + protected hasPermissionToShowValues: boolean; protected hasPermissionToUpdateUserSettings: boolean; protected isLoading = false; protected retirementDate: Date; @@ -142,6 +144,10 @@ export class GfFirePageComponent implements OnInit { if (state?.user) { this.user = state.user; + this.hasPermissionToShowValues = + hasScope(this.user.scopes, scopes.portfolioReadValues) && + !this.user.settings.isRestrictedView; + this.hasPermissionToUpdateUserSettings = this.user.subscription?.type === SubscriptionType.Basic ? false 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 7315f10cb0..3f12ddc126 100644 --- a/apps/client/src/app/pages/portfolio/fire/fire-page.html +++ b/apps/client/src/app/pages/portfolio/fire/fire-page.html @@ -73,7 +73,11 @@ [isCurrency]="true" [locale]="user?.settings?.locale" [unit]="user?.settings?.baseCurrency" - [value]="withdrawalRatePerYear?.toNumber()" + [value]=" + hasPermissionToShowValues + ? withdrawalRatePerYear?.toNumber() + : null + " /> per year @@ -84,7 +88,11 @@ [isCurrency]="true" [locale]="user?.settings?.locale" [unit]="user?.settings?.baseCurrency" - [value]="withdrawalRatePerMonth?.toNumber()" + [value]=" + hasPermissionToShowValues + ? withdrawalRatePerMonth?.toNumber() + : null + " /> per month, based on your total assets of @@ -94,7 +102,11 @@ [isCurrency]="true" [locale]="user?.settings?.locale" [unit]="user?.settings?.baseCurrency" - [value]="fireWealth?.today.valueInBaseCurrency" + [value]=" + hasPermissionToShowValues + ? fireWealth?.today.valueInBaseCurrency + : null + " /> and a safe withdrawal rate (SWR) of @@ -137,7 +149,11 @@ [isCurrency]="true" [locale]="user?.settings?.locale" [unit]="user?.settings?.baseCurrency" - [value]="withdrawalRatePerYearProjected?.toNumber()" + [value]=" + hasPermissionToShowValues + ? withdrawalRatePerYearProjected?.toNumber() + : null + " /> per year @@ -148,7 +164,11 @@ [isCurrency]="true" [locale]="user?.settings?.locale" [unit]="user?.settings?.baseCurrency" - [value]="withdrawalRatePerMonthProjected?.toNumber()" + [value]=" + hasPermissionToShowValues + ? withdrawalRatePerMonthProjected?.toNumber() + : null + " /> per month, assuming a From 13a1aeab176dbc7152725de2121b180930d37a9c Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Wed, 30 Sep 2026 17:34:58 +0200 Subject: [PATCH 17/27] Bugfix/data source transformation of symbol profile in activities (#7983) * Fix data source transformation of symbol profile in activities * Update changelog --- CHANGELOG.md | 1 + .../transform-data-source-in-response.interceptor.ts | 2 ++ 2 files changed, 3 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index a31f5f7b3a..8b41f04751 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -27,6 +27,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Fixed the sustainable retirement income on the _FIRE_ page for redacted values - Fixed the emergency fund in the portfolio summary for redacted values - Fixed the redaction of `valueInBaseCurrency` in the holdings of ETFs in a restricted view +- Resolved the data source transformation in the asset profile relation of the activities ## 3.75.0 - 2026-09-28 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 31bfb620ed..339b91a2f7 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 @@ -83,6 +83,7 @@ export class TransformDataSourceInResponseInterceptor< '["filters.dataSource"]', 'activities[*].assetProfile.dataSource', 'activities[*].dataSource', + 'activities[*].SymbolProfile.dataSource', 'assetProfile.dataSource', 'benchmarks[*].dataSource', 'errors[*].dataSource', @@ -93,6 +94,7 @@ export class TransformDataSourceInResponseInterceptor< 'items[*].dataSource', 'latestActivities[*].assetProfile.dataSource', 'settings["filters.dataSource"]', + 'SymbolProfile.dataSource', 'watchlist[*].dataSource' ] }); From f14d2ce2eba5ca1f9227a498e57510142c2ec8e5 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Wed, 30 Sep 2026 17:35:59 +0200 Subject: [PATCH 18/27] Bugfix/redaction of symbol profile in activities (#7977) * Fix redaction of symbol profile in activities * Update changelog --- CHANGELOG.md | 1 + apps/api/src/helper/object.helper.spec.ts | 40 +++++++++++++++++++++++ libs/common/src/lib/config.ts | 6 ++++ 3 files changed, 47 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8b41f04751..b2b3725a97 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -27,6 +27,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Fixed the sustainable retirement income on the _FIRE_ page for redacted values - Fixed the emergency fund in the portfolio summary for redacted values - Fixed the redaction of `valueInBaseCurrency` in the holdings of ETFs in a restricted view +- Fixed the redaction of `comment`, `scraperConfiguration` and `symbolMapping` in the asset profile relation of the activities in a restricted view - Resolved the data source transformation in the asset profile relation of the activities ## 3.75.0 - 2026-09-28 diff --git a/apps/api/src/helper/object.helper.spec.ts b/apps/api/src/helper/object.helper.spec.ts index ca487ed8f7..9776232a0b 100644 --- a/apps/api/src/helper/object.helper.spec.ts +++ b/apps/api/src/helper/object.helper.spec.ts @@ -3082,6 +3082,20 @@ describe('redactAttributes', () => { feeInBaseCurrency: 18.2, id: '8c623328-6035-4b5f-b6d5-702cc1c9c56b', quantity: 50, + // The relation of the database is part of the response next to the + // asset profile + SymbolProfile: { + comment: 'Reviewed by the administrator', + name: 'Apple Inc', + scraperConfiguration: { + headers: { Authorization: 'Bearer TOKEN' }, + mode: 'lazy', + selector: '.price', + url: 'https://example.org/get_price' + }, + symbol: 'AAPL', + symbolMapping: { YAHOO: 'AAPL' } + }, type: 'BUY', unitPrice: 220.79, value: 11039.5, @@ -3111,6 +3125,13 @@ describe('redactAttributes', () => { feeInBaseCurrency: null, id: '8c623328-6035-4b5f-b6d5-702cc1c9c56b', quantity: null, + SymbolProfile: { + comment: null, + name: 'Apple Inc', + scraperConfiguration: null, + symbol: 'AAPL', + symbolMapping: null + }, type: 'BUY', // A price per unit stays visible, like the average price and the market // price of a holding @@ -3169,6 +3190,18 @@ describe('redactAttributes', () => { currency: 'USD', fee: 19.9, quantity: 50, + SymbolProfile: { + comment: 'Reviewed by the administrator', + name: 'Apple Inc', + scraperConfiguration: { + headers: { Authorization: 'Bearer TOKEN' }, + mode: 'lazy', + selector: '.price', + url: 'https://example.org/get_price' + }, + symbol: 'AAPL', + symbolMapping: { YAHOO: 'AAPL' } + }, type: 'BUY', unitPrice: 220.79, value: 11039.5, @@ -3194,6 +3227,13 @@ describe('redactAttributes', () => { currency: 'USD', fee: null, quantity: null, + SymbolProfile: { + comment: null, + name: 'Apple Inc', + scraperConfiguration: null, + symbol: 'AAPL', + symbolMapping: null + }, type: 'BUY', unitPrice: 220.79, value: null, diff --git a/libs/common/src/lib/config.ts b/libs/common/src/lib/config.ts index 6ff492f671..5a8aecff36 100644 --- a/libs/common/src/lib/config.ts +++ b/libs/common/src/lib/config.ts @@ -138,6 +138,9 @@ export const DEFAULT_REDACTED_PATHS = [ 'activities[*].feeInAssetProfileCurrency', 'activities[*].feeInBaseCurrency', 'activities[*].quantity', + 'activities[*].SymbolProfile.comment', + 'activities[*].SymbolProfile.scraperConfiguration', + 'activities[*].SymbolProfile.symbolMapping', 'activities[*].value', 'activities[*].valueInBaseCurrency', 'assetProfile.comment', @@ -180,6 +183,9 @@ export const DEFAULT_REDACTED_PATHS = [ 'settings.emergencyFund', 'settings.projectedTotalAmount', 'settings.savingsRate', + 'SymbolProfile.comment', + 'SymbolProfile.scraperConfiguration', + 'SymbolProfile.symbolMapping', 'totalBalanceInBaseCurrency', 'totalDividendInBaseCurrency', 'totalInterestInBaseCurrency', From d4e2adc6dff17ef720c52a9f81fc0fc072786d13 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Wed, 30 Sep 2026 17:36:54 +0200 Subject: [PATCH 19/27] Feature/add refresh action to user detail dialog menu in admin control (#7978) * Add refresh action * Update changelog --- CHANGELOG.md | 1 + .../user-detail-dialog.component.ts | 44 +++++++++++-------- .../user-detail-dialog.html | 4 ++ 3 files changed, 30 insertions(+), 19 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b2b3725a97..a2759a3acd 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 _Refresh_ action to the user detail dialog menu in the admin control panel - Added the total column to the table of the tag management in the admin control panel ### 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 926fb8d8cd..8d12d0ba03 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 @@ -91,25 +91,7 @@ export class GfUserDetailDialogComponent implements OnInit { } public ngOnInit() { - this.adminService - .fetchUserById(this.data.userId) - .pipe( - takeUntilDestroyed(this.destroyRef), - catchError(() => { - this.dialogRef.close(); - - return EMPTY; - }) - ) - .subscribe((user) => { - this.user = user; - - this.subscriptionsDataSource.data = this.user.subscriptions ?? []; - - this.isLoading = false; - - this.changeDetectorRef.markForCheck(); - }); + this.initialize(); } protected deleteUser() { @@ -141,6 +123,30 @@ export class GfUserDetailDialogComponent implements OnInit { : $localize`Coupon`; } + protected initialize() { + this.isLoading = true; + + this.adminService + .fetchUserById(this.data.userId) + .pipe( + takeUntilDestroyed(this.destroyRef), + catchError(() => { + this.dialogRef.close(); + + return EMPTY; + }) + ) + .subscribe((user) => { + this.user = user; + + this.subscriptionsDataSource.data = this.user.subscriptions ?? []; + + this.isLoading = false; + + this.changeDetectorRef.markForCheck(); + }); + } + protected onClose() { this.dialogRef.close(); } 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 efc4fe5b43..4cc5b8a260 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 @@ -13,6 +13,10 @@ class="no-max-width" xPosition="before" > + +
+
+
+ Last Request +
+
+ @if (subscriptionsDataSource.data.length > 0) {
diff --git a/apps/client/src/app/util/date.util.ts b/apps/client/src/app/util/date.util.ts new file mode 100644 index 0000000000..a7dd0afd8c --- /dev/null +++ b/apps/client/src/app/util/date.util.ts @@ -0,0 +1,28 @@ +import { getDateFnsLocale } from '@ghostfolio/common/helper'; + +import { + differenceInSeconds, + formatDistanceToNowStrict, + parseISO +} from 'date-fns'; + +export function formatRelativeTime({ + date, + language +}: { + date: string; + language?: string; +}) { + if (date) { + const distanceString = formatDistanceToNowStrict(parseISO(date), { + addSuffix: true, + locale: getDateFnsLocale(language) + }); + + return Math.abs(differenceInSeconds(parseISO(date), new Date())) < 60 + ? $localize`just now` + : distanceString; + } + + return ''; +} From f05fbdd3b016fc4c271e2f694f4577c05eba47b1 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Wed, 30 Sep 2026 19:05:18 +0200 Subject: [PATCH 21/27] Bugfix/top holdings on allocations page (#7980) * Fix top holdings * Update changelog --- CHANGELOG.md | 1 + .../allocations/allocations-page.component.ts | 17 +++++++++-------- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 00d1c71dfe..b4d9031a0f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -24,6 +24,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Fixed the colors of the investment chart component (dark mode) - Fixed the colors of the charts if the appearance is set to light and the operating system uses dark mode - Fixed the allocation column of the top holdings of ETFs on the allocations page after a change of the user settings +- Fixed the allocation column of the top holdings of funds other than ETFs on the allocations page - Fixed the value column of the top holdings of ETFs on the allocations page in the _Presenter View_ - Fixed the projected sustainable retirement income on the _FIRE_ page for a projected total amount of zero (experimental) - Fixed the sustainable retirement income on the _FIRE_ page for redacted values 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 647bc761e3..cbdacaa3f1 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 @@ -130,7 +130,7 @@ export class GfAllocationsPageComponent implements OnInit { value: number; }; }; - protected topHoldings: HoldingWithParents[]; + protected topHoldings: HoldingWithParents[] | undefined; protected readonly UNKNOWN_KEY = UNKNOWN_KEY; protected user: User; @@ -360,6 +360,7 @@ export class GfAllocationsPageComponent implements OnInit { value: 0 } }; + this.topHoldings = undefined; } private initializeAllocationsData() { @@ -387,7 +388,7 @@ export class GfAllocationsPageComponent implements OnInit { } = {}; let totalValueExcludingCashPositions = 0; - let totalValueInEtf = 0; + let totalValueInFunds = 0; for (const position of this.portfolioDetails.holdings) { const assetProfileIdentifier = getAssetProfileIdentifier( @@ -463,6 +464,8 @@ export class GfAllocationsPageComponent implements OnInit { } if (position.assetProfile.holdings.length > 0) { + totalValueInFunds += this.holdings[assetProfileIdentifier].value; + for (const { allocationInPercentage, name, @@ -513,10 +516,6 @@ export class GfAllocationsPageComponent implements OnInit { } } - if (this.holdings[assetProfileIdentifier].assetSubClass === 'ETF') { - totalValueInEtf += this.holdings[assetProfileIdentifier].value; - } - const symbol = position.assetProfile.symbol; const value = this.extractValue(position); @@ -593,7 +592,7 @@ export class GfAllocationsPageComponent implements OnInit { return { name, allocationInPercentage: - totalValueInEtf > 0 ? value / totalValueInEtf : 0, + totalValueInFunds > 0 ? value / totalValueInFunds : 0, parents: this.portfolioDetails.holdings .map((holding) => { if (holding.assetProfile.holdings.length > 0) { @@ -610,7 +609,9 @@ export class GfAllocationsPageComponent implements OnInit { isNumber(currentParentHolding.valueInBaseCurrency) ? { allocationInPercentage: - currentParentHolding.valueInBaseCurrency / value, + value > 0 + ? currentParentHolding.valueInBaseCurrency / value + : 0, name: holding.assetProfile.name ?? '', position: holding, symbol: holding.assetProfile.symbol, From a73809fff1e536938335ff5d7c72015980bedba9 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Wed, 30 Sep 2026 19:43:25 +0200 Subject: [PATCH 22/27] Task/add loading indicator to platform and tag management of admin panel (#7982) * Add loading indicator * Update changelog --- CHANGELOG.md | 2 ++ .../admin-platform/admin-platform.component.html | 11 +++++++++++ .../admin-platform/admin-platform.component.ts | 10 ++++++++++ .../app/components/admin-tag/admin-tag.component.html | 11 +++++++++++ .../app/components/admin-tag/admin-tag.component.ts | 9 +++++++++ 5 files changed, 43 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index b4d9031a0f..46f30da1b2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added +- Added a loading indicator to the platform management of the admin control panel +- Added a loading indicator to the tag management of the admin control panel - Added a _Refresh_ action to the user detail dialog menu in the admin control panel - Added the total column to the table of the tag management in the admin control panel 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 c349dd9b8a..b281011abb 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 @@ -103,6 +103,17 @@
+@if (isLoading) { + +} + (); + protected readonly displayedColumns = [ 'icon', 'name', @@ -68,12 +71,15 @@ export class GfAdminPlatformComponent implements OnInit { 'accounts', 'actions' ]; + + protected isLoading = false; protected readonly pageSize = DEFAULT_PAGE_SIZE; protected platforms: Platform[]; private readonly deviceType = computed( () => this.deviceDetectorService.deviceInfo().deviceType ); + private readonly paginator = viewChild.required(MatPaginator); private readonly sort = viewChild.required(MatSort); @@ -149,6 +155,8 @@ export class GfAdminPlatformComponent implements OnInit { } private fetchPlatforms() { + this.isLoading = true; + this.adminService .fetchPlatforms() .pipe(takeUntilDestroyed(this.destroyRef)) @@ -162,6 +170,8 @@ export class GfAdminPlatformComponent implements OnInit { this.dataService.updateInfo(); + this.isLoading = false; + this.changeDetectorRef.markForCheck(); }); } 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 83f7b559d4..2e8750093a 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 @@ -141,6 +141,17 @@
+@if (isLoading) { + +} + this.deviceDetectorService.deviceInfo().deviceType ); + private readonly paginator = viewChild.required(MatPaginator); private readonly sort = viewChild.required(MatSort); @@ -163,6 +168,8 @@ export class GfAdminTagComponent implements OnInit { } private fetchTags() { + this.isLoading = true; + this.dataService .fetchTags() .pipe(takeUntilDestroyed(this.destroyRef)) @@ -185,6 +192,8 @@ export class GfAdminTagComponent implements OnInit { this.dataService.updateInfo(); + this.isLoading = false; + this.changeDetectorRef.markForCheck(); }); } From 4d63d5f4d63b1060b675aafd8d55d3c34c25511b Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Wed, 30 Sep 2026 19:44:14 +0200 Subject: [PATCH 23/27] Task/update chart colors on theme change (#7981) * Update chart colors on change of color scheme * Update changelog --- CHANGELOG.md | 1 + apps/client/src/app/app.component.ts | 34 ++++++++++--------- .../benchmark-comparator.component.ts | 22 ++++++++++-- .../interfaces/interfaces.ts | 2 +- .../investment-chart.component.ts | 20 +++++++++-- libs/common/src/lib/chart-helper.ts | 12 ++++--- libs/ui/src/lib/chart/chart.color-scheme.ts | 8 +++++ libs/ui/src/lib/chart/index.ts | 1 + .../fire-calculator.component.ts | 24 +++++++++++-- .../lib/line-chart/line-chart.component.ts | 20 +++++++++-- .../portfolio-proportion-chart.component.ts | 7 ++++ .../treemap-chart/treemap-chart.component.ts | 9 ++++- 12 files changed, 128 insertions(+), 32 deletions(-) create mode 100644 libs/ui/src/lib/chart/chart.color-scheme.ts diff --git a/CHANGELOG.md b/CHANGELOG.md index 46f30da1b2..17ad555200 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 charts to update their colors if the appearance is set to auto and the operating system switches between light and dark mode - Extended the emergency fund dialog in the portfolio summary to include the currency suffix - Extended the user detail dialog in the users section of the admin control panel to include the last request - Migrated the client to the code generated by the new `prisma-client` generator of _Prisma_ diff --git a/apps/client/src/app/app.component.ts b/apps/client/src/app/app.component.ts index a1f8ebfe9c..fba00e1c47 100644 --- a/apps/client/src/app/app.component.ts +++ b/apps/client/src/app/app.component.ts @@ -1,4 +1,8 @@ -import { getCssVariable, isDarkColorScheme } from '@ghostfolio/common/helper'; +import { + getBackgroundColor, + getCssVariable, + isDarkColorScheme +} from '@ghostfolio/common/helper'; import { AssetProfileIdentifier, InfoItem, @@ -227,7 +231,7 @@ export class GfAppComponent implements OnInit { : !!this.info?.subscriptionOffer?.coupon || !!this.info?.subscriptionOffer?.durationExtension; - this.initializeTheme(this.user?.settings.colorScheme); + this.toggleTheme(this.user?.settings.colorScheme); this.changeDetectorRef.markForCheck(); }); @@ -259,17 +263,19 @@ export class GfAppComponent implements OnInit { document.location.href = `/${document.documentElement.lang}`; } - private initializeTheme(userPreferredColorScheme?: ColorScheme) { - this.toggleTheme(isDarkColorScheme(userPreferredColorScheme)); + private initializeTheme() { + this.toggleTheme(); // Default chart styles Chart.defaults.font.family = getCssVariable('--font-family-sans-serif'); - window.matchMedia('(prefers-color-scheme: dark)').addListener((event) => { - if (!this.user?.settings.colorScheme) { - this.toggleTheme(event.matches); - } - }); + window + .matchMedia('(prefers-color-scheme: dark)') + .addEventListener('change', () => { + if (!this.user?.settings.colorScheme) { + this.toggleTheme(); + } + }); } private openHoldingDetailDialog({ @@ -340,12 +346,8 @@ export class GfAppComponent implements OnInit { }); } - private toggleTheme(isDarkTheme: boolean) { - const themeColor = getCssVariable( - isDarkTheme ? '--dark-background' : '--light-background' - ); - - if (isDarkTheme) { + private toggleTheme(userPreferredColorScheme?: ColorScheme) { + if (isDarkColorScheme(userPreferredColorScheme)) { this.document.body.classList.add('theme-dark'); this.document.body.classList.remove('theme-light'); } else { @@ -355,6 +357,6 @@ export class GfAppComponent implements OnInit { this.document .querySelector('meta[name="theme-color"]') - ?.setAttribute('content', themeColor); + ?.setAttribute('content', getBackgroundColor(userPreferredColorScheme)); } } diff --git a/apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts b/apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts index ef14b404e4..72241f0454 100644 --- a/apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts +++ b/apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts @@ -15,6 +15,7 @@ import { ColorScheme } from '@ghostfolio/common/types'; import type { SymbolProfile } from '@ghostfolio/prisma/browser'; import { getTimeSeriesTooltipOptions, + onPrefersColorSchemeChange, registerChartConfiguration } from '@ghostfolio/ui/chart'; import { GfPremiumIndicatorComponent } from '@ghostfolio/ui/premium-indicator'; @@ -27,6 +28,7 @@ import { OnChanges, OnDestroy, output, + SimpleChanges, viewChild } from '@angular/core'; import { FormsModule, ReactiveFormsModule } from '@angular/forms'; @@ -68,7 +70,7 @@ export class GfBenchmarkComparatorComponent implements OnChanges, OnDestroy { public readonly benchmark = input>(); public readonly benchmarkDataItems = input([]); public readonly benchmarks = input[]>(); - public readonly colorScheme = input.required(); + public readonly colorScheme = input(); public readonly isLoading = input(); public readonly locale = input(getLocale()); public readonly performanceDataItems = input.required(); @@ -76,7 +78,7 @@ export class GfBenchmarkComparatorComponent implements OnChanges, OnDestroy { public readonly benchmarkChanged = output(); - protected chart: Chart<'line'>; + protected chart?: Chart<'line'>; protected hasPermissionToAccessAdminControl: boolean; protected readonly routerLinkAdminControlMarketData = internalRoutes.adminControl.subRoutes.marketData.routerLink; @@ -96,10 +98,24 @@ export class GfBenchmarkComparatorComponent implements OnChanges, OnDestroy { registerChartConfiguration(); + onPrefersColorSchemeChange(() => { + if (this.chart && !this.colorScheme()) { + this.chart.destroy(); + this.chart = undefined; + + this.initialize(); + } + }); + addIcons({ arrowForwardOutline }); } - public ngOnChanges() { + public ngOnChanges(changes: SimpleChanges) { + if (changes.colorScheme && this.chart) { + this.chart.destroy(); + this.chart = undefined; + } + this.hasPermissionToAccessAdminControl = hasPermission( this.user()?.permissions, permissions.accessAdminControl 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 5f33db42a3..a03fd93992 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 @@ -3,7 +3,7 @@ import { DataSource } from '@ghostfolio/prisma/enums'; export interface HoldingDetailDialogParams { baseCurrency: string; - colorScheme: ColorScheme; + colorScheme?: ColorScheme; dataSource: DataSource; deviceType: string; hasPermissionToAccessAdminControl: boolean; diff --git a/apps/client/src/app/components/investment-chart/investment-chart.component.ts b/apps/client/src/app/components/investment-chart/investment-chart.component.ts index b3cc0d753e..a1dc6a28f9 100644 --- a/apps/client/src/app/components/investment-chart/investment-chart.component.ts +++ b/apps/client/src/app/components/investment-chart/investment-chart.component.ts @@ -14,6 +14,7 @@ import { InvestmentItem } from '@ghostfolio/common/interfaces/investment-item.in import { ColorScheme, GroupBy } from '@ghostfolio/common/types'; import { getTimeSeriesTooltipOptions, + onPrefersColorSchemeChange, registerChartConfiguration } from '@ghostfolio/ui/chart'; @@ -24,6 +25,7 @@ import { Input, OnChanges, OnDestroy, + SimpleChanges, viewChild } from '@angular/core'; import { @@ -67,7 +69,7 @@ export class GfInvestmentChartComponent implements OnChanges, OnDestroy { private readonly chartCanvas = viewChild.required>('chartCanvas'); - private chart: Chart<'bar' | 'line'>; + private chart?: Chart<'bar' | 'line'>; private investments: InvestmentItem[]; private values: LineChartItem[]; @@ -84,9 +86,23 @@ export class GfInvestmentChartComponent implements OnChanges, OnDestroy { ); registerChartConfiguration(); + + onPrefersColorSchemeChange(() => { + if (this.chart && !this.colorScheme) { + this.chart.destroy(); + this.chart = undefined; + + this.initialize(); + } + }); } - public ngOnChanges() { + public ngOnChanges(changes: SimpleChanges) { + if (changes.colorScheme && this.chart) { + this.chart.destroy(); + this.chart = undefined; + } + if (this.benchmarkDataItems && this.historicalDataItems) { this.initialize(); } diff --git a/libs/common/src/lib/chart-helper.ts b/libs/common/src/lib/chart-helper.ts index 58f370d06d..bad13d0bac 100644 --- a/libs/common/src/lib/chart-helper.ts +++ b/libs/common/src/lib/chart-helper.ts @@ -101,9 +101,11 @@ export function getTooltipOptions({ locale?: string; unit?: string; }): Partial> { + const textColor = getTextColor(colorScheme); + return { backgroundColor: getBackgroundColor(colorScheme), - bodyColor: `rgb(${getTextColor(colorScheme)})`, + bodyColor: `rgb(${textColor})`, borderWidth: 1, borderColor: getChartBorderColor(colorScheme), // @ts-expect-error: no need to set all attributes in callbacks @@ -144,12 +146,12 @@ export function getTooltipOptions({ }, caretSize: 0, cornerRadius: 2, - footerColor: `rgb(${getTextColor(colorScheme)})`, + footerColor: `rgb(${textColor})`, itemSort: (a, b) => { // Reverse order return b.datasetIndex - a.datasetIndex; }, - titleColor: `rgb(${getTextColor(colorScheme)})`, + titleColor: `rgb(${textColor})`, usePointStyle: true }; } @@ -183,6 +185,8 @@ export function getValueAxisOptions({ ticks: Tick[] ) => string; }): ScaleOptions<'linear'> { + const borderColor = getChartBorderColor(colorScheme); + return { display, border: { @@ -196,7 +200,7 @@ export function getValueAxisOptions({ tick.value === scale.min || highlightedValues.includes(tick.value) ) { - return getChartBorderColor(colorScheme); + return borderColor; } return 'transparent'; diff --git a/libs/ui/src/lib/chart/chart.color-scheme.ts b/libs/ui/src/lib/chart/chart.color-scheme.ts new file mode 100644 index 0000000000..684c9bda80 --- /dev/null +++ b/libs/ui/src/lib/chart/chart.color-scheme.ts @@ -0,0 +1,8 @@ +import { takeUntilDestroyed } from '@angular/core/rxjs-interop'; +import { fromEvent } from 'rxjs'; + +export function onPrefersColorSchemeChange(callback: () => void) { + fromEvent(window.matchMedia('(prefers-color-scheme: dark)'), 'change') + .pipe(takeUntilDestroyed()) + .subscribe(callback); +} diff --git a/libs/ui/src/lib/chart/index.ts b/libs/ui/src/lib/chart/index.ts index 01597c515c..3ac6db992e 100644 --- a/libs/ui/src/lib/chart/index.ts +++ b/libs/ui/src/lib/chart/index.ts @@ -1,2 +1,3 @@ +export * from './chart.color-scheme'; export * from './chart.options'; export * from './chart.registry'; diff --git a/libs/ui/src/lib/fire-calculator/fire-calculator.component.ts b/libs/ui/src/lib/fire-calculator/fire-calculator.component.ts index 959e934553..bdd65d1668 100644 --- a/libs/ui/src/lib/fire-calculator/fire-calculator.component.ts +++ b/libs/ui/src/lib/fire-calculator/fire-calculator.component.ts @@ -18,6 +18,7 @@ import { OnChanges, OnDestroy, output, + SimpleChanges, viewChild } from '@angular/core'; import { takeUntilDestroyed } from '@angular/core/rxjs-interop'; @@ -63,6 +64,7 @@ import { isNumber } from 'lodash-es'; import { NgxSkeletonLoaderModule } from 'ngx-skeleton-loader'; import { debounceTime } from 'rxjs'; +import { onPrefersColorSchemeChange } from '../chart'; import { FireCalculatorService } from './fire-calculator.service'; @Component({ @@ -85,7 +87,7 @@ import { FireCalculatorService } from './fire-calculator.service'; }) export class GfFireCalculatorComponent implements OnChanges, OnDestroy { @Input() annualInterestRate = 0; - @Input() colorScheme: ColorScheme; + @Input() colorScheme?: ColorScheme; @Input() currency: string; @Input() deviceType: string; @Input() fireWealth = 0; @@ -103,7 +105,7 @@ export class GfFireCalculatorComponent implements OnChanges, OnDestroy { retirementDate: new FormControl(null) }); - public chart: Chart<'bar'>; + public chart?: Chart<'bar'>; public isLoading = true; public minDate = addDays(new Date(), 1); public periodsToRetire = 0; @@ -142,6 +144,15 @@ export class GfFireCalculatorComponent implements OnChanges, OnDestroy { addIcons({ calendarClearOutline }); + onPrefersColorSchemeChange(() => { + if (this.chart && !this.colorScheme) { + this.chart.destroy(); + this.chart = undefined; + + this.initialize(); + } + }); + this.calculatorForm.valueChanges .pipe(takeUntilDestroyed(this.destroyRef)) .subscribe(() => { @@ -221,7 +232,14 @@ export class GfFireCalculatorComponent implements OnChanges, OnDestroy { }); } - public ngOnChanges() { + public ngOnChanges(changes: SimpleChanges) { + if (changes.colorScheme && this.chart) { + this.chart.destroy(); + this.chart = undefined; + + this.initialize(); + } + if (isNumber(this.fireWealth) && this.fireWealth >= 0) { this.calculatorForm.setValue( { diff --git a/libs/ui/src/lib/line-chart/line-chart.component.ts b/libs/ui/src/lib/line-chart/line-chart.component.ts index 49eae2f5df..ad399496e2 100644 --- a/libs/ui/src/lib/line-chart/line-chart.component.ts +++ b/libs/ui/src/lib/line-chart/line-chart.component.ts @@ -18,6 +18,7 @@ import { Input, OnChanges, OnDestroy, + SimpleChanges, ViewChild } from '@angular/core'; import { @@ -37,6 +38,7 @@ import { NgxSkeletonLoaderModule } from 'ngx-skeleton-loader'; import { getTimeSeriesTooltipOptions, + onPrefersColorSchemeChange, registerChartConfiguration } from '../chart'; @@ -71,7 +73,7 @@ export class GfLineChartComponent @ViewChild('chartCanvas') chartCanvas: ElementRef; - public chart: Chart<'line'>; + public chart?: Chart<'line'>; public isLoading = true; private readonly ANIMATION_DURATION = 1200; @@ -88,6 +90,15 @@ export class GfLineChartComponent ); registerChartConfiguration(); + + onPrefersColorSchemeChange(() => { + if (this.chart && !this.colorScheme) { + this.chart.destroy(); + this.chart = undefined; + + this.initialize(); + } + }); } public ngAfterViewInit() { @@ -101,7 +112,12 @@ export class GfLineChartComponent } } - public ngOnChanges() { + public ngOnChanges(changes: SimpleChanges) { + if (changes.colorScheme && this.chart) { + this.chart.destroy(); + this.chart = undefined; + } + if (this.historicalDataItems || this.historicalDataItems === null) { setTimeout(() => { // Wait for the chartCanvas diff --git a/libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts b/libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts index ff61830f04..e27097a701 100644 --- a/libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts +++ b/libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts @@ -33,6 +33,7 @@ import Color from 'color'; import { NgxSkeletonLoaderModule } from 'ngx-skeleton-loader'; import OpenColor from 'open-color'; +import { onPrefersColorSchemeChange } from '../chart'; import { PortfolioProportionChartClickEvent } from './interfaces/interfaces'; const { @@ -94,6 +95,12 @@ export class GfPortfolioProportionChartComponent public constructor() { Chart.register(ArcElement, DoughnutController, LinearScale, Tooltip); + + onPrefersColorSchemeChange(() => { + if (this.chart && !this.colorScheme) { + this.initialize(); + } + }); } public ngAfterViewInit() { diff --git a/libs/ui/src/lib/treemap-chart/treemap-chart.component.ts b/libs/ui/src/lib/treemap-chart/treemap-chart.component.ts index a35d3deef5..83b9916c6e 100644 --- a/libs/ui/src/lib/treemap-chart/treemap-chart.component.ts +++ b/libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -36,6 +36,7 @@ import { orderBy, round } from 'lodash-es'; import { NgxSkeletonLoaderModule } from 'ngx-skeleton-loader'; import OpenColor from 'open-color'; +import { onPrefersColorSchemeChange } from '../chart'; import type { GetColorParams, GfTreemapDataPoint, @@ -55,7 +56,7 @@ export class GfTreemapChartComponent implements AfterViewInit, OnChanges, OnDestroy { public readonly baseCurrency = input.required(); - public readonly colorScheme = input.required(); + public readonly colorScheme = input(); public readonly cursor = input.required(); public readonly dateRange = input.required(); public readonly holdings = input(); @@ -71,6 +72,12 @@ export class GfTreemapChartComponent public constructor() { Chart.register(LinearScale, Tooltip, TreemapController, TreemapElement); + + onPrefersColorSchemeChange(() => { + if (this.chart && !this.colorScheme()) { + this.initialize(); + } + }); } public ngAfterViewInit() { From 67a1fdd1e8d7efb04d8c820bc567a86d019f7ba2 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Wed, 30 Sep 2026 19:44:42 +0200 Subject: [PATCH 24/27] Bugfix/sponsor logo based on theme on about page (#7985) Show sponsor logo based on theme --- .../pages/about/overview/about-overview-page.html | 13 ++++++++----- .../pages/about/overview/about-overview-page.scss | 12 ++++++++++++ 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/apps/client/src/app/pages/about/overview/about-overview-page.html b/apps/client/src/app/pages/about/overview/about-overview-page.html index 6e0b0323da..810a1394e1 100644 --- a/apps/client/src/app/pages/about/overview/about-overview-page.html +++ b/apps/client/src/app/pages/about/overview/about-overview-page.html @@ -219,12 +219,15 @@ > + diff --git a/apps/client/src/app/pages/about/overview/about-overview-page.scss b/apps/client/src/app/pages/about/overview/about-overview-page.scss index 8b9853f3e2..07faaf7ad4 100644 --- a/apps/client/src/app/pages/about/overview/about-overview-page.scss +++ b/apps/client/src/app/pages/about/overview/about-overview-page.scss @@ -22,6 +22,10 @@ width: 10rem; } } + + .sponsor-logo-light { + display: none; + } } :host-context(.theme-dark) { @@ -33,4 +37,12 @@ opacity: 1; } } + + .sponsor-logo-dark { + display: none; + } + + .sponsor-logo-light { + display: inline; + } } From f8869ed7f3b3ec3d2c0670b2ec27463cb3911833 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 30 Sep 2026 19:47:51 +0200 Subject: [PATCH 25/27] Task/update locales (#7962) Co-authored-by: github-actions[bot] --- apps/client/src/locales/messages.ca.xlf | 350 ++++++++++++----------- apps/client/src/locales/messages.de.xlf | 352 +++++++++++++----------- apps/client/src/locales/messages.es.xlf | 352 +++++++++++++----------- apps/client/src/locales/messages.fr.xlf | 352 +++++++++++++----------- apps/client/src/locales/messages.it.xlf | 350 ++++++++++++----------- apps/client/src/locales/messages.ja.xlf | 350 ++++++++++++----------- apps/client/src/locales/messages.ko.xlf | 352 +++++++++++++----------- apps/client/src/locales/messages.nl.xlf | 352 +++++++++++++----------- apps/client/src/locales/messages.pl.xlf | 352 +++++++++++++----------- apps/client/src/locales/messages.pt.xlf | 350 ++++++++++++----------- apps/client/src/locales/messages.tr.xlf | 350 ++++++++++++----------- apps/client/src/locales/messages.uk.xlf | 352 +++++++++++++----------- apps/client/src/locales/messages.xlf | 346 ++++++++++++----------- apps/client/src/locales/messages.zh.xlf | 352 +++++++++++++----------- 14 files changed, 2568 insertions(+), 2344 deletions(-) diff --git a/apps/client/src/locales/messages.ca.xlf b/apps/client/src/locales/messages.ca.xlf index 409ba1247c..9c541baa59 100644 --- a/apps/client/src/locales/messages.ca.xlf +++ b/apps/client/src/locales/messages.ca.xlf @@ -335,7 +335,7 @@ Recupera el preu de mercat libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html - 40 + 32 @@ -391,7 +391,7 @@ Balanç de Caixa apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 57 + 58 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -407,7 +407,7 @@ Plataforma apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 120 + 121 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -423,7 +423,7 @@ Balanç de Caixa apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 178 + 179 @@ -509,6 +509,10 @@ Total Total + + apps/client/src/app/components/admin-tag/admin-tag.component.html + 87 + libs/ui/src/lib/accounts-table/accounts-table.component.html 63 @@ -623,7 +627,7 @@ apps/client/src/app/components/admin-tag/admin-tag.component.html - 99 + 117 libs/ui/src/lib/accounts-table/accounts-table.component.html @@ -659,15 +663,15 @@ apps/client/src/app/components/admin-tag/admin-tag.component.html - 114 + 132 apps/client/src/app/components/admin-users/admin-users.html - 254 + 266 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 27 + 31 libs/ui/src/lib/account-balances/account-balances.component.html @@ -699,7 +703,7 @@ De pagament apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts - 136 + 120 @@ -715,7 +719,7 @@ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 181 + 202 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -899,7 +903,7 @@ Detalls de libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html - 2 + 6 @@ -935,7 +939,7 @@ libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html - 6 + 10 @@ -959,7 +963,7 @@ libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html - 26 + 24 @@ -967,7 +971,7 @@ Punts de referència apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 118 + 119 @@ -975,7 +979,7 @@ Divises apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 123 + 124 apps/client/src/app/pages/public/public-page.html @@ -995,7 +999,7 @@ ETFs sense País apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 128 + 129 @@ -1003,7 +1007,7 @@ ETFs sense Sector apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 133 + 134 @@ -1011,7 +1015,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 - 528 + 530 @@ -1019,7 +1023,7 @@ Filtra per... apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 350 + 351 @@ -1099,7 +1103,7 @@ Historial de subscripcions apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 156 + 177 @@ -1139,7 +1143,7 @@ Oooh! No s’han pogut recopilar les dades históriques. libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor.component.ts - 286 + 287 @@ -1155,7 +1159,7 @@ El preu de mercat actual és apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 856 + 858 @@ -1165,6 +1169,10 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html 21 + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 17 + Import @@ -1183,11 +1191,11 @@ - By , this is projected to increase to per year or per month, assuming a annual interest rate. - Per , es preveu que això augmenti fins a per any o per mes, assumint un tipus d'interès anual del . + By , this is projected to increase to per year or per month, assuming a annual interest rate. + Per , es preveu que això augmenti fins a per any o per mes, assumint un tipus d'interès anual del . apps/client/src/app/pages/portfolio/fire/fire-page.html - 132 + 144 @@ -1211,7 +1219,7 @@ apps/client/src/app/components/admin-users/admin-users.html - 53 + 56 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -1219,7 +1227,7 @@ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 99 + 103 @@ -1295,7 +1303,7 @@ Total apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 175 + 196 @@ -1355,7 +1363,7 @@ El perfil de l’actiu s’ha desat apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 754 + 756 @@ -1451,7 +1459,7 @@ Està segur qeu vol eliminar aquest cupó? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 247 + 227 @@ -1459,7 +1467,7 @@ Està segur que vol eliminar aquest missatge del sistema? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 260 + 240 @@ -1467,7 +1475,7 @@ Està segur que vol depurar el cache? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 290 + 270 @@ -1475,7 +1483,7 @@ Si us plau, afegeixi el seu missatge del sistema: apps/client/src/app/components/admin-overview/admin-overview.component.ts - 310 + 290 @@ -1491,7 +1499,7 @@ per Usuari apps/client/src/app/components/admin-overview/admin-overview.component.ts - 181 + 176 @@ -1623,7 +1631,7 @@ Està segur que vol eliminar aquesta plataforma? apps/client/src/app/components/admin-platform/admin-platform.component.ts - 125 + 131 @@ -1639,7 +1647,7 @@ The data of this asset profile is moved to () and this asset profile is deleted. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 961 + 963 @@ -1655,7 +1663,7 @@ Any actual apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 267 + 269 @@ -1671,7 +1679,7 @@ La memòria cau s’ha buidat. apps/client/src/app/components/admin-overview/admin-overview.component.ts - 281 + 261 @@ -1711,7 +1719,7 @@ Està segur que vol eliminar aquesta etiqueta? apps/client/src/app/components/admin-tag/admin-tag.component.ts - 129 + 144 @@ -1735,7 +1743,7 @@ Està segur que vol eliminar aquest usuari? apps/client/src/app/components/admin-users/admin-users.component.ts - 253 + 233 @@ -1767,19 +1775,23 @@ Implicació per Dia apps/client/src/app/components/admin-users/admin-users.html - 135 + 143 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 138 + 142 - + Last Request Última Solicitut apps/client/src/app/components/admin-users/admin-users.html - 181 + 188 + + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 169 @@ -1787,7 +1799,7 @@ Actuar com un altre Usuari apps/client/src/app/components/admin-users/admin-users.html - 228 + 240 @@ -1795,11 +1807,11 @@ Could not validate form apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 730 + 732 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 733 + 735 @@ -1823,7 +1835,7 @@ Portfolio apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts - 140 + 156 apps/client/src/app/components/header/header.component.html @@ -1851,7 +1863,7 @@ apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts - 152 + 168 @@ -1991,7 +2003,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 102 + 121 @@ -1999,7 +2011,7 @@ Activitat apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 107 + 108 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -2099,7 +2111,7 @@ An error occurred while merging this asset profile into (). apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 944 + 946 @@ -2195,7 +2207,7 @@ Setmana actual apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 259 + 261 @@ -2215,7 +2227,7 @@ Import total apps/client/src/app/components/investment-chart/investment-chart.component.ts - 144 + 160 @@ -2231,7 +2243,7 @@ Taxa d’estalvi apps/client/src/app/components/investment-chart/investment-chart.component.ts - 193 + 209 @@ -2379,11 +2391,11 @@ Rendiment net absolut apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 122 + 141 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 240 + 279 @@ -2391,11 +2403,11 @@ Rendiment net apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 137 + 156 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 256 + 295 @@ -2403,7 +2415,7 @@ Actius totals apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 165 + 184 @@ -2411,7 +2423,7 @@ Poder adquisitiu apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 305 + 324 @@ -2419,7 +2431,7 @@ Exclòs de l’anàlisi apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 337 + 356 @@ -2427,7 +2439,7 @@ Passius apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 368 + 387 apps/client/src/app/pages/features/features-page.html @@ -2439,7 +2451,7 @@ Valor net apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 391 + 407 @@ -2447,7 +2459,7 @@ Rendiment anualitzat apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 406 + 422 @@ -2455,7 +2467,7 @@ Definiu l’import del vostre fons d’emergència. apps/client/src/app/components/portfolio-summary/portfolio-summary.component.ts - 173 + 204 @@ -2615,7 +2627,7 @@ YTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 267 + 269 libs/ui/src/lib/assistant/assistant.component.ts @@ -2627,7 +2639,7 @@ 1 any apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 271 + 273 libs/ui/src/lib/assistant/assistant.component.ts @@ -2647,7 +2659,7 @@ 5 anys apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 275 + 277 libs/ui/src/lib/assistant/assistant.component.ts @@ -2667,7 +2679,7 @@ Màx apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 279 + 281 libs/ui/src/lib/assistant/assistant.component.ts @@ -2739,7 +2751,7 @@ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 41 + 45 @@ -2923,7 +2935,7 @@ Coupon apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts - 141 + 125 @@ -3039,7 +3051,7 @@ Investments apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 227 + 246 @@ -3159,7 +3171,7 @@ Diàriament apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 247 + 249 @@ -3287,7 +3299,7 @@ apps/client/src/app/components/admin-users/admin-users.html - 92 + 100 apps/client/src/app/components/header/header.component.html @@ -3303,7 +3315,7 @@ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 113 + 117 apps/client/src/app/pages/accounts/accounts-page.html @@ -3455,7 +3467,7 @@ Visió general apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 43 + 44 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -3607,11 +3619,11 @@ Could not parse scraper configuration apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 678 + 680 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 681 + 683 @@ -3864,7 +3876,7 @@ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 165 + 186 @@ -3872,7 +3884,7 @@ Explotacions apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 134 + 135 apps/client/src/app/components/home-holdings/home-holdings.html @@ -3884,7 +3896,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 196 + 215 apps/client/src/app/pages/public/public-page.html @@ -3908,15 +3920,15 @@ This action cannot be undone. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 963 + 965 just now just now - apps/client/src/app/components/admin-users/admin-users.component.ts - 221 + apps/client/src/app/util/date.util.ts + 23 @@ -4524,7 +4536,7 @@ Do you really want to merge this asset profile into it? apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 967 + 969 @@ -4628,11 +4640,11 @@ Activitats apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 109 + 110 apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 145 + 146 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -4648,7 +4660,7 @@ apps/client/src/app/components/admin-users/admin-users.html - 113 + 121 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -4660,7 +4672,7 @@ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 123 + 127 apps/client/src/app/pages/portfolio/activities/activities-page.html @@ -4860,7 +4872,7 @@ Dividend Performance apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 307 + 214 @@ -4920,7 +4932,7 @@ Price apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 191 + 212 @@ -4928,7 +4940,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 - 811 + 813 @@ -5028,7 +5040,7 @@ Trial apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts - 140 + 124 @@ -5148,7 +5160,7 @@ Dividend apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 96 + 97 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -5156,7 +5168,11 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 492 + 103 + + + apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html + 511 apps/client/src/app/pages/features/features-page.html @@ -5248,7 +5264,7 @@ Rendiment absolut de la moneda apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 194 + 233 @@ -5256,7 +5272,7 @@ Rendiment de la moneda apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 218 + 257 @@ -5264,7 +5280,7 @@ A dalt apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 332 + 329 @@ -5272,7 +5288,7 @@ A baix apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 383 + 380 @@ -5280,7 +5296,7 @@ Evolució de la cartera apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 438 + 435 @@ -5288,7 +5304,7 @@ Cronologia de la inversió apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 465 + 463 @@ -5296,7 +5312,7 @@ Ratxa actual apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 486 + 484 @@ -5304,7 +5320,7 @@ Ratxa més llarga apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 495 + 493 @@ -5312,7 +5328,7 @@ Cronologia de dividends apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 522 + 521 @@ -5408,7 +5424,7 @@ Hourly apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 251 + 253 @@ -5524,7 +5540,7 @@ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 224 + 245 @@ -5548,11 +5564,11 @@ Could not save asset profile apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 764 + 766 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 767 + 769 @@ -5608,7 +5624,7 @@ Inscripció apps/client/src/app/components/admin-users/admin-users.html - 75 + 78 libs/common/src/lib/routes/routes.ts @@ -5697,7 +5713,7 @@ Data gathering has been started. apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 386 + 387 @@ -5797,7 +5813,7 @@ Coupon has been created apps/client/src/app/components/admin-overview/admin-overview.component.ts - 229 + 209 @@ -6001,7 +6017,7 @@ Pertinença apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 88 + 92 libs/common/src/lib/routes/routes.ts @@ -6157,7 +6173,7 @@ WTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 259 + 261 libs/ui/src/lib/assistant/assistant.component.ts @@ -6177,7 +6193,7 @@ MTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 263 + 265 libs/ui/src/lib/assistant/assistant.component.ts @@ -6185,8 +6201,8 @@ - Expires () - Expires () + Expires () + Expires () apps/client/src/app/components/admin-users/admin-users.html 34 @@ -6205,7 +6221,7 @@ any apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 271 + 273 apps/client/src/app/pages/resources/personal-finance-tools/product-page.html @@ -6225,7 +6241,7 @@ anys apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 275 + 277 libs/ui/src/lib/assistant/assistant.component.ts @@ -6377,7 +6393,7 @@ This asset profile cannot be merged into (). apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 922 + 924 @@ -6393,7 +6409,7 @@ Dipòsit libs/ui/src/lib/fire-calculator/fire-calculator.component.ts - 423 + 441 @@ -6401,15 +6417,15 @@ Interès apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 83 + 84 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 478 + 496 libs/ui/src/lib/fire-calculator/fire-calculator.component.ts - 433 + 451 libs/ui/src/lib/i18n.ts @@ -6421,7 +6437,7 @@ Estalvi libs/ui/src/lib/fire-calculator/fire-calculator.component.ts - 443 + 461 @@ -6465,7 +6481,7 @@ Compte apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.component.ts - 109 + 110 libs/common/src/lib/routes/routes.ts @@ -6585,15 +6601,15 @@ Fons d’emergència apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 242 + 261 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 320 + 339 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 425 + 441 apps/client/src/app/pages/features/features-page.html @@ -6665,7 +6681,7 @@ libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 462 + 473 @@ -6689,7 +6705,7 @@ No Activities apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 138 + 139 @@ -6777,7 +6793,7 @@ Veure els detalls apps/client/src/app/components/admin-users/admin-users.html - 220 + 232 libs/ui/src/lib/accounts-table/accounts-table.component.html @@ -6869,7 +6885,7 @@ Efectiu apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 274 + 293 @@ -6877,7 +6893,7 @@ Patrimoni apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 70 + 71 @@ -6893,7 +6909,7 @@ Authentication apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 74 + 78 @@ -6901,7 +6917,7 @@ Absolute Dividend Performance apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 288 + 195 @@ -6953,7 +6969,7 @@ - If you retire today, you would be able to withdraw per year or per month, based on your total assets of and a safe withdrawal rate (SWR) of + If you retire today, you would be able to withdraw per year or per month, based on your total assets of and a safe withdrawal rate (SWR) of If you retire today, you would be able to withdraw per any o per month, based on your total assets of and a safe withdrawal rate (SWR) of apps/client/src/app/pages/portfolio/fire/fire-page.html @@ -7045,11 +7061,11 @@ libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 464 + 475 libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 478 + 489 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -7289,15 +7305,15 @@ Error apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 846 + 848 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 923 + 925 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 945 + 947 @@ -7381,7 +7397,7 @@ libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html - 48 + 41 libs/ui/src/lib/i18n.ts @@ -7425,7 +7441,7 @@ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 259 + 280 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -7445,7 +7461,7 @@ Role apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 50 + 54 @@ -7549,7 +7565,7 @@ has been copied to the clipboard apps/client/src/app/components/admin-overview/admin-overview.component.ts - 228 + 208 libs/ui/src/lib/value/value.component.ts @@ -7895,11 +7911,11 @@ API Requests Today apps/client/src/app/components/admin-users/admin-users.html - 156 + 164 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 148 + 152 @@ -7999,7 +8015,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.ts - 171 + 202 apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html @@ -8079,7 +8095,7 @@ AI prompt has been copied to the clipboard apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 207 + 237 @@ -8095,7 +8111,7 @@ Lazy apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 296 + 298 @@ -8103,7 +8119,7 @@ Instant apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 300 + 302 @@ -8127,7 +8143,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 - 531 + 533 @@ -8151,7 +8167,7 @@ end of day apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 296 + 298 @@ -8159,7 +8175,7 @@ real-time apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 300 + 302 @@ -8167,7 +8183,7 @@ Open Duck.ai apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 208 + 238 @@ -8187,7 +8203,7 @@ libs/ui/src/lib/treemap-chart/treemap-chart.component.ts - 414 + 421 @@ -8227,11 +8243,11 @@ libs/ui/src/lib/treemap-chart/treemap-chart.component.ts - 414 + 421 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts - 427 + 434 @@ -8319,7 +8335,7 @@ Security token apps/client/src/app/components/admin-users/admin-users.component.ts - 273 + 253 apps/client/src/app/components/user-account-access/user-account-access.component.ts @@ -8331,7 +8347,7 @@ Do you really want to generate a new security token for this user? apps/client/src/app/components/admin-users/admin-users.component.ts - 278 + 258 @@ -8339,7 +8355,7 @@ Generate Security Token apps/client/src/app/components/admin-users/admin-users.html - 238 + 250 @@ -8388,7 +8404,7 @@ () is already in use. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 965 + 967 @@ -8396,7 +8412,7 @@ An error occurred while updating to (). apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 809 + 811 @@ -8549,7 +8565,7 @@ Demo user account has been synced. apps/client/src/app/components/admin-overview/admin-overview.component.ts - 334 + 314 @@ -8811,7 +8827,7 @@ Current month apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 263 + 265 @@ -9440,7 +9456,7 @@ Registration Date apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 64 + 68 diff --git a/apps/client/src/locales/messages.de.xlf b/apps/client/src/locales/messages.de.xlf index 58da7dc525..bcd0b50f2f 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 - 181 + 202 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -180,6 +180,10 @@ Total Gesamt + + apps/client/src/app/components/admin-tag/admin-tag.component.html + 87 + libs/ui/src/lib/accounts-table/accounts-table.component.html 63 @@ -254,7 +258,7 @@ apps/client/src/app/components/admin-tag/admin-tag.component.html - 99 + 117 libs/ui/src/lib/accounts-table/accounts-table.component.html @@ -290,15 +294,15 @@ apps/client/src/app/components/admin-tag/admin-tag.component.html - 114 + 132 apps/client/src/app/components/admin-users/admin-users.html - 254 + 266 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 27 + 31 libs/ui/src/lib/account-balances/account-balances.component.html @@ -330,7 +334,7 @@ Bezahlt apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts - 136 + 120 @@ -486,7 +490,7 @@ Details für libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html - 2 + 6 @@ -522,7 +526,7 @@ libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html - 6 + 10 @@ -546,7 +550,7 @@ libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html - 26 + 24 @@ -586,7 +590,7 @@ Möchtest du diesen Gutscheincode wirklich löschen? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 247 + 227 @@ -594,7 +598,7 @@ Möchtest du den Cache wirklich leeren? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 290 + 270 @@ -602,7 +606,7 @@ Bitte gebe deine Systemmeldung ein: apps/client/src/app/components/admin-overview/admin-overview.component.ts - 310 + 290 @@ -610,7 +614,7 @@ pro Benutzer apps/client/src/app/components/admin-overview/admin-overview.component.ts - 181 + 176 @@ -734,7 +738,7 @@ Möchtest du diesen Benutzer wirklich löschen? apps/client/src/app/components/admin-users/admin-users.component.ts - 253 + 233 @@ -766,19 +770,23 @@ Engagement pro Tag apps/client/src/app/components/admin-users/admin-users.html - 135 + 143 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 138 + 142 - + Last Request Letzte Abfrage apps/client/src/app/components/admin-users/admin-users.html - 181 + 188 + + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 169 @@ -842,7 +850,7 @@ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 165 + 186 @@ -910,7 +918,7 @@ Beim Zusammenführen dieses Anlageprofils mit () ist ein Fehler aufgetreten. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 944 + 946 @@ -1042,11 +1050,11 @@ Absolute Netto Performance apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 122 + 141 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 240 + 279 @@ -1054,11 +1062,11 @@ Netto Performance apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 137 + 156 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 256 + 295 @@ -1066,7 +1074,7 @@ Gesamtanlagevermögen apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 165 + 184 @@ -1074,7 +1082,7 @@ Kaufkraft apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 305 + 324 @@ -1082,7 +1090,7 @@ Gesamtvermögen apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 391 + 407 @@ -1090,7 +1098,7 @@ Performance pro Jahr apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 406 + 422 @@ -1098,7 +1106,7 @@ Bitte setze den Betrag deines Notfallfonds. apps/client/src/app/components/portfolio-summary/portfolio-summary.component.ts - 173 + 204 @@ -1214,7 +1222,7 @@ YTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 267 + 269 libs/ui/src/lib/assistant/assistant.component.ts @@ -1226,7 +1234,7 @@ 1J apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 271 + 273 libs/ui/src/lib/assistant/assistant.component.ts @@ -1246,7 +1254,7 @@ 5J apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 275 + 277 libs/ui/src/lib/assistant/assistant.component.ts @@ -1266,7 +1274,7 @@ Max apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 279 + 281 libs/ui/src/lib/assistant/assistant.component.ts @@ -1442,7 +1450,7 @@ Gutschein apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts - 141 + 125 @@ -1498,7 +1506,7 @@ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 41 + 45 @@ -1558,7 +1566,7 @@ apps/client/src/app/components/admin-users/admin-users.html - 92 + 100 apps/client/src/app/components/header/header.component.html @@ -1574,7 +1582,7 @@ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 113 + 117 apps/client/src/app/pages/accounts/accounts-page.html @@ -1650,7 +1658,7 @@ Cash-Bestand apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 57 + 58 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -1666,7 +1674,7 @@ Plattform apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 120 + 121 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -1898,7 +1906,7 @@ Übersicht apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 43 + 44 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -2062,7 +2070,7 @@ Testphase apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts - 140 + 124 @@ -2082,7 +2090,7 @@ Zeitstrahl der Investitionen apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 465 + 463 @@ -2090,7 +2098,7 @@ Gewinner apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 332 + 329 @@ -2098,7 +2106,7 @@ Verlierer apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 383 + 380 @@ -2122,7 +2130,7 @@ Positionen apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 134 + 135 apps/client/src/app/components/home-holdings/home-holdings.html @@ -2134,7 +2142,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 196 + 215 apps/client/src/app/pages/public/public-page.html @@ -2166,7 +2174,7 @@ Aktuelle Woche apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 259 + 261 @@ -2294,11 +2302,11 @@ Aktivitäten apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 109 + 110 apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 145 + 146 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -2314,7 +2322,7 @@ apps/client/src/app/components/admin-users/admin-users.html - 113 + 121 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -2326,7 +2334,7 @@ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 123 + 127 apps/client/src/app/pages/portfolio/activities/activities-page.html @@ -2402,7 +2410,7 @@ Portfolio apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts - 140 + 156 apps/client/src/app/components/header/header.component.html @@ -2450,7 +2458,7 @@ Registrierung apps/client/src/app/components/admin-users/admin-users.html - 75 + 78 libs/common/src/lib/routes/routes.ts @@ -2706,11 +2714,11 @@ - By , this is projected to increase to per year or per month, assuming a annual interest rate. - Bis wird dies voraussichtlich auf pro Jahr oder pro Monat ansteigen, bei einem angenommenen jährlichen Zinssatz von . + By , this is projected to increase to per year or per month, assuming a annual interest rate. + Bis wird dies voraussichtlich auf pro Jahr oder pro Monat ansteigen, bei einem angenommenen jährlichen Zinssatz von . apps/client/src/app/pages/portfolio/fire/fire-page.html - 132 + 144 @@ -2734,7 +2742,7 @@ apps/client/src/app/components/admin-users/admin-users.html - 53 + 56 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -2742,7 +2750,7 @@ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 99 + 103 @@ -2818,7 +2826,7 @@ Einlage libs/ui/src/lib/fire-calculator/fire-calculator.component.ts - 423 + 441 @@ -2826,15 +2834,15 @@ Verzinsung apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 83 + 84 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 478 + 496 libs/ui/src/lib/fire-calculator/fire-calculator.component.ts - 433 + 451 libs/ui/src/lib/i18n.ts @@ -2846,7 +2854,7 @@ Ersparnisse libs/ui/src/lib/fire-calculator/fire-calculator.component.ts - 443 + 461 @@ -2878,7 +2886,7 @@ Verlauf der Mitgliedschaft apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 156 + 177 @@ -2910,7 +2918,7 @@ Filtern nach... apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 350 + 351 @@ -2946,11 +2954,11 @@ Das Formular konnte nicht validiert werden apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 730 + 732 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 733 + 735 @@ -2970,7 +2978,7 @@ apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts - 152 + 168 @@ -2986,7 +2994,7 @@ Von der Analyse ausgenommen apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 337 + 356 @@ -3058,7 +3066,7 @@ Gesamtbetrag apps/client/src/app/components/investment-chart/investment-chart.component.ts - 144 + 160 @@ -3066,7 +3074,7 @@ Portfolio Wertentwicklung apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 438 + 435 @@ -3082,7 +3090,7 @@ Sparrate apps/client/src/app/components/investment-chart/investment-chart.component.ts - 193 + 209 @@ -3090,7 +3098,7 @@ Konto apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.component.ts - 109 + 110 libs/common/src/lib/routes/routes.ts @@ -3190,7 +3198,7 @@ Bargeld apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 274 + 293 @@ -3198,7 +3206,7 @@ Beteiligungskapital apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 70 + 71 @@ -3214,7 +3222,7 @@ Authentifizierung apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 74 + 78 @@ -3222,15 +3230,15 @@ Notfallfonds apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 242 + 261 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 320 + 339 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 425 + 441 apps/client/src/app/pages/features/features-page.html @@ -3254,7 +3262,7 @@ libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 462 + 473 @@ -3274,11 +3282,11 @@ libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 464 + 475 libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 478 + 489 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -3298,7 +3306,7 @@ Absolute Dividendenperformance apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 288 + 195 @@ -3342,8 +3350,8 @@ - If you retire today, you would be able to withdraw per year or per month, based on your total assets of and a safe withdrawal rate (SWR) of - Wenn du heute in den Ruhestand gehen würdest, könntest du pro Jahr oder pro Monat entnehmen, bezogen auf dein Gesamtanlagevermögen von und einer sicheren Entnahmerate (SWR) von + If you retire today, you would be able to withdraw per year or per month, based on your total assets of and a safe withdrawal rate (SWR) of + Wenn du heute in den Ruhestand gehen würdest, könntest du pro Jahr oder pro Monat entnehmen, bezogen auf dein Gesamtanlagevermögen von und einer sicheren Entnahmerate (SWR) von apps/client/src/app/pages/portfolio/fire/fire-page.html 69 @@ -3406,7 +3414,7 @@ Preis apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 191 + 212 @@ -3414,7 +3422,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 - 811 + 813 @@ -3448,6 +3456,10 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html 21 + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 17 + Symbol Mapping @@ -3462,7 +3474,7 @@ Zeitstrahl der Dividenden apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 522 + 521 @@ -3478,7 +3490,7 @@ Dividenden apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 96 + 97 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -3486,7 +3498,11 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 492 + 103 + + + apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html + 511 apps/client/src/app/pages/features/features-page.html @@ -3602,15 +3618,15 @@ Diese Aktion kann nicht rückgängig gemacht werden. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 963 + 965 just now gerade eben - apps/client/src/app/components/admin-users/admin-users.component.ts - 221 + apps/client/src/app/util/date.util.ts + 23 @@ -3650,7 +3666,7 @@ Dividendenperformance apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 307 + 214 @@ -3726,7 +3742,7 @@ Keine Aktivitäten apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 138 + 139 @@ -3774,7 +3790,7 @@ Investitionen apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 227 + 246 @@ -3918,7 +3934,7 @@ Stündlich apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 251 + 253 @@ -4014,7 +4030,7 @@ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 224 + 245 @@ -4030,11 +4046,11 @@ Das Anlageprofil konnte nicht gespeichert werden apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 764 + 766 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 767 + 769 @@ -4054,7 +4070,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 102 + 121 @@ -4158,7 +4174,7 @@ Dieses Anlageprofil kann nicht mit () zusammengeführt werden. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 922 + 924 @@ -4226,7 +4242,7 @@ Benutzer verwenden apps/client/src/app/components/admin-users/admin-users.html - 228 + 240 @@ -4250,7 +4266,7 @@ Die Daten dieses Anlageprofils werden nach () verschoben und dieses Anlageprofil wird gelöscht. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 961 + 963 @@ -4266,7 +4282,7 @@ Aktuelles Jahr apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 267 + 269 @@ -4282,7 +4298,7 @@ Der Cache wurde geleert. apps/client/src/app/components/admin-overview/admin-overview.component.ts - 281 + 261 @@ -4318,7 +4334,7 @@ Das Anlageprofil wurde gespeichert apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 754 + 756 @@ -4326,7 +4342,7 @@ Möchtest du diese Plattform wirklich löschen? apps/client/src/app/components/admin-platform/admin-platform.component.ts - 125 + 131 @@ -4470,7 +4486,7 @@ Aktueller Streak apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 486 + 484 @@ -4478,7 +4494,7 @@ Längster Streak apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 495 + 493 @@ -4518,7 +4534,7 @@ Details anzeigen apps/client/src/app/components/admin-users/admin-users.html - 220 + 232 libs/ui/src/lib/accounts-table/accounts-table.component.html @@ -4530,7 +4546,7 @@ Verbindlichkeiten apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 368 + 387 apps/client/src/app/pages/features/features-page.html @@ -4710,7 +4726,7 @@ Gesamt apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 175 + 196 @@ -4798,7 +4814,7 @@ Gutschein wurde erstellt apps/client/src/app/components/admin-overview/admin-overview.component.ts - 229 + 209 @@ -5006,7 +5022,7 @@ ETFs ohne Länder apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 128 + 129 @@ -5014,7 +5030,7 @@ ETFs ohne Sektoren apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 133 + 134 @@ -5022,7 +5038,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 - 528 + 530 @@ -5242,7 +5258,7 @@ Währungen apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 123 + 124 apps/client/src/app/pages/public/public-page.html @@ -5294,11 +5310,11 @@ Die Scraper Konfiguration konnte nicht geparsed werden apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 678 + 680 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 681 + 683 @@ -5912,7 +5928,7 @@ Finanzmarktdaten synchronisieren wurde gestartet. apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 386 + 387 @@ -5948,7 +5964,7 @@ Möchtest du dieses Anlageprofil wirklich damit zusammenführen? apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 967 + 969 @@ -6064,7 +6080,7 @@ Möchtest du diesen Tag wirklich löschen? apps/client/src/app/components/admin-tag/admin-tag.component.ts - 129 + 144 @@ -6136,7 +6152,7 @@ Mitgliedschaft apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 88 + 92 libs/common/src/lib/routes/routes.ts @@ -6424,7 +6440,7 @@ Ups! Die historischen Daten konnten nicht geparsed werden. libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor.component.ts - 286 + 287 @@ -6440,7 +6456,7 @@ Möchtest du diese Systemmeldung wirklich löschen? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 260 + 240 @@ -6472,7 +6488,7 @@ Cash-Bestände apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 178 + 179 @@ -6508,7 +6524,7 @@ Der aktuelle Marktpreis ist apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 856 + 858 @@ -6632,7 +6648,7 @@ Absolute Währungsperformance apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 194 + 233 @@ -6640,7 +6656,7 @@ Währungsperformance apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 218 + 257 @@ -6656,7 +6672,7 @@ WTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 259 + 261 libs/ui/src/lib/assistant/assistant.component.ts @@ -6676,7 +6692,7 @@ MTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 263 + 265 libs/ui/src/lib/assistant/assistant.component.ts @@ -6684,8 +6700,8 @@ - Expires () - Läuft ab () + Expires () + Läuft ab () apps/client/src/app/components/admin-users/admin-users.html 34 @@ -6720,7 +6736,7 @@ Marktpreis abrufen libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html - 40 + 32 @@ -6744,7 +6760,7 @@ Jahr apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 271 + 273 apps/client/src/app/pages/resources/personal-finance-tools/product-page.html @@ -6764,7 +6780,7 @@ Jahre apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 275 + 277 libs/ui/src/lib/assistant/assistant.component.ts @@ -6849,7 +6865,7 @@ Täglich apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 247 + 249 @@ -6889,7 +6905,7 @@ Aktivität apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 107 + 108 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -7061,7 +7077,7 @@ Benchmarks apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 118 + 119 @@ -7313,15 +7329,15 @@ Fehler apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 846 + 848 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 923 + 925 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 945 + 947 @@ -7405,7 +7421,7 @@ libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html - 48 + 41 libs/ui/src/lib/i18n.ts @@ -7449,7 +7465,7 @@ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 259 + 280 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -7469,7 +7485,7 @@ Rolle apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 50 + 54 @@ -7573,7 +7589,7 @@ wurde in die Zwischenablage kopiert apps/client/src/app/components/admin-overview/admin-overview.component.ts - 228 + 208 libs/ui/src/lib/value/value.component.ts @@ -7919,11 +7935,11 @@ Heutige API Anfragen apps/client/src/app/components/admin-users/admin-users.html - 156 + 164 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 148 + 152 @@ -8023,7 +8039,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.ts - 171 + 202 apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html @@ -8103,7 +8119,7 @@ KI-Anweisung wurde in die Zwischenablage kopiert apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 207 + 237 @@ -8119,7 +8135,7 @@ Verzögert apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 296 + 298 @@ -8127,7 +8143,7 @@ Sofort apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 300 + 302 @@ -8151,7 +8167,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 - 531 + 533 @@ -8175,7 +8191,7 @@ Tagesende apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 296 + 298 @@ -8183,7 +8199,7 @@ in Echtzeit apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 300 + 302 @@ -8191,7 +8207,7 @@ Öffne Duck.ai apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 208 + 238 @@ -8211,7 +8227,7 @@ libs/ui/src/lib/treemap-chart/treemap-chart.component.ts - 414 + 421 @@ -8251,11 +8267,11 @@ libs/ui/src/lib/treemap-chart/treemap-chart.component.ts - 414 + 421 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts - 427 + 434 @@ -8343,7 +8359,7 @@ Sicherheits-Token apps/client/src/app/components/admin-users/admin-users.component.ts - 273 + 253 apps/client/src/app/components/user-account-access/user-account-access.component.ts @@ -8355,7 +8371,7 @@ Möchtest du für diesen Benutzer wirklich ein neues Sicherheits-Token generieren? apps/client/src/app/components/admin-users/admin-users.component.ts - 278 + 258 @@ -8363,7 +8379,7 @@ Sicherheits-Token generieren apps/client/src/app/components/admin-users/admin-users.html - 238 + 250 @@ -8412,7 +8428,7 @@ () wird bereits verwendet. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 965 + 967 @@ -8420,7 +8436,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 - 809 + 811 @@ -8549,7 +8565,7 @@ Demo Benutzerkonto wurde synchronisiert. apps/client/src/app/components/admin-overview/admin-overview.component.ts - 334 + 314 @@ -8811,7 +8827,7 @@ Aktueller Monat apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 263 + 265 @@ -9440,7 +9456,7 @@ Registrierungsdatum apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 64 + 68 diff --git a/apps/client/src/locales/messages.es.xlf b/apps/client/src/locales/messages.es.xlf index 858a5309bb..b7a2182d07 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 - 181 + 202 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -181,6 +181,10 @@ Total Total + + apps/client/src/app/components/admin-tag/admin-tag.component.html + 87 + libs/ui/src/lib/accounts-table/accounts-table.component.html 63 @@ -255,7 +259,7 @@ apps/client/src/app/components/admin-tag/admin-tag.component.html - 99 + 117 libs/ui/src/lib/accounts-table/accounts-table.component.html @@ -291,15 +295,15 @@ apps/client/src/app/components/admin-tag/admin-tag.component.html - 114 + 132 apps/client/src/app/components/admin-users/admin-users.html - 254 + 266 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 27 + 31 libs/ui/src/lib/account-balances/account-balances.component.html @@ -331,7 +335,7 @@ Pagado apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts - 136 + 120 @@ -487,7 +491,7 @@ Detalles de libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html - 2 + 6 @@ -523,7 +527,7 @@ libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html - 6 + 10 @@ -547,7 +551,7 @@ libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html - 26 + 24 @@ -587,7 +591,7 @@ ¿Seguro que quieres eliminar este cupón? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 247 + 227 @@ -595,7 +599,7 @@ ¿Seguro que quieres limpiar la caché? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 290 + 270 @@ -603,7 +607,7 @@ Por favor, establece tu mensaje del sistema: apps/client/src/app/components/admin-overview/admin-overview.component.ts - 310 + 290 @@ -611,7 +615,7 @@ por usuario apps/client/src/app/components/admin-overview/admin-overview.component.ts - 181 + 176 @@ -719,7 +723,7 @@ ¿Seguro que quieres eliminar este usuario? apps/client/src/app/components/admin-users/admin-users.component.ts - 253 + 233 @@ -751,19 +755,23 @@ Interacción diaria apps/client/src/app/components/admin-users/admin-users.html - 135 + 143 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 138 + 142 - + Last Request Última petición apps/client/src/app/components/admin-users/admin-users.html - 181 + 188 + + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 169 @@ -827,7 +835,7 @@ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 165 + 186 @@ -895,7 +903,7 @@ An error occurred while merging this asset profile into (). apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 944 + 946 @@ -1027,11 +1035,11 @@ Rendimiento neto absoluto apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 122 + 141 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 240 + 279 @@ -1039,11 +1047,11 @@ Rendimiento neto apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 137 + 156 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 256 + 295 @@ -1051,7 +1059,7 @@ Total de activos apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 165 + 184 @@ -1059,7 +1067,7 @@ Poder adquisitivo apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 305 + 324 @@ -1067,7 +1075,7 @@ Patrimonio neto apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 391 + 407 @@ -1075,7 +1083,7 @@ Rendimiento anualizado apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 406 + 422 @@ -1083,7 +1091,7 @@ Por favor, ingresa la cantidad de tu fondo de emergencia. apps/client/src/app/components/portfolio-summary/portfolio-summary.component.ts - 173 + 204 @@ -1199,7 +1207,7 @@ YTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 267 + 269 libs/ui/src/lib/assistant/assistant.component.ts @@ -1211,7 +1219,7 @@ 1 año apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 271 + 273 libs/ui/src/lib/assistant/assistant.component.ts @@ -1231,7 +1239,7 @@ 5 años apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 275 + 277 libs/ui/src/lib/assistant/assistant.component.ts @@ -1251,7 +1259,7 @@ Máximo apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 279 + 281 libs/ui/src/lib/assistant/assistant.component.ts @@ -1427,7 +1435,7 @@ Cupón apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts - 141 + 125 @@ -1483,7 +1491,7 @@ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 41 + 45 @@ -1543,7 +1551,7 @@ apps/client/src/app/components/admin-users/admin-users.html - 92 + 100 apps/client/src/app/components/header/header.component.html @@ -1559,7 +1567,7 @@ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 113 + 117 apps/client/src/app/pages/accounts/accounts-page.html @@ -1635,7 +1643,7 @@ Saldo en efectivo apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 57 + 58 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -1651,7 +1659,7 @@ Plataforma apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 120 + 121 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -1883,7 +1891,7 @@ Visión general apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 43 + 44 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -2047,7 +2055,7 @@ Prueba apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts - 140 + 124 @@ -2067,7 +2075,7 @@ Cronología de la inversión apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 465 + 463 @@ -2075,7 +2083,7 @@ Mejores apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 332 + 329 @@ -2083,7 +2091,7 @@ Peores apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 383 + 380 @@ -2107,7 +2115,7 @@ Posiciones apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 134 + 135 apps/client/src/app/components/home-holdings/home-holdings.html @@ -2119,7 +2127,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 196 + 215 apps/client/src/app/pages/public/public-page.html @@ -2151,7 +2159,7 @@ Semana actual apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 259 + 261 @@ -2279,11 +2287,11 @@ Operaciones apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 109 + 110 apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 145 + 146 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -2299,7 +2307,7 @@ apps/client/src/app/components/admin-users/admin-users.html - 113 + 121 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -2311,7 +2319,7 @@ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 123 + 127 apps/client/src/app/pages/portfolio/activities/activities-page.html @@ -2387,7 +2395,7 @@ Cartera apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts - 140 + 156 apps/client/src/app/components/header/header.component.html @@ -2435,7 +2443,7 @@ Registro apps/client/src/app/components/admin-users/admin-users.html - 75 + 78 libs/common/src/lib/routes/routes.ts @@ -2735,11 +2743,11 @@ - By , this is projected to increase to per year or per month, assuming a annual interest rate. - Para , se prevé que esto aumente a por año o por mes, asumiendo una tasa de interés anual del . + By , this is projected to increase to per year or per month, assuming a annual interest rate. + Para , se prevé que esto aumente a por año o por mes, asumiendo una tasa de interés anual del . apps/client/src/app/pages/portfolio/fire/fire-page.html - 132 + 144 @@ -2763,7 +2771,7 @@ apps/client/src/app/components/admin-users/admin-users.html - 53 + 56 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -2771,7 +2779,7 @@ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 99 + 103 @@ -2795,7 +2803,7 @@ Ahorros libs/ui/src/lib/fire-calculator/fire-calculator.component.ts - 443 + 461 @@ -2803,15 +2811,15 @@ Interés apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 83 + 84 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 478 + 496 libs/ui/src/lib/fire-calculator/fire-calculator.component.ts - 433 + 451 libs/ui/src/lib/i18n.ts @@ -2823,7 +2831,7 @@ Depósito libs/ui/src/lib/fire-calculator/fire-calculator.component.ts - 423 + 441 @@ -2855,7 +2863,7 @@ Historial de suscripción apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 156 + 177 @@ -2895,7 +2903,7 @@ Filtrar por... apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 350 + 351 @@ -2935,7 +2943,7 @@ apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts - 152 + 168 @@ -2943,11 +2951,11 @@ No se pudo validar el formulario apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 730 + 732 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 733 + 735 @@ -2971,7 +2979,7 @@ Excluido del análisis apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 337 + 356 @@ -3043,7 +3051,7 @@ Importe total apps/client/src/app/components/investment-chart/investment-chart.component.ts - 144 + 160 @@ -3051,7 +3059,7 @@ Evolución de la cartera apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 438 + 435 @@ -3067,7 +3075,7 @@ Tasa de ahorro apps/client/src/app/components/investment-chart/investment-chart.component.ts - 193 + 209 @@ -3075,7 +3083,7 @@ Cuenta apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.component.ts - 109 + 110 libs/common/src/lib/routes/routes.ts @@ -3175,7 +3183,7 @@ Efectivo apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 274 + 293 @@ -3183,7 +3191,7 @@ Renta variable apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 70 + 71 @@ -3199,7 +3207,7 @@ Autenticación apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 74 + 78 @@ -3207,15 +3215,15 @@ Fondo de emergencia apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 242 + 261 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 320 + 339 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 425 + 441 apps/client/src/app/pages/features/features-page.html @@ -3239,7 +3247,7 @@ libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 462 + 473 @@ -3259,11 +3267,11 @@ libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 464 + 475 libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 478 + 489 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -3283,7 +3291,7 @@ Absolute Dividend Performance apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 288 + 195 @@ -3327,8 +3335,8 @@ - If you retire today, you would be able to withdraw per year or per month, based on your total assets of and a safe withdrawal rate (SWR) of - Si te jubilas hoy, podrías retirar por año o por mes, basado en tus activos totales de y una tasa de retiro segura (SWR) de + If you retire today, you would be able to withdraw per year or per month, based on your total assets of and a safe withdrawal rate (SWR) of + Si te jubilas hoy, podrías retirar por año o por mes, basado en tus activos totales de y una tasa de retiro segura (SWR) de apps/client/src/app/pages/portfolio/fire/fire-page.html 69 @@ -3391,7 +3399,7 @@ Precio apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 191 + 212 @@ -3399,7 +3407,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 - 811 + 813 @@ -3433,6 +3441,10 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html 21 + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 17 + Symbol Mapping @@ -3455,7 +3467,7 @@ Dividendo apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 96 + 97 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -3463,7 +3475,11 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 492 + 103 + + + apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html + 511 apps/client/src/app/pages/features/features-page.html @@ -3495,7 +3511,7 @@ Calendario de dividendos apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 522 + 521 @@ -3587,15 +3603,15 @@ This action cannot be undone. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 963 + 965 just now justo ahora - apps/client/src/app/components/admin-users/admin-users.component.ts - 221 + apps/client/src/app/util/date.util.ts + 23 @@ -3635,7 +3651,7 @@ Dividend Performance apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 307 + 214 @@ -3711,7 +3727,7 @@ Sin operaciones apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 138 + 139 @@ -3759,7 +3775,7 @@ Inversiones apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 227 + 246 @@ -3903,7 +3919,7 @@ Horaria apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 251 + 253 @@ -3999,7 +4015,7 @@ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 224 + 245 @@ -4015,11 +4031,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 - 764 + 766 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 767 + 769 @@ -4039,7 +4055,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 102 + 121 @@ -4143,7 +4159,7 @@ This asset profile cannot be merged into (). apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 922 + 924 @@ -4203,7 +4219,7 @@ Suplantar usuario apps/client/src/app/components/admin-users/admin-users.html - 228 + 240 @@ -4227,7 +4243,7 @@ The data of this asset profile is moved to () and this asset profile is deleted. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 961 + 963 @@ -4243,7 +4259,7 @@ Año actual apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 267 + 269 @@ -4259,7 +4275,7 @@ Caché vaciada. apps/client/src/app/components/admin-overview/admin-overview.component.ts - 281 + 261 @@ -4295,7 +4311,7 @@ Perfil del activo guardado apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 754 + 756 @@ -4303,7 +4319,7 @@ ¿Seguro que quieres eliminar esta plataforma? apps/client/src/app/components/admin-platform/admin-platform.component.ts - 125 + 131 @@ -4447,7 +4463,7 @@ Racha actual apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 486 + 484 @@ -4455,7 +4471,7 @@ Racha más larga apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 495 + 493 @@ -4495,7 +4511,7 @@ Ver detalles apps/client/src/app/components/admin-users/admin-users.html - 220 + 232 libs/ui/src/lib/accounts-table/accounts-table.component.html @@ -4507,7 +4523,7 @@ Pasivos apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 368 + 387 apps/client/src/app/pages/features/features-page.html @@ -4687,7 +4703,7 @@ Total apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 175 + 196 @@ -4775,7 +4791,7 @@ El cupón ha sido creado apps/client/src/app/components/admin-overview/admin-overview.component.ts - 229 + 209 @@ -4983,7 +4999,7 @@ ETFs sin países apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 128 + 129 @@ -4991,7 +5007,7 @@ ETFs sin sectores apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 133 + 134 @@ -4999,7 +5015,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 - 528 + 530 @@ -5219,7 +5235,7 @@ Divisas apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 123 + 124 apps/client/src/app/pages/public/public-page.html @@ -5271,11 +5287,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 - 678 + 680 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 681 + 683 @@ -5889,7 +5905,7 @@ La recopilación de datos ha comenzado. apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 386 + 387 @@ -5925,7 +5941,7 @@ Do you really want to merge this asset profile into it? apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 967 + 969 @@ -6041,7 +6057,7 @@ ¿Seguro que quieres eliminar esta etiqueta? apps/client/src/app/components/admin-tag/admin-tag.component.ts - 129 + 144 @@ -6113,7 +6129,7 @@ Membresía apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 88 + 92 libs/common/src/lib/routes/routes.ts @@ -6401,7 +6417,7 @@ ¡Vaya! No se pudieron analizar los datos históricos. libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor.component.ts - 286 + 287 @@ -6417,7 +6433,7 @@ ¿Seguro que quieres eliminar este mensaje del sistema? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 260 + 240 @@ -6449,7 +6465,7 @@ Saldos de efectivo apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 178 + 179 @@ -6485,7 +6501,7 @@ El precio actual de mercado es apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 856 + 858 @@ -6609,7 +6625,7 @@ Rendimiento absoluto de las divisas apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 194 + 233 @@ -6617,7 +6633,7 @@ Rendimiento de la divisa apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 218 + 257 @@ -6633,7 +6649,7 @@ WTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 259 + 261 libs/ui/src/lib/assistant/assistant.component.ts @@ -6653,7 +6669,7 @@ MTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 263 + 265 libs/ui/src/lib/assistant/assistant.component.ts @@ -6661,8 +6677,8 @@ - Expires () - Caduca () + Expires () + Caduca () apps/client/src/app/components/admin-users/admin-users.html 34 @@ -6697,7 +6713,7 @@ Obtener precio de mercado libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html - 40 + 32 @@ -6721,7 +6737,7 @@ año apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 271 + 273 apps/client/src/app/pages/resources/personal-finance-tools/product-page.html @@ -6741,7 +6757,7 @@ años apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 275 + 277 libs/ui/src/lib/assistant/assistant.component.ts @@ -6826,7 +6842,7 @@ Diaria apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 247 + 249 @@ -6866,7 +6882,7 @@ Operación apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 107 + 108 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -7038,7 +7054,7 @@ Índices de referencia apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 118 + 119 @@ -7290,15 +7306,15 @@ Error apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 846 + 848 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 923 + 925 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 945 + 947 @@ -7382,7 +7398,7 @@ libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html - 48 + 41 libs/ui/src/lib/i18n.ts @@ -7426,7 +7442,7 @@ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 259 + 280 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -7446,7 +7462,7 @@ Rol apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 50 + 54 @@ -7550,7 +7566,7 @@ ha sido copiado al portapapeles apps/client/src/app/components/admin-overview/admin-overview.component.ts - 228 + 208 libs/ui/src/lib/value/value.component.ts @@ -7896,11 +7912,11 @@ Solicitudes de API de hoy apps/client/src/app/components/admin-users/admin-users.html - 156 + 164 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 148 + 152 @@ -8000,7 +8016,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.ts - 171 + 202 apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html @@ -8080,7 +8096,7 @@ El prompt para la IA ha sido copiado al portapapeles apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 207 + 237 @@ -8096,7 +8112,7 @@ Bajo demanda apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 296 + 298 @@ -8104,7 +8120,7 @@ Instantáneo apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 300 + 302 @@ -8128,7 +8144,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 - 531 + 533 @@ -8152,7 +8168,7 @@ final del día apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 296 + 298 @@ -8160,7 +8176,7 @@ en tiempo real apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 300 + 302 @@ -8168,7 +8184,7 @@ Abrir Duck.ai apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 208 + 238 @@ -8188,7 +8204,7 @@ libs/ui/src/lib/treemap-chart/treemap-chart.component.ts - 414 + 421 @@ -8228,11 +8244,11 @@ libs/ui/src/lib/treemap-chart/treemap-chart.component.ts - 414 + 421 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts - 427 + 434 @@ -8320,7 +8336,7 @@ Token de seguridad apps/client/src/app/components/admin-users/admin-users.component.ts - 273 + 253 apps/client/src/app/components/user-account-access/user-account-access.component.ts @@ -8332,7 +8348,7 @@ ¿Seguro que quieres generar un nuevo token de seguridad para este usuario? apps/client/src/app/components/admin-users/admin-users.component.ts - 278 + 258 @@ -8340,7 +8356,7 @@ Generar token de seguridad apps/client/src/app/components/admin-users/admin-users.html - 238 + 250 @@ -8389,7 +8405,7 @@ () ya está en uso. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 965 + 967 @@ -8397,7 +8413,7 @@ Ocurrió un error al actualizar a (). apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 809 + 811 @@ -8550,7 +8566,7 @@ La cuenta de usuario de demostración se ha sincronizado. apps/client/src/app/components/admin-overview/admin-overview.component.ts - 334 + 314 @@ -8812,7 +8828,7 @@ Mes actual apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 263 + 265 @@ -9441,7 +9457,7 @@ Fecha de registro apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 64 + 68 diff --git a/apps/client/src/locales/messages.fr.xlf b/apps/client/src/locales/messages.fr.xlf index 130ede7174..9c0cfa5ec9 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 - 181 + 202 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -110,7 +110,7 @@ Plateforme apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 120 + 121 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -188,6 +188,10 @@ Total Total + + apps/client/src/app/components/admin-tag/admin-tag.component.html + 87 + libs/ui/src/lib/accounts-table/accounts-table.component.html 63 @@ -238,7 +242,7 @@ Balance Cash apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 57 + 58 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -318,7 +322,7 @@ apps/client/src/app/components/admin-tag/admin-tag.component.html - 99 + 117 libs/ui/src/lib/accounts-table/accounts-table.component.html @@ -354,15 +358,15 @@ apps/client/src/app/components/admin-tag/admin-tag.component.html - 114 + 132 apps/client/src/app/components/admin-users/admin-users.html - 254 + 266 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 27 + 31 libs/ui/src/lib/account-balances/account-balances.component.html @@ -394,7 +398,7 @@ Paid apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts - 136 + 120 @@ -550,7 +554,7 @@ Détails pour libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html - 2 + 6 @@ -586,7 +590,7 @@ libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html - 6 + 10 @@ -610,7 +614,7 @@ libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html - 26 + 24 @@ -618,7 +622,7 @@ Filtrer par... apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 350 + 351 @@ -698,7 +702,7 @@ Historique de l’abonnement apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 156 + 177 @@ -728,13 +732,17 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html 21 + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 17 + - By , this is projected to increase to per year or per month, assuming a annual interest rate. - D’ici , ce montant devrait atteindre par an ou par mois, en supposant un taux d’intérêt annuel de . + By , this is projected to increase to per year or per month, assuming a annual interest rate. + D’ici , ce montant devrait atteindre par an ou par mois, en supposant un taux d’intérêt annuel de . apps/client/src/app/pages/portfolio/fire/fire-page.html - 132 + 144 @@ -758,7 +766,7 @@ apps/client/src/app/components/admin-users/admin-users.html - 53 + 56 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -766,7 +774,7 @@ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 99 + 103 @@ -842,7 +850,7 @@ Voulez-vous vraiment supprimer ce code promotionnel ? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 247 + 227 @@ -850,7 +858,7 @@ Voulez-vous vraiment vider le cache ? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 290 + 270 @@ -858,7 +866,7 @@ Veuillez définir votre message système : apps/client/src/app/components/admin-overview/admin-overview.component.ts - 310 + 290 @@ -866,7 +874,7 @@ par Utilisateur apps/client/src/app/components/admin-overview/admin-overview.component.ts - 181 + 176 @@ -986,7 +994,7 @@ Voulez-vous vraiment supprimer cet·te utilisateur·rice ? apps/client/src/app/components/admin-users/admin-users.component.ts - 253 + 233 @@ -1018,19 +1026,23 @@ Engagement par Jour apps/client/src/app/components/admin-users/admin-users.html - 135 + 143 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 138 + 142 - + Last Request Dernière Requête apps/client/src/app/components/admin-users/admin-users.html - 181 + 188 + + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 169 @@ -1038,11 +1050,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 - 730 + 732 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 733 + 735 @@ -1058,7 +1070,7 @@ Portefeuille apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts - 140 + 156 apps/client/src/app/components/header/header.component.html @@ -1086,7 +1098,7 @@ apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts - 152 + 168 @@ -1198,7 +1210,7 @@ An error occurred while merging this asset profile into (). apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 944 + 946 @@ -1214,7 +1226,7 @@ Montant Total apps/client/src/app/components/investment-chart/investment-chart.component.ts - 144 + 160 @@ -1230,7 +1242,7 @@ Taux d’Épargne apps/client/src/app/components/investment-chart/investment-chart.component.ts - 193 + 209 @@ -1354,11 +1366,11 @@ Performance Absolue Nette apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 122 + 141 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 240 + 279 @@ -1366,11 +1378,11 @@ Performance nette apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 137 + 156 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 256 + 295 @@ -1378,7 +1390,7 @@ Actifs Totaux apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 165 + 184 @@ -1386,7 +1398,7 @@ Pouvoir d’Achat apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 305 + 324 @@ -1394,7 +1406,7 @@ Exclus de l’Analyse apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 337 + 356 @@ -1402,7 +1414,7 @@ Fortune apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 391 + 407 @@ -1410,7 +1422,7 @@ Performance annualisée apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 406 + 422 @@ -1418,7 +1430,7 @@ Veuillez entrer le montant de votre fonds d’urgence : apps/client/src/app/components/portfolio-summary/portfolio-summary.component.ts - 173 + 204 @@ -1486,7 +1498,7 @@ CDA apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 267 + 269 libs/ui/src/lib/assistant/assistant.component.ts @@ -1498,7 +1510,7 @@ 1A apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 271 + 273 libs/ui/src/lib/assistant/assistant.component.ts @@ -1518,7 +1530,7 @@ 5A apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 275 + 277 libs/ui/src/lib/assistant/assistant.component.ts @@ -1538,7 +1550,7 @@ Max apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 279 + 281 libs/ui/src/lib/assistant/assistant.component.ts @@ -1762,7 +1774,7 @@ Coupon apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts - 141 + 125 @@ -1886,7 +1898,7 @@ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 41 + 45 @@ -1946,7 +1958,7 @@ apps/client/src/app/components/admin-users/admin-users.html - 92 + 100 apps/client/src/app/components/header/header.component.html @@ -1962,7 +1974,7 @@ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 113 + 117 apps/client/src/app/pages/accounts/accounts-page.html @@ -2238,7 +2250,7 @@ Positions apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 134 + 135 apps/client/src/app/components/home-holdings/home-holdings.html @@ -2250,7 +2262,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 196 + 215 apps/client/src/app/pages/public/public-page.html @@ -2274,15 +2286,15 @@ This action cannot be undone. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 963 + 965 just now à l’instant - apps/client/src/app/components/admin-users/admin-users.component.ts - 221 + apps/client/src/app/util/date.util.ts + 23 @@ -2342,11 +2354,11 @@ Activités apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 109 + 110 apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 145 + 146 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -2362,7 +2374,7 @@ apps/client/src/app/components/admin-users/admin-users.html - 113 + 121 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -2374,7 +2386,7 @@ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 123 + 127 apps/client/src/app/pages/portfolio/activities/activities-page.html @@ -2402,7 +2414,7 @@ Semaine en cours apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 259 + 261 @@ -2534,7 +2546,7 @@ Prix apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 191 + 212 @@ -2542,7 +2554,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 - 811 + 813 @@ -2658,7 +2670,7 @@ Essai apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts - 140 + 124 @@ -2738,7 +2750,7 @@ Dividende apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 96 + 97 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -2746,7 +2758,11 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 492 + 103 + + + apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html + 511 apps/client/src/app/pages/features/features-page.html @@ -2778,7 +2794,7 @@ Dépôt libs/ui/src/lib/fire-calculator/fire-calculator.component.ts - 423 + 441 @@ -2794,7 +2810,7 @@ Haut apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 332 + 329 @@ -2802,7 +2818,7 @@ Bas apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 383 + 380 @@ -2810,7 +2826,7 @@ Évolution du Portefeuille apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 438 + 435 @@ -2818,7 +2834,7 @@ Historique des Investissements apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 465 + 463 @@ -2826,7 +2842,7 @@ Historique des Dividendes apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 522 + 521 @@ -2950,7 +2966,7 @@ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 165 + 186 @@ -2958,7 +2974,7 @@ Enregistrement apps/client/src/app/components/admin-users/admin-users.html - 75 + 78 libs/common/src/lib/routes/routes.ts @@ -3058,7 +3074,7 @@ Aperçu apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 43 + 44 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -3226,15 +3242,15 @@ Intérêt apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 83 + 84 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 478 + 496 libs/ui/src/lib/fire-calculator/fire-calculator.component.ts - 433 + 451 libs/ui/src/lib/i18n.ts @@ -3246,7 +3262,7 @@ Épargne libs/ui/src/lib/fire-calculator/fire-calculator.component.ts - 443 + 461 @@ -3290,7 +3306,7 @@ Compte apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.component.ts - 109 + 110 libs/common/src/lib/routes/routes.ts @@ -3370,15 +3386,15 @@ Fonds d’Urgence apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 242 + 261 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 320 + 339 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 425 + 441 apps/client/src/app/pages/features/features-page.html @@ -3402,7 +3418,7 @@ libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 462 + 473 @@ -3458,7 +3474,7 @@ Cash apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 274 + 293 @@ -3466,7 +3482,7 @@ Capital apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 70 + 71 @@ -3482,7 +3498,7 @@ Authentification apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 74 + 78 @@ -3490,7 +3506,7 @@ Absolute Dividend Performance apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 288 + 195 @@ -3542,8 +3558,8 @@ - If you retire today, you would be able to withdraw per year or per month, based on your total assets of and a safe withdrawal rate (SWR) of - Si vous partez à la retraite aujourd’hui, vous pourriez retirer par an ou par mois, basé sur le total de vos actifs de et un taux de retrait sûr (SWR) de + If you retire today, you would be able to withdraw per year or per month, based on your total assets of and a safe withdrawal rate (SWR) of + Si vous partez à la retraite aujourd’hui, vous pourriez retirer par an ou par mois, basé sur le total de vos actifs de et un taux de retrait sûr (SWR) de apps/client/src/app/pages/portfolio/fire/fire-page.html 69 @@ -3598,11 +3614,11 @@ libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 464 + 475 libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 478 + 489 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -3634,7 +3650,7 @@ Dividend Performance apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 307 + 214 @@ -3710,7 +3726,7 @@ Aucune Activité apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 138 + 139 @@ -3758,7 +3774,7 @@ Investments apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 227 + 246 @@ -3902,7 +3918,7 @@ Toutes les heures apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 251 + 253 @@ -3998,7 +4014,7 @@ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 224 + 245 @@ -4014,11 +4030,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 - 764 + 766 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 767 + 769 @@ -4038,7 +4054,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 102 + 121 @@ -4142,7 +4158,7 @@ This asset profile cannot be merged into (). apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 922 + 924 @@ -4202,7 +4218,7 @@ Voir en tant que ... apps/client/src/app/components/admin-users/admin-users.html - 228 + 240 @@ -4226,7 +4242,7 @@ The data of this asset profile is moved to () and this asset profile is deleted. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 961 + 963 @@ -4242,7 +4258,7 @@ Année en cours apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 267 + 269 @@ -4258,7 +4274,7 @@ Cache has been flushed. apps/client/src/app/components/admin-overview/admin-overview.component.ts - 281 + 261 @@ -4294,7 +4310,7 @@ Le profil d’actif a été enregistré apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 754 + 756 @@ -4302,7 +4318,7 @@ Voulez-vous vraiment supprimer cette plateforme ? apps/client/src/app/components/admin-platform/admin-platform.component.ts - 125 + 131 @@ -4446,7 +4462,7 @@ Série en cours apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 486 + 484 @@ -4454,7 +4470,7 @@ Série la plus longue apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 495 + 493 @@ -4494,7 +4510,7 @@ Voir les Détails apps/client/src/app/components/admin-users/admin-users.html - 220 + 232 libs/ui/src/lib/accounts-table/accounts-table.component.html @@ -4506,7 +4522,7 @@ Dettes apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 368 + 387 apps/client/src/app/pages/features/features-page.html @@ -4686,7 +4702,7 @@ Total apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 175 + 196 @@ -4774,7 +4790,7 @@ Coupon has been created apps/client/src/app/components/admin-overview/admin-overview.component.ts - 229 + 209 @@ -4982,7 +4998,7 @@ ETF sans Pays apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 128 + 129 @@ -4990,7 +5006,7 @@ ETF sans Secteurs apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 133 + 134 @@ -4998,7 +5014,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 - 528 + 530 @@ -5218,7 +5234,7 @@ Devises apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 123 + 124 apps/client/src/app/pages/public/public-page.html @@ -5270,11 +5286,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 - 678 + 680 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 681 + 683 @@ -5888,7 +5904,7 @@ Data gathering has been started. apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 386 + 387 @@ -5924,7 +5940,7 @@ Do you really want to merge this asset profile into it? apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 967 + 969 @@ -6040,7 +6056,7 @@ Confirmez la suppression de ce tag ? apps/client/src/app/components/admin-tag/admin-tag.component.ts - 129 + 144 @@ -6112,7 +6128,7 @@ Statut apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 88 + 92 libs/common/src/lib/routes/routes.ts @@ -6400,7 +6416,7 @@ Oops! Echec du parsing des données historiques. libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor.component.ts - 286 + 287 @@ -6416,7 +6432,7 @@ Confirmer la suppresion de ce message système? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 260 + 240 @@ -6448,7 +6464,7 @@ Cash Balances apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 178 + 179 @@ -6484,7 +6500,7 @@ Le prix actuel du marché est apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 856 + 858 @@ -6608,7 +6624,7 @@ Performance des devises en valeur absolue apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 194 + 233 @@ -6616,7 +6632,7 @@ Performance des devises apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 218 + 257 @@ -6632,7 +6648,7 @@ WTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 259 + 261 libs/ui/src/lib/assistant/assistant.component.ts @@ -6652,7 +6668,7 @@ MTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 263 + 265 libs/ui/src/lib/assistant/assistant.component.ts @@ -6660,8 +6676,8 @@ - Expires () - Expire () + Expires () + Expire () apps/client/src/app/components/admin-users/admin-users.html 34 @@ -6696,7 +6712,7 @@ Récupérer le prix du marché libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html - 40 + 32 @@ -6720,7 +6736,7 @@ année apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 271 + 273 apps/client/src/app/pages/resources/personal-finance-tools/product-page.html @@ -6740,7 +6756,7 @@ années apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 275 + 277 libs/ui/src/lib/assistant/assistant.component.ts @@ -6825,7 +6841,7 @@ Tous les jours apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 247 + 249 @@ -6865,7 +6881,7 @@ Activitées apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 107 + 108 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -7037,7 +7053,7 @@ Benchmarks apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 118 + 119 @@ -7289,15 +7305,15 @@ Erreur apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 846 + 848 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 923 + 925 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 945 + 947 @@ -7381,7 +7397,7 @@ libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html - 48 + 41 libs/ui/src/lib/i18n.ts @@ -7425,7 +7441,7 @@ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 259 + 280 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -7445,7 +7461,7 @@ Rôle apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 50 + 54 @@ -7549,7 +7565,7 @@ a été copié dans le presse-papiers apps/client/src/app/components/admin-overview/admin-overview.component.ts - 228 + 208 libs/ui/src/lib/value/value.component.ts @@ -7895,11 +7911,11 @@ Requêtes API aujourd’hui apps/client/src/app/components/admin-users/admin-users.html - 156 + 164 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 148 + 152 @@ -7999,7 +8015,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.ts - 171 + 202 apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html @@ -8079,7 +8095,7 @@ Le prompt IA a été copié dans le presse-papiers apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 207 + 237 @@ -8095,7 +8111,7 @@ Paresseux apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 296 + 298 @@ -8103,7 +8119,7 @@ Instantané apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 300 + 302 @@ -8127,7 +8143,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 - 531 + 533 @@ -8151,7 +8167,7 @@ fin de journée apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 296 + 298 @@ -8159,7 +8175,7 @@ temps réel apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 300 + 302 @@ -8167,7 +8183,7 @@ Ouvrir Duck.ai apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 208 + 238 @@ -8187,7 +8203,7 @@ libs/ui/src/lib/treemap-chart/treemap-chart.component.ts - 414 + 421 @@ -8227,11 +8243,11 @@ libs/ui/src/lib/treemap-chart/treemap-chart.component.ts - 414 + 421 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts - 427 + 434 @@ -8319,7 +8335,7 @@ Jeton de sécurité apps/client/src/app/components/admin-users/admin-users.component.ts - 273 + 253 apps/client/src/app/components/user-account-access/user-account-access.component.ts @@ -8331,7 +8347,7 @@ Voulez-vous vraiment générer un nouveau jeton de sécurité pour cet utilisateur ? apps/client/src/app/components/admin-users/admin-users.component.ts - 278 + 258 @@ -8339,7 +8355,7 @@ Générer un jeton de sécurité apps/client/src/app/components/admin-users/admin-users.html - 238 + 250 @@ -8388,7 +8404,7 @@ () est déjà utilisé. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 965 + 967 @@ -8396,7 +8412,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 - 809 + 811 @@ -8549,7 +8565,7 @@ Le compte utilisateur de démonstration a été synchronisé. apps/client/src/app/components/admin-overview/admin-overview.component.ts - 334 + 314 @@ -8811,7 +8827,7 @@ Mois en cours apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 263 + 265 @@ -9440,7 +9456,7 @@ Date d’Inscription apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 64 + 68 diff --git a/apps/client/src/locales/messages.it.xlf b/apps/client/src/locales/messages.it.xlf index 496900f288..63da41186c 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 - 181 + 202 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -181,6 +181,10 @@ Total Totale + + apps/client/src/app/components/admin-tag/admin-tag.component.html + 87 + libs/ui/src/lib/accounts-table/accounts-table.component.html 63 @@ -255,7 +259,7 @@ apps/client/src/app/components/admin-tag/admin-tag.component.html - 99 + 117 libs/ui/src/lib/accounts-table/accounts-table.component.html @@ -291,15 +295,15 @@ apps/client/src/app/components/admin-tag/admin-tag.component.html - 114 + 132 apps/client/src/app/components/admin-users/admin-users.html - 254 + 266 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 27 + 31 libs/ui/src/lib/account-balances/account-balances.component.html @@ -331,7 +335,7 @@ Pagamento effettuato apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts - 136 + 120 @@ -487,7 +491,7 @@ Dettagli per libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html - 2 + 6 @@ -523,7 +527,7 @@ libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html - 6 + 10 @@ -547,7 +551,7 @@ libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html - 26 + 24 @@ -587,7 +591,7 @@ Vuoi davvero eliminare questo buono? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 247 + 227 @@ -595,7 +599,7 @@ Vuoi davvero svuotare la cache? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 290 + 270 @@ -603,7 +607,7 @@ Imposta il messaggio di sistema: apps/client/src/app/components/admin-overview/admin-overview.component.ts - 310 + 290 @@ -611,7 +615,7 @@ per utente apps/client/src/app/components/admin-overview/admin-overview.component.ts - 181 + 176 @@ -719,7 +723,7 @@ Vuoi davvero eliminare questo utente? apps/client/src/app/components/admin-users/admin-users.component.ts - 253 + 233 @@ -751,19 +755,23 @@ Partecipazione giornaliera apps/client/src/app/components/admin-users/admin-users.html - 135 + 143 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 138 + 142 - + Last Request Ultima richiesta apps/client/src/app/components/admin-users/admin-users.html - 181 + 188 + + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 169 @@ -827,7 +835,7 @@ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 165 + 186 @@ -895,7 +903,7 @@ Si è verificato un errore durante l’unione di questo profilo di asset in (). apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 944 + 946 @@ -1027,11 +1035,11 @@ Prestazioni nette assolute apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 122 + 141 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 240 + 279 @@ -1039,11 +1047,11 @@ Prestazioni nette apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 137 + 156 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 256 + 295 @@ -1051,7 +1059,7 @@ Asset totali apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 165 + 184 @@ -1059,7 +1067,7 @@ Potere d’acquisto apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 305 + 324 @@ -1067,7 +1075,7 @@ Patrimonio netto apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 391 + 407 @@ -1075,7 +1083,7 @@ Prestazioni annualizzate apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 406 + 422 @@ -1083,7 +1091,7 @@ Inserisci l’importo del tuo fondo di emergenza: apps/client/src/app/components/portfolio-summary/portfolio-summary.component.ts - 173 + 204 @@ -1199,7 +1207,7 @@ anno corrente apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 267 + 269 libs/ui/src/lib/assistant/assistant.component.ts @@ -1211,7 +1219,7 @@ 1 anno apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 271 + 273 libs/ui/src/lib/assistant/assistant.component.ts @@ -1231,7 +1239,7 @@ 5 anni apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 275 + 277 libs/ui/src/lib/assistant/assistant.component.ts @@ -1251,7 +1259,7 @@ Massimo apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 279 + 281 libs/ui/src/lib/assistant/assistant.component.ts @@ -1427,7 +1435,7 @@ Coupon apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts - 141 + 125 @@ -1483,7 +1491,7 @@ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 41 + 45 @@ -1543,7 +1551,7 @@ apps/client/src/app/components/admin-users/admin-users.html - 92 + 100 apps/client/src/app/components/header/header.component.html @@ -1559,7 +1567,7 @@ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 113 + 117 apps/client/src/app/pages/accounts/accounts-page.html @@ -1635,7 +1643,7 @@ Saldo di cassa apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 57 + 58 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -1651,7 +1659,7 @@ Piattaforma apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 120 + 121 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -1883,7 +1891,7 @@ Panoramica apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 43 + 44 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -2047,7 +2055,7 @@ Trial apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts - 140 + 124 @@ -2067,7 +2075,7 @@ Cronologia degli investimenti apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 465 + 463 @@ -2075,7 +2083,7 @@ In alto apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 332 + 329 @@ -2083,7 +2091,7 @@ In basso apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 383 + 380 @@ -2107,7 +2115,7 @@ Partecipazioni apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 134 + 135 apps/client/src/app/components/home-holdings/home-holdings.html @@ -2119,7 +2127,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 196 + 215 apps/client/src/app/pages/public/public-page.html @@ -2151,7 +2159,7 @@ Current week apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 259 + 261 @@ -2279,11 +2287,11 @@ Attività apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 109 + 110 apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 145 + 146 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -2299,7 +2307,7 @@ apps/client/src/app/components/admin-users/admin-users.html - 113 + 121 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -2311,7 +2319,7 @@ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 123 + 127 apps/client/src/app/pages/portfolio/activities/activities-page.html @@ -2387,7 +2395,7 @@ Portafoglio apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts - 140 + 156 apps/client/src/app/components/header/header.component.html @@ -2435,7 +2443,7 @@ Iscrizione apps/client/src/app/components/admin-users/admin-users.html - 75 + 78 libs/common/src/lib/routes/routes.ts @@ -2735,11 +2743,11 @@ - By , this is projected to increase to per year or per month, assuming a annual interest rate. - Entro , si prevede che aumenti a per anno oppure per mese, ipotizzando un tasso di interesse annuo del . + By , this is projected to increase to per year or per month, assuming a annual interest rate. + Entro , si prevede che aumenti a per anno oppure per mese, ipotizzando un tasso di interesse annuo del . apps/client/src/app/pages/portfolio/fire/fire-page.html - 132 + 144 @@ -2763,7 +2771,7 @@ apps/client/src/app/components/admin-users/admin-users.html - 53 + 56 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -2771,7 +2779,7 @@ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 99 + 103 @@ -2795,7 +2803,7 @@ Risparmio libs/ui/src/lib/fire-calculator/fire-calculator.component.ts - 443 + 461 @@ -2803,15 +2811,15 @@ Interesse apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 83 + 84 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 478 + 496 libs/ui/src/lib/fire-calculator/fire-calculator.component.ts - 433 + 451 libs/ui/src/lib/i18n.ts @@ -2823,7 +2831,7 @@ Deposito libs/ui/src/lib/fire-calculator/fire-calculator.component.ts - 423 + 441 @@ -2855,7 +2863,7 @@ Subscription History apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 156 + 177 @@ -2895,7 +2903,7 @@ Filtra per... apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 350 + 351 @@ -2935,7 +2943,7 @@ apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts - 152 + 168 @@ -2943,11 +2951,11 @@ Could not validate form apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 730 + 732 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 733 + 735 @@ -2971,7 +2979,7 @@ Escluso dall’analisi apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 337 + 356 @@ -3043,7 +3051,7 @@ Importo totale apps/client/src/app/components/investment-chart/investment-chart.component.ts - 144 + 160 @@ -3051,7 +3059,7 @@ Evoluzione del portafoglio apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 438 + 435 @@ -3067,7 +3075,7 @@ Tasso di risparmio apps/client/src/app/components/investment-chart/investment-chart.component.ts - 193 + 209 @@ -3075,7 +3083,7 @@ Account apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.component.ts - 109 + 110 libs/common/src/lib/routes/routes.ts @@ -3175,7 +3183,7 @@ Contanti apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 274 + 293 @@ -3183,7 +3191,7 @@ Azione ordinaria apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 70 + 71 @@ -3199,7 +3207,7 @@ Authentication apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 74 + 78 @@ -3207,15 +3215,15 @@ Fondo di emergenza apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 242 + 261 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 320 + 339 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 425 + 441 apps/client/src/app/pages/features/features-page.html @@ -3239,7 +3247,7 @@ libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 462 + 473 @@ -3259,11 +3267,11 @@ libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 464 + 475 libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 478 + 489 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -3283,7 +3291,7 @@ Absolute Dividend Performance apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 288 + 195 @@ -3327,7 +3335,7 @@ - If you retire today, you would be able to withdraw per year or per month, based on your total assets of and a safe withdrawal rate (SWR) of + If you retire today, you would be able to withdraw per year or per month, based on your total assets of and a safe withdrawal rate (SWR) of If you retire today, you would be able to withdraw per anno oppure per month, based on your total assets of and a safe withdrawal rate (SWR) of apps/client/src/app/pages/portfolio/fire/fire-page.html @@ -3391,7 +3399,7 @@ Price apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 191 + 212 @@ -3399,7 +3407,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 - 811 + 813 @@ -3433,6 +3441,10 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html 21 + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 17 + Symbol Mapping @@ -3455,7 +3467,7 @@ Dividendi apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 96 + 97 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -3463,7 +3475,11 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 492 + 103 + + + apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html + 511 apps/client/src/app/pages/features/features-page.html @@ -3495,7 +3511,7 @@ Cronologia dei dividendi apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 522 + 521 @@ -3587,15 +3603,15 @@ This action cannot be undone. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 963 + 965 just now just now - apps/client/src/app/components/admin-users/admin-users.component.ts - 221 + apps/client/src/app/util/date.util.ts + 23 @@ -3635,7 +3651,7 @@ Dividend Performance apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 307 + 214 @@ -3711,7 +3727,7 @@ No Activities apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 138 + 139 @@ -3759,7 +3775,7 @@ Investments apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 227 + 246 @@ -3903,7 +3919,7 @@ Hourly apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 251 + 253 @@ -3999,7 +4015,7 @@ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 224 + 245 @@ -4015,11 +4031,11 @@ Could not save asset profile apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 764 + 766 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 767 + 769 @@ -4039,7 +4055,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 102 + 121 @@ -4143,7 +4159,7 @@ This asset profile cannot be merged into (). apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 922 + 924 @@ -4203,7 +4219,7 @@ Imita l’utente apps/client/src/app/components/admin-users/admin-users.html - 228 + 240 @@ -4227,7 +4243,7 @@ The data of this asset profile is moved to () and this asset profile is deleted. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 961 + 963 @@ -4243,7 +4259,7 @@ Current year apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 267 + 269 @@ -4259,7 +4275,7 @@ Cache has been flushed. apps/client/src/app/components/admin-overview/admin-overview.component.ts - 281 + 261 @@ -4295,7 +4311,7 @@ Asset profile has been saved apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 754 + 756 @@ -4303,7 +4319,7 @@ Vuoi davvero eliminare questa piattaforma? apps/client/src/app/components/admin-platform/admin-platform.component.ts - 125 + 131 @@ -4447,7 +4463,7 @@ Serie attuale apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 486 + 484 @@ -4455,7 +4471,7 @@ Serie più lunga apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 495 + 493 @@ -4495,7 +4511,7 @@ View Details apps/client/src/app/components/admin-users/admin-users.html - 220 + 232 libs/ui/src/lib/accounts-table/accounts-table.component.html @@ -4507,7 +4523,7 @@ Passività apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 368 + 387 apps/client/src/app/pages/features/features-page.html @@ -4687,7 +4703,7 @@ Total apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 175 + 196 @@ -4775,7 +4791,7 @@ Coupon has been created apps/client/src/app/components/admin-overview/admin-overview.component.ts - 229 + 209 @@ -4983,7 +4999,7 @@ ETF senza paesi apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 128 + 129 @@ -4991,7 +5007,7 @@ ETF senza settori apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 133 + 134 @@ -4999,7 +5015,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 - 528 + 530 @@ -5219,7 +5235,7 @@ Valute apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 123 + 124 apps/client/src/app/pages/public/public-page.html @@ -5271,11 +5287,11 @@ Could not parse scraper configuration apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 678 + 680 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 681 + 683 @@ -5889,7 +5905,7 @@ Data gathering has been started. apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 386 + 387 @@ -5925,7 +5941,7 @@ Do you really want to merge this asset profile into it? apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 967 + 969 @@ -6041,7 +6057,7 @@ Sei sicuro di voler eliminare questo tag? apps/client/src/app/components/admin-tag/admin-tag.component.ts - 129 + 144 @@ -6113,7 +6129,7 @@ Iscrizione apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 88 + 92 libs/common/src/lib/routes/routes.ts @@ -6401,7 +6417,7 @@ Ops! Impossibile elaborare i dati storici. libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor.component.ts - 286 + 287 @@ -6417,7 +6433,7 @@ Confermi di voler cancellare questo messaggio di sistema? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 260 + 240 @@ -6449,7 +6465,7 @@ Saldi di cassa apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 178 + 179 @@ -6485,7 +6501,7 @@ L’attuale prezzo di mercato è apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 856 + 858 @@ -6609,7 +6625,7 @@ Rendimento assoluto della Valuta apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 194 + 233 @@ -6617,7 +6633,7 @@ Rendimento della Valuta apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 218 + 257 @@ -6633,7 +6649,7 @@ Settimana corrente apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 259 + 261 libs/ui/src/lib/assistant/assistant.component.ts @@ -6653,7 +6669,7 @@ Mese corrente apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 263 + 265 libs/ui/src/lib/assistant/assistant.component.ts @@ -6661,8 +6677,8 @@ - Expires () - Expires () + Expires () + Expires () apps/client/src/app/components/admin-users/admin-users.html 34 @@ -6697,7 +6713,7 @@ Fetch market price libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html - 40 + 32 @@ -6721,7 +6737,7 @@ anno apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 271 + 273 apps/client/src/app/pages/resources/personal-finance-tools/product-page.html @@ -6741,7 +6757,7 @@ anni apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 275 + 277 libs/ui/src/lib/assistant/assistant.component.ts @@ -6826,7 +6842,7 @@ Daily apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 247 + 249 @@ -6866,7 +6882,7 @@ Attività apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 107 + 108 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -7038,7 +7054,7 @@ Benchmarks apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 118 + 119 @@ -7290,15 +7306,15 @@ Errore apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 846 + 848 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 923 + 925 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 945 + 947 @@ -7382,7 +7398,7 @@ libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html - 48 + 41 libs/ui/src/lib/i18n.ts @@ -7426,7 +7442,7 @@ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 259 + 280 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -7446,7 +7462,7 @@ Role apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 50 + 54 @@ -7550,7 +7566,7 @@ has been copied to the clipboard apps/client/src/app/components/admin-overview/admin-overview.component.ts - 228 + 208 libs/ui/src/lib/value/value.component.ts @@ -7896,11 +7912,11 @@ Richieste API oggi apps/client/src/app/components/admin-users/admin-users.html - 156 + 164 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 148 + 152 @@ -8000,7 +8016,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.ts - 171 + 202 apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html @@ -8080,7 +8096,7 @@ L’AI prompt è stato copiato negli appunti apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 207 + 237 @@ -8096,7 +8112,7 @@ Pigro apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 296 + 298 @@ -8104,7 +8120,7 @@ Istantaneo apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 300 + 302 @@ -8128,7 +8144,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 - 531 + 533 @@ -8152,7 +8168,7 @@ fine giornata apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 296 + 298 @@ -8160,7 +8176,7 @@ in tempo reale apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 300 + 302 @@ -8168,7 +8184,7 @@ Apri Duck.ai apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 208 + 238 @@ -8188,7 +8204,7 @@ libs/ui/src/lib/treemap-chart/treemap-chart.component.ts - 414 + 421 @@ -8228,11 +8244,11 @@ libs/ui/src/lib/treemap-chart/treemap-chart.component.ts - 414 + 421 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts - 427 + 434 @@ -8320,7 +8336,7 @@ Token di sicurezza apps/client/src/app/components/admin-users/admin-users.component.ts - 273 + 253 apps/client/src/app/components/user-account-access/user-account-access.component.ts @@ -8332,7 +8348,7 @@ Vuoi davvero generare un nuovo token di sicurezza per questo utente? apps/client/src/app/components/admin-users/admin-users.component.ts - 278 + 258 @@ -8340,7 +8356,7 @@ Genera Token di Sicurezza apps/client/src/app/components/admin-users/admin-users.html - 238 + 250 @@ -8389,7 +8405,7 @@ () e gia in uso. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 965 + 967 @@ -8397,7 +8413,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 - 809 + 811 @@ -8550,7 +8566,7 @@ L’account utente demo è stato sincronizzato. apps/client/src/app/components/admin-overview/admin-overview.component.ts - 334 + 314 @@ -8812,7 +8828,7 @@ Current month apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 263 + 265 @@ -9441,7 +9457,7 @@ Registration Date apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 64 + 68 diff --git a/apps/client/src/locales/messages.ja.xlf b/apps/client/src/locales/messages.ja.xlf index 7cc567ca40..bd48a7dda4 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 - 181 + 202 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -320,7 +320,7 @@ 現金残高 apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 57 + 58 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -336,7 +336,7 @@ プラットフォーム apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 120 + 121 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -352,7 +352,7 @@ 現金残高 apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 178 + 179 @@ -438,6 +438,10 @@ Total 合計 + + apps/client/src/app/components/admin-tag/admin-tag.component.html + 87 + libs/ui/src/lib/accounts-table/accounts-table.component.html 63 @@ -552,7 +556,7 @@ apps/client/src/app/components/admin-tag/admin-tag.component.html - 99 + 117 libs/ui/src/lib/accounts-table/accounts-table.component.html @@ -588,15 +592,15 @@ apps/client/src/app/components/admin-tag/admin-tag.component.html - 114 + 132 apps/client/src/app/components/admin-users/admin-users.html - 254 + 266 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 27 + 31 libs/ui/src/lib/account-balances/account-balances.component.html @@ -628,7 +632,7 @@ 支払い済み apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts - 136 + 120 @@ -784,7 +788,7 @@ ~の詳細 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html - 2 + 6 @@ -820,7 +824,7 @@ libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html - 6 + 10 @@ -844,7 +848,7 @@ libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html - 26 + 24 @@ -852,7 +856,7 @@ 通貨 apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 123 + 124 apps/client/src/app/pages/public/public-page.html @@ -872,7 +876,7 @@ 国に縛られないETF apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 128 + 129 @@ -880,7 +884,7 @@ セクター別ではないETF apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 133 + 134 @@ -888,7 +892,7 @@ データソースを に変換中にエラーが発生しました。 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 528 + 530 @@ -908,7 +912,7 @@ 絞り込み... apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 350 + 351 @@ -988,7 +992,7 @@ サブスクリプション履歴 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 156 + 177 @@ -1032,7 +1036,7 @@ エラー。過去データを解析できませんでした。 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor.component.ts - 286 + 287 @@ -1050,6 +1054,10 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html 21 + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 17 + Gather Historical Market Data @@ -1076,11 +1084,11 @@ - By , this is projected to increase to per year or per month, assuming a annual interest rate. - までに、これは年あたり、または月あたりに増加すると予測されます(年利と仮定)。 + By , this is projected to increase to per year or per month, assuming a annual interest rate. + までに、これは年あたり、または月あたりに増加すると予測されます(年利と仮定)。 apps/client/src/app/pages/portfolio/fire/fire-page.html - 132 + 144 @@ -1104,7 +1112,7 @@ apps/client/src/app/components/admin-users/admin-users.html - 53 + 56 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -1112,7 +1120,7 @@ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 99 + 103 @@ -1188,7 +1196,7 @@ 合計 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 175 + 196 @@ -1300,7 +1308,7 @@ このクーポンを削除してもよろしいですか? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 247 + 227 @@ -1308,7 +1316,7 @@ 本当にこのシステムメッセージを削除しますか? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 260 + 240 @@ -1316,7 +1324,7 @@ キャッシュをクリアしてもよろしいですか? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 290 + 270 @@ -1324,7 +1332,7 @@ システムメッセージを設定してください: apps/client/src/app/components/admin-overview/admin-overview.component.ts - 310 + 290 @@ -1340,7 +1348,7 @@ ユーザーあたり apps/client/src/app/components/admin-overview/admin-overview.component.ts - 181 + 176 @@ -1480,7 +1488,7 @@ 資産プロファイルを保存しました apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 754 + 756 @@ -1488,7 +1496,7 @@ このプラットフォームを削除してもよろしいですか? apps/client/src/app/components/admin-platform/admin-platform.component.ts - 125 + 131 @@ -1504,7 +1512,7 @@ The data of this asset profile is moved to () and this asset profile is deleted. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 961 + 963 @@ -1520,7 +1528,7 @@ 現在の年 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 267 + 269 @@ -1536,7 +1544,7 @@ Cache has been flushed. apps/client/src/app/components/admin-overview/admin-overview.component.ts - 281 + 261 @@ -1576,7 +1584,7 @@ このタグを削除してもよろしいですか? apps/client/src/app/components/admin-tag/admin-tag.component.ts - 129 + 144 @@ -1600,7 +1608,7 @@ このユーザーを削除してもよろしいですか? apps/client/src/app/components/admin-users/admin-users.component.ts - 253 + 233 @@ -1632,19 +1640,23 @@ 1日あたりのエンゲージメント apps/client/src/app/components/admin-users/admin-users.html - 135 + 143 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 138 + 142 - + Last Request 最終依頼 apps/client/src/app/components/admin-users/admin-users.html - 181 + 188 + + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 169 @@ -1652,7 +1664,7 @@ ユーザーになりすます apps/client/src/app/components/admin-users/admin-users.html - 228 + 240 @@ -1660,11 +1672,11 @@ フォームを検証できませんでした apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 730 + 732 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 733 + 735 @@ -1688,7 +1700,7 @@ ポートフォリオ apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts - 140 + 156 apps/client/src/app/components/header/header.component.html @@ -1716,7 +1728,7 @@ apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts - 152 + 168 @@ -1828,7 +1840,7 @@ An error occurred while merging this asset profile into (). apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 944 + 946 @@ -1924,7 +1936,7 @@ 今週 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 259 + 261 @@ -1944,7 +1956,7 @@ 合計金額 apps/client/src/app/components/investment-chart/investment-chart.component.ts - 144 + 160 @@ -1960,7 +1972,7 @@ 貯蓄率 apps/client/src/app/components/investment-chart/investment-chart.component.ts - 193 + 209 @@ -2088,7 +2100,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 102 + 121 @@ -2096,11 +2108,11 @@ 実質純パフォーマンス apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 122 + 141 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 240 + 279 @@ -2108,11 +2120,11 @@ 純パフォーマンス apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 137 + 156 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 256 + 295 @@ -2120,7 +2132,7 @@ 総資産 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 165 + 184 @@ -2128,7 +2140,7 @@ 購買力 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 305 + 324 @@ -2136,7 +2148,7 @@ 分析から除外 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 337 + 356 @@ -2144,7 +2156,7 @@ 負債 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 368 + 387 apps/client/src/app/pages/features/features-page.html @@ -2156,7 +2168,7 @@ 純資産(ネットワース) apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 391 + 407 @@ -2164,7 +2176,7 @@ 年率換算パフォーマンス apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 406 + 422 @@ -2172,7 +2184,7 @@ 緊急用資金の金額を設定してください。 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.ts - 173 + 204 @@ -2408,7 +2420,7 @@ YTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 267 + 269 libs/ui/src/lib/assistant/assistant.component.ts @@ -2420,7 +2432,7 @@ 1年 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 271 + 273 libs/ui/src/lib/assistant/assistant.component.ts @@ -2440,7 +2452,7 @@ 5年 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 275 + 277 libs/ui/src/lib/assistant/assistant.component.ts @@ -2460,7 +2472,7 @@ マックス apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 279 + 281 libs/ui/src/lib/assistant/assistant.component.ts @@ -2636,7 +2648,7 @@ クーポン apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts - 141 + 125 @@ -2744,7 +2756,7 @@ Investments apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 227 + 246 @@ -2792,7 +2804,7 @@ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 41 + 45 @@ -2968,7 +2980,7 @@ apps/client/src/app/components/admin-users/admin-users.html - 92 + 100 apps/client/src/app/components/header/header.component.html @@ -2984,7 +2996,7 @@ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 113 + 117 apps/client/src/app/pages/accounts/accounts-page.html @@ -3124,7 +3136,7 @@ 概要 apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 43 + 44 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -3276,11 +3288,11 @@ スクレイパー設定を解析できませんでした apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 678 + 680 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 681 + 683 @@ -3516,7 +3528,7 @@ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 165 + 186 @@ -3524,7 +3536,7 @@ 保有資産 apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 134 + 135 apps/client/src/app/components/home-holdings/home-holdings.html @@ -3536,7 +3548,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 196 + 215 apps/client/src/app/pages/public/public-page.html @@ -3560,15 +3572,15 @@ This action cannot be undone. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 963 + 965 just now just now - apps/client/src/app/components/admin-users/admin-users.component.ts - 221 + apps/client/src/app/util/date.util.ts + 23 @@ -4168,7 +4180,7 @@ Do you really want to merge this asset profile into it? apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 967 + 969 @@ -4272,11 +4284,11 @@ アクティビティ apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 109 + 110 apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 145 + 146 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -4292,7 +4304,7 @@ apps/client/src/app/components/admin-users/admin-users.html - 113 + 121 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -4304,7 +4316,7 @@ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 123 + 127 apps/client/src/app/pages/portfolio/activities/activities-page.html @@ -4504,7 +4516,7 @@ Dividend Performance apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 307 + 214 @@ -4564,7 +4576,7 @@ 価格 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 191 + 212 @@ -4572,7 +4584,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 - 811 + 813 @@ -4672,7 +4684,7 @@ トライアル apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts - 140 + 124 @@ -4776,7 +4788,7 @@ 配当金 apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 96 + 97 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -4784,7 +4796,11 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 492 + 103 + + + apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html + 511 apps/client/src/app/pages/features/features-page.html @@ -4816,7 +4832,7 @@ 入金 libs/ui/src/lib/fire-calculator/fire-calculator.component.ts - 423 + 441 @@ -4840,7 +4856,7 @@ トップ apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 332 + 329 @@ -4848,7 +4864,7 @@ ボトム apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 383 + 380 @@ -4856,7 +4872,7 @@ ポートフォリオ進化 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 438 + 435 @@ -4864,7 +4880,7 @@ 投資タイムライン apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 465 + 463 @@ -4872,7 +4888,7 @@ 現在のストリーク apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 486 + 484 @@ -4880,7 +4896,7 @@ 最長のストリーク apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 495 + 493 @@ -4888,7 +4904,7 @@ 配当金タイムライン apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 522 + 521 @@ -4984,7 +5000,7 @@ 時間ごと apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 251 + 253 @@ -5100,7 +5116,7 @@ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 224 + 245 @@ -5140,11 +5156,11 @@ 資産プロフィールを保存できませんでした apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 764 + 766 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 767 + 769 @@ -5192,7 +5208,7 @@ 登録 apps/client/src/app/components/admin-users/admin-users.html - 75 + 78 libs/common/src/lib/routes/routes.ts @@ -5361,7 +5377,7 @@ Coupon has been created apps/client/src/app/components/admin-overview/admin-overview.component.ts - 229 + 209 @@ -5541,7 +5557,7 @@ Data gathering has been started. apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 386 + 387 @@ -5585,7 +5601,7 @@ メンバーシップ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 88 + 92 libs/common/src/lib/routes/routes.ts @@ -5841,7 +5857,7 @@ This asset profile cannot be merged into (). apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 922 + 924 @@ -5857,15 +5873,15 @@ 利息 apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 83 + 84 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 478 + 496 libs/ui/src/lib/fire-calculator/fire-calculator.component.ts - 433 + 451 libs/ui/src/lib/i18n.ts @@ -5877,7 +5893,7 @@ 貯蓄 libs/ui/src/lib/fire-calculator/fire-calculator.component.ts - 443 + 461 @@ -5921,7 +5937,7 @@ 口座 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.component.ts - 109 + 110 libs/common/src/lib/routes/routes.ts @@ -6033,15 +6049,15 @@ 緊急資金 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 242 + 261 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 320 + 339 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 425 + 441 apps/client/src/app/pages/features/features-page.html @@ -6113,7 +6129,7 @@ libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 462 + 473 @@ -6137,7 +6153,7 @@ アクティビティなし apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 138 + 139 @@ -6217,7 +6233,7 @@ 詳細を見る apps/client/src/app/components/admin-users/admin-users.html - 220 + 232 libs/ui/src/lib/accounts-table/accounts-table.component.html @@ -6309,7 +6325,7 @@ 現金 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 274 + 293 @@ -6317,7 +6333,7 @@ 株式 apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 70 + 71 @@ -6333,7 +6349,7 @@ 認証 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 74 + 78 @@ -6341,7 +6357,7 @@ Absolute Dividend Performance apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 288 + 195 @@ -6393,7 +6409,7 @@ - If you retire today, you would be able to withdraw per year or per month, based on your total assets of and a safe withdrawal rate (SWR) of + If you retire today, you would be able to withdraw per year or per month, based on your total assets of and a safe withdrawal rate (SWR) of もしあなたが今日退職するなら、あなたは引き出すことができるでしょう 年あたり または 月あたり, based on your total assets of および安全な引き出し率(SWR)の apps/client/src/app/pages/portfolio/fire/fire-page.html @@ -6485,11 +6501,11 @@ libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 464 + 475 libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 478 + 489 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -6517,7 +6533,7 @@ 現在の市場価格は apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 856 + 858 @@ -6589,7 +6605,7 @@ 絶対通貨パフォーマンス apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 194 + 233 @@ -6641,7 +6657,7 @@ 通貨パフォーマンス apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 218 + 257 @@ -6673,7 +6689,7 @@ MTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 263 + 265 libs/ui/src/lib/assistant/assistant.component.ts @@ -6681,8 +6697,8 @@ - Expires () - Expires () + Expires () + Expires () apps/client/src/app/components/admin-users/admin-users.html 34 @@ -6693,7 +6709,7 @@ WTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 259 + 261 libs/ui/src/lib/assistant/assistant.component.ts @@ -6729,7 +6745,7 @@ Fetch market price libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html - 40 + 32 @@ -6745,7 +6761,7 @@ 年 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 271 + 273 apps/client/src/app/pages/resources/personal-finance-tools/product-page.html @@ -6765,7 +6781,7 @@ 年 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 275 + 277 libs/ui/src/lib/assistant/assistant.component.ts @@ -6850,7 +6866,7 @@ 毎日 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 247 + 249 @@ -6890,7 +6906,7 @@ アクティビティ apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 107 + 108 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -7062,7 +7078,7 @@ Benchmarks apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 118 + 119 @@ -7314,15 +7330,15 @@ Error apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 846 + 848 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 923 + 925 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 945 + 947 @@ -7374,7 +7390,7 @@ libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html - 48 + 41 libs/ui/src/lib/i18n.ts @@ -7386,7 +7402,7 @@ Role apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 50 + 54 @@ -7442,7 +7458,7 @@ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 259 + 280 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -7590,7 +7606,7 @@ has been copied to the clipboard apps/client/src/app/components/admin-overview/admin-overview.component.ts - 228 + 208 libs/ui/src/lib/value/value.component.ts @@ -7936,11 +7952,11 @@ API Requests Today apps/client/src/app/components/admin-users/admin-users.html - 156 + 164 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 148 + 152 @@ -8024,7 +8040,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.ts - 171 + 202 apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html @@ -8104,7 +8120,7 @@ AI prompt has been copied to the clipboard apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 207 + 237 @@ -8128,7 +8144,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 - 531 + 533 @@ -8152,7 +8168,7 @@ Instant apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 300 + 302 @@ -8160,7 +8176,7 @@ Lazy apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 296 + 298 @@ -8176,7 +8192,7 @@ real-time apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 300 + 302 @@ -8184,7 +8200,7 @@ end of day apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 296 + 298 @@ -8192,7 +8208,7 @@ Open Duck.ai apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 208 + 238 @@ -8212,7 +8228,7 @@ libs/ui/src/lib/treemap-chart/treemap-chart.component.ts - 414 + 421 @@ -8252,11 +8268,11 @@ libs/ui/src/lib/treemap-chart/treemap-chart.component.ts - 414 + 421 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts - 427 + 434 @@ -8344,7 +8360,7 @@ Do you really want to generate a new security token for this user? apps/client/src/app/components/admin-users/admin-users.component.ts - 278 + 258 @@ -8352,7 +8368,7 @@ Security token apps/client/src/app/components/admin-users/admin-users.component.ts - 273 + 253 apps/client/src/app/components/user-account-access/user-account-access.component.ts @@ -8364,7 +8380,7 @@ Generate Security Token apps/client/src/app/components/admin-users/admin-users.html - 238 + 250 @@ -8413,7 +8429,7 @@ () is already in use. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 965 + 967 @@ -8421,7 +8437,7 @@ An error occurred while updating to (). apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 809 + 811 @@ -8558,7 +8574,7 @@ Demo user account has been synced. apps/client/src/app/components/admin-overview/admin-overview.component.ts - 334 + 314 @@ -8812,7 +8828,7 @@ Current month apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 263 + 265 @@ -9437,7 +9453,7 @@ Registration Date apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 64 + 68 diff --git a/apps/client/src/locales/messages.ko.xlf b/apps/client/src/locales/messages.ko.xlf index 49d9aff787..80bf4c9006 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 - 181 + 202 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -320,7 +320,7 @@ 현금 잔액 apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 57 + 58 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -336,7 +336,7 @@ 플랫폼 apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 120 + 121 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -352,7 +352,7 @@ 현금 잔액 apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 178 + 179 @@ -438,6 +438,10 @@ Total 합계 + + apps/client/src/app/components/admin-tag/admin-tag.component.html + 87 + libs/ui/src/lib/accounts-table/accounts-table.component.html 63 @@ -552,7 +556,7 @@ apps/client/src/app/components/admin-tag/admin-tag.component.html - 99 + 117 libs/ui/src/lib/accounts-table/accounts-table.component.html @@ -588,15 +592,15 @@ apps/client/src/app/components/admin-tag/admin-tag.component.html - 114 + 132 apps/client/src/app/components/admin-users/admin-users.html - 254 + 266 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 27 + 31 libs/ui/src/lib/account-balances/account-balances.component.html @@ -628,7 +632,7 @@ 유료 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts - 136 + 120 @@ -784,7 +788,7 @@ 에 대한 세부정보 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html - 2 + 6 @@ -820,7 +824,7 @@ libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html - 6 + 10 @@ -844,7 +848,7 @@ libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html - 26 + 24 @@ -852,7 +856,7 @@ 통화 apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 123 + 124 apps/client/src/app/pages/public/public-page.html @@ -872,7 +876,7 @@ 국가 정보 없는 ETF apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 128 + 129 @@ -880,7 +884,7 @@ 섹터 정보 없는 ETF apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 133 + 134 @@ -888,7 +892,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 - 528 + 530 @@ -908,7 +912,7 @@ 다음 기준으로 필터... apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 350 + 351 @@ -988,7 +992,7 @@ 구독 내역 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 156 + 177 @@ -1032,7 +1036,7 @@ 이런! 과거 데이터를 파싱할 수 없습니다. libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor.component.ts - 286 + 287 @@ -1050,6 +1054,10 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html 21 + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 17 + Gather Historical Market Data @@ -1076,11 +1084,11 @@ - By , this is projected to increase to per year or per month, assuming a annual interest rate. - 까지 이 금액은 연간 또는 매월 (으)로 증가할 것으로 예상되며, 연이율 을(를) 가정합니다. + By , this is projected to increase to per year or per month, assuming a annual interest rate. + 까지 이 금액은 연간 또는 매월 (으)로 증가할 것으로 예상되며, 연이율 을(를) 가정합니다. apps/client/src/app/pages/portfolio/fire/fire-page.html - 132 + 144 @@ -1104,7 +1112,7 @@ apps/client/src/app/components/admin-users/admin-users.html - 53 + 56 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -1112,7 +1120,7 @@ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 99 + 103 @@ -1188,7 +1196,7 @@ 합계 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 175 + 196 @@ -1300,7 +1308,7 @@ 이 쿠폰을 정말 삭제하시겠습니까? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 247 + 227 @@ -1308,7 +1316,7 @@ 이 시스템 메시지를 정말 삭제하시겠습니까? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 260 + 240 @@ -1316,7 +1324,7 @@ 정말로 캐시를 플러시하시겠습니까? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 290 + 270 @@ -1324,7 +1332,7 @@ 시스템 메시지를 설정하십시오: apps/client/src/app/components/admin-overview/admin-overview.component.ts - 310 + 290 @@ -1340,7 +1348,7 @@ 사용자당 apps/client/src/app/components/admin-overview/admin-overview.component.ts - 181 + 176 @@ -1480,7 +1488,7 @@ 자산 정보가 저장되었습니다. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 754 + 756 @@ -1488,7 +1496,7 @@ 정말로 이 플랫폼을 삭제하시겠습니까? apps/client/src/app/components/admin-platform/admin-platform.component.ts - 125 + 131 @@ -1504,7 +1512,7 @@ The data of this asset profile is moved to () and this asset profile is deleted. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 961 + 963 @@ -1520,7 +1528,7 @@ 올해 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 267 + 269 @@ -1536,7 +1544,7 @@ Cache has been flushed. apps/client/src/app/components/admin-overview/admin-overview.component.ts - 281 + 261 @@ -1576,7 +1584,7 @@ 이 태그를 정말로 삭제하시겠습니까? apps/client/src/app/components/admin-tag/admin-tag.component.ts - 129 + 144 @@ -1600,7 +1608,7 @@ 이 사용자를 정말로 삭제하시겠습니까? apps/client/src/app/components/admin-users/admin-users.component.ts - 253 + 233 @@ -1632,19 +1640,23 @@ 일일 참여 apps/client/src/app/components/admin-users/admin-users.html - 135 + 143 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 138 + 142 - + Last Request 마지막 요청 apps/client/src/app/components/admin-users/admin-users.html - 181 + 188 + + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 169 @@ -1652,7 +1664,7 @@ 사용자 대리 접속 apps/client/src/app/components/admin-users/admin-users.html - 228 + 240 @@ -1660,11 +1672,11 @@ 양식 유효성 검사에 실패했습니다. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 730 + 732 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 733 + 735 @@ -1688,7 +1700,7 @@ 포트폴리오 apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts - 140 + 156 apps/client/src/app/components/header/header.component.html @@ -1716,7 +1728,7 @@ apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts - 152 + 168 @@ -1828,7 +1840,7 @@ An error occurred while merging this asset profile into (). apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 944 + 946 @@ -1924,7 +1936,7 @@ 이번주 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 259 + 261 @@ -1944,7 +1956,7 @@ 총액 apps/client/src/app/components/investment-chart/investment-chart.component.ts - 144 + 160 @@ -1960,7 +1972,7 @@ 저축률 apps/client/src/app/components/investment-chart/investment-chart.component.ts - 193 + 209 @@ -2088,7 +2100,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 102 + 121 @@ -2096,11 +2108,11 @@ 절대 순 성과 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 122 + 141 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 240 + 279 @@ -2108,11 +2120,11 @@ 순 성과 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 137 + 156 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 256 + 295 @@ -2120,7 +2132,7 @@ 총자산 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 165 + 184 @@ -2128,7 +2140,7 @@ 매수 가능 금액 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 305 + 324 @@ -2136,7 +2148,7 @@ 분석에서 제외됨 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 337 + 356 @@ -2144,7 +2156,7 @@ 부채 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 368 + 387 apps/client/src/app/pages/features/features-page.html @@ -2156,7 +2168,7 @@ 순자산 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 391 + 407 @@ -2164,7 +2176,7 @@ 연환산 성과 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 406 + 422 @@ -2172,7 +2184,7 @@ 비상금 금액을 설정해 주세요. apps/client/src/app/components/portfolio-summary/portfolio-summary.component.ts - 173 + 204 @@ -2408,7 +2420,7 @@ 연초 대비 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 267 + 269 libs/ui/src/lib/assistant/assistant.component.ts @@ -2420,7 +2432,7 @@ 1년 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 271 + 273 libs/ui/src/lib/assistant/assistant.component.ts @@ -2440,7 +2452,7 @@ 5년 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 275 + 277 libs/ui/src/lib/assistant/assistant.component.ts @@ -2460,7 +2472,7 @@ 맥스 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 279 + 281 libs/ui/src/lib/assistant/assistant.component.ts @@ -2636,7 +2648,7 @@ 쿠폰 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts - 141 + 125 @@ -2744,7 +2756,7 @@ Investments apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 227 + 246 @@ -2792,7 +2804,7 @@ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 41 + 45 @@ -2968,7 +2980,7 @@ apps/client/src/app/components/admin-users/admin-users.html - 92 + 100 apps/client/src/app/components/header/header.component.html @@ -2984,7 +2996,7 @@ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 113 + 117 apps/client/src/app/pages/accounts/accounts-page.html @@ -3124,7 +3136,7 @@ 개요 apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 43 + 44 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -3276,11 +3288,11 @@ 스크래퍼 설정을 파싱할 수 없습니다. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 678 + 680 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 681 + 683 @@ -3516,7 +3528,7 @@ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 165 + 186 @@ -3524,7 +3536,7 @@ 보유 종목 apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 134 + 135 apps/client/src/app/components/home-holdings/home-holdings.html @@ -3536,7 +3548,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 196 + 215 apps/client/src/app/pages/public/public-page.html @@ -3560,15 +3572,15 @@ This action cannot be undone. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 963 + 965 just now 방금 전 - apps/client/src/app/components/admin-users/admin-users.component.ts - 221 + apps/client/src/app/util/date.util.ts + 23 @@ -4160,7 +4172,7 @@ Do you really want to merge this asset profile into it? apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 967 + 969 @@ -4264,11 +4276,11 @@ 거래 내역 apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 109 + 110 apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 145 + 146 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -4284,7 +4296,7 @@ apps/client/src/app/components/admin-users/admin-users.html - 113 + 121 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -4296,7 +4308,7 @@ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 123 + 127 apps/client/src/app/pages/portfolio/activities/activities-page.html @@ -4496,7 +4508,7 @@ Dividend Performance apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 307 + 214 @@ -4556,7 +4568,7 @@ 가격 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 191 + 212 @@ -4564,7 +4576,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 - 811 + 813 @@ -4664,7 +4676,7 @@ 체험판 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts - 140 + 124 @@ -4768,7 +4780,7 @@ 배당금 apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 96 + 97 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -4776,7 +4788,11 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 492 + 103 + + + apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html + 511 apps/client/src/app/pages/features/features-page.html @@ -4808,7 +4824,7 @@ 보증금 libs/ui/src/lib/fire-calculator/fire-calculator.component.ts - 423 + 441 @@ -4832,7 +4848,7 @@ 상위 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 332 + 329 @@ -4840,7 +4856,7 @@ 하위 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 383 + 380 @@ -4848,7 +4864,7 @@ 포트폴리오 진화 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 438 + 435 @@ -4856,7 +4872,7 @@ 투자 일정 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 465 + 463 @@ -4864,7 +4880,7 @@ 현재 연속 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 486 + 484 @@ -4872,7 +4888,7 @@ 최장 연속 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 495 + 493 @@ -4880,7 +4896,7 @@ 배당 일정 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 522 + 521 @@ -4976,7 +4992,7 @@ 매시간 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 251 + 253 @@ -5092,7 +5108,7 @@ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 224 + 245 @@ -5132,11 +5148,11 @@ 자산 정보를 저장할 수 없습니다. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 764 + 766 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 767 + 769 @@ -5184,7 +5200,7 @@ 등록 apps/client/src/app/components/admin-users/admin-users.html - 75 + 78 libs/common/src/lib/routes/routes.ts @@ -5353,7 +5369,7 @@ Coupon has been created apps/client/src/app/components/admin-overview/admin-overview.component.ts - 229 + 209 @@ -5533,7 +5549,7 @@ Data gathering has been started. apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 386 + 387 @@ -5577,7 +5593,7 @@ 멤버십 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 88 + 92 libs/common/src/lib/routes/routes.ts @@ -5833,7 +5849,7 @@ This asset profile cannot be merged into (). apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 922 + 924 @@ -5849,15 +5865,15 @@ 관심 apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 83 + 84 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 478 + 496 libs/ui/src/lib/fire-calculator/fire-calculator.component.ts - 433 + 451 libs/ui/src/lib/i18n.ts @@ -5869,7 +5885,7 @@ 저금 libs/ui/src/lib/fire-calculator/fire-calculator.component.ts - 443 + 461 @@ -5913,7 +5929,7 @@ 계좌 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.component.ts - 109 + 110 libs/common/src/lib/routes/routes.ts @@ -6025,15 +6041,15 @@ 비상자금 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 242 + 261 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 320 + 339 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 425 + 441 apps/client/src/app/pages/features/features-page.html @@ -6105,7 +6121,7 @@ libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 462 + 473 @@ -6129,7 +6145,7 @@ 거래 내역 없음 apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 138 + 139 @@ -6217,7 +6233,7 @@ 세부정보 보기 apps/client/src/app/components/admin-users/admin-users.html - 220 + 232 libs/ui/src/lib/accounts-table/accounts-table.component.html @@ -6309,7 +6325,7 @@ 현금 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 274 + 293 @@ -6317,7 +6333,7 @@ 주식 apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 70 + 71 @@ -6333,7 +6349,7 @@ 입증 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 74 + 78 @@ -6341,7 +6357,7 @@ Absolute Dividend Performance apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 288 + 195 @@ -6393,8 +6409,8 @@ - If you retire today, you would be able to withdraw per year or per month, based on your total assets of and a safe withdrawal rate (SWR) of - 오늘 퇴사하면 탈퇴 가능 연간 또는 매월, 귀하의 총 자산을 기준으로 안전 인출률(SWR)은 다음과 같습니다. + If you retire today, you would be able to withdraw per year or per month, based on your total assets of and a safe withdrawal rate (SWR) of + 오늘 퇴사하면 탈퇴 가능 연간 또는 매월, 귀하의 총 자산을 기준으로 안전 인출률(SWR)은 다음과 같습니다. apps/client/src/app/pages/portfolio/fire/fire-page.html 69 @@ -6485,11 +6501,11 @@ libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 464 + 475 libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 478 + 489 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -6517,7 +6533,7 @@ 현재 시장가격은 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 856 + 858 @@ -6589,7 +6605,7 @@ 절대적인 통화 성과 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 194 + 233 @@ -6641,7 +6657,7 @@ 통화 성과 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 218 + 257 @@ -6673,7 +6689,7 @@ MTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 263 + 265 libs/ui/src/lib/assistant/assistant.component.ts @@ -6681,8 +6697,8 @@ - Expires () - 만료 () + Expires () + 만료 () apps/client/src/app/components/admin-users/admin-users.html 34 @@ -6693,7 +6709,7 @@ WTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 259 + 261 libs/ui/src/lib/assistant/assistant.component.ts @@ -6729,7 +6745,7 @@ Fetch market price libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html - 40 + 32 @@ -6745,7 +6761,7 @@ 년도 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 271 + 273 apps/client/src/app/pages/resources/personal-finance-tools/product-page.html @@ -6765,7 +6781,7 @@ 연령 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 275 + 277 libs/ui/src/lib/assistant/assistant.component.ts @@ -6850,7 +6866,7 @@ 매일 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 247 + 249 @@ -6890,7 +6906,7 @@ 거래 apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 107 + 108 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -7062,7 +7078,7 @@ 벤치마크 apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 118 + 119 @@ -7314,15 +7330,15 @@ 오류 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 846 + 848 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 923 + 925 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 945 + 947 @@ -7374,7 +7390,7 @@ libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html - 48 + 41 libs/ui/src/lib/i18n.ts @@ -7386,7 +7402,7 @@ 역할 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 50 + 54 @@ -7442,7 +7458,7 @@ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 259 + 280 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -7590,7 +7606,7 @@ 가 클립보드에 복사되었습니다. apps/client/src/app/components/admin-overview/admin-overview.component.ts - 228 + 208 libs/ui/src/lib/value/value.component.ts @@ -7936,11 +7952,11 @@ 오늘의 API 요청 apps/client/src/app/components/admin-users/admin-users.html - 156 + 164 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 148 + 152 @@ -8024,7 +8040,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.ts - 171 + 202 apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html @@ -8104,7 +8120,7 @@ AI 프롬프트가 클립보드에 복사되었습니다. apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 207 + 237 @@ -8128,7 +8144,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 - 531 + 533 @@ -8152,7 +8168,7 @@ 즉각적인 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 300 + 302 @@ -8160,7 +8176,7 @@ 게으른 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 296 + 298 @@ -8176,7 +8192,7 @@ 실시간 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 300 + 302 @@ -8184,7 +8200,7 @@ 하루의 끝 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 296 + 298 @@ -8192,7 +8208,7 @@ 오픈 Duck.ai apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 208 + 238 @@ -8212,7 +8228,7 @@ libs/ui/src/lib/treemap-chart/treemap-chart.component.ts - 414 + 421 @@ -8252,11 +8268,11 @@ libs/ui/src/lib/treemap-chart/treemap-chart.component.ts - 414 + 421 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts - 427 + 434 @@ -8344,7 +8360,7 @@ 정말로 이 사용자에 대한 새 보안 토큰을 생성하시겠습니까? apps/client/src/app/components/admin-users/admin-users.component.ts - 278 + 258 @@ -8352,7 +8368,7 @@ 보안 토큰 apps/client/src/app/components/admin-users/admin-users.component.ts - 273 + 253 apps/client/src/app/components/user-account-access/user-account-access.component.ts @@ -8364,7 +8380,7 @@ 보안 토큰 생성 apps/client/src/app/components/admin-users/admin-users.html - 238 + 250 @@ -8413,7 +8429,7 @@ ()은(는) 이미 사용 중입니다. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 965 + 967 @@ -8421,7 +8437,7 @@ ()로 업데이트하는 동안 오류가 발생했습니다. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 809 + 811 @@ -8558,7 +8574,7 @@ 데모 사용자 계정이 동기화되었습니다. apps/client/src/app/components/admin-overview/admin-overview.component.ts - 334 + 314 @@ -8812,7 +8828,7 @@ 이번 달 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 263 + 265 @@ -9437,7 +9453,7 @@ 등록일 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 64 + 68 diff --git a/apps/client/src/locales/messages.nl.xlf b/apps/client/src/locales/messages.nl.xlf index 431207b54d..61da01f6db 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 - 181 + 202 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -180,6 +180,10 @@ Total Totaal + + apps/client/src/app/components/admin-tag/admin-tag.component.html + 87 + libs/ui/src/lib/accounts-table/accounts-table.component.html 63 @@ -254,7 +258,7 @@ apps/client/src/app/components/admin-tag/admin-tag.component.html - 99 + 117 libs/ui/src/lib/accounts-table/accounts-table.component.html @@ -290,15 +294,15 @@ apps/client/src/app/components/admin-tag/admin-tag.component.html - 114 + 132 apps/client/src/app/components/admin-users/admin-users.html - 254 + 266 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 27 + 31 libs/ui/src/lib/account-balances/account-balances.component.html @@ -330,7 +334,7 @@ Betaald apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts - 136 + 120 @@ -486,7 +490,7 @@ Details voor libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html - 2 + 6 @@ -522,7 +526,7 @@ libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html - 6 + 10 @@ -546,7 +550,7 @@ libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html - 26 + 24 @@ -586,7 +590,7 @@ Wil je deze coupon echt verwijderen? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 247 + 227 @@ -594,7 +598,7 @@ Wil je echt de cache legen? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 290 + 270 @@ -602,7 +606,7 @@ Stel je systeemboodschap in: apps/client/src/app/components/admin-overview/admin-overview.component.ts - 310 + 290 @@ -610,7 +614,7 @@ per gebruiker apps/client/src/app/components/admin-overview/admin-overview.component.ts - 181 + 176 @@ -718,7 +722,7 @@ Wilt je deze gebruiker echt verwijderen? apps/client/src/app/components/admin-users/admin-users.component.ts - 253 + 233 @@ -750,19 +754,23 @@ Betrokkenheid per dag apps/client/src/app/components/admin-users/admin-users.html - 135 + 143 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 138 + 142 - + Last Request Laatste verzoek apps/client/src/app/components/admin-users/admin-users.html - 181 + 188 + + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 169 @@ -826,7 +834,7 @@ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 165 + 186 @@ -894,7 +902,7 @@ An error occurred while merging this asset profile into (). apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 944 + 946 @@ -1026,11 +1034,11 @@ Absoluut netto rendement apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 122 + 141 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 240 + 279 @@ -1038,11 +1046,11 @@ Netto rendement apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 137 + 156 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 256 + 295 @@ -1050,7 +1058,7 @@ Totaal Activa apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 165 + 184 @@ -1058,7 +1066,7 @@ Koopkracht apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 305 + 324 @@ -1066,7 +1074,7 @@ Netto waarde apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 391 + 407 @@ -1074,7 +1082,7 @@ Rendement per jaar apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 406 + 422 @@ -1082,7 +1090,7 @@ Voer het bedrag van je noodfonds in: apps/client/src/app/components/portfolio-summary/portfolio-summary.component.ts - 173 + 204 @@ -1198,7 +1206,7 @@ YTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 267 + 269 libs/ui/src/lib/assistant/assistant.component.ts @@ -1210,7 +1218,7 @@ 1J apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 271 + 273 libs/ui/src/lib/assistant/assistant.component.ts @@ -1230,7 +1238,7 @@ 5J apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 275 + 277 libs/ui/src/lib/assistant/assistant.component.ts @@ -1250,7 +1258,7 @@ Max apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 279 + 281 libs/ui/src/lib/assistant/assistant.component.ts @@ -1426,7 +1434,7 @@ Coupon apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts - 141 + 125 @@ -1482,7 +1490,7 @@ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 41 + 45 @@ -1542,7 +1550,7 @@ apps/client/src/app/components/admin-users/admin-users.html - 92 + 100 apps/client/src/app/components/header/header.component.html @@ -1558,7 +1566,7 @@ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 113 + 117 apps/client/src/app/pages/accounts/accounts-page.html @@ -1634,7 +1642,7 @@ Saldo apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 57 + 58 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -1650,7 +1658,7 @@ Platform apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 120 + 121 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -1882,7 +1890,7 @@ Overzicht apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 43 + 44 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -2046,7 +2054,7 @@ Proefperiode apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts - 140 + 124 @@ -2066,7 +2074,7 @@ Tijdlijn investeringen apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 465 + 463 @@ -2074,7 +2082,7 @@ Winnaars apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 332 + 329 @@ -2082,7 +2090,7 @@ Verliezers apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 383 + 380 @@ -2106,7 +2114,7 @@ Posities apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 134 + 135 apps/client/src/app/components/home-holdings/home-holdings.html @@ -2118,7 +2126,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 196 + 215 apps/client/src/app/pages/public/public-page.html @@ -2150,7 +2158,7 @@ Huidige week apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 259 + 261 @@ -2278,11 +2286,11 @@ Activiteiten apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 109 + 110 apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 145 + 146 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -2298,7 +2306,7 @@ apps/client/src/app/components/admin-users/admin-users.html - 113 + 121 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -2310,7 +2318,7 @@ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 123 + 127 apps/client/src/app/pages/portfolio/activities/activities-page.html @@ -2386,7 +2394,7 @@ Portefeuille apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts - 140 + 156 apps/client/src/app/components/header/header.component.html @@ -2434,7 +2442,7 @@ Registratie apps/client/src/app/components/admin-users/admin-users.html - 75 + 78 libs/common/src/lib/routes/routes.ts @@ -2734,11 +2742,11 @@ - By , this is projected to increase to per year or per month, assuming a annual interest rate. - Tegen zal dit naar verwachting stijgen naar per jaar of per maand, uitgaande van een jaarlijkse rente van . + By , this is projected to increase to per year or per month, assuming a annual interest rate. + Tegen zal dit naar verwachting stijgen naar per jaar of per maand, uitgaande van een jaarlijkse rente van . apps/client/src/app/pages/portfolio/fire/fire-page.html - 132 + 144 @@ -2762,7 +2770,7 @@ apps/client/src/app/components/admin-users/admin-users.html - 53 + 56 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -2770,7 +2778,7 @@ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 99 + 103 @@ -2794,7 +2802,7 @@ Besparingen libs/ui/src/lib/fire-calculator/fire-calculator.component.ts - 443 + 461 @@ -2802,15 +2810,15 @@ Rente apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 83 + 84 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 478 + 496 libs/ui/src/lib/fire-calculator/fire-calculator.component.ts - 433 + 451 libs/ui/src/lib/i18n.ts @@ -2822,7 +2830,7 @@ Storting libs/ui/src/lib/fire-calculator/fire-calculator.component.ts - 423 + 441 @@ -2854,7 +2862,7 @@ Abonnementsgeschiedenis apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 156 + 177 @@ -2894,7 +2902,7 @@ Filter op... apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 350 + 351 @@ -2934,7 +2942,7 @@ apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts - 152 + 168 @@ -2942,11 +2950,11 @@ Het formulier kon niet worden gevalideerd. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 730 + 732 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 733 + 735 @@ -2970,7 +2978,7 @@ Uitgesloten van analyse apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 337 + 356 @@ -3042,7 +3050,7 @@ Totaalbedrag apps/client/src/app/components/investment-chart/investment-chart.component.ts - 144 + 160 @@ -3050,7 +3058,7 @@ Waardeontwikkeling van portefeuille apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 438 + 435 @@ -3066,7 +3074,7 @@ Spaarrente apps/client/src/app/components/investment-chart/investment-chart.component.ts - 193 + 209 @@ -3074,7 +3082,7 @@ Account apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.component.ts - 109 + 110 libs/common/src/lib/routes/routes.ts @@ -3174,7 +3182,7 @@ Contant geld apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 274 + 293 @@ -3182,7 +3190,7 @@ Equity apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 70 + 71 @@ -3198,7 +3206,7 @@ Authenticatie apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 74 + 78 @@ -3206,15 +3214,15 @@ Noodfonds apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 242 + 261 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 320 + 339 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 425 + 441 apps/client/src/app/pages/features/features-page.html @@ -3238,7 +3246,7 @@ libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 462 + 473 @@ -3258,11 +3266,11 @@ libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 464 + 475 libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 478 + 489 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -3282,7 +3290,7 @@ Absolute Dividend Performance apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 288 + 195 @@ -3326,8 +3334,8 @@ - If you retire today, you would be able to withdraw per year or per month, based on your total assets of and a safe withdrawal rate (SWR) of - Als u vandaag met pensioen gaat, kunt u per jaar of per maand opnemen, dit is gebaseerd op uw totale vermogen van en een veilige opnameratio (SWR) van + If you retire today, you would be able to withdraw per year or per month, based on your total assets of and a safe withdrawal rate (SWR) of + Als u vandaag met pensioen gaat, kunt u per jaar of per maand opnemen, dit is gebaseerd op uw totale vermogen van en een veilige opnameratio (SWR) van apps/client/src/app/pages/portfolio/fire/fire-page.html 69 @@ -3390,7 +3398,7 @@ Prijs apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 191 + 212 @@ -3398,7 +3406,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 - 811 + 813 @@ -3432,6 +3440,10 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html 21 + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 17 + Symbol Mapping @@ -3454,7 +3466,7 @@ Dividend apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 96 + 97 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -3462,7 +3474,11 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 492 + 103 + + + apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html + 511 apps/client/src/app/pages/features/features-page.html @@ -3494,7 +3510,7 @@ Tijdlijn dividend apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 522 + 521 @@ -3586,15 +3602,15 @@ This action cannot be undone. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 963 + 965 just now zojuist - apps/client/src/app/components/admin-users/admin-users.component.ts - 221 + apps/client/src/app/util/date.util.ts + 23 @@ -3634,7 +3650,7 @@ Dividend Performance apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 307 + 214 @@ -3710,7 +3726,7 @@ Geen activiteiten apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 138 + 139 @@ -3758,7 +3774,7 @@ Investments apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 227 + 246 @@ -3902,7 +3918,7 @@ Elk uur apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 251 + 253 @@ -3998,7 +4014,7 @@ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 224 + 245 @@ -4014,11 +4030,11 @@ Kon het assetprofiel niet opslaan apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 764 + 766 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 767 + 769 @@ -4038,7 +4054,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 102 + 121 @@ -4142,7 +4158,7 @@ This asset profile cannot be merged into (). apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 922 + 924 @@ -4202,7 +4218,7 @@ Gebruiker immiteren apps/client/src/app/components/admin-users/admin-users.html - 228 + 240 @@ -4226,7 +4242,7 @@ The data of this asset profile is moved to () and this asset profile is deleted. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 961 + 963 @@ -4242,7 +4258,7 @@ Huidig jaar apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 267 + 269 @@ -4258,7 +4274,7 @@ Cache has been flushed. apps/client/src/app/components/admin-overview/admin-overview.component.ts - 281 + 261 @@ -4294,7 +4310,7 @@ Het activaprofiel is opgeslagen. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 754 + 756 @@ -4302,7 +4318,7 @@ Wil je dit platform echt verwijderen? apps/client/src/app/components/admin-platform/admin-platform.component.ts - 125 + 131 @@ -4446,7 +4462,7 @@ Huidige reeks apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 486 + 484 @@ -4454,7 +4470,7 @@ Langste reeks apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 495 + 493 @@ -4494,7 +4510,7 @@ Bekijk details apps/client/src/app/components/admin-users/admin-users.html - 220 + 232 libs/ui/src/lib/accounts-table/accounts-table.component.html @@ -4506,7 +4522,7 @@ Verplichtingen apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 368 + 387 apps/client/src/app/pages/features/features-page.html @@ -4686,7 +4702,7 @@ Totaal apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 175 + 196 @@ -4774,7 +4790,7 @@ Coupon has been created apps/client/src/app/components/admin-overview/admin-overview.component.ts - 229 + 209 @@ -4982,7 +4998,7 @@ ETF’s zonder Landen apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 128 + 129 @@ -4990,7 +5006,7 @@ ETF’s zonder Sectoren apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 133 + 134 @@ -4998,7 +5014,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 - 528 + 530 @@ -5218,7 +5234,7 @@ Valuta apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 123 + 124 apps/client/src/app/pages/public/public-page.html @@ -5270,11 +5286,11 @@ De scraperconfiguratie kon niet worden geparseerd apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 678 + 680 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 681 + 683 @@ -5888,7 +5904,7 @@ Data gathering has been started. apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 386 + 387 @@ -5924,7 +5940,7 @@ Do you really want to merge this asset profile into it? apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 967 + 969 @@ -6040,7 +6056,7 @@ Weet u zetker dat u dit label wilt verwijderen? apps/client/src/app/components/admin-tag/admin-tag.component.ts - 129 + 144 @@ -6112,7 +6128,7 @@ Lidmaatschap apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 88 + 92 libs/common/src/lib/routes/routes.ts @@ -6400,7 +6416,7 @@ Oeps! Ophalen van historische data is mislukt. libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor.component.ts - 286 + 287 @@ -6416,7 +6432,7 @@ Wilt u dit systeembericht echt verwijderen? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 260 + 240 @@ -6448,7 +6464,7 @@ Contant Saldo apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 178 + 179 @@ -6484,7 +6500,7 @@ De huidige markt waarde is apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 856 + 858 @@ -6608,7 +6624,7 @@ Absolute Valutaprestaties apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 194 + 233 @@ -6616,7 +6632,7 @@ Valutaprestaties apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 218 + 257 @@ -6632,7 +6648,7 @@ Week tot nu toe apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 259 + 261 libs/ui/src/lib/assistant/assistant.component.ts @@ -6652,7 +6668,7 @@ MTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 263 + 265 libs/ui/src/lib/assistant/assistant.component.ts @@ -6660,8 +6676,8 @@ - Expires () - Verloopt () + Expires () + Verloopt () apps/client/src/app/components/admin-users/admin-users.html 34 @@ -6696,7 +6712,7 @@ Marktprijs ophalen libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html - 40 + 32 @@ -6720,7 +6736,7 @@ jaar apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 271 + 273 apps/client/src/app/pages/resources/personal-finance-tools/product-page.html @@ -6740,7 +6756,7 @@ jaren apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 275 + 277 libs/ui/src/lib/assistant/assistant.component.ts @@ -6825,7 +6841,7 @@ Dagelijks apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 247 + 249 @@ -6865,7 +6881,7 @@ Activiteit apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 107 + 108 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -7037,7 +7053,7 @@ Benchmarks apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 118 + 119 @@ -7289,15 +7305,15 @@ Fout apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 846 + 848 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 923 + 925 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 945 + 947 @@ -7381,7 +7397,7 @@ libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html - 48 + 41 libs/ui/src/lib/i18n.ts @@ -7425,7 +7441,7 @@ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 259 + 280 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -7445,7 +7461,7 @@ Rol apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 50 + 54 @@ -7549,7 +7565,7 @@ is naar het klembord gekopieerd apps/client/src/app/components/admin-overview/admin-overview.component.ts - 228 + 208 libs/ui/src/lib/value/value.component.ts @@ -7895,11 +7911,11 @@ Aantal API-Verzoeken Vandaag apps/client/src/app/components/admin-users/admin-users.html - 156 + 164 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 148 + 152 @@ -7999,7 +8015,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.ts - 171 + 202 apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html @@ -8079,7 +8095,7 @@ AI-prompt is naar het klembord gekopieerd apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 207 + 237 @@ -8095,7 +8111,7 @@ Lui apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 296 + 298 @@ -8103,7 +8119,7 @@ Direct apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 300 + 302 @@ -8127,7 +8143,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 - 531 + 533 @@ -8151,7 +8167,7 @@ eind van de dag apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 296 + 298 @@ -8159,7 +8175,7 @@ real-time apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 300 + 302 @@ -8167,7 +8183,7 @@ Open Duck.ai apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 208 + 238 @@ -8187,7 +8203,7 @@ libs/ui/src/lib/treemap-chart/treemap-chart.component.ts - 414 + 421 @@ -8227,11 +8243,11 @@ libs/ui/src/lib/treemap-chart/treemap-chart.component.ts - 414 + 421 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts - 427 + 434 @@ -8319,7 +8335,7 @@ Beveiligingstoken apps/client/src/app/components/admin-users/admin-users.component.ts - 273 + 253 apps/client/src/app/components/user-account-access/user-account-access.component.ts @@ -8331,7 +8347,7 @@ Wilt u echt een nieuw beveiligingstoken voor deze gebruiker aanmaken? apps/client/src/app/components/admin-users/admin-users.component.ts - 278 + 258 @@ -8339,7 +8355,7 @@ Beveiligingstoken Aanmaken apps/client/src/app/components/admin-users/admin-users.html - 238 + 250 @@ -8388,7 +8404,7 @@ () is al in gebruik. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 965 + 967 @@ -8396,7 +8412,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 - 809 + 811 @@ -8549,7 +8565,7 @@ Demo-gebruikersaccount is gesynchroniseerd. apps/client/src/app/components/admin-overview/admin-overview.component.ts - 334 + 314 @@ -8811,7 +8827,7 @@ Huidige maand apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 263 + 265 @@ -9440,7 +9456,7 @@ Registratiedatum apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 64 + 68 diff --git a/apps/client/src/locales/messages.pl.xlf b/apps/client/src/locales/messages.pl.xlf index cb7519a70e..f91675891e 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 - 181 + 202 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -319,7 +319,7 @@ Saldo Gotówkowe apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 57 + 58 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -335,7 +335,7 @@ Platforma apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 120 + 121 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -429,6 +429,10 @@ Total Suma + + apps/client/src/app/components/admin-tag/admin-tag.component.html + 87 + libs/ui/src/lib/accounts-table/accounts-table.component.html 63 @@ -543,7 +547,7 @@ apps/client/src/app/components/admin-tag/admin-tag.component.html - 99 + 117 libs/ui/src/lib/accounts-table/accounts-table.component.html @@ -579,15 +583,15 @@ apps/client/src/app/components/admin-tag/admin-tag.component.html - 114 + 132 apps/client/src/app/components/admin-users/admin-users.html - 254 + 266 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 27 + 31 libs/ui/src/lib/account-balances/account-balances.component.html @@ -619,7 +623,7 @@ Paid apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts - 136 + 120 @@ -775,7 +779,7 @@ Szczegóły dla libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html - 2 + 6 @@ -811,7 +815,7 @@ libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html - 6 + 10 @@ -835,7 +839,7 @@ libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html - 26 + 24 @@ -843,7 +847,7 @@ Waluty apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 123 + 124 apps/client/src/app/pages/public/public-page.html @@ -863,7 +867,7 @@ ETF-y bez Krajów apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 128 + 129 @@ -871,7 +875,7 @@ ETF-y bez Sektorów apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 133 + 134 @@ -879,7 +883,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 - 528 + 530 @@ -899,7 +903,7 @@ Filtruj według... apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 350 + 351 @@ -979,7 +983,7 @@ Subscription History apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 156 + 177 @@ -1007,7 +1011,7 @@ Ups! Nie udało się sparsować danych historycznych. libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor.component.ts - 286 + 287 @@ -1025,6 +1029,10 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html 21 + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 17 + Import @@ -1043,11 +1051,11 @@ - By , this is projected to increase to per year or per month, assuming a annual interest rate. - Do ma to wzrosnąć do rocznie lub miesięcznie, przy założeniu rocznej stopy procentowej wynoszącej . + By , this is projected to increase to per year or per month, assuming a annual interest rate. + Do ma to wzrosnąć do rocznie lub miesięcznie, przy założeniu rocznej stopy procentowej wynoszącej . apps/client/src/app/pages/portfolio/fire/fire-page.html - 132 + 144 @@ -1071,7 +1079,7 @@ apps/client/src/app/components/admin-users/admin-users.html - 53 + 56 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -1079,7 +1087,7 @@ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 99 + 103 @@ -1155,7 +1163,7 @@ Total apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 175 + 196 @@ -1267,7 +1275,7 @@ Czy naprawdę chcesz usunąć ten kupon? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 247 + 227 @@ -1275,7 +1283,7 @@ Czy naprawdę chcesz usunąć tę wiadomość systemową? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 260 + 240 @@ -1283,7 +1291,7 @@ Czy naprawdę chcesz wyczyścić pamięć podręczną? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 290 + 270 @@ -1291,7 +1299,7 @@ Proszę ustawić swoją wiadomość systemową: apps/client/src/app/components/admin-overview/admin-overview.component.ts - 310 + 290 @@ -1307,7 +1315,7 @@ na Użytkownika apps/client/src/app/components/admin-overview/admin-overview.component.ts - 181 + 176 @@ -1447,7 +1455,7 @@ Profil zasobu został zapisany apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 754 + 756 @@ -1455,7 +1463,7 @@ Czy naprawdę chcesz usunąć tę platformę? apps/client/src/app/components/admin-platform/admin-platform.component.ts - 125 + 131 @@ -1471,7 +1479,7 @@ The data of this asset profile is moved to () and this asset profile is deleted. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 961 + 963 @@ -1487,7 +1495,7 @@ Obecny rok apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 267 + 269 @@ -1503,7 +1511,7 @@ Cache has been flushed. apps/client/src/app/components/admin-overview/admin-overview.component.ts - 281 + 261 @@ -1543,7 +1551,7 @@ Czy naprawdę chcesz usunąć ten tag? apps/client/src/app/components/admin-tag/admin-tag.component.ts - 129 + 144 @@ -1567,7 +1575,7 @@ Czy na pewno chcesz usunąć tego użytkownika? apps/client/src/app/components/admin-users/admin-users.component.ts - 253 + 233 @@ -1599,19 +1607,23 @@ Zaangażowanie na Dzień apps/client/src/app/components/admin-users/admin-users.html - 135 + 143 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 138 + 142 - + Last Request Ostatnie Żądanie apps/client/src/app/components/admin-users/admin-users.html - 181 + 188 + + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 169 @@ -1619,7 +1631,7 @@ Wciel się w Użytkownika apps/client/src/app/components/admin-users/admin-users.html - 228 + 240 @@ -1627,11 +1639,11 @@ Could not validate form apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 730 + 732 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 733 + 735 @@ -1655,7 +1667,7 @@ Portfel apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts - 140 + 156 apps/client/src/app/components/header/header.component.html @@ -1683,7 +1695,7 @@ apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts - 152 + 168 @@ -1795,7 +1807,7 @@ An error occurred while merging this asset profile into (). apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 944 + 946 @@ -1891,7 +1903,7 @@ Obecny tydzień apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 259 + 261 @@ -1911,7 +1923,7 @@ Całkowita Kwota apps/client/src/app/components/investment-chart/investment-chart.component.ts - 144 + 160 @@ -1927,7 +1939,7 @@ Stopa Oszczędności apps/client/src/app/components/investment-chart/investment-chart.component.ts - 193 + 209 @@ -2055,7 +2067,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 102 + 121 @@ -2063,11 +2075,11 @@ Bezwzględne Osiągi Netto apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 122 + 141 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 240 + 279 @@ -2075,11 +2087,11 @@ Osiągi Netto apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 137 + 156 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 256 + 295 @@ -2087,7 +2099,7 @@ Suma Aktywów apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 165 + 184 @@ -2095,7 +2107,7 @@ Siła Nabywcza apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 305 + 324 @@ -2103,7 +2115,7 @@ Wykluczone z Analizy apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 337 + 356 @@ -2111,7 +2123,7 @@ Pasywa (Zobowiązania Finansowe) apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 368 + 387 apps/client/src/app/pages/features/features-page.html @@ -2123,7 +2135,7 @@ Wartość Netto apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 391 + 407 @@ -2131,7 +2143,7 @@ Osiągi w Ujęciu Rocznym apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 406 + 422 @@ -2139,7 +2151,7 @@ Wprowadź wysokość funduszu rezerwowego: apps/client/src/app/components/portfolio-summary/portfolio-summary.component.ts - 173 + 204 @@ -2375,7 +2387,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 - 267 + 269 libs/ui/src/lib/assistant/assistant.component.ts @@ -2387,7 +2399,7 @@ 1 rok apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 271 + 273 libs/ui/src/lib/assistant/assistant.component.ts @@ -2407,7 +2419,7 @@ 5 lat apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 275 + 277 libs/ui/src/lib/assistant/assistant.component.ts @@ -2427,7 +2439,7 @@ Maksimum apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 279 + 281 libs/ui/src/lib/assistant/assistant.component.ts @@ -2603,7 +2615,7 @@ Coupon apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts - 141 + 125 @@ -2711,7 +2723,7 @@ Investments apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 227 + 246 @@ -2759,7 +2771,7 @@ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 41 + 45 @@ -2935,7 +2947,7 @@ apps/client/src/app/components/admin-users/admin-users.html - 92 + 100 apps/client/src/app/components/header/header.component.html @@ -2951,7 +2963,7 @@ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 113 + 117 apps/client/src/app/pages/accounts/accounts-page.html @@ -3091,7 +3103,7 @@ Przegląd apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 43 + 44 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -3243,11 +3255,11 @@ Nie udało się przetworzyć konfiguracji scrapera apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 678 + 680 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 681 + 683 @@ -3483,7 +3495,7 @@ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 165 + 186 @@ -3491,7 +3503,7 @@ Inwestycje apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 134 + 135 apps/client/src/app/components/home-holdings/home-holdings.html @@ -3503,7 +3515,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 196 + 215 apps/client/src/app/pages/public/public-page.html @@ -3527,15 +3539,15 @@ This action cannot be undone. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 963 + 965 just now just now - apps/client/src/app/components/admin-users/admin-users.component.ts - 221 + apps/client/src/app/util/date.util.ts + 23 @@ -4127,7 +4139,7 @@ Do you really want to merge this asset profile into it? apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 967 + 969 @@ -4231,11 +4243,11 @@ Aktywności apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 109 + 110 apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 145 + 146 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -4251,7 +4263,7 @@ apps/client/src/app/components/admin-users/admin-users.html - 113 + 121 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -4263,7 +4275,7 @@ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 123 + 127 apps/client/src/app/pages/portfolio/activities/activities-page.html @@ -4463,7 +4475,7 @@ Dividend Performance apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 307 + 214 @@ -4523,7 +4535,7 @@ Price apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 191 + 212 @@ -4531,7 +4543,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 - 811 + 813 @@ -4631,7 +4643,7 @@ Trial apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts - 140 + 124 @@ -4735,7 +4747,7 @@ Dywidenda apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 96 + 97 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -4743,7 +4755,11 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 492 + 103 + + + apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html + 511 apps/client/src/app/pages/features/features-page.html @@ -4775,7 +4791,7 @@ Depozyt libs/ui/src/lib/fire-calculator/fire-calculator.component.ts - 423 + 441 @@ -4799,7 +4815,7 @@ Największe wzrosty apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 332 + 329 @@ -4807,7 +4823,7 @@ Największy spadek apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 383 + 380 @@ -4815,7 +4831,7 @@ Rozwój portfela apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 438 + 435 @@ -4823,7 +4839,7 @@ Oś czasu inwestycji apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 465 + 463 @@ -4831,7 +4847,7 @@ Obecna passa apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 486 + 484 @@ -4839,7 +4855,7 @@ Najdłuższa passa apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 495 + 493 @@ -4847,7 +4863,7 @@ Oś czasu dywidend apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 522 + 521 @@ -4943,7 +4959,7 @@ Hourly apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 251 + 253 @@ -5059,7 +5075,7 @@ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 224 + 245 @@ -5099,11 +5115,11 @@ Could not save asset profile apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 764 + 766 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 767 + 769 @@ -5151,7 +5167,7 @@ Rejestracja apps/client/src/app/components/admin-users/admin-users.html - 75 + 78 libs/common/src/lib/routes/routes.ts @@ -5320,7 +5336,7 @@ Coupon has been created apps/client/src/app/components/admin-overview/admin-overview.component.ts - 229 + 209 @@ -5488,7 +5504,7 @@ Data gathering has been started. apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 386 + 387 @@ -5532,7 +5548,7 @@ Członkostwo apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 88 + 92 libs/common/src/lib/routes/routes.ts @@ -5756,7 +5772,7 @@ This asset profile cannot be merged into (). apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 922 + 924 @@ -5772,15 +5788,15 @@ Odsetki apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 83 + 84 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 478 + 496 libs/ui/src/lib/fire-calculator/fire-calculator.component.ts - 433 + 451 libs/ui/src/lib/i18n.ts @@ -5792,7 +5808,7 @@ Oszczędności libs/ui/src/lib/fire-calculator/fire-calculator.component.ts - 443 + 461 @@ -5836,7 +5852,7 @@ Konto apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.component.ts - 109 + 110 libs/common/src/lib/routes/routes.ts @@ -5948,15 +5964,15 @@ Fundusz Rezerwowy apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 242 + 261 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 320 + 339 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 425 + 441 apps/client/src/app/pages/features/features-page.html @@ -6028,7 +6044,7 @@ libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 462 + 473 @@ -6052,7 +6068,7 @@ Brak transakcji apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 138 + 139 @@ -6140,7 +6156,7 @@ Zobacz szczegóły apps/client/src/app/components/admin-users/admin-users.html - 220 + 232 libs/ui/src/lib/accounts-table/accounts-table.component.html @@ -6232,7 +6248,7 @@ Gotówka apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 274 + 293 @@ -6240,7 +6256,7 @@ Kapitał apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 70 + 71 @@ -6256,7 +6272,7 @@ Uwierzytelnianie apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 74 + 78 @@ -6264,7 +6280,7 @@ Absolute Dividend Performance apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 288 + 195 @@ -6316,8 +6332,8 @@ - If you retire today, you would be able to withdraw per year or per month, based on your total assets of and a safe withdrawal rate (SWR) of - Gdybyś przeszedł na emeryturę dziś, mógłbyś wypłacać rocznie lub miesięcznie, na podstawie całkowitej wartości aktywów wynoszącej oraz bezpiecznej stopy wypłaty (SWR) na poziomie + If you retire today, you would be able to withdraw per year or per month, based on your total assets of and a safe withdrawal rate (SWR) of + Gdybyś przeszedł na emeryturę dziś, mógłbyś wypłacać rocznie lub miesięcznie, na podstawie całkowitej wartości aktywów wynoszącej oraz bezpiecznej stopy wypłaty (SWR) na poziomie apps/client/src/app/pages/portfolio/fire/fire-page.html 69 @@ -6408,11 +6424,11 @@ libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 464 + 475 libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 478 + 489 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -6448,7 +6464,7 @@ Salda Gotówkowe apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 178 + 179 @@ -6484,7 +6500,7 @@ Obecna cena rynkowa wynosi apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 856 + 858 @@ -6608,7 +6624,7 @@ Łączny wynik walut apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 194 + 233 @@ -6616,7 +6632,7 @@ Wynik walut apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 218 + 257 @@ -6632,7 +6648,7 @@ WTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 259 + 261 libs/ui/src/lib/assistant/assistant.component.ts @@ -6652,7 +6668,7 @@ MTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 263 + 265 libs/ui/src/lib/assistant/assistant.component.ts @@ -6660,8 +6676,8 @@ - Expires () - Expires () + Expires () + Expires () apps/client/src/app/components/admin-users/admin-users.html 34 @@ -6696,7 +6712,7 @@ Fetch market price libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html - 40 + 32 @@ -6720,7 +6736,7 @@ rok apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 271 + 273 apps/client/src/app/pages/resources/personal-finance-tools/product-page.html @@ -6740,7 +6756,7 @@ lata apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 275 + 277 libs/ui/src/lib/assistant/assistant.component.ts @@ -6825,7 +6841,7 @@ Daily apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 247 + 249 @@ -6865,7 +6881,7 @@ Aktywność apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 107 + 108 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -7037,7 +7053,7 @@ Punkty Odniesienia apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 118 + 119 @@ -7289,15 +7305,15 @@ Błąd apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 846 + 848 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 923 + 925 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 945 + 947 @@ -7381,7 +7397,7 @@ libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html - 48 + 41 libs/ui/src/lib/i18n.ts @@ -7425,7 +7441,7 @@ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 259 + 280 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -7445,7 +7461,7 @@ Rola apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 50 + 54 @@ -7549,7 +7565,7 @@ has been copied to the clipboard apps/client/src/app/components/admin-overview/admin-overview.component.ts - 228 + 208 libs/ui/src/lib/value/value.component.ts @@ -7895,11 +7911,11 @@ Dzisiejsze Zapytania API apps/client/src/app/components/admin-users/admin-users.html - 156 + 164 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 148 + 152 @@ -7999,7 +8015,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.ts - 171 + 202 apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html @@ -8079,7 +8095,7 @@ Prompt AI został skopiowany do schowka apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 207 + 237 @@ -8095,7 +8111,7 @@ Leniwy apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 296 + 298 @@ -8103,7 +8119,7 @@ Natychmiastowy apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 300 + 302 @@ -8127,7 +8143,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 - 531 + 533 @@ -8151,7 +8167,7 @@ koniec dnia apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 296 + 298 @@ -8159,7 +8175,7 @@ w czasie rzeczywistym apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 300 + 302 @@ -8167,7 +8183,7 @@ Otwórz Duck.ai apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 208 + 238 @@ -8187,7 +8203,7 @@ libs/ui/src/lib/treemap-chart/treemap-chart.component.ts - 414 + 421 @@ -8227,11 +8243,11 @@ libs/ui/src/lib/treemap-chart/treemap-chart.component.ts - 414 + 421 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts - 427 + 434 @@ -8319,7 +8335,7 @@ Token bezpieczeństwa apps/client/src/app/components/admin-users/admin-users.component.ts - 273 + 253 apps/client/src/app/components/user-account-access/user-account-access.component.ts @@ -8331,7 +8347,7 @@ Czy napewno chcesz wygenerować nowy token bezpieczeństwa dla tego użytkownika? apps/client/src/app/components/admin-users/admin-users.component.ts - 278 + 258 @@ -8339,7 +8355,7 @@ Generowanie Tokena Zabezpieczającego apps/client/src/app/components/admin-users/admin-users.html - 238 + 250 @@ -8388,7 +8404,7 @@ () jest już w użyciu. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 965 + 967 @@ -8396,7 +8412,7 @@ Wystąpił błąd podczas aktualizacji do (). apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 809 + 811 @@ -8549,7 +8565,7 @@ Konto użytkownika demonstracyjnego zostało zsynchronizowane. apps/client/src/app/components/admin-overview/admin-overview.component.ts - 334 + 314 @@ -8811,7 +8827,7 @@ Bieżący miesiąc apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 263 + 265 @@ -9440,7 +9456,7 @@ Data rejestracji apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 64 + 68 diff --git a/apps/client/src/locales/messages.pt.xlf b/apps/client/src/locales/messages.pt.xlf index d89c725518..8181afb0f6 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 - 181 + 202 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -110,7 +110,7 @@ Plataforma apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 120 + 121 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -188,6 +188,10 @@ Total Total + + apps/client/src/app/components/admin-tag/admin-tag.component.html + 87 + libs/ui/src/lib/accounts-table/accounts-table.component.html 63 @@ -238,7 +242,7 @@ Saldo disponível em dinheiro apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 57 + 58 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -318,7 +322,7 @@ apps/client/src/app/components/admin-tag/admin-tag.component.html - 99 + 117 libs/ui/src/lib/accounts-table/accounts-table.component.html @@ -354,15 +358,15 @@ apps/client/src/app/components/admin-tag/admin-tag.component.html - 114 + 132 apps/client/src/app/components/admin-users/admin-users.html - 254 + 266 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 27 + 31 libs/ui/src/lib/account-balances/account-balances.component.html @@ -394,7 +398,7 @@ Paid apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts - 136 + 120 @@ -550,7 +554,7 @@ Detalhes para libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html - 2 + 6 @@ -586,7 +590,7 @@ libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html - 6 + 10 @@ -610,7 +614,7 @@ libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html - 26 + 24 @@ -618,7 +622,7 @@ Filtrar por... apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 350 + 351 @@ -682,7 +686,7 @@ Subscription History apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 156 + 177 @@ -702,7 +706,7 @@ Deseja realmente eliminar este cupão? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 247 + 227 @@ -710,7 +714,7 @@ Deseja realmente limpar a cache? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 290 + 270 @@ -718,7 +722,7 @@ Por favor, defina a sua mensagem do sistema: apps/client/src/app/components/admin-overview/admin-overview.component.ts - 310 + 290 @@ -726,7 +730,7 @@ por Utilizador apps/client/src/app/components/admin-overview/admin-overview.component.ts - 181 + 176 @@ -822,7 +826,7 @@ Deseja realmente excluir este utilizador? apps/client/src/app/components/admin-users/admin-users.component.ts - 253 + 233 @@ -854,19 +858,23 @@ Envolvimento por Dia apps/client/src/app/components/admin-users/admin-users.html - 135 + 143 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 138 + 142 - + Last Request Último Pedido apps/client/src/app/components/admin-users/admin-users.html - 181 + 188 + + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 169 @@ -874,11 +882,11 @@ Could not validate form apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 730 + 732 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 733 + 735 @@ -894,7 +902,7 @@ Portefólio apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts - 140 + 156 apps/client/src/app/components/header/header.component.html @@ -922,7 +930,7 @@ apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts - 152 + 168 @@ -1034,7 +1042,7 @@ An error occurred while merging this asset profile into (). apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 944 + 946 @@ -1050,7 +1058,7 @@ Depósito libs/ui/src/lib/fire-calculator/fire-calculator.component.ts - 423 + 441 @@ -1058,7 +1066,7 @@ Valor Total apps/client/src/app/components/investment-chart/investment-chart.component.ts - 144 + 160 @@ -1074,7 +1082,7 @@ Taxa de Poupança apps/client/src/app/components/investment-chart/investment-chart.component.ts - 193 + 209 @@ -1198,11 +1206,11 @@ Desempenho Líquido Absoluto apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 122 + 141 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 240 + 279 @@ -1210,11 +1218,11 @@ Desempenho Líquido apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 137 + 156 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 256 + 295 @@ -1222,7 +1230,7 @@ Ativos Totais apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 165 + 184 @@ -1230,7 +1238,7 @@ Poder de Compra apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 305 + 324 @@ -1238,7 +1246,7 @@ Excluído da Análise apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 337 + 356 @@ -1246,7 +1254,7 @@ Valor Líquido apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 391 + 407 @@ -1254,7 +1262,7 @@ Desempenho Anual apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 406 + 422 @@ -1262,7 +1270,7 @@ Por favor, insira o valor do seu fundo de emergência: apps/client/src/app/components/portfolio-summary/portfolio-summary.component.ts - 173 + 204 @@ -1306,11 +1314,11 @@ - By , this is projected to increase to per year or per month, assuming a annual interest rate. - Até , prevê-se que este valor aumente para por ano ou por mês, assumindo uma taxa de juro anual de . + By , this is projected to increase to per year or per month, assuming a annual interest rate. + Até , prevê-se que este valor aumente para por ano ou por mês, assumindo uma taxa de juro anual de . apps/client/src/app/pages/portfolio/fire/fire-page.html - 132 + 144 @@ -1334,7 +1342,7 @@ apps/client/src/app/components/admin-users/admin-users.html - 53 + 56 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -1342,7 +1350,7 @@ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 99 + 103 @@ -1458,7 +1466,7 @@ AATD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 267 + 269 libs/ui/src/lib/assistant/assistant.component.ts @@ -1470,7 +1478,7 @@ 1A apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 271 + 273 libs/ui/src/lib/assistant/assistant.component.ts @@ -1490,7 +1498,7 @@ 5A apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 275 + 277 libs/ui/src/lib/assistant/assistant.component.ts @@ -1510,7 +1518,7 @@ Máx apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 279 + 281 libs/ui/src/lib/assistant/assistant.component.ts @@ -1734,7 +1742,7 @@ Coupon apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts - 141 + 125 @@ -1870,7 +1878,7 @@ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 41 + 45 @@ -1930,7 +1938,7 @@ apps/client/src/app/components/admin-users/admin-users.html - 92 + 100 apps/client/src/app/components/header/header.component.html @@ -1946,7 +1954,7 @@ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 113 + 117 apps/client/src/app/pages/accounts/accounts-page.html @@ -2198,7 +2206,7 @@ Visão geral apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 43 + 44 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -2278,11 +2286,11 @@ Atividades apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 109 + 110 apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 145 + 146 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -2298,7 +2306,7 @@ apps/client/src/app/components/admin-users/admin-users.html - 113 + 121 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -2310,7 +2318,7 @@ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 123 + 127 apps/client/src/app/pages/portfolio/activities/activities-page.html @@ -2338,7 +2346,7 @@ Current week apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 259 + 261 @@ -2486,7 +2494,7 @@ Price apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 191 + 212 @@ -2494,7 +2502,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 - 811 + 813 @@ -2594,7 +2602,7 @@ Trial apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts - 140 + 124 @@ -2674,7 +2682,7 @@ Topo apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 332 + 329 @@ -2682,7 +2690,7 @@ Fundo apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 383 + 380 @@ -2690,7 +2698,7 @@ Evolução do Portefólio apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 438 + 435 @@ -2698,7 +2706,7 @@ Cronograma de Investimento apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 465 + 463 @@ -2722,7 +2730,7 @@ Posições apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 134 + 135 apps/client/src/app/components/home-holdings/home-holdings.html @@ -2734,7 +2742,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 196 + 215 apps/client/src/app/pages/public/public-page.html @@ -2858,7 +2866,7 @@ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 165 + 186 @@ -2866,7 +2874,7 @@ Registo apps/client/src/app/components/admin-users/admin-users.html - 75 + 78 libs/common/src/lib/routes/routes.ts @@ -3094,15 +3102,15 @@ Juros apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 83 + 84 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 478 + 496 libs/ui/src/lib/fire-calculator/fire-calculator.component.ts - 433 + 451 libs/ui/src/lib/i18n.ts @@ -3114,7 +3122,7 @@ Poupanças libs/ui/src/lib/fire-calculator/fire-calculator.component.ts - 443 + 461 @@ -3122,7 +3130,7 @@ Conta apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.component.ts - 109 + 110 libs/common/src/lib/routes/routes.ts @@ -3174,15 +3182,15 @@ Fundo de Emergência apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 242 + 261 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 320 + 339 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 425 + 441 apps/client/src/app/pages/features/features-page.html @@ -3206,7 +3214,7 @@ libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 462 + 473 @@ -3262,7 +3270,7 @@ Dinheiro apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 274 + 293 @@ -3270,7 +3278,7 @@ Ações apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 70 + 71 @@ -3286,7 +3294,7 @@ Authentication apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 74 + 78 @@ -3294,7 +3302,7 @@ Absolute Dividend Performance apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 288 + 195 @@ -3346,7 +3354,7 @@ - If you retire today, you would be able to withdraw per year or per month, based on your total assets of and a safe withdrawal rate (SWR) of + If you retire today, you would be able to withdraw per year or per month, based on your total assets of and a safe withdrawal rate (SWR) of If you retire today, you would be able to withdraw por ano ou per month, based on your total assets of and a safe withdrawal rate (SWR) of apps/client/src/app/pages/portfolio/fire/fire-page.html @@ -3402,11 +3410,11 @@ libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 464 + 475 libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 478 + 489 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -3444,6 +3452,10 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html 21 + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 17 + Symbol Mapping @@ -3478,15 +3490,15 @@ This action cannot be undone. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 963 + 965 just now just now - apps/client/src/app/components/admin-users/admin-users.component.ts - 221 + apps/client/src/app/util/date.util.ts + 23 @@ -3538,7 +3550,7 @@ Dividendos apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 96 + 97 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -3546,7 +3558,11 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 492 + 103 + + + apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html + 511 apps/client/src/app/pages/features/features-page.html @@ -3578,7 +3594,7 @@ Cronograma de Dividendos apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 522 + 521 @@ -3634,7 +3650,7 @@ Dividend Performance apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 307 + 214 @@ -3710,7 +3726,7 @@ No Activities apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 138 + 139 @@ -3758,7 +3774,7 @@ Investments apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 227 + 246 @@ -3902,7 +3918,7 @@ Hourly apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 251 + 253 @@ -3998,7 +4014,7 @@ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 224 + 245 @@ -4014,11 +4030,11 @@ Could not save asset profile apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 764 + 766 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 767 + 769 @@ -4038,7 +4054,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 102 + 121 @@ -4142,7 +4158,7 @@ This asset profile cannot be merged into (). apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 922 + 924 @@ -4202,7 +4218,7 @@ Personificar Utilizador apps/client/src/app/components/admin-users/admin-users.html - 228 + 240 @@ -4226,7 +4242,7 @@ The data of this asset profile is moved to () and this asset profile is deleted. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 961 + 963 @@ -4242,7 +4258,7 @@ Current year apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 267 + 269 @@ -4258,7 +4274,7 @@ Cache has been flushed. apps/client/src/app/components/admin-overview/admin-overview.component.ts - 281 + 261 @@ -4294,7 +4310,7 @@ Asset profile has been saved apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 754 + 756 @@ -4302,7 +4318,7 @@ Deseja mesmo eliminar esta plataforma? apps/client/src/app/components/admin-platform/admin-platform.component.ts - 125 + 131 @@ -4446,7 +4462,7 @@ Série Atual apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 486 + 484 @@ -4454,7 +4470,7 @@ Série mais Longa apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 495 + 493 @@ -4494,7 +4510,7 @@ View Details apps/client/src/app/components/admin-users/admin-users.html - 220 + 232 libs/ui/src/lib/accounts-table/accounts-table.component.html @@ -4506,7 +4522,7 @@ Responsabilidades apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 368 + 387 apps/client/src/app/pages/features/features-page.html @@ -4686,7 +4702,7 @@ Total apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 175 + 196 @@ -4774,7 +4790,7 @@ Coupon has been created apps/client/src/app/components/admin-overview/admin-overview.component.ts - 229 + 209 @@ -4982,7 +4998,7 @@ ETFs sem países apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 128 + 129 @@ -4990,7 +5006,7 @@ ETFs sem setores apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 133 + 134 @@ -4998,7 +5014,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 - 528 + 530 @@ -5218,7 +5234,7 @@ Moedas apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 123 + 124 apps/client/src/app/pages/public/public-page.html @@ -5270,11 +5286,11 @@ Could not parse scraper configuration apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 678 + 680 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 681 + 683 @@ -5888,7 +5904,7 @@ Data gathering has been started. apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 386 + 387 @@ -5924,7 +5940,7 @@ Do you really want to merge this asset profile into it? apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 967 + 969 @@ -6040,7 +6056,7 @@ Você realmente deseja excluir esta tag? apps/client/src/app/components/admin-tag/admin-tag.component.ts - 129 + 144 @@ -6112,7 +6128,7 @@ Associação apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 88 + 92 libs/common/src/lib/routes/routes.ts @@ -6400,7 +6416,7 @@ Ops! Não foi possível analisar os dados históricos. libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor.component.ts - 286 + 287 @@ -6416,7 +6432,7 @@ Você realmente deseja excluir esta mensagem do sistema? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 260 + 240 @@ -6448,7 +6464,7 @@ Saldos de caixa apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 178 + 179 @@ -6484,7 +6500,7 @@ O preço de mercado atual é apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 856 + 858 @@ -6608,7 +6624,7 @@ Desempenho absoluto da moeda apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 194 + 233 @@ -6616,7 +6632,7 @@ Desempenho da moeda apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 218 + 257 @@ -6632,7 +6648,7 @@ WTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 259 + 261 libs/ui/src/lib/assistant/assistant.component.ts @@ -6652,7 +6668,7 @@ MTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 263 + 265 libs/ui/src/lib/assistant/assistant.component.ts @@ -6660,8 +6676,8 @@ - Expires () - Expires () + Expires () + Expires () apps/client/src/app/components/admin-users/admin-users.html 34 @@ -6696,7 +6712,7 @@ Fetch market price libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html - 40 + 32 @@ -6720,7 +6736,7 @@ ano apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 271 + 273 apps/client/src/app/pages/resources/personal-finance-tools/product-page.html @@ -6740,7 +6756,7 @@ anos apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 275 + 277 libs/ui/src/lib/assistant/assistant.component.ts @@ -6825,7 +6841,7 @@ Daily apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 247 + 249 @@ -6865,7 +6881,7 @@ Atividade apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 107 + 108 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -7037,7 +7053,7 @@ Referências apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 118 + 119 @@ -7289,15 +7305,15 @@ Erro apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 846 + 848 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 923 + 925 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 945 + 947 @@ -7381,7 +7397,7 @@ libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html - 48 + 41 libs/ui/src/lib/i18n.ts @@ -7425,7 +7441,7 @@ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 259 + 280 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -7445,7 +7461,7 @@ Role apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 50 + 54 @@ -7549,7 +7565,7 @@ has been copied to the clipboard apps/client/src/app/components/admin-overview/admin-overview.component.ts - 228 + 208 libs/ui/src/lib/value/value.component.ts @@ -7895,11 +7911,11 @@ Pedidos de API Hoje apps/client/src/app/components/admin-users/admin-users.html - 156 + 164 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 148 + 152 @@ -7999,7 +8015,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.ts - 171 + 202 apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html @@ -8079,7 +8095,7 @@ AI prompt has been copied to the clipboard apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 207 + 237 @@ -8095,7 +8111,7 @@ Lazy apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 296 + 298 @@ -8103,7 +8119,7 @@ Instant apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 300 + 302 @@ -8127,7 +8143,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 - 531 + 533 @@ -8151,7 +8167,7 @@ end of day apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 296 + 298 @@ -8159,7 +8175,7 @@ real-time apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 300 + 302 @@ -8167,7 +8183,7 @@ Open Duck.ai apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 208 + 238 @@ -8187,7 +8203,7 @@ libs/ui/src/lib/treemap-chart/treemap-chart.component.ts - 414 + 421 @@ -8227,11 +8243,11 @@ libs/ui/src/lib/treemap-chart/treemap-chart.component.ts - 414 + 421 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts - 427 + 434 @@ -8319,7 +8335,7 @@ Security token apps/client/src/app/components/admin-users/admin-users.component.ts - 273 + 253 apps/client/src/app/components/user-account-access/user-account-access.component.ts @@ -8331,7 +8347,7 @@ Do you really want to generate a new security token for this user? apps/client/src/app/components/admin-users/admin-users.component.ts - 278 + 258 @@ -8339,7 +8355,7 @@ Generate Security Token apps/client/src/app/components/admin-users/admin-users.html - 238 + 250 @@ -8388,7 +8404,7 @@ () is already in use. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 965 + 967 @@ -8396,7 +8412,7 @@ An error occurred while updating to (). apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 809 + 811 @@ -8549,7 +8565,7 @@ Demo user account has been synced. apps/client/src/app/components/admin-overview/admin-overview.component.ts - 334 + 314 @@ -8811,7 +8827,7 @@ Current month apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 263 + 265 @@ -9440,7 +9456,7 @@ Registration Date apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 64 + 68 diff --git a/apps/client/src/locales/messages.tr.xlf b/apps/client/src/locales/messages.tr.xlf index 27af34b080..ff324951da 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 - 181 + 202 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -291,7 +291,7 @@ Nakit Bakiye apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 57 + 58 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -307,7 +307,7 @@ Platform apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 120 + 121 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -385,6 +385,10 @@ Total Toplam + + apps/client/src/app/components/admin-tag/admin-tag.component.html + 87 + libs/ui/src/lib/accounts-table/accounts-table.component.html 63 @@ -499,7 +503,7 @@ apps/client/src/app/components/admin-tag/admin-tag.component.html - 99 + 117 libs/ui/src/lib/accounts-table/accounts-table.component.html @@ -535,15 +539,15 @@ apps/client/src/app/components/admin-tag/admin-tag.component.html - 114 + 132 apps/client/src/app/components/admin-users/admin-users.html - 254 + 266 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 27 + 31 libs/ui/src/lib/account-balances/account-balances.component.html @@ -575,7 +579,7 @@ Paid apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts - 136 + 120 @@ -731,7 +735,7 @@ Detaylar libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html - 2 + 6 @@ -767,7 +771,7 @@ libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html - 6 + 10 @@ -791,7 +795,7 @@ libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html - 26 + 24 @@ -799,7 +803,7 @@ Para Birimleri apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 123 + 124 apps/client/src/app/pages/public/public-page.html @@ -819,7 +823,7 @@ Ülkesi Olmayan ETF’ler apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 128 + 129 @@ -827,7 +831,7 @@ Sektörü Olmayan ETF’ler apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 133 + 134 @@ -835,7 +839,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 - 528 + 530 @@ -843,7 +847,7 @@ Filtrele... apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 350 + 351 @@ -923,7 +927,7 @@ Subscription History apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 156 + 177 @@ -953,13 +957,17 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html 21 + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 17 + - By , this is projected to increase to per year or per month, assuming a annual interest rate. - tarihine kadar bunun yıllık veya aylık değerine yükselmesi öngörülüyor; yıllık faiz oranı olarak varsayılmaktadır. + By , this is projected to increase to per year or per month, assuming a annual interest rate. + tarihine kadar bunun yıllık veya aylık değerine yükselmesi öngörülüyor; yıllık faiz oranı olarak varsayılmaktadır. apps/client/src/app/pages/portfolio/fire/fire-page.html - 132 + 144 @@ -983,7 +991,7 @@ apps/client/src/app/components/admin-users/admin-users.html - 53 + 56 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -991,7 +999,7 @@ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 99 + 103 @@ -1067,7 +1075,7 @@ Total apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 175 + 196 @@ -1155,7 +1163,7 @@ Bu kuponu gerçekten silmek istiyor musunuz? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 247 + 227 @@ -1163,7 +1171,7 @@ Önbelleği temizlemeyi gerçekten istiyor musunuz? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 290 + 270 @@ -1171,7 +1179,7 @@ Lütfen sistem mesajınızı belirleyin: apps/client/src/app/components/admin-overview/admin-overview.component.ts - 310 + 290 @@ -1179,7 +1187,7 @@ Kullanıcı başına apps/client/src/app/components/admin-overview/admin-overview.component.ts - 181 + 176 @@ -1335,7 +1343,7 @@ Asset profile has been saved apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 754 + 756 @@ -1343,7 +1351,7 @@ Bu platformu silmeyi gerçekten istiyor musunuz? apps/client/src/app/components/admin-platform/admin-platform.component.ts - 125 + 131 @@ -1359,7 +1367,7 @@ The data of this asset profile is moved to () and this asset profile is deleted. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 961 + 963 @@ -1375,7 +1383,7 @@ Current year apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 267 + 269 @@ -1391,7 +1399,7 @@ Cache has been flushed. apps/client/src/app/components/admin-overview/admin-overview.component.ts - 281 + 261 @@ -1407,7 +1415,7 @@ Bu kullanıcıyı silmeyi gerçekten istiyor musunuz? apps/client/src/app/components/admin-users/admin-users.component.ts - 253 + 233 @@ -1439,19 +1447,23 @@ Günlük etkileşim apps/client/src/app/components/admin-users/admin-users.html - 135 + 143 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 138 + 142 - + Last Request Son Talep apps/client/src/app/components/admin-users/admin-users.html - 181 + 188 + + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 169 @@ -1459,7 +1471,7 @@ Kullanıcıyı Taklit Et apps/client/src/app/components/admin-users/admin-users.html - 228 + 240 @@ -1467,11 +1479,11 @@ Could not validate form apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 730 + 732 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 733 + 735 @@ -1495,7 +1507,7 @@ Portföy apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts - 140 + 156 apps/client/src/app/components/header/header.component.html @@ -1523,7 +1535,7 @@ apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts - 152 + 168 @@ -1635,7 +1647,7 @@ An error occurred while merging this asset profile into (). apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 944 + 946 @@ -1731,7 +1743,7 @@ Current week apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 259 + 261 @@ -1751,7 +1763,7 @@ Toplam Tutar apps/client/src/app/components/investment-chart/investment-chart.component.ts - 144 + 160 @@ -1767,7 +1779,7 @@ Tasarruf Oranı apps/client/src/app/components/investment-chart/investment-chart.component.ts - 193 + 209 @@ -1891,11 +1903,11 @@ Toplam Net Performans apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 122 + 141 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 240 + 279 @@ -1903,11 +1915,11 @@ Net Performans apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 137 + 156 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 256 + 295 @@ -1915,7 +1927,7 @@ Toplam Varlıklar apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 165 + 184 @@ -1923,7 +1935,7 @@ Alım Limiti apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 305 + 324 @@ -1931,7 +1943,7 @@ Analize Dahil Edilmemiştir. apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 337 + 356 @@ -1939,7 +1951,7 @@ Yükümlülükler apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 368 + 387 apps/client/src/app/pages/features/features-page.html @@ -1951,7 +1963,7 @@ Toplam Varlık apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 391 + 407 @@ -1959,7 +1971,7 @@ Yıllıklandırılmış Performans apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 406 + 422 @@ -1967,7 +1979,7 @@ Lütfen acil durum yedeği meblağını giriniz: apps/client/src/app/components/portfolio-summary/portfolio-summary.component.ts - 173 + 204 @@ -2019,7 +2031,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 102 + 121 @@ -2215,7 +2227,7 @@ YTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 267 + 269 libs/ui/src/lib/assistant/assistant.component.ts @@ -2227,7 +2239,7 @@ 1Y apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 271 + 273 libs/ui/src/lib/assistant/assistant.component.ts @@ -2247,7 +2259,7 @@ 5Y apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 275 + 277 libs/ui/src/lib/assistant/assistant.component.ts @@ -2267,7 +2279,7 @@ Maks. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 279 + 281 libs/ui/src/lib/assistant/assistant.component.ts @@ -2439,7 +2451,7 @@ apps/client/src/app/components/admin-users/admin-users.html - 92 + 100 apps/client/src/app/components/header/header.component.html @@ -2455,7 +2467,7 @@ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 113 + 117 apps/client/src/app/pages/accounts/accounts-page.html @@ -2563,7 +2575,7 @@ Özet apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 43 + 44 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -2715,11 +2727,11 @@ Could not parse scraper configuration apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 678 + 680 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 681 + 683 @@ -2967,7 +2979,7 @@ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 165 + 186 @@ -2975,7 +2987,7 @@ Varlıklar apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 134 + 135 apps/client/src/app/components/home-holdings/home-holdings.html @@ -2987,7 +2999,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 196 + 215 apps/client/src/app/pages/public/public-page.html @@ -3011,15 +3023,15 @@ This action cannot be undone. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 963 + 965 just now just now - apps/client/src/app/components/admin-users/admin-users.component.ts - 221 + apps/client/src/app/util/date.util.ts + 23 @@ -3487,11 +3499,11 @@ İşlemler apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 109 + 110 apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 145 + 146 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -3507,7 +3519,7 @@ apps/client/src/app/components/admin-users/admin-users.html - 113 + 121 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -3519,7 +3531,7 @@ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 123 + 127 apps/client/src/app/pages/portfolio/activities/activities-page.html @@ -3695,7 +3707,7 @@ Dividend Performance apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 307 + 214 @@ -3747,7 +3759,7 @@ Price apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 191 + 212 @@ -3755,7 +3767,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 - 811 + 813 @@ -3871,7 +3883,7 @@ Trial apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts - 140 + 124 @@ -3975,7 +3987,7 @@ Temettü apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 96 + 97 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -3983,7 +3995,11 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 492 + 103 + + + apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html + 511 apps/client/src/app/pages/features/features-page.html @@ -4015,7 +4031,7 @@ Para Yatırma libs/ui/src/lib/fire-calculator/fire-calculator.component.ts - 423 + 441 @@ -4039,7 +4055,7 @@ Üst apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 332 + 329 @@ -4047,7 +4063,7 @@ Alt apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 383 + 380 @@ -4055,7 +4071,7 @@ Portföyün Gelişimi apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 438 + 435 @@ -4063,7 +4079,7 @@ Yatırım Zaman Çizelgesi apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 465 + 463 @@ -4071,7 +4087,7 @@ Güncel Seri apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 486 + 484 @@ -4079,7 +4095,7 @@ En Uzun Seri apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 495 + 493 @@ -4087,7 +4103,7 @@ Temettü Zaman Çizelgesi apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 522 + 521 @@ -4183,7 +4199,7 @@ Hourly apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 251 + 253 @@ -4299,7 +4315,7 @@ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 224 + 245 @@ -4339,11 +4355,11 @@ Could not save asset profile apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 764 + 766 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 767 + 769 @@ -4391,7 +4407,7 @@ Kayıt apps/client/src/app/components/admin-users/admin-users.html - 75 + 78 libs/common/src/lib/routes/routes.ts @@ -4572,7 +4588,7 @@ Coupon has been created apps/client/src/app/components/admin-overview/admin-overview.component.ts - 229 + 209 @@ -4740,7 +4756,7 @@ Data gathering has been started. apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 386 + 387 @@ -4964,7 +4980,7 @@ Coupon apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts - 141 + 125 @@ -5060,7 +5076,7 @@ Investments apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 227 + 246 @@ -5108,7 +5124,7 @@ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 41 + 45 @@ -5292,7 +5308,7 @@ This asset profile cannot be merged into (). apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 922 + 924 @@ -5308,15 +5324,15 @@ Faiz apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 83 + 84 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 478 + 496 libs/ui/src/lib/fire-calculator/fire-calculator.component.ts - 433 + 451 libs/ui/src/lib/i18n.ts @@ -5328,7 +5344,7 @@ Tasarruflar libs/ui/src/lib/fire-calculator/fire-calculator.component.ts - 443 + 461 @@ -5372,7 +5388,7 @@ Hesap apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.component.ts - 109 + 110 libs/common/src/lib/routes/routes.ts @@ -5484,15 +5500,15 @@ Acil Durum Fonu apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 242 + 261 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 320 + 339 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 425 + 441 apps/client/src/app/pages/features/features-page.html @@ -5564,7 +5580,7 @@ libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 462 + 473 @@ -5588,7 +5604,7 @@ No Activities apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 138 + 139 @@ -5676,7 +5692,7 @@ View Details apps/client/src/app/components/admin-users/admin-users.html - 220 + 232 libs/ui/src/lib/accounts-table/accounts-table.component.html @@ -5752,7 +5768,7 @@ Nakit apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 274 + 293 @@ -5760,7 +5776,7 @@ Menkul Kıymet apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 70 + 71 @@ -5776,7 +5792,7 @@ Authentication apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 74 + 78 @@ -5784,7 +5800,7 @@ Absolute Dividend Performance apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 288 + 195 @@ -5836,7 +5852,7 @@ - If you retire today, you would be able to withdraw per year or per month, based on your total assets of and a safe withdrawal rate (SWR) of + If you retire today, you would be able to withdraw per year or per month, based on your total assets of and a safe withdrawal rate (SWR) of If you retire today, you would be able to withdraw yıllık veya per month, based on your total assets of and a safe withdrawal rate (SWR) of apps/client/src/app/pages/portfolio/fire/fire-page.html @@ -5892,11 +5908,11 @@ libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 464 + 475 libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 478 + 489 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -5932,7 +5948,7 @@ Do you really want to merge this asset profile into it? apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 967 + 969 @@ -6040,7 +6056,7 @@ Bu etiketi silmeyi gerçekten istiyor musunuz? apps/client/src/app/components/admin-tag/admin-tag.component.ts - 129 + 144 @@ -6112,7 +6128,7 @@ Üyelik apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 88 + 92 libs/common/src/lib/routes/routes.ts @@ -6400,7 +6416,7 @@ Hay Allah! Geçmiş veriler ayrıştırılamadı. libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor.component.ts - 286 + 287 @@ -6416,7 +6432,7 @@ Bu sistem mesajını silmeyi gerçekten istiyor musunuz? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 260 + 240 @@ -6448,7 +6464,7 @@ Nakit Bakiyeleri apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 178 + 179 @@ -6484,7 +6500,7 @@ Şu anki piyasa fiyatı apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 856 + 858 @@ -6608,7 +6624,7 @@ Mutlak Para Performansı apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 194 + 233 @@ -6616,7 +6632,7 @@ Para Performansı apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 218 + 257 @@ -6632,7 +6648,7 @@ WTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 259 + 261 libs/ui/src/lib/assistant/assistant.component.ts @@ -6652,7 +6668,7 @@ MTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 263 + 265 libs/ui/src/lib/assistant/assistant.component.ts @@ -6660,8 +6676,8 @@ - Expires () - Expires () + Expires () + Expires () apps/client/src/app/components/admin-users/admin-users.html 34 @@ -6696,7 +6712,7 @@ Fetch market price libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html - 40 + 32 @@ -6720,7 +6736,7 @@ Yıl apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 271 + 273 apps/client/src/app/pages/resources/personal-finance-tools/product-page.html @@ -6740,7 +6756,7 @@ Yıllar apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 275 + 277 libs/ui/src/lib/assistant/assistant.component.ts @@ -6825,7 +6841,7 @@ Daily apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 247 + 249 @@ -6865,7 +6881,7 @@ Etkinlik apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 107 + 108 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -7037,7 +7053,7 @@ Kıyaslamalar apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 118 + 119 @@ -7289,15 +7305,15 @@ Hata apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 846 + 848 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 923 + 925 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 945 + 947 @@ -7381,7 +7397,7 @@ libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html - 48 + 41 libs/ui/src/lib/i18n.ts @@ -7425,7 +7441,7 @@ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 259 + 280 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -7445,7 +7461,7 @@ Role apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 50 + 54 @@ -7549,7 +7565,7 @@ has been copied to the clipboard apps/client/src/app/components/admin-overview/admin-overview.component.ts - 228 + 208 libs/ui/src/lib/value/value.component.ts @@ -7895,11 +7911,11 @@ API Günü İstekleri apps/client/src/app/components/admin-users/admin-users.html - 156 + 164 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 148 + 152 @@ -7999,7 +8015,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.ts - 171 + 202 apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html @@ -8079,7 +8095,7 @@ Yapay zeka istemi panoya kopyalandı apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 207 + 237 @@ -8095,7 +8111,7 @@ Tembel apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 296 + 298 @@ -8103,7 +8119,7 @@ Anında apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 300 + 302 @@ -8127,7 +8143,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 - 531 + 533 @@ -8151,7 +8167,7 @@ gün sonu apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 296 + 298 @@ -8159,7 +8175,7 @@ gerçek zamanlı apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 300 + 302 @@ -8167,7 +8183,7 @@ Duck.ai’yi aç apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 208 + 238 @@ -8187,7 +8203,7 @@ libs/ui/src/lib/treemap-chart/treemap-chart.component.ts - 414 + 421 @@ -8227,11 +8243,11 @@ libs/ui/src/lib/treemap-chart/treemap-chart.component.ts - 414 + 421 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts - 427 + 434 @@ -8319,7 +8335,7 @@ Güvenlik belirteci apps/client/src/app/components/admin-users/admin-users.component.ts - 273 + 253 apps/client/src/app/components/user-account-access/user-account-access.component.ts @@ -8331,7 +8347,7 @@ Bu kullanıcı için yeni bir güvenlik belirteci oluşturmak istediğinize emin misiniz? apps/client/src/app/components/admin-users/admin-users.component.ts - 278 + 258 @@ -8339,7 +8355,7 @@ Güvenlik belirteci oluştur apps/client/src/app/components/admin-users/admin-users.html - 238 + 250 @@ -8388,7 +8404,7 @@ () is already in use. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 965 + 967 @@ -8396,7 +8412,7 @@ Güncelleştirilirken bir hata oluştu (). apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 809 + 811 @@ -8549,7 +8565,7 @@ Demo kullanıcı hesabı senkronize edildi. apps/client/src/app/components/admin-overview/admin-overview.component.ts - 334 + 314 @@ -8811,7 +8827,7 @@ Current month apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 263 + 265 @@ -9440,7 +9456,7 @@ Registration Date apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 64 + 68 diff --git a/apps/client/src/locales/messages.uk.xlf b/apps/client/src/locales/messages.uk.xlf index 6943517691..133c1b35ac 100644 --- a/apps/client/src/locales/messages.uk.xlf +++ b/apps/client/src/locales/messages.uk.xlf @@ -335,7 +335,7 @@ Отримати ринкову ціну libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html - 40 + 32 @@ -415,7 +415,7 @@ Баланс готівки apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 57 + 58 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -431,7 +431,7 @@ Платформа apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 120 + 121 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -447,7 +447,7 @@ Баланс готівки apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 178 + 179 @@ -533,6 +533,10 @@ Total Загалом + + apps/client/src/app/components/admin-tag/admin-tag.component.html + 87 + libs/ui/src/lib/accounts-table/accounts-table.component.html 63 @@ -647,7 +651,7 @@ apps/client/src/app/components/admin-tag/admin-tag.component.html - 99 + 117 libs/ui/src/lib/accounts-table/accounts-table.component.html @@ -683,15 +687,15 @@ apps/client/src/app/components/admin-tag/admin-tag.component.html - 114 + 132 apps/client/src/app/components/admin-users/admin-users.html - 254 + 266 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 27 + 31 libs/ui/src/lib/account-balances/account-balances.component.html @@ -723,7 +727,7 @@ Платний apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts - 136 + 120 @@ -739,7 +743,7 @@ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 181 + 202 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -931,7 +935,7 @@ Порівняльні показники apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 118 + 119 @@ -939,7 +943,7 @@ Валюти apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 123 + 124 apps/client/src/app/pages/public/public-page.html @@ -959,7 +963,7 @@ ETF без країн apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 128 + 129 @@ -967,7 +971,7 @@ ETF без секторів apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 133 + 134 @@ -975,7 +979,7 @@ Під час конвертації джерела даних на сталася помилка. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 528 + 530 @@ -983,7 +987,7 @@ Фільтрувати за... apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 350 + 351 @@ -1007,7 +1011,7 @@ libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html - 26 + 24 @@ -1087,7 +1091,7 @@ Історія підписок apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 156 + 177 @@ -1135,15 +1139,15 @@ Помилка apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 846 + 848 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 923 + 925 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 945 + 947 @@ -1151,7 +1155,7 @@ Поточна ринкова ціна apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 856 + 858 @@ -1161,13 +1165,17 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html 21 + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 17 + - By , this is projected to increase to per year or per month, assuming a annual interest rate. - До очікується, що це зросте до на рік або на місяць, за умови річної відсоткової ставки . + By , this is projected to increase to per year or per month, assuming a annual interest rate. + До очікується, що це зросте до на рік або на місяць, за умови річної відсоткової ставки . apps/client/src/app/pages/portfolio/fire/fire-page.html - 132 + 144 @@ -1191,7 +1199,7 @@ apps/client/src/app/components/admin-users/admin-users.html - 53 + 56 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -1199,7 +1207,7 @@ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 99 + 103 @@ -1275,7 +1283,7 @@ Усього apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 175 + 196 @@ -1335,7 +1343,7 @@ Профіль активу було збережено apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 754 + 756 @@ -1447,7 +1455,7 @@ Ви дійсно хочете видалити цей купон? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 247 + 227 @@ -1455,7 +1463,7 @@ Ви дійсно хочете видалити це системне повідомлення? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 260 + 240 @@ -1463,7 +1471,7 @@ Ви дійсно хочете очистити кеш? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 290 + 270 @@ -1471,7 +1479,7 @@ Будь ласка, встановіть ваше системне повідомлення: apps/client/src/app/components/admin-overview/admin-overview.component.ts - 310 + 290 @@ -1487,7 +1495,7 @@ на користувача apps/client/src/app/components/admin-overview/admin-overview.component.ts - 181 + 176 @@ -1611,7 +1619,7 @@ Ви дійсно хочете видалити цю платформу? apps/client/src/app/components/admin-platform/admin-platform.component.ts - 125 + 131 @@ -1627,7 +1635,7 @@ The data of this asset profile is moved to () and this asset profile is deleted. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 961 + 963 @@ -1643,7 +1651,7 @@ Поточний рік apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 267 + 269 @@ -1659,7 +1667,7 @@ Cache has been flushed. apps/client/src/app/components/admin-overview/admin-overview.component.ts - 281 + 261 @@ -1847,7 +1855,7 @@ Ви дійсно хочете видалити цей тег? apps/client/src/app/components/admin-tag/admin-tag.component.ts - 129 + 144 @@ -1871,7 +1879,7 @@ Ви дійсно хочете видалити цього користувача? apps/client/src/app/components/admin-users/admin-users.component.ts - 253 + 233 @@ -1879,11 +1887,11 @@ Взаємодія за день apps/client/src/app/components/admin-users/admin-users.html - 135 + 143 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 138 + 142 @@ -1891,19 +1899,23 @@ Запити API сьогодні apps/client/src/app/components/admin-users/admin-users.html - 156 + 164 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 148 + 152 - + Last Request Останній запит apps/client/src/app/components/admin-users/admin-users.html - 181 + 188 + + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 169 @@ -1911,7 +1923,7 @@ Видавати себе за користувача apps/client/src/app/components/admin-users/admin-users.html - 228 + 240 @@ -1919,11 +1931,11 @@ Не вдалося перевірити форму apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 730 + 732 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 733 + 735 @@ -1947,7 +1959,7 @@ Портфель apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts - 140 + 156 apps/client/src/app/components/header/header.component.html @@ -1975,7 +1987,7 @@ apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts - 152 + 168 @@ -2139,7 +2151,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 102 + 121 @@ -2147,7 +2159,7 @@ Активність apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 107 + 108 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -2247,7 +2259,7 @@ An error occurred while merging this asset profile into (). apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 944 + 946 @@ -2343,7 +2355,7 @@ Поточний тиждень apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 259 + 261 @@ -2363,7 +2375,7 @@ Загальна сума apps/client/src/app/components/investment-chart/investment-chart.component.ts - 144 + 160 @@ -2379,7 +2391,7 @@ Ставка заощаджень apps/client/src/app/components/investment-chart/investment-chart.component.ts - 193 + 209 @@ -2479,11 +2491,11 @@ Абсолютний чистий прибуток apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 122 + 141 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 240 + 279 @@ -2491,11 +2503,11 @@ Чистий прибуток apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 137 + 156 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 256 + 295 @@ -2503,7 +2515,7 @@ Загальні активи apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 165 + 184 @@ -2511,7 +2523,7 @@ Купівельна спроможність apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 305 + 324 @@ -2519,7 +2531,7 @@ Виключено з аналізу apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 337 + 356 @@ -2527,7 +2539,7 @@ Зобов’язання apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 368 + 387 apps/client/src/app/pages/features/features-page.html @@ -2539,7 +2551,7 @@ Чиста вартість apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 391 + 407 @@ -2547,7 +2559,7 @@ Річна доходність apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 406 + 422 @@ -2575,7 +2587,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.ts - 171 + 202 apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html @@ -2603,7 +2615,7 @@ Будь ласка, встановіть суму вашого резервного фонду. apps/client/src/app/components/portfolio-summary/portfolio-summary.component.ts - 173 + 204 @@ -2843,7 +2855,7 @@ З початку року apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 267 + 269 libs/ui/src/lib/assistant/assistant.component.ts @@ -2855,7 +2867,7 @@ 1 рік apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 271 + 273 libs/ui/src/lib/assistant/assistant.component.ts @@ -2875,7 +2887,7 @@ 5 років apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 275 + 277 libs/ui/src/lib/assistant/assistant.component.ts @@ -2895,7 +2907,7 @@ Максимум apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 279 + 281 libs/ui/src/lib/assistant/assistant.component.ts @@ -2967,7 +2979,7 @@ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 41 + 45 @@ -3231,7 +3243,7 @@ Купон apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts - 141 + 125 @@ -3347,7 +3359,7 @@ Інвестиції apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 227 + 246 @@ -3455,7 +3467,7 @@ Щодня apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 247 + 249 @@ -3583,7 +3595,7 @@ apps/client/src/app/components/admin-users/admin-users.html - 92 + 100 apps/client/src/app/components/header/header.component.html @@ -3599,7 +3611,7 @@ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 113 + 117 apps/client/src/app/pages/accounts/accounts-page.html @@ -3751,7 +3763,7 @@ Огляд apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 43 + 44 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -3911,11 +3923,11 @@ Не вдалося розібрати конфігурацію скрапера apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 678 + 680 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 681 + 683 @@ -4168,7 +4180,7 @@ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 165 + 186 @@ -4176,7 +4188,7 @@ Активи apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 134 + 135 apps/client/src/app/components/home-holdings/home-holdings.html @@ -4188,7 +4200,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 196 + 215 apps/client/src/app/pages/public/public-page.html @@ -4212,15 +4224,15 @@ This action cannot be undone. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 963 + 965 just now щойно - apps/client/src/app/components/admin-users/admin-users.component.ts - 221 + apps/client/src/app/util/date.util.ts + 23 @@ -4828,7 +4840,7 @@ Do you really want to merge this asset profile into it? apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 967 + 969 @@ -4932,11 +4944,11 @@ Активності apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 109 + 110 apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 145 + 146 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -4952,7 +4964,7 @@ apps/client/src/app/components/admin-users/admin-users.html - 113 + 121 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -4964,7 +4976,7 @@ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 123 + 127 apps/client/src/app/pages/portfolio/activities/activities-page.html @@ -5080,7 +5092,7 @@ libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html - 6 + 10 @@ -5200,7 +5212,7 @@ Dividend Performance apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 307 + 214 @@ -5260,7 +5272,7 @@ Ціна apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 191 + 212 @@ -5268,7 +5280,7 @@ Ви дійсно бажаєте конвертувати цей профіль активу в ()? apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 811 + 813 @@ -5384,7 +5396,7 @@ Пробний період apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts - 140 + 124 @@ -5504,7 +5516,7 @@ Дивіденди apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 96 + 97 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -5512,7 +5524,11 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 492 + 103 + + + apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html + 511 apps/client/src/app/pages/features/features-page.html @@ -5604,7 +5620,7 @@ Абсолютна прибутковість валюти apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 194 + 233 @@ -5612,7 +5628,7 @@ Прибутковість валюти apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 218 + 257 @@ -5620,7 +5636,7 @@ Топ apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 332 + 329 @@ -5628,7 +5644,7 @@ Низ apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 383 + 380 @@ -5636,7 +5652,7 @@ Еволюція портфеля apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 438 + 435 @@ -5644,7 +5660,7 @@ Інвестиційний графік apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 465 + 463 @@ -5652,7 +5668,7 @@ Поточна серія apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 486 + 484 @@ -5660,7 +5676,7 @@ Найдовша серія apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 495 + 493 @@ -5668,7 +5684,7 @@ Графік дивідендів apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 522 + 521 @@ -5788,7 +5804,7 @@ Щогодини apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 251 + 253 @@ -5904,7 +5920,7 @@ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 224 + 245 @@ -5928,11 +5944,11 @@ Не вдалося зберегти профіль активу apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 764 + 766 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 767 + 769 @@ -5964,7 +5980,7 @@ скопійовано в буфер обміну apps/client/src/app/components/admin-overview/admin-overview.component.ts - 228 + 208 libs/ui/src/lib/value/value.component.ts @@ -6024,7 +6040,7 @@ Реєстрація apps/client/src/app/components/admin-users/admin-users.html - 75 + 78 libs/common/src/lib/routes/routes.ts @@ -6171,7 +6187,7 @@ Data gathering has been started. apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 386 + 387 @@ -6483,7 +6499,7 @@ Купон створено apps/client/src/app/components/admin-overview/admin-overview.component.ts - 229 + 209 @@ -6835,7 +6851,7 @@ Членство apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 88 + 92 libs/common/src/lib/routes/routes.ts @@ -6991,7 +7007,7 @@ WTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 259 + 261 libs/ui/src/lib/assistant/assistant.component.ts @@ -7011,7 +7027,7 @@ MTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 263 + 265 libs/ui/src/lib/assistant/assistant.component.ts @@ -7019,8 +7035,8 @@ - Expires () - Закінчується () + Expires () + Закінчується () apps/client/src/app/components/admin-users/admin-users.html 34 @@ -7039,7 +7055,7 @@ рік apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 271 + 273 apps/client/src/app/pages/resources/personal-finance-tools/product-page.html @@ -7059,7 +7075,7 @@ роки apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 275 + 277 libs/ui/src/lib/assistant/assistant.component.ts @@ -7211,7 +7227,7 @@ This asset profile cannot be merged into (). apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 922 + 924 @@ -7227,7 +7243,7 @@ Депозит libs/ui/src/lib/fire-calculator/fire-calculator.component.ts - 423 + 441 @@ -7235,15 +7251,15 @@ Відсотки apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 83 + 84 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 478 + 496 libs/ui/src/lib/fire-calculator/fire-calculator.component.ts - 433 + 451 libs/ui/src/lib/i18n.ts @@ -7255,7 +7271,7 @@ Заощадження libs/ui/src/lib/fire-calculator/fire-calculator.component.ts - 443 + 461 @@ -7263,7 +7279,7 @@ Деталі для libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html - 2 + 6 @@ -7271,7 +7287,7 @@ Упс! Не вдалося отримати історичні дані. libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor.component.ts - 286 + 287 @@ -7323,7 +7339,7 @@ Рахунок apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.component.ts - 109 + 110 libs/common/src/lib/routes/routes.ts @@ -7463,7 +7479,7 @@ libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html - 48 + 41 libs/ui/src/lib/i18n.ts @@ -7515,7 +7531,7 @@ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 259 + 280 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -7551,15 +7567,15 @@ Резервний фонд apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 242 + 261 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 320 + 339 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 425 + 441 apps/client/src/app/pages/features/features-page.html @@ -7631,7 +7647,7 @@ libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 462 + 473 @@ -7663,7 +7679,7 @@ No Activities apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 138 + 139 @@ -7751,7 +7767,7 @@ Переглянути деталі apps/client/src/app/components/admin-users/admin-users.html - 220 + 232 libs/ui/src/lib/accounts-table/accounts-table.component.html @@ -7771,7 +7787,7 @@ Роль apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 50 + 54 @@ -7859,7 +7875,7 @@ Готівка apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 274 + 293 @@ -7867,7 +7883,7 @@ Капітал apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 70 + 71 @@ -7883,7 +7899,7 @@ Автентифікація apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 74 + 78 @@ -7891,7 +7907,7 @@ Absolute Dividend Performance apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 288 + 195 @@ -7943,8 +7959,8 @@ - If you retire today, you would be able to withdraw per year or per month, based on your total assets of and a safe withdrawal rate (SWR) of - Якщо ви вийдете на пенсію сьогодні, ви зможете знімати на рік або на місяць, виходячи із загальної суми ваших активів у розмірі та безпечної норми зняття коштів (SWR) у розмірі + If you retire today, you would be able to withdraw per year or per month, based on your total assets of and a safe withdrawal rate (SWR) of + Якщо ви вийдете на пенсію сьогодні, ви зможете знімати на рік або на місяць, виходячи із загальної суми ваших активів у розмірі та безпечної норми зняття коштів (SWR) у розмірі apps/client/src/app/pages/portfolio/fire/fire-page.html 69 @@ -8047,11 +8063,11 @@ libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 464 + 475 libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 478 + 489 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -8087,7 +8103,7 @@ Запит AI скопійовано в буфер обміну apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 207 + 237 @@ -8095,7 +8111,7 @@ Лінивий apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 296 + 298 @@ -8103,7 +8119,7 @@ Миттєвий apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 300 + 302 @@ -8127,7 +8143,7 @@ Ви дійсно бажаєте конвертувати джерело даних на ? apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 531 + 533 @@ -8151,7 +8167,7 @@ кінець дня apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 296 + 298 @@ -8159,7 +8175,7 @@ реальний час apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 300 + 302 @@ -8167,7 +8183,7 @@ Відкрити Duck.ai apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 208 + 238 @@ -8187,7 +8203,7 @@ libs/ui/src/lib/treemap-chart/treemap-chart.component.ts - 414 + 421 @@ -8227,11 +8243,11 @@ libs/ui/src/lib/treemap-chart/treemap-chart.component.ts - 414 + 421 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts - 427 + 434 @@ -8319,7 +8335,7 @@ Токен безпеки apps/client/src/app/components/admin-users/admin-users.component.ts - 273 + 253 apps/client/src/app/components/user-account-access/user-account-access.component.ts @@ -8331,7 +8347,7 @@ Ви дійсно бажаєте згенерувати новий токен безпеки для цього користувача? apps/client/src/app/components/admin-users/admin-users.component.ts - 278 + 258 @@ -8339,7 +8355,7 @@ Згенерувати токен безпеки apps/client/src/app/components/admin-users/admin-users.html - 238 + 250 @@ -8388,7 +8404,7 @@ () вже використовується. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 965 + 967 @@ -8396,7 +8412,7 @@ Під час оновлення до () сталася помилка. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 809 + 811 @@ -8549,7 +8565,7 @@ Обліковий запис демо-користувача синхронізовано. apps/client/src/app/components/admin-overview/admin-overview.component.ts - 334 + 314 @@ -8811,7 +8827,7 @@ Поточний місяць apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 263 + 265 @@ -9440,7 +9456,7 @@ Дата реєстрації apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 64 + 68 diff --git a/apps/client/src/locales/messages.xlf b/apps/client/src/locales/messages.xlf index bf03ea0e6c..4e1652fc8c 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 - 181 + 202 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -297,7 +297,7 @@ Cash Balance apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 57 + 58 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -312,7 +312,7 @@ Platform apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 120 + 121 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -327,7 +327,7 @@ Cash Balances apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 178 + 179 @@ -410,6 +410,10 @@ Total + + apps/client/src/app/components/admin-tag/admin-tag.component.html + 87 + libs/ui/src/lib/accounts-table/accounts-table.component.html 63 @@ -520,7 +524,7 @@ apps/client/src/app/components/admin-tag/admin-tag.component.html - 99 + 117 libs/ui/src/lib/accounts-table/accounts-table.component.html @@ -555,15 +559,15 @@ apps/client/src/app/components/admin-tag/admin-tag.component.html - 114 + 132 apps/client/src/app/components/admin-users/admin-users.html - 254 + 266 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 27 + 31 libs/ui/src/lib/account-balances/account-balances.component.html @@ -593,7 +597,7 @@ Paid apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts - 136 + 120 @@ -733,7 +737,7 @@ Details for libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html - 2 + 6 @@ -767,7 +771,7 @@ libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html - 6 + 10 @@ -789,14 +793,14 @@ libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html - 26 + 24 Currencies apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 123 + 124 apps/client/src/app/pages/public/public-page.html @@ -814,21 +818,21 @@ ETFs without Countries apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 128 + 129 ETFs without Sectors apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 133 + 134 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 - 528 + 530 @@ -846,7 +850,7 @@ Filter by... apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 350 + 351 @@ -918,7 +922,7 @@ Subscription History apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 156 + 177 @@ -957,7 +961,7 @@ Oops! Could not parse historical data. libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor.component.ts - 286 + 287 @@ -973,6 +977,10 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html 21 + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 17 + Gather Historical Market Data @@ -997,10 +1005,10 @@ - By , this is projected to increase to per year or per month, assuming a annual interest rate. + By , this is projected to increase to per year or per month, assuming a annual interest rate. apps/client/src/app/pages/portfolio/fire/fire-page.html - 132 + 144 @@ -1022,7 +1030,7 @@ apps/client/src/app/components/admin-users/admin-users.html - 53 + 56 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -1030,7 +1038,7 @@ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 99 + 103 @@ -1099,7 +1107,7 @@ Total apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 175 + 196 @@ -1201,28 +1209,28 @@ Do you really want to delete this coupon? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 247 + 227 Do you really want to delete this system message? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 260 + 240 Do you really want to flush the cache? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 290 + 270 Please set your system message: apps/client/src/app/components/admin-overview/admin-overview.component.ts - 310 + 290 @@ -1236,7 +1244,7 @@ per User apps/client/src/app/components/admin-overview/admin-overview.component.ts - 181 + 176 @@ -1361,14 +1369,14 @@ Asset profile has been saved apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 754 + 756 Do you really want to delete this platform? apps/client/src/app/components/admin-platform/admin-platform.component.ts - 125 + 131 @@ -1382,7 +1390,7 @@ The data of this asset profile is moved to () and this asset profile is deleted. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 961 + 963 @@ -1396,7 +1404,7 @@ Current year apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 267 + 269 @@ -1410,7 +1418,7 @@ Cache has been flushed. apps/client/src/app/components/admin-overview/admin-overview.component.ts - 281 + 261 @@ -1446,7 +1454,7 @@ Do you really want to delete this tag? apps/client/src/app/components/admin-tag/admin-tag.component.ts - 129 + 144 @@ -1467,7 +1475,7 @@ Do you really want to delete this user? apps/client/src/app/components/admin-users/admin-users.component.ts - 253 + 233 @@ -1496,36 +1504,40 @@ Engagement per Day apps/client/src/app/components/admin-users/admin-users.html - 135 + 143 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 138 + 142 - + Last Request apps/client/src/app/components/admin-users/admin-users.html - 181 + 188 + + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 169 Impersonate User apps/client/src/app/components/admin-users/admin-users.html - 228 + 240 Could not validate form apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 730 + 732 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 733 + 735 @@ -1546,7 +1558,7 @@ Portfolio apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts - 140 + 156 apps/client/src/app/components/header/header.component.html @@ -1573,7 +1585,7 @@ apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts - 152 + 168 @@ -1675,7 +1687,7 @@ An error occurred while merging this asset profile into (). apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 944 + 946 @@ -1759,7 +1771,7 @@ Current week apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 259 + 261 @@ -1777,7 +1789,7 @@ Total Amount apps/client/src/app/components/investment-chart/investment-chart.component.ts - 144 + 160 @@ -1791,7 +1803,7 @@ Savings Rate apps/client/src/app/components/investment-chart/investment-chart.component.ts - 193 + 209 @@ -1910,57 +1922,57 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 102 + 121 Absolute Net Performance apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 122 + 141 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 240 + 279 Net Performance apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 137 + 156 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 256 + 295 Total Assets apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 165 + 184 Buying Power apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 305 + 324 Excluded from Analysis apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 337 + 356 Liabilities apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 368 + 387 apps/client/src/app/pages/features/features-page.html @@ -1971,21 +1983,21 @@ Net Worth apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 391 + 407 Annualized Performance apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 406 + 422 Please set the amount of your emergency fund. apps/client/src/app/components/portfolio-summary/portfolio-summary.component.ts - 173 + 204 @@ -2204,7 +2216,7 @@ YTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 267 + 269 libs/ui/src/lib/assistant/assistant.component.ts @@ -2215,7 +2227,7 @@ 1Y apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 271 + 273 libs/ui/src/lib/assistant/assistant.component.ts @@ -2233,7 +2245,7 @@ 5Y apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 275 + 277 libs/ui/src/lib/assistant/assistant.component.ts @@ -2251,7 +2263,7 @@ Max apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 279 + 281 libs/ui/src/lib/assistant/assistant.component.ts @@ -2408,7 +2420,7 @@ Coupon apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts - 141 + 125 @@ -2504,7 +2516,7 @@ Investments apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 227 + 246 @@ -2547,7 +2559,7 @@ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 41 + 45 @@ -2709,7 +2721,7 @@ apps/client/src/app/components/admin-users/admin-users.html - 92 + 100 apps/client/src/app/components/header/header.component.html @@ -2725,7 +2737,7 @@ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 113 + 117 apps/client/src/app/pages/accounts/accounts-page.html @@ -2852,7 +2864,7 @@ Overview apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 43 + 44 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -3002,11 +3014,11 @@ Could not parse scraper configuration apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 678 + 680 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 681 + 683 @@ -3219,14 +3231,14 @@ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 165 + 186 Holdings apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 134 + 135 apps/client/src/app/components/home-holdings/home-holdings.html @@ -3238,7 +3250,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 196 + 215 apps/client/src/app/pages/public/public-page.html @@ -3261,14 +3273,14 @@ This action cannot be undone. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 963 + 965 just now - apps/client/src/app/components/admin-users/admin-users.component.ts - 221 + apps/client/src/app/util/date.util.ts + 23 @@ -3799,7 +3811,7 @@ Do you really want to merge this asset profile into it? apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 967 + 969 @@ -3891,11 +3903,11 @@ Activities apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 109 + 110 apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 145 + 146 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -3911,7 +3923,7 @@ apps/client/src/app/components/admin-users/admin-users.html - 113 + 121 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -3923,7 +3935,7 @@ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 123 + 127 apps/client/src/app/pages/portfolio/activities/activities-page.html @@ -4103,7 +4115,7 @@ Dividend Performance apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 307 + 214 @@ -4156,14 +4168,14 @@ Price apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 191 + 212 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 - 811 + 813 @@ -4252,7 +4264,7 @@ Trial apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts - 140 + 124 @@ -4345,7 +4357,7 @@ Dividend apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 96 + 97 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -4353,7 +4365,11 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 492 + 103 + + + apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html + 511 apps/client/src/app/pages/features/features-page.html @@ -4383,7 +4399,7 @@ Deposit libs/ui/src/lib/fire-calculator/fire-calculator.component.ts - 423 + 441 @@ -4404,49 +4420,49 @@ Top apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 332 + 329 Bottom apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 383 + 380 Portfolio Evolution apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 438 + 435 Investment Timeline apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 465 + 463 Current Streak apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 486 + 484 Longest Streak apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 495 + 493 Dividend Timeline apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 522 + 521 @@ -4533,7 +4549,7 @@ Hourly apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 251 + 253 @@ -4638,7 +4654,7 @@ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 224 + 245 @@ -4674,11 +4690,11 @@ Could not save asset profile apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 764 + 766 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 767 + 769 @@ -4720,7 +4736,7 @@ Registration apps/client/src/app/components/admin-users/admin-users.html - 75 + 78 libs/common/src/lib/routes/routes.ts @@ -4870,7 +4886,7 @@ Coupon has been created apps/client/src/app/components/admin-overview/admin-overview.component.ts - 229 + 209 @@ -5035,7 +5051,7 @@ Data gathering has been started. apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 386 + 387 @@ -5076,7 +5092,7 @@ Membership apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 88 + 92 libs/common/src/lib/routes/routes.ts @@ -5304,7 +5320,7 @@ This asset profile cannot be merged into (). apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 922 + 924 @@ -5318,15 +5334,15 @@ Interest apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 83 + 84 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 478 + 496 libs/ui/src/lib/fire-calculator/fire-calculator.component.ts - 433 + 451 libs/ui/src/lib/i18n.ts @@ -5337,7 +5353,7 @@ Savings libs/ui/src/lib/fire-calculator/fire-calculator.component.ts - 443 + 461 @@ -5378,7 +5394,7 @@ Account apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.component.ts - 109 + 110 libs/common/src/lib/routes/routes.ts @@ -5483,15 +5499,15 @@ Emergency Fund apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 242 + 261 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 320 + 339 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 425 + 441 apps/client/src/app/pages/features/features-page.html @@ -5556,7 +5572,7 @@ libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 462 + 473 @@ -5577,7 +5593,7 @@ No Activities apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 138 + 139 @@ -5650,7 +5666,7 @@ View Details apps/client/src/app/components/admin-users/admin-users.html - 220 + 232 libs/ui/src/lib/accounts-table/accounts-table.component.html @@ -5733,14 +5749,14 @@ Cash apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 274 + 293 Equity apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 70 + 71 @@ -5754,14 +5770,14 @@ Authentication apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 74 + 78 Absolute Dividend Performance apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 288 + 195 @@ -5807,7 +5823,7 @@ - If you retire today, you would be able to withdraw per year or per month, based on your total assets of and a safe withdrawal rate (SWR) of + If you retire today, you would be able to withdraw per year or per month, based on your total assets of and a safe withdrawal rate (SWR) of apps/client/src/app/pages/portfolio/fire/fire-page.html 69 @@ -5890,11 +5906,11 @@ libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 464 + 475 libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 478 + 489 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -5919,7 +5935,7 @@ The current market price is apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 856 + 858 @@ -5983,7 +5999,7 @@ Absolute Currency Performance apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 194 + 233 @@ -6029,7 +6045,7 @@ Currency Performance apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 218 + 257 @@ -6057,7 +6073,7 @@ MTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 263 + 265 libs/ui/src/lib/assistant/assistant.component.ts @@ -6065,7 +6081,7 @@ - Expires () + Expires () apps/client/src/app/components/admin-users/admin-users.html 34 @@ -6075,7 +6091,7 @@ WTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 259 + 261 libs/ui/src/lib/assistant/assistant.component.ts @@ -6107,7 +6123,7 @@ Fetch market price libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html - 40 + 32 @@ -6121,7 +6137,7 @@ year apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 271 + 273 apps/client/src/app/pages/resources/personal-finance-tools/product-page.html @@ -6140,7 +6156,7 @@ years apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 275 + 277 libs/ui/src/lib/assistant/assistant.component.ts @@ -6217,7 +6233,7 @@ Daily apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 247 + 249 @@ -6252,7 +6268,7 @@ Activity apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 107 + 108 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -6403,7 +6419,7 @@ Benchmarks apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 118 + 119 @@ -6631,15 +6647,15 @@ Error apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 846 + 848 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 923 + 925 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 945 + 947 @@ -6690,7 +6706,7 @@ libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html - 48 + 41 libs/ui/src/lib/i18n.ts @@ -6701,7 +6717,7 @@ Role apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 50 + 54 @@ -6754,7 +6770,7 @@ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 259 + 280 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -6885,7 +6901,7 @@ has been copied to the clipboard apps/client/src/app/components/admin-overview/admin-overview.component.ts - 228 + 208 libs/ui/src/lib/value/value.component.ts @@ -7196,11 +7212,11 @@ API Requests Today apps/client/src/app/components/admin-users/admin-users.html - 156 + 164 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 148 + 152 @@ -7276,7 +7292,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.ts - 171 + 202 apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html @@ -7349,7 +7365,7 @@ AI prompt has been copied to the clipboard apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 207 + 237 @@ -7370,7 +7386,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 - 531 + 533 @@ -7391,14 +7407,14 @@ Instant apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 300 + 302 Lazy apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 296 + 298 @@ -7412,21 +7428,21 @@ real-time apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 300 + 302 end of day apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 296 + 298 Open Duck.ai apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 208 + 238 @@ -7444,7 +7460,7 @@ libs/ui/src/lib/treemap-chart/treemap-chart.component.ts - 414 + 421 @@ -7481,11 +7497,11 @@ libs/ui/src/lib/treemap-chart/treemap-chart.component.ts - 414 + 421 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts - 427 + 434 @@ -7562,14 +7578,14 @@ Do you really want to generate a new security token for this user? apps/client/src/app/components/admin-users/admin-users.component.ts - 278 + 258 Security token apps/client/src/app/components/admin-users/admin-users.component.ts - 273 + 253 apps/client/src/app/components/user-account-access/user-account-access.component.ts @@ -7580,7 +7596,7 @@ Generate Security Token apps/client/src/app/components/admin-users/admin-users.html - 238 + 250 @@ -7624,14 +7640,14 @@ () is already in use. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 965 + 967 An error occurred while updating to (). apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 809 + 811 @@ -7753,7 +7769,7 @@ Demo user account has been synced. apps/client/src/app/components/admin-overview/admin-overview.component.ts - 334 + 314 @@ -7979,7 +7995,7 @@ Current month apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 263 + 265 @@ -8530,7 +8546,7 @@ Registration Date apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 64 + 68 diff --git a/apps/client/src/locales/messages.zh.xlf b/apps/client/src/locales/messages.zh.xlf index 8c43c4a725..2889ceb609 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 - 181 + 202 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -320,7 +320,7 @@ 现金余额 apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 57 + 58 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -336,7 +336,7 @@ 平台 apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 120 + 121 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -352,7 +352,7 @@ 现金余额 apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 178 + 179 @@ -438,6 +438,10 @@ Total 总计 + + apps/client/src/app/components/admin-tag/admin-tag.component.html + 87 + libs/ui/src/lib/accounts-table/accounts-table.component.html 63 @@ -552,7 +556,7 @@ apps/client/src/app/components/admin-tag/admin-tag.component.html - 99 + 117 libs/ui/src/lib/accounts-table/accounts-table.component.html @@ -588,15 +592,15 @@ apps/client/src/app/components/admin-tag/admin-tag.component.html - 114 + 132 apps/client/src/app/components/admin-users/admin-users.html - 254 + 266 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 27 + 31 libs/ui/src/lib/account-balances/account-balances.component.html @@ -628,7 +632,7 @@ 付费 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts - 136 + 120 @@ -784,7 +788,7 @@ 的详细信息 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html - 2 + 6 @@ -820,7 +824,7 @@ libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html - 6 + 10 @@ -844,7 +848,7 @@ libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html - 26 + 24 @@ -852,7 +856,7 @@ 货币 apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 123 + 124 apps/client/src/app/pages/public/public-page.html @@ -872,7 +876,7 @@ 没有国家的 ETF apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 128 + 129 @@ -880,7 +884,7 @@ 无行业类别的 ETF apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 133 + 134 @@ -888,7 +892,7 @@ 将数据源转换为 时发生错误。 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 528 + 530 @@ -908,7 +912,7 @@ 过滤... apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 350 + 351 @@ -988,7 +992,7 @@ 订阅历史 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 156 + 177 @@ -1016,7 +1020,7 @@ 哎呀!无法解析历史数据。 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor.component.ts - 286 + 287 @@ -1034,6 +1038,10 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html 21 + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 17 + Import @@ -1052,11 +1060,11 @@ - By , this is projected to increase to per year or per month, assuming a annual interest rate. - 到,预计这将增长至每年或每月,假设年利率为。 + By , this is projected to increase to per year or per month, assuming a annual interest rate. + 到,预计这将增长至每年或每月,假设年利率为。 apps/client/src/app/pages/portfolio/fire/fire-page.html - 132 + 144 @@ -1080,7 +1088,7 @@ apps/client/src/app/components/admin-users/admin-users.html - 53 + 56 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -1088,7 +1096,7 @@ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 99 + 103 @@ -1164,7 +1172,7 @@ 总计 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 175 + 196 @@ -1276,7 +1284,7 @@ 您确实要删除此优惠券吗? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 247 + 227 @@ -1284,7 +1292,7 @@ 您真的要删除这条系统消息吗? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 260 + 240 @@ -1292,7 +1300,7 @@ 您真的要刷新缓存吗? apps/client/src/app/components/admin-overview/admin-overview.component.ts - 290 + 270 @@ -1300,7 +1308,7 @@ 请设置您的系统消息: apps/client/src/app/components/admin-overview/admin-overview.component.ts - 310 + 290 @@ -1316,7 +1324,7 @@ 每位用户 apps/client/src/app/components/admin-overview/admin-overview.component.ts - 181 + 176 @@ -1456,7 +1464,7 @@ 资产概况已保存 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 754 + 756 @@ -1464,7 +1472,7 @@ 您真的要删除这个平台吗? apps/client/src/app/components/admin-platform/admin-platform.component.ts - 125 + 131 @@ -1480,7 +1488,7 @@ 此资产概况的数据已转移至 (),且该资产概况已被删除。 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 961 + 963 @@ -1496,7 +1504,7 @@ 当前年份 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 267 + 269 @@ -1512,7 +1520,7 @@ 缓存已刷新。 apps/client/src/app/components/admin-overview/admin-overview.component.ts - 281 + 261 @@ -1552,7 +1560,7 @@ 您真的要删除此标签吗? apps/client/src/app/components/admin-tag/admin-tag.component.ts - 129 + 144 @@ -1576,7 +1584,7 @@ 您真的要删除该用户吗? apps/client/src/app/components/admin-users/admin-users.component.ts - 253 + 233 @@ -1608,19 +1616,23 @@ 每天的参与度 apps/client/src/app/components/admin-users/admin-users.html - 135 + 143 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 138 + 142 - + Last Request 最后请求 apps/client/src/app/components/admin-users/admin-users.html - 181 + 188 + + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 169 @@ -1628,7 +1640,7 @@ 模拟用户 apps/client/src/app/components/admin-users/admin-users.html - 228 + 240 @@ -1636,11 +1648,11 @@ 无法验证表单 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 730 + 732 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 733 + 735 @@ -1664,7 +1676,7 @@ 投资组合 apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts - 140 + 156 apps/client/src/app/components/header/header.component.html @@ -1692,7 +1704,7 @@ apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts - 152 + 168 @@ -1804,7 +1816,7 @@ 将此资产概况合并入 () 时发生错误。 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 944 + 946 @@ -1900,7 +1912,7 @@ 当前周 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 259 + 261 @@ -1920,7 +1932,7 @@ 总金额 apps/client/src/app/components/investment-chart/investment-chart.component.ts - 144 + 160 @@ -1936,7 +1948,7 @@ 储蓄率 apps/client/src/app/components/investment-chart/investment-chart.component.ts - 193 + 209 @@ -2064,7 +2076,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 102 + 121 @@ -2072,11 +2084,11 @@ 绝对净绩效 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 122 + 141 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 240 + 279 @@ -2084,11 +2096,11 @@ 净绩效 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 137 + 156 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 256 + 295 @@ -2096,7 +2108,7 @@ 总资产 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 165 + 184 @@ -2104,7 +2116,7 @@ 购买力 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 305 + 324 @@ -2112,7 +2124,7 @@ 从分析中排除 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 337 + 356 @@ -2120,7 +2132,7 @@ 负债 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 368 + 387 apps/client/src/app/pages/features/features-page.html @@ -2132,7 +2144,7 @@ 净值 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 391 + 407 @@ -2140,7 +2152,7 @@ 年化业绩 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 406 + 422 @@ -2148,7 +2160,7 @@ 请输入您的应急基金金额。 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.ts - 173 + 204 @@ -2384,7 +2396,7 @@ 年初至今 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 267 + 269 libs/ui/src/lib/assistant/assistant.component.ts @@ -2396,7 +2408,7 @@ 1年 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 271 + 273 libs/ui/src/lib/assistant/assistant.component.ts @@ -2416,7 +2428,7 @@ 5年 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 275 + 277 libs/ui/src/lib/assistant/assistant.component.ts @@ -2436,7 +2448,7 @@ 最大限度 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 279 + 281 libs/ui/src/lib/assistant/assistant.component.ts @@ -2612,7 +2624,7 @@ 优惠券 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts - 141 + 125 @@ -2720,7 +2732,7 @@ 投资 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 227 + 246 @@ -2768,7 +2780,7 @@ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 41 + 45 @@ -2944,7 +2956,7 @@ apps/client/src/app/components/admin-users/admin-users.html - 92 + 100 apps/client/src/app/components/header/header.component.html @@ -2960,7 +2972,7 @@ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 113 + 117 apps/client/src/app/pages/accounts/accounts-page.html @@ -3100,7 +3112,7 @@ 概述 apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 43 + 44 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -3252,11 +3264,11 @@ 无法解析抓取器配置 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 678 + 680 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 681 + 683 @@ -3492,7 +3504,7 @@ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 165 + 186 @@ -3500,7 +3512,7 @@ 持仓 apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 134 + 135 apps/client/src/app/components/home-holdings/home-holdings.html @@ -3512,7 +3524,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 196 + 215 apps/client/src/app/pages/public/public-page.html @@ -3536,15 +3548,15 @@ 此操作无法撤销。 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 963 + 965 just now 刚刚 - apps/client/src/app/components/admin-users/admin-users.component.ts - 221 + apps/client/src/app/util/date.util.ts + 23 @@ -4144,7 +4156,7 @@ 您确定要将此资产概况合并至其中吗? apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 967 + 969 @@ -4248,11 +4260,11 @@ 活动 apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 109 + 110 apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 145 + 146 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -4268,7 +4280,7 @@ apps/client/src/app/components/admin-users/admin-users.html - 113 + 121 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -4280,7 +4292,7 @@ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 123 + 127 apps/client/src/app/pages/portfolio/activities/activities-page.html @@ -4480,7 +4492,7 @@ Dividend Performance apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 307 + 214 @@ -4540,7 +4552,7 @@ 价格 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 191 + 212 @@ -4548,7 +4560,7 @@ 您确定要把此资产概况转换为 () 吗? apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 811 + 813 @@ -4648,7 +4660,7 @@ 试用 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts - 140 + 124 @@ -4752,7 +4764,7 @@ 股息 apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 96 + 97 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -4760,7 +4772,11 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 492 + 103 + + + apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html + 511 apps/client/src/app/pages/features/features-page.html @@ -4792,7 +4808,7 @@ 存款 libs/ui/src/lib/fire-calculator/fire-calculator.component.ts - 423 + 441 @@ -4816,7 +4832,7 @@ 顶部 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 332 + 329 @@ -4824,7 +4840,7 @@ 底部 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 383 + 380 @@ -4832,7 +4848,7 @@ 投资组合演变 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 438 + 435 @@ -4840,7 +4856,7 @@ 投资时间表 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 465 + 463 @@ -4848,7 +4864,7 @@ 当前连胜 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 486 + 484 @@ -4856,7 +4872,7 @@ 最长连续纪录 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 495 + 493 @@ -4864,7 +4880,7 @@ 股息时间表 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 522 + 521 @@ -4960,7 +4976,7 @@ 每小时 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 251 + 253 @@ -5076,7 +5092,7 @@ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 224 + 245 @@ -5116,11 +5132,11 @@ 无法保存资产概况 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 764 + 766 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 767 + 769 @@ -5168,7 +5184,7 @@ 注册 apps/client/src/app/components/admin-users/admin-users.html - 75 + 78 libs/common/src/lib/routes/routes.ts @@ -5337,7 +5353,7 @@ 优惠券 已创建 apps/client/src/app/components/admin-overview/admin-overview.component.ts - 229 + 209 @@ -5517,7 +5533,7 @@ 数据收集已开始。 apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 386 + 387 @@ -5561,7 +5577,7 @@ 会员资格 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 88 + 92 libs/common/src/lib/routes/routes.ts @@ -5817,7 +5833,7 @@ 无法将此资产概况合并到 ()。 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 922 + 924 @@ -5833,15 +5849,15 @@ 利息 apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 83 + 84 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 478 + 496 libs/ui/src/lib/fire-calculator/fire-calculator.component.ts - 433 + 451 libs/ui/src/lib/i18n.ts @@ -5853,7 +5869,7 @@ 储蓄 libs/ui/src/lib/fire-calculator/fire-calculator.component.ts - 443 + 461 @@ -5897,7 +5913,7 @@ 帐户 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.component.ts - 109 + 110 libs/common/src/lib/routes/routes.ts @@ -6009,15 +6025,15 @@ 应急基金 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 242 + 261 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 320 + 339 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 425 + 441 apps/client/src/app/pages/features/features-page.html @@ -6089,7 +6105,7 @@ libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 462 + 473 @@ -6113,7 +6129,7 @@ 暂无活动 apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 138 + 139 @@ -6193,7 +6209,7 @@ 查看详细信息 apps/client/src/app/components/admin-users/admin-users.html - 220 + 232 libs/ui/src/lib/accounts-table/accounts-table.component.html @@ -6285,7 +6301,7 @@ 现金 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 274 + 293 @@ -6293,7 +6309,7 @@ 股权 apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 70 + 71 @@ -6309,7 +6325,7 @@ 认证 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 74 + 78 @@ -6317,7 +6333,7 @@ Absolute Dividend Performance apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 288 + 195 @@ -6369,8 +6385,8 @@ - If you retire today, you would be able to withdraw per year or per month, based on your total assets of and a safe withdrawal rate (SWR) of - 如果您今天退休,您将能够提取 每年 或 每月基于您总资产的 和安全取款率 (SWR) 为 + If you retire today, you would be able to withdraw per year or per month, based on your total assets of and a safe withdrawal rate (SWR) of + 如果您今天退休,您将能够提取 每年 或 每月基于您总资产的 和安全取款率 (SWR) 为 apps/client/src/app/pages/portfolio/fire/fire-page.html 69 @@ -6461,11 +6477,11 @@ libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 464 + 475 libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 478 + 489 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -6493,7 +6509,7 @@ 当前市场价格为 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 856 + 858 @@ -6565,7 +6581,7 @@ 绝对货币表现 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 194 + 233 @@ -6617,7 +6633,7 @@ 货币表现 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 218 + 257 @@ -6649,7 +6665,7 @@ 本月至今 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 263 + 265 libs/ui/src/lib/assistant/assistant.component.ts @@ -6657,8 +6673,8 @@ - Expires () - 到期时间 () + Expires () + 到期时间 () apps/client/src/app/components/admin-users/admin-users.html 34 @@ -6669,7 +6685,7 @@ 本周至今 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 259 + 261 libs/ui/src/lib/assistant/assistant.component.ts @@ -6705,7 +6721,7 @@ 获取市场价格 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html - 40 + 32 @@ -6721,7 +6737,7 @@ 年 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 271 + 273 apps/client/src/app/pages/resources/personal-finance-tools/product-page.html @@ -6741,7 +6757,7 @@ 年 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 275 + 277 libs/ui/src/lib/assistant/assistant.component.ts @@ -6826,7 +6842,7 @@ 每天 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 247 + 249 @@ -6866,7 +6882,7 @@ 活动 apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 107 + 108 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -7038,7 +7054,7 @@ 基准 apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 118 + 119 @@ -7290,15 +7306,15 @@ 错误 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 846 + 848 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 923 + 925 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 945 + 947 @@ -7382,7 +7398,7 @@ libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html - 48 + 41 libs/ui/src/lib/i18n.ts @@ -7426,7 +7442,7 @@ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 259 + 280 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -7446,7 +7462,7 @@ 角色 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 50 + 54 @@ -7550,7 +7566,7 @@ 已复制到剪贴板 apps/client/src/app/components/admin-overview/admin-overview.component.ts - 228 + 208 libs/ui/src/lib/value/value.component.ts @@ -7896,11 +7912,11 @@ 今日 API 请求数 apps/client/src/app/components/admin-users/admin-users.html - 156 + 164 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 148 + 152 @@ -8000,7 +8016,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.ts - 171 + 202 apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html @@ -8080,7 +8096,7 @@ AI 提示已复制到剪贴板 apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 207 + 237 @@ -8096,7 +8112,7 @@ 延迟 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 296 + 298 @@ -8104,7 +8120,7 @@ 即时 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 300 + 302 @@ -8128,7 +8144,7 @@ 您确定要把数据源转换为 吗? apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 531 + 533 @@ -8152,7 +8168,7 @@ 收盘 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 296 + 298 @@ -8160,7 +8176,7 @@ 实时 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 300 + 302 @@ -8168,7 +8184,7 @@ 打开 Duck.ai apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 208 + 238 @@ -8188,7 +8204,7 @@ libs/ui/src/lib/treemap-chart/treemap-chart.component.ts - 414 + 421 @@ -8228,11 +8244,11 @@ libs/ui/src/lib/treemap-chart/treemap-chart.component.ts - 414 + 421 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts - 427 + 434 @@ -8320,7 +8336,7 @@ 安全令牌 apps/client/src/app/components/admin-users/admin-users.component.ts - 273 + 253 apps/client/src/app/components/user-account-access/user-account-access.component.ts @@ -8332,7 +8348,7 @@ 您确定要为此用户生成新的安全令牌吗? apps/client/src/app/components/admin-users/admin-users.component.ts - 278 + 258 @@ -8340,7 +8356,7 @@ 生成安全令牌 apps/client/src/app/components/admin-users/admin-users.html - 238 + 250 @@ -8389,7 +8405,7 @@ () 已被使用。 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 965 + 967 @@ -8397,7 +8413,7 @@ 在更新到 () 时发生错误。 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 809 + 811 @@ -8550,7 +8566,7 @@ 演示用户账户已同步。 apps/client/src/app/components/admin-overview/admin-overview.component.ts - 334 + 314 @@ -8812,7 +8828,7 @@ 当前月份 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 263 + 265 @@ -9441,7 +9457,7 @@ 注册日期 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 64 + 68 From d93de251b6599a015ed7c57f08ccbe0706fb0b3e Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Wed, 30 Sep 2026 19:56:29 +0200 Subject: [PATCH 26/27] Task/improve language localization for DE (20260930) (#7986) * Update translations * Update changelog --- CHANGELOG.md | 1 + apps/client/src/locales/messages.de.xlf | 6 +++--- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 17ad555200..7bbc62fed0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,6 +20,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Extended the emergency fund dialog in the portfolio summary to include the currency suffix - Extended the user detail dialog in the users section of the admin control panel to include the last request - Migrated the client to the code generated by the new `prisma-client` generator of _Prisma_ +- Improved the language localization for German (`de`) - Migrated from `lodash` to `lodash-es` ### Fixed diff --git a/apps/client/src/locales/messages.de.xlf b/apps/client/src/locales/messages.de.xlf index bcd0b50f2f..ac45a37c37 100644 --- a/apps/client/src/locales/messages.de.xlf +++ b/apps/client/src/locales/messages.de.xlf @@ -2715,7 +2715,7 @@ By , this is projected to increase to per year or per month, assuming a annual interest rate. - Bis wird dies voraussichtlich auf pro Jahr oder pro Monat ansteigen, bei einem angenommenen jährlichen Zinssatz von . + Bis wird dies voraussichtlich auf pro Jahr oder pro Monat ansteigen, bei einem angenommenen jährlichen Zinssatz von . apps/client/src/app/pages/portfolio/fire/fire-page.html 144 @@ -3351,7 +3351,7 @@ If you retire today, you would be able to withdraw per year or per month, based on your total assets of and a safe withdrawal rate (SWR) of - Wenn du heute in den Ruhestand gehen würdest, könntest du pro Jahr oder pro Monat entnehmen, bezogen auf dein Gesamtanlagevermögen von und einer sicheren Entnahmerate (SWR) von + Wenn du heute in den Ruhestand gehen würdest, könntest du pro Jahr oder pro Monat entnehmen, bezogen auf dein Gesamtanlagevermögen von und einer sicheren Entnahmerate (SWR) von apps/client/src/app/pages/portfolio/fire/fire-page.html 69 @@ -6701,7 +6701,7 @@ Expires () - Läuft ab () + Läuft ab () apps/client/src/app/components/admin-users/admin-users.html 34 From 05459aaa3588ad1b1d89d178c993b2516cb604cd Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Wed, 30 Sep 2026 19:58:12 +0200 Subject: [PATCH 27/27] Release 3.76.0 (#7987) --- 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 7bbc62fed0..db21112dce 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.76.0 - 2026-09-30 ### Added diff --git a/package-lock.json b/package-lock.json index c3ee51dc53..a5dad5f892 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "ghostfolio", - "version": "3.75.0", + "version": "3.76.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "ghostfolio", - "version": "3.75.0", + "version": "3.76.0", "hasInstallScript": true, "license": "AGPL-3.0", "dependencies": { diff --git a/package.json b/package.json index ca4f3ebcff..fcb94759f7 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ghostfolio", - "version": "3.75.0", + "version": "3.76.0", "homepage": "https://ghostfol.io", "license": "AGPL-3.0", "repository": "https://github.com/ghostfolio/ghostfolio",