From 94c2c6cd06a94aaf2295159cb9dd5464688ea37d Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Thu, 3 Sep 2026 20:04:21 +0200 Subject: [PATCH 01/50] Task/migrate transfer cash balance dialog to dedicated route (#7791) * Migrate transfer cash balance dialog to dedicated route * Update changelog --- CHANGELOG.md | 1 + .../account-dialog-host.component.ts | 84 +++++++++++++++++- .../types/account-dialog-mode.type.ts | 3 +- .../pages/accounts/accounts-page.component.ts | 86 +------------------ .../src/app/pages/accounts/accounts-page.html | 1 - .../pages/accounts/accounts-page.routes.ts | 9 +- .../transfer-balance-dialog.component.ts | 4 +- libs/common/src/lib/routes/routes.ts | 5 ++ .../accounts-table.component.html | 2 +- .../accounts-table.component.ts | 8 +- 10 files changed, 106 insertions(+), 97 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 855def05a7..04d33dca3f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed - Restricted the _Restricted view and manage_ permission of the access to share the portfolio to the Model Context Protocol (MCP) (experimental) +- Migrated the transfer cash balance dialog to a dedicated route - Improved the language localization for Italian (`it`) - Upgraded `prisma` from version `7.9.1` to `7.10.0` diff --git a/apps/client/src/app/pages/accounts/account-dialog-host/account-dialog-host.component.ts b/apps/client/src/app/pages/accounts/account-dialog-host/account-dialog-host.component.ts index 29f7eb78b7..0cc9476e3b 100644 --- a/apps/client/src/app/pages/accounts/account-dialog-host/account-dialog-host.component.ts +++ b/apps/client/src/app/pages/accounts/account-dialog-host/account-dialog-host.component.ts @@ -5,11 +5,17 @@ import { } from '@ghostfolio/client/components/account-detail-dialog/interfaces/interfaces'; import { ImpersonationStorageService } from '@ghostfolio/client/services/impersonation-storage.service'; import { UserService } from '@ghostfolio/client/services/user/user.service'; -import { CreateAccountDto, UpdateAccountDto } from '@ghostfolio/common/dtos'; +import { + CreateAccountDto, + TransferBalanceDto, + UpdateAccountDto +} from '@ghostfolio/common/dtos'; import { AccountResponse, User } from '@ghostfolio/common/interfaces'; import { hasPermission, permissions } from '@ghostfolio/common/permissions'; import { internalRoutes } from '@ghostfolio/common/routes/routes'; import { Scope, hasScope, scopes } from '@ghostfolio/common/scopes'; +import { AccountWithPlatform } from '@ghostfolio/common/types'; +import { NotificationService } from '@ghostfolio/ui/notifications'; import { DataService } from '@ghostfolio/ui/services'; import { @@ -36,6 +42,8 @@ import { import { GfCreateOrUpdateAccountDialogComponent } from '../create-or-update-account-dialog/create-or-update-account-dialog.component'; import { CreateOrUpdateAccountDialogParams } from '../create-or-update-account-dialog/interfaces/interfaces'; +import { TransferBalanceDialogParams } from '../transfer-balance/interfaces/interfaces'; +import { GfTransferBalanceDialogComponent } from '../transfer-balance/transfer-balance-dialog.component'; import { AccountDialogMode } from './types/account-dialog-mode.type'; @Component({ @@ -45,7 +53,9 @@ import { AccountDialogMode } from './types/account-dialog-mode.type'; }) export class GfAccountDialogHostComponent implements OnDestroy, OnInit { private dialogRef: MatDialogRef< - GfAccountDetailDialogComponent | GfCreateOrUpdateAccountDialogComponent + | GfAccountDetailDialogComponent + | GfCreateOrUpdateAccountDialogComponent + | GfTransferBalanceDialogComponent >; private readonly deviceType = computed(() => { @@ -61,6 +71,7 @@ export class GfAccountDialogHostComponent implements OnDestroy, OnInit { private readonly impersonationStorageService = inject( ImpersonationStorageService ); + private readonly notificationService = inject(NotificationService); private readonly route = inject(ActivatedRoute); private readonly router = inject(Router); private readonly userService = inject(UserService); @@ -108,6 +119,24 @@ export class GfAccountDialogHostComponent implements OnDestroy, OnInit { return; } + if (mode === 'transferCashBalance') { + const accounts = user?.accounts ?? []; + + if ( + accounts.length < 2 || + !hasPermission(user?.permissions, permissions.updateAccount) || + this.isWriteRestricted(user, scopes.accountUpdate) + ) { + this.navigateBack(); + + return; + } + + this.openTransferBalanceDialog({ accounts }); + + return; + } + if (mode === 'update') { if ( !account || @@ -298,4 +327,55 @@ export class GfAccountDialogHostComponent implements OnDestroy, OnInit { }); }); } + + private openTransferBalanceDialog({ + accounts + }: { + accounts: AccountWithPlatform[]; + }) { + const dialogRef = this.dialog.open< + GfTransferBalanceDialogComponent, + TransferBalanceDialogParams, + TransferBalanceDto | null + >(GfTransferBalanceDialogComponent, { + data: { + accounts + }, + width: this.deviceType() === 'mobile' ? '100vw' : '50rem' + }); + + this.dialogRef = dialogRef; + + dialogRef + .afterClosed() + .pipe(takeUntil(this.dialogClosed), takeUntilDestroyed(this.destroyRef)) + .subscribe((result) => { + if (!result) { + this.navigateBack(); + + return; + } + + this.dataService + .transferAccountBalance(result) + .pipe(takeUntilDestroyed(this.destroyRef)) + .subscribe({ + error: () => { + this.notificationService.alert({ + title: $localize`Oops, cash balance transfer has failed.` + }); + + this.navigateBack(); + }, + next: () => { + // Deliberately not bound to the destroy reference: navigating + // back destroys this component and the refreshed user is what + // makes the accounts page reload its data + this.userService.get(true).subscribe(); + + this.navigateBack(); + } + }); + }); + } } diff --git a/apps/client/src/app/pages/accounts/account-dialog-host/types/account-dialog-mode.type.ts b/apps/client/src/app/pages/accounts/account-dialog-host/types/account-dialog-mode.type.ts index 9c2d44a2a6..4cdf112a77 100644 --- a/apps/client/src/app/pages/accounts/account-dialog-host/types/account-dialog-mode.type.ts +++ b/apps/client/src/app/pages/accounts/account-dialog-host/types/account-dialog-mode.type.ts @@ -1 +1,2 @@ -export type AccountDialogMode = 'create' | 'detail' | 'update'; +export type AccountDialogMode = + 'create' | 'detail' | 'transferCashBalance' | 'update'; diff --git a/apps/client/src/app/pages/accounts/accounts-page.component.ts b/apps/client/src/app/pages/accounts/accounts-page.component.ts index 2389cbaa84..f731962a5e 100644 --- a/apps/client/src/app/pages/accounts/accounts-page.component.ts +++ b/apps/client/src/app/pages/accounts/accounts-page.component.ts @@ -1,7 +1,6 @@ import { ImpersonationStorageService } from '@ghostfolio/client/services/impersonation-storage.service'; import { UserService } from '@ghostfolio/client/services/user/user.service'; import { DEFAULT_LOCALE } from '@ghostfolio/common/config'; -import { TransferBalanceDto } from '@ghostfolio/common/dtos'; import { AccountsResponse, User } from '@ghostfolio/common/interfaces'; import { hasPermission, permissions } from '@ghostfolio/common/permissions'; import { internalRoutes } from '@ghostfolio/common/routes/routes'; @@ -9,27 +8,19 @@ import { hasScope, scopes } from '@ghostfolio/common/scopes'; import { AccountWithValue } from '@ghostfolio/common/types'; import { GfAccountsTableComponent } from '@ghostfolio/ui/accounts-table'; import { GfFabComponent } from '@ghostfolio/ui/fab'; -import { NotificationService } from '@ghostfolio/ui/notifications'; import { DataService } from '@ghostfolio/ui/services'; import { ChangeDetectionStrategy, ChangeDetectorRef, Component, - computed, DestroyRef, inject, OnInit } from '@angular/core'; import { takeUntilDestroyed } from '@angular/core/rxjs-interop'; -import { MatDialog } from '@angular/material/dialog'; -import { ActivatedRoute, Router, RouterModule } from '@angular/router'; -import { DeviceDetectorService } from 'ngx-device-detector'; -import { filter, of, switchMap, tap } from 'rxjs'; -import { catchError } from 'rxjs/operators'; - -import { TransferBalanceDialogParams } from './transfer-balance/interfaces/interfaces'; -import { GfTransferBalanceDialogComponent } from './transfer-balance/transfer-balance-dialog.component'; +import { Router, RouterModule } from '@angular/router'; +import { filter, switchMap, tap } from 'rxjs'; @Component({ changeDetection: ChangeDetectionStrategy.OnPush, @@ -54,33 +45,15 @@ export class GfAccountsPageComponent implements OnInit { private hasImpersonationId: boolean; - private readonly deviceType = computed( - () => this.deviceDetectorService.deviceInfo().deviceType - ); - private readonly changeDetectorRef = inject(ChangeDetectorRef); private readonly dataService = inject(DataService); private readonly destroyRef = inject(DestroyRef); - private readonly deviceDetectorService = inject(DeviceDetectorService); - private readonly dialog = inject(MatDialog); private readonly impersonationStorageService = inject( ImpersonationStorageService ); - private readonly notificationService = inject(NotificationService); - private readonly route = inject(ActivatedRoute); private readonly router = inject(Router); private readonly userService = inject(UserService); - public constructor() { - this.route.queryParams - .pipe(takeUntilDestroyed(this.destroyRef)) - .subscribe((params) => { - if (params['transferBalanceDialog']) { - this.openTransferBalanceDialog(); - } - }); - } - public ngOnInit() { this.impersonationStorageService .onChangeHasImpersonation() @@ -135,67 +108,12 @@ export class GfAccountsPageComponent implements OnInit { }); } - protected onTransferBalance() { - this.router.navigate([], { - queryParams: { transferBalanceDialog: true } - }); - } - private fetchAccounts() { return this.dataService.fetchAccounts({ filters: this.userService.getFilters() }); } - private openTransferBalanceDialog() { - const dialogRef = this.dialog.open< - GfTransferBalanceDialogComponent, - TransferBalanceDialogParams - >(GfTransferBalanceDialogComponent, { - data: { - accounts: this.user?.accounts - }, - width: this.deviceType() === 'mobile' ? '100vw' : '50rem' - }); - - dialogRef - .afterClosed() - .pipe(takeUntilDestroyed(this.destroyRef)) - .subscribe((data: any) => { - if (data) { - this.reset(); - - const { accountIdFrom, accountIdTo, balance }: TransferBalanceDto = - data?.account; - - this.dataService - .transferAccountBalance({ - accountIdFrom, - accountIdTo, - balance - }) - .pipe( - catchError(() => { - this.notificationService.alert({ - title: $localize`Oops, cash balance transfer has failed.` - }); - - return of(undefined); - }), - switchMap(() => this.fetchAccounts()), - takeUntilDestroyed(this.destroyRef) - ) - .subscribe((response) => { - this.updateAccounts(response); - }); - - this.changeDetectorRef.markForCheck(); - } - - this.router.navigate(['.'], { relativeTo: this.route }); - }); - } - private reset() { this.accounts = undefined; this.activitiesCount = 0; diff --git a/apps/client/src/app/pages/accounts/accounts-page.html b/apps/client/src/app/pages/accounts/accounts-page.html index 55a8f65345..a9a344ce70 100644 --- a/apps/client/src/app/pages/accounts/accounts-page.html +++ b/apps/client/src/app/pages/accounts/accounts-page.html @@ -16,7 +16,6 @@ [totalBalanceInBaseCurrency]="totalBalanceInBaseCurrency" [totalValueInBaseCurrency]="totalValueInBaseCurrency" (accountDeleted)="onDeleteAccount($event)" - (transferBalance)="onTransferBalance()" /> diff --git a/apps/client/src/app/pages/accounts/accounts-page.routes.ts b/apps/client/src/app/pages/accounts/accounts-page.routes.ts index fd58d660ca..74ebb3a775 100644 --- a/apps/client/src/app/pages/accounts/accounts-page.routes.ts +++ b/apps/client/src/app/pages/accounts/accounts-page.routes.ts @@ -6,7 +6,8 @@ import { Routes } from '@angular/router'; import { GfAccountDialogHostComponent } from './account-dialog-host/account-dialog-host.component'; import { GfAccountsPageComponent } from './accounts-page.component'; -const { create, detail, update } = internalRoutes.accounts.subRoutes; +const { create, detail, transferCashBalance, update } = + internalRoutes.accounts.subRoutes; export const routes: Routes = [ { @@ -18,6 +19,12 @@ export const routes: Routes = [ path: create.path, title: create.title }, + { + component: GfAccountDialogHostComponent, + data: { mode: 'transferCashBalance' }, + path: transferCashBalance.path, + title: transferCashBalance.title + }, { children: [ { diff --git a/apps/client/src/app/pages/accounts/transfer-balance/transfer-balance-dialog.component.ts b/apps/client/src/app/pages/accounts/transfer-balance/transfer-balance-dialog.component.ts index 75f6f076a6..cdfa7181c4 100644 --- a/apps/client/src/app/pages/accounts/transfer-balance/transfer-balance-dialog.component.ts +++ b/apps/client/src/app/pages/accounts/transfer-balance/transfer-balance-dialog.component.ts @@ -99,13 +99,13 @@ export class GfTransferBalanceDialogComponent { } protected onSubmit() { - const account: TransferBalanceDto = { + const transferBalance: TransferBalanceDto = { accountIdFrom: this.transferBalanceForm.controls.fromAccount.value ?? '', accountIdTo: this.transferBalanceForm.controls.toAccount.value ?? '', balance: Number(this.transferBalanceForm.controls.balance.value) }; - this.dialogRef.close({ account }); + this.dialogRef.close(transferBalance); } private getAccountById(aId: string | null) { diff --git a/libs/common/src/lib/routes/routes.ts b/libs/common/src/lib/routes/routes.ts index 6985ba04f2..3d74297609 100644 --- a/libs/common/src/lib/routes/routes.ts +++ b/libs/common/src/lib/routes/routes.ts @@ -93,6 +93,11 @@ export const internalRoutes = { }, title: $localize`Account` }, + transferCashBalance: { + path: 'transfer-cash-balance', + routerLink: ['/accounts', 'transfer-cash-balance'], + title: $localize`Transfer Cash Balance` + }, update: { path: 'update', routerLink: (aAccountId: string) => { diff --git a/libs/ui/src/lib/accounts-table/accounts-table.component.html b/libs/ui/src/lib/accounts-table/accounts-table.component.html index 2719f05a0d..a01abff1a8 100644 --- a/libs/ui/src/lib/accounts-table/accounts-table.component.html +++ b/libs/ui/src/lib/accounts-table/accounts-table.component.html @@ -4,7 +4,7 @@ class="align-items-center d-flex" mat-stroked-button [disabled]="dataSource?.data.length < 2" - (click)="onTransferBalance()" + [routerLink]="transferCashBalanceRouterLink" > Transfer Cash Balance... diff --git a/libs/ui/src/lib/accounts-table/accounts-table.component.ts b/libs/ui/src/lib/accounts-table/accounts-table.component.ts index 48eb99d51c..e986932906 100644 --- a/libs/ui/src/lib/accounts-table/accounts-table.component.ts +++ b/libs/ui/src/lib/accounts-table/accounts-table.component.ts @@ -75,7 +75,6 @@ export class GfAccountsTableComponent { public readonly totalValueInBaseCurrency = input(); public readonly accountDeleted = output(); - public readonly transferBalance = output(); public readonly sort = viewChild.required(MatSort); @@ -141,6 +140,9 @@ export class GfAccountsTableComponent { protected readonly isLoading = computed(() => !this.accounts()); + protected readonly transferCashBalanceRouterLink = + internalRoutes.accounts.subRoutes.transferCashBalance.routerLink; + private readonly notificationService = inject(NotificationService); private readonly router = inject(Router); @@ -197,8 +199,4 @@ export class GfAccountsTableComponent { title: aComment }); } - - protected onTransferBalance() { - this.transferBalance.emit(); - } } From 72b0d80411e2492321a796b8f7fbed114f0b4f35 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Thu, 3 Sep 2026 20:17:33 +0200 Subject: [PATCH 02/50] Task/move details of granted access from table to dialog on access page (#7792) * Move details of granted access * Update changelog --- CHANGELOG.md | 1 + .../access-table/access-table.component.html | 38 ------------------- .../access-table/access-table.component.ts | 26 +------------ ...reate-or-update-access-dialog.component.ts | 37 +++++++++++++++++- .../create-or-update-access-dialog.html | 12 ++++++ 5 files changed, 49 insertions(+), 65 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 04d33dca3f..a0db33f9c4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed +- Moved the details of the granted access from the table to the dialog on the access page (experimental) - Restricted the _Restricted view and manage_ permission of the access to share the portfolio to the Model Context Protocol (MCP) (experimental) - Migrated the transfer cash balance dialog to a dedicated route - Improved the language localization for Italian (`it`) diff --git a/apps/client/src/app/components/access-table/access-table.component.html b/apps/client/src/app/components/access-table/access-table.component.html index fc324fb872..b8c2f8422d 100644 --- a/apps/client/src/app/components/access-table/access-table.component.html +++ b/apps/client/src/app/components/access-table/access-table.component.html @@ -45,36 +45,6 @@ - - Details - - @if (element.type === 'PUBLIC') { - - @if (user()?.settings?.isExperimentalFeatures) { -
- GET {{ baseUrl }}/api/v1/public/{{ - element.id - }}/portfolio -
- } - } @else if (element.type === 'MCP' && hasPermissionToEnableMcp) { -
- {{ baseUrl }}{{ mcpEndpoint }} -
-
- Authorization: Bearer {{ element.id }} -
- } - -
- @@ -113,14 +83,6 @@ } - @if (element.type === 'MCP' && hasPermissionToEnableMcp) { - - } @if ( (!isReceivedAccess() && user()?.settings?.isExperimentalFeatures) || element.type === 'PUBLIC' || diff --git a/apps/client/src/app/components/access-table/access-table.component.ts b/apps/client/src/app/components/access-table/access-table.component.ts index baf4247e3c..9b666b3b62 100644 --- a/apps/client/src/app/components/access-table/access-table.component.ts +++ b/apps/client/src/app/components/access-table/access-table.component.ts @@ -1,4 +1,3 @@ -import { MCP_ENDPOINT } from '@ghostfolio/common/config'; import { ConfirmationDialogType } from '@ghostfolio/common/enums'; import { getDateFormatString } from '@ghostfolio/common/helper'; import { Access, User } from '@ghostfolio/common/interfaces'; @@ -32,7 +31,6 @@ import { copyOutline, createOutline, ellipsisHorizontal, - linkOutline, removeCircleOutline, trashOutline } from 'ionicons/icons'; @@ -81,14 +79,7 @@ export class GfAccessTableComponent { protected readonly dataSource = new MatTableDataSource(); protected readonly displayedColumns = computed(() => { - const columns = [ - 'alias', - 'grantee', - 'type', - 'lastUsedAt', - 'expiresAt', - 'details' - ]; + const columns = ['alias', 'grantee', 'type', 'lastUsedAt', 'expiresAt']; if (this.showActions()) { columns.push('actions'); @@ -109,8 +100,6 @@ export class GfAccessTableComponent { return !this.accesses(); }); - protected readonly mcpEndpoint = MCP_ENDPOINT; - private readonly clipboard = inject(Clipboard); private readonly dataService = inject(DataService); private readonly notificationService = inject(NotificationService); @@ -121,7 +110,6 @@ export class GfAccessTableComponent { copyOutline, createOutline, ellipsisHorizontal, - linkOutline, removeCircleOutline, trashOutline }); @@ -142,18 +130,6 @@ export class GfAccessTableComponent { return `${this.baseUrl}/${languageCode}/${publicRoutes.public.path}/${aId}`; } - protected onCopyIdToClipboard(aId: string) { - this.clipboard.copy(aId); - - this.snackBar.open( - '✅ ' + $localize`Identifier has been copied to the clipboard`, - undefined, - { - duration: ms('3 seconds') - } - ); - } - protected onCopyUrlToClipboard(aId: string) { this.clipboard.copy(this.getPublicUrl(aId)); 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 8c2bb0353a..98275e5e78 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 @@ -1,5 +1,5 @@ import { UserService } from '@ghostfolio/client/services/user/user.service'; -import { DEFAULT_LOCALE } from '@ghostfolio/common/config'; +import { DEFAULT_LOCALE, MCP_ENDPOINT } from '@ghostfolio/common/config'; import { CreateAccessDto, UpdateAccessDto } from '@ghostfolio/common/dtos'; import { canApplyFiltersToAccess } from '@ghostfolio/common/helper'; import { Filter, PortfolioPosition } from '@ghostfolio/common/interfaces'; @@ -27,6 +27,7 @@ import { } from '@ghostfolio/ui/portfolio-filter-form'; import { DataService } from '@ghostfolio/ui/services'; +import { JsonPipe } from '@angular/common'; import type { HttpErrorResponse } from '@angular/common/http'; import { ChangeDetectionStrategy, @@ -69,6 +70,7 @@ import { CreateOrUpdateAccessDialogParams } from './interfaces/interfaces'; FormsModule, GfAccessLevelIconComponent, GfPortfolioFilterFormComponent, + JsonPipe, MatButtonModule, MatDatepickerModule, MatDialogModule, @@ -88,6 +90,7 @@ export class GfCreateOrUpdateAccessDialogComponent implements OnInit { public tags: Filter[] = []; protected accessForm: FormGroup; + protected readonly baseUrl = window.location.origin; protected minExpiresAt: Date; protected readonly mode: 'create' | 'update'; protected readonly today = startOfDay(new Date()); @@ -222,6 +225,10 @@ export class GfCreateOrUpdateAccessDialogComponent implements OnInit { this.loadHoldings(); } + protected get accessId() { + return this.data.access?.id; + } + protected get accessLevel(): AccessLevel { return this.accessForm?.get('accessLevel')?.value as AccessLevel; } @@ -234,10 +241,32 @@ export class GfCreateOrUpdateAccessDialogComponent implements OnInit { return this.accessType === 'PUBLIC'; } + protected get mcpConfiguration() { + return { + headers: { + Authorization: `Bearer ${this.accessId}` + }, + type: 'http', + url: `${this.baseUrl}${MCP_ENDPOINT}` + }; + } + protected get showExpiresAtErrorMessage() { return this.accessForm?.get('expiresAt')?.invalid === true; } + protected get showMcpDetails() { + return this.canGrantMcpAccess && this.isMcpAccess && this.mode === 'update'; + } + + protected get showPublicDetails() { + return ( + this.hasExperimentalFeatures && + this.isPublicAccess && + this.mode === 'update' + ); + } + protected onCancel() { this.dialogRef.close(); } @@ -250,6 +279,10 @@ export class GfCreateOrUpdateAccessDialogComponent implements OnInit { } } + private get isMcpAccess() { + return this.accessType === 'MCP'; + } + private async createAccess() { const filters = this.getFilters(); @@ -343,7 +376,7 @@ export class GfCreateOrUpdateAccessDialogComponent implements OnInit { } private async updateAccess() { - const accessId = this.data.access?.id; + const accessId = this.accessId; if (!accessId) { return; diff --git a/apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html b/apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html index 21c0cd3a8b..31391beb0f 100644 --- a/apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html +++ b/apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html @@ -133,6 +133,18 @@ [tags]="tags" /> } + @if (showMcpDetails || showPublicDetails) { +

Details

+ @if (showMcpDetails) { +
{{ mcpConfiguration | json }}
+ } @else if (showPublicDetails) { +
+ GET {{ baseUrl }}/api/v1/public/{{ accessId }}/portfolio +
+ } + }
- @if (dataProviderInfo) { + @if (dataProviderInfo?.name) {

Date: Sun, 6 Sep 2026 09:58:06 +0200 Subject: [PATCH 24/50] Task/improve handling of excluded holdings (#7828) * Improve handling of excluded holdings * Update changelog --- CHANGELOG.md | 6 + .../app/activities/activities.service.spec.ts | 20 +++ .../src/app/activities/activities.service.ts | 7 +- .../portfolio-calculator.factory.ts | 6 + .../calculator/portfolio-calculator.ts | 10 +- .../portfolio-calculator-valuable.spec.ts | 6 +- .../src/app/portfolio/portfolio.controller.ts | 6 +- .../app/portfolio/portfolio.service.spec.ts | 146 +++++++++++++++++- .../src/app/portfolio/portfolio.service.ts | 53 +++++-- .../activities-table.component.ts | 21 +-- 10 files changed, 245 insertions(+), 36 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 22ec996dae..992af40479 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,12 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## Unreleased + +### Changed + +- Made the details of holdings excluded from analysis accessible via the activities table + ## 3.67.1 - 2026-09-05 ### Added diff --git a/apps/api/src/app/activities/activities.service.spec.ts b/apps/api/src/app/activities/activities.service.spec.ts index 4e935efb3e..72d1950294 100644 --- a/apps/api/src/app/activities/activities.service.spec.ts +++ b/apps/api/src/app/activities/activities.service.spec.ts @@ -216,6 +216,26 @@ describe('ActivitiesService', () => { }); }); + it('includes excluded accounts and activities when requested', async () => { + jest.spyOn(activitiesService, 'getActivities').mockResolvedValue({ + activities: [], + count: 0 + }); + + await activitiesService.getActivitiesForPortfolioCalculator({ + userCurrency: 'USD', + userId: 'user-id', + withExcludedAccountsAndActivities: true + }); + + expect(activitiesService.getActivities).toHaveBeenCalledWith({ + filters: undefined, + userCurrency: 'USD', + userId: 'user-id', + withExcludedAccountsAndActivities: true + }); + }); + it('does not adjust synthetic cash activities', async () => { const activity = createActivity({ symbol: 'AAPL' }); const cashActivity = createActivity({ diff --git a/apps/api/src/app/activities/activities.service.ts b/apps/api/src/app/activities/activities.service.ts index a0d9ffef57..7f6cbc8b0c 100644 --- a/apps/api/src/app/activities/activities.service.ts +++ b/apps/api/src/app/activities/activities.service.ts @@ -759,7 +759,8 @@ export class ActivitiesService { filters, userCurrency, userId, - withCash = false + withCash = false, + withExcludedAccountsAndActivities = false }: { /** Optional filters to apply to the activities. */ filters?: Filter[]; @@ -769,13 +770,15 @@ export class ActivitiesService { userId: string; /** Whether to include cash activities in the result. */ withCash?: boolean; + /** Whether to include activities that are excluded from analysis. */ + withExcludedAccountsAndActivities?: boolean; }) { const [activities, splits] = await Promise.all([ this.getActivities({ filters, userCurrency, userId, - withExcludedAccountsAndActivities: false // TODO + withExcludedAccountsAndActivities }), this.assetProfileSplitService.getSplitsByUserId({ userId }) ]); diff --git a/apps/api/src/app/portfolio/calculator/portfolio-calculator.factory.ts b/apps/api/src/app/portfolio/calculator/portfolio-calculator.factory.ts index 7b5ab1a0df..7d95988c1f 100644 --- a/apps/api/src/app/portfolio/calculator/portfolio-calculator.factory.ts +++ b/apps/api/src/app/portfolio/calculator/portfolio-calculator.factory.ts @@ -34,6 +34,7 @@ export class PortfolioCalculatorFactory { calculationType, currency, filters = [], + usePortfolioSnapshotCache = true, userId }: { accountBalanceItems?: HistoricalDataItem[]; @@ -41,6 +42,7 @@ export class PortfolioCalculatorFactory { calculationType: PerformanceCalculationType; currency: string; filters?: Filter[]; + usePortfolioSnapshotCache?: boolean; userId: string; }): PortfolioCalculator { switch (calculationType) { @@ -50,6 +52,7 @@ export class PortfolioCalculatorFactory { activities, currency, filters, + usePortfolioSnapshotCache, userId, configurationService: this.configurationService, currentRateService: this.currentRateService, @@ -64,6 +67,7 @@ export class PortfolioCalculatorFactory { activities, currency, filters, + usePortfolioSnapshotCache, userId, configurationService: this.configurationService, currentRateService: this.currentRateService, @@ -78,6 +82,7 @@ export class PortfolioCalculatorFactory { activities, currency, filters, + usePortfolioSnapshotCache, userId, configurationService: this.configurationService, currentRateService: this.currentRateService, @@ -92,6 +97,7 @@ export class PortfolioCalculatorFactory { activities, currency, filters, + usePortfolioSnapshotCache, userId, configurationService: this.configurationService, currentRateService: this.currentRateService, diff --git a/apps/api/src/app/portfolio/calculator/portfolio-calculator.ts b/apps/api/src/app/portfolio/calculator/portfolio-calculator.ts index 971d8b5642..eb3d05a6ba 100644 --- a/apps/api/src/app/portfolio/calculator/portfolio-calculator.ts +++ b/apps/api/src/app/portfolio/calculator/portfolio-calculator.ts @@ -90,6 +90,7 @@ export abstract class PortfolioCalculator { private snapshotPromise: Promise; private startDate: Date; private transactionPoints: TransactionPoint[]; + private usePortfolioSnapshotCache: boolean; private userId: string; public constructor({ @@ -102,6 +103,7 @@ export abstract class PortfolioCalculator { filters, portfolioSnapshotService, redisCacheService, + usePortfolioSnapshotCache = true, userId }: { accountBalanceItems: HistoricalDataItem[]; @@ -113,6 +115,7 @@ export abstract class PortfolioCalculator { filters: Filter[]; portfolioSnapshotService: PortfolioSnapshotService; redisCacheService: RedisCacheService; + usePortfolioSnapshotCache?: boolean; userId: string; }) { this.accountBalanceItems = accountBalanceItems; @@ -175,6 +178,7 @@ export abstract class PortfolioCalculator { this.portfolioSnapshotService = portfolioSnapshotService; this.redisCacheService = redisCacheService; + this.usePortfolioSnapshotCache = usePortfolioSnapshotCache; this.userId = userId; const { endDate, startDate } = getIntervalFromDateRange({ @@ -187,7 +191,11 @@ export abstract class PortfolioCalculator { this.computeTransactionPoints(); - this.snapshotPromise = this.initialize(); + this.snapshotPromise = this.usePortfolioSnapshotCache + ? this.initialize() + : this.computeSnapshot().then((snapshot) => { + this.snapshot = snapshot; + }); // Mark the rejection as handled to prevent an unhandled promise rejection // in case the snapshot promise is never awaited. Consumers awaiting it diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-valuable.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-valuable.spec.ts index ce5f90f5c3..3681bc7547 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-valuable.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-valuable.spec.ts @@ -108,10 +108,11 @@ describe('PortfolioCalculator', () => { activities, calculationType: PerformanceCalculationType.ROAI, currency: 'USD', + usePortfolioSnapshotCache: false, userId: userDummyData.id }); - const portfolioSnapshot = await portfolioCalculator.computeSnapshot(); + const portfolioSnapshot = await portfolioCalculator.getSnapshot(); expect(portfolioSnapshot).toMatchObject({ currentValueInBaseCurrency: new Big('500000'), @@ -169,6 +170,9 @@ describe('PortfolioCalculator', () => { totalInvestmentValueWithCurrencyEffect: 500000 }) ); + + expect(PortfolioSnapshotServiceMock.jobsStore.size).toBe(0); + expect(RedisCacheServiceMock.cache.size).toBe(0); }); }); }); diff --git a/apps/api/src/app/portfolio/portfolio.controller.ts b/apps/api/src/app/portfolio/portfolio.controller.ts index 431a8da20b..a65186100a 100644 --- a/apps/api/src/app/portfolio/portfolio.controller.ts +++ b/apps/api/src/app/portfolio/portfolio.controller.ts @@ -357,7 +357,8 @@ export class PortfolioController { const holding = await this.portfolioService.getHolding({ dataSource, symbol, - userId + userId, + withExcludedActivities: true }); if (!holding) { @@ -631,7 +632,8 @@ export class PortfolioController { const holding = await this.portfolioService.getHolding({ dataSource, symbol, - userId + userId, + withExcludedActivities: true }); if (!holding) { diff --git a/apps/api/src/app/portfolio/portfolio.service.spec.ts b/apps/api/src/app/portfolio/portfolio.service.spec.ts index 227262c400..aed14e090f 100644 --- a/apps/api/src/app/portfolio/portfolio.service.spec.ts +++ b/apps/api/src/app/portfolio/portfolio.service.spec.ts @@ -9,9 +9,14 @@ import { ConfigurationService } from '@ghostfolio/api/services/configuration/con import { DataProviderService } from '@ghostfolio/api/services/data-provider/data-provider.service'; import { ExchangeRateDataService } from '@ghostfolio/api/services/exchange-rate-data/exchange-rate-data.service'; import { SymbolProfileService } from '@ghostfolio/api/services/symbol-profile/symbol-profile.service'; -import { TAG_ID_EMERGENCY_FUND, UNKNOWN_KEY } from '@ghostfolio/common/config'; +import { + TAG_ID_EMERGENCY_FUND, + TAG_ID_EXCLUDE_FROM_ANALYSIS, + UNKNOWN_KEY +} from '@ghostfolio/common/config'; import { parseDate } from '@ghostfolio/common/helper'; import { + Activity, AssetProfileIdentifier, Filter, PortfolioSummary @@ -490,6 +495,145 @@ describe('PortfolioService', () => { }); }); + describe('getHolding', () => { + const dataSource = DataSource.YAHOO; + const symbol = 'AAPL'; + const includedActivity = { + assetProfile: { dataSource, symbol }, + tags: [] + } as Activity; + + beforeEach(() => { + jest.spyOn(userService, 'user').mockResolvedValue({ + id: userDummyData.id, + settings: { settings: { baseCurrency: 'USD' } } + } as unknown as Awaited>); + + jest + .spyOn(symbolProfileService, 'getSymbolProfiles') + .mockResolvedValue([]); + + jest + .spyOn(portfolioCalculatorFactory, 'createCalculator') + .mockReturnValue({ + getSnapshot: jest.fn().mockResolvedValue({ positions: [] }), + getTransactionPoints: jest.fn().mockReturnValue([]) + } as unknown as PortfolioCalculator); + }); + + it('keeps the cached path when the holding has included and excluded activities', async () => { + const excludedActivity = { + ...includedActivity, + tags: [{ id: TAG_ID_EXCLUDE_FROM_ANALYSIS }] + } as Activity; + const getActivities = jest + .spyOn(activitiesService, 'getActivitiesForPortfolioCalculator') + .mockResolvedValueOnce({ activities: [includedActivity], count: 1 }) + .mockResolvedValue({ + activities: [includedActivity, excludedActivity], + count: 2 + }); + + await portfolioService.getHolding({ + dataSource, + symbol, + userId: userDummyData.id, + withExcludedActivities: true + }); + + expect(getActivities).toHaveBeenCalledTimes(1); + expect(getActivities).toHaveBeenCalledWith({ + userCurrency: 'USD', + userId: userDummyData.id + }); + expect(portfolioCalculatorFactory.createCalculator).toHaveBeenCalledWith( + expect.objectContaining({ + activities: [includedActivity], + filters: undefined, + usePortfolioSnapshotCache: true + }) + ); + }); + + it.each([ + { + account: { tags: [{ id: TAG_ID_EXCLUDE_FROM_ANALYSIS }] }, + name: 'account', + tags: [] + }, + { + account: { tags: [] }, + name: 'activity tag', + tags: [{ id: TAG_ID_EXCLUDE_FROM_ANALYSIS }] + } + ])( + 'uses the direct path for a holding excluded by its $name', + async ({ account, tags }) => { + const excludedActivity = { + ...includedActivity, + account, + tags + } as Activity; + + const getActivities = jest + .spyOn(activitiesService, 'getActivitiesForPortfolioCalculator') + .mockResolvedValueOnce({ activities: [], count: 0 }) + .mockResolvedValueOnce({ + activities: [excludedActivity], + count: 1 + }); + + await portfolioService.getHolding({ + dataSource, + symbol, + userId: userDummyData.id, + withExcludedActivities: true + }); + + expect(getActivities).toHaveBeenCalledTimes(2); + expect(getActivities).toHaveBeenLastCalledWith({ + filters: [ + { id: dataSource, type: 'DATA_SOURCE' }, + { id: symbol, type: 'SYMBOL' } + ], + userCurrency: 'USD', + userId: userDummyData.id, + withExcludedAccountsAndActivities: true + }); + expect( + portfolioCalculatorFactory.createCalculator + ).toHaveBeenCalledWith( + expect.objectContaining({ + activities: [excludedActivity], + filters: [ + { id: dataSource, type: 'DATA_SOURCE' }, + { id: symbol, type: 'SYMBOL' } + ], + usePortfolioSnapshotCache: false + }) + ); + } + ); + + it('does not load excluded activities by default', async () => { + const getActivities = jest + .spyOn(activitiesService, 'getActivitiesForPortfolioCalculator') + .mockResolvedValue({ activities: [], count: 0 }); + + const holding = await portfolioService.getHolding({ + dataSource, + symbol, + userId: userDummyData.id + }); + + expect(holding).toBeUndefined(); + expect(getActivities).toHaveBeenCalledTimes(1); + expect( + portfolioCalculatorFactory.createCalculator + ).not.toHaveBeenCalled(); + }); + }); + describe('getSummary', () => { const getSummary = (args: object) => { return ( diff --git a/apps/api/src/app/portfolio/portfolio.service.ts b/apps/api/src/app/portfolio/portfolio.service.ts index 9f81754f40..19c2dd7948 100644 --- a/apps/api/src/app/portfolio/portfolio.service.ts +++ b/apps/api/src/app/portfolio/portfolio.service.ts @@ -888,20 +888,47 @@ export class PortfolioService { public async getHolding({ dataSource, symbol, - userId + userId, + withExcludedActivities = false }: { userId: string; + withExcludedActivities?: boolean; } & AssetProfileIdentifier): Promise { const user = await this.userService.user({ id: userId }); const userCurrency = this.getUserCurrency(user); - const { activities } = + const holdingFilters: Filter[] = [ + { id: dataSource, type: 'DATA_SOURCE' }, + { id: symbol, type: 'SYMBOL' } + ]; + + let { activities } = await this.activitiesService.getActivitiesForPortfolioCalculator({ userCurrency, userId }); - if (activities.length === 0) { + let hasActivitiesOfHolding = activities.some(({ assetProfile }) => { + return ( + assetProfile.dataSource === dataSource && assetProfile.symbol === symbol + ); + }); + + const isExcludedHolding = withExcludedActivities && !hasActivitiesOfHolding; + + if (isExcludedHolding) { + ({ activities } = + await this.activitiesService.getActivitiesForPortfolioCalculator({ + userCurrency, + userId, + filters: holdingFilters, + withExcludedAccountsAndActivities: true + })); + + hasActivitiesOfHolding = activities.length > 0; + } + + if (!hasActivitiesOfHolding) { return undefined; } @@ -927,7 +954,9 @@ export class PortfolioService { activities, userId, calculationType: this.getUserPerformanceCalculationType(user), - currency: userCurrency + currency: userCurrency, + filters: isExcludedHolding ? holdingFilters : undefined, + usePortfolioSnapshotCache: !isExcludedHolding }); const transactionPoints = portfolioCalculator.getTransactionPoints(); @@ -2033,12 +2062,7 @@ export class PortfolioService { const nonExcludedActivities: Activity[] = []; for (const activity of activities) { - if ( - (activity.account && isAccountExcluded(activity.account)) || - activity.tags?.some(({ id }) => { - return id === TAG_ID_EXCLUDE_FROM_ANALYSIS; - }) - ) { + if (this.isExcludedFromAnalysis(activity)) { excludedActivities.push(activity); } else { nonExcludedActivities.push(activity); @@ -2418,4 +2442,13 @@ export class PortfolioService { return { accounts, platforms }; } + + private isExcludedFromAnalysis(activity: Activity) { + return ( + isAccountExcluded(activity.account) || + activity.tags?.some(({ id }) => { + return id === TAG_ID_EXCLUDE_FROM_ANALYSIS; + }) === true + ); + } } diff --git a/libs/ui/src/lib/activities-table/activities-table.component.ts b/libs/ui/src/lib/activities-table/activities-table.component.ts index acf17c933a..4646606577 100644 --- a/libs/ui/src/lib/activities-table/activities-table.component.ts +++ b/libs/ui/src/lib/activities-table/activities-table.component.ts @@ -1,13 +1,6 @@ -import { - DEFAULT_PAGE_SIZE, - TAG_ID_EXCLUDE_FROM_ANALYSIS -} from '@ghostfolio/common/config'; +import { DEFAULT_PAGE_SIZE } from '@ghostfolio/common/config'; import { ConfirmationDialogType } from '@ghostfolio/common/enums'; -import { - getLocale, - isAccountExcluded, - isDraftActivity -} from '@ghostfolio/common/helper'; +import { getLocale, isDraftActivity } from '@ghostfolio/common/helper'; import { Activity, AssetProfileIdentifier @@ -286,7 +279,6 @@ export class GfActivitiesTableComponent implements AfterViewInit, OnInit { public canClickActivity(activity: Activity) { return ( this.hasPermissionToOpenDetails && - this.isExcludedFromAnalysis(activity) === false && isDraftActivity(activity) === false && ['BUY', 'DIVIDEND', 'SELL'].includes(activity.type) ); @@ -306,15 +298,6 @@ export class GfActivitiesTableComponent implements AfterViewInit, OnInit { ); } - public isExcludedFromAnalysis(activity: Activity) { - return ( - isAccountExcluded(activity.account) || - activity.tags?.some(({ id }) => { - return id === TAG_ID_EXCLUDE_FROM_ANALYSIS; - }) === true - ); - } - public onChangePage(page: PageEvent) { this.pageChanged.emit(page); } From 7a6f54ab3b2d1a32d3676c0e391a21bb4b795d0f Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Sun, 6 Sep 2026 10:22:54 +0200 Subject: [PATCH 25/50] Feature/simplified mode in holdings table component (#7830) * Add simplified mode to holdings table component * Update changelog --- CHANGELOG.md | 4 ++++ .../holdings-table.component.html | 18 ++++++++++------ .../holdings-table.component.stories.ts | 15 +++++++++++++ .../holdings-table.component.ts | 21 +++++++++++++++++-- 4 files changed, 50 insertions(+), 8 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 992af40479..19baa4cc3b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## Unreleased +### Added + +- Added a simplified mode to the holdings table component + ### Changed - Made the details of holdings excluded from analysis accessible via the activities table diff --git a/libs/ui/src/lib/holdings-table/holdings-table.component.html b/libs/ui/src/lib/holdings-table/holdings-table.component.html index e66dac725a..2ed9484780 100644 --- a/libs/ui/src/lib/holdings-table/holdings-table.component.html +++ b/libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -3,9 +3,9 @@ class="gf-table w-100" mat-table matSort - matSortActive="allocationInPercentage" - matSortDirection="desc" [dataSource]="dataSource" + [matSortActive]="sortActive()" + [matSortDirection]="sortDirection()" > @@ -34,9 +34,11 @@ ({{ element.assetProfile.assetSubClassLabel }}) }
-
- {{ element.assetProfile.symbol }} -
+ @if (mode() === 'default') { +
+ {{ element.assetProfile.symbol }} +
+ }
@@ -181,7 +183,11 @@ - + (); public readonly locale = input(getLocale()); + public readonly mode = input<'default' | 'simple'>('default'); public readonly pageSize = model(Number.MAX_SAFE_INTEGER); public readonly holdingClicked = output(); @@ -62,6 +63,10 @@ export class GfHoldingsTableComponent { protected readonly dataSource = new MatTableDataSource([]); protected readonly displayedColumns = computed(() => { + if (this.mode() === 'simple') { + return ['icon', 'nameWithSymbol', 'performanceInPercentage']; + } + const columns = ['icon', 'nameWithSymbol', 'dateOfFirstActivity']; if (this.hasPermissionToShowQuantities()) { @@ -82,7 +87,19 @@ export class GfHoldingsTableComponent { return columns; }); - protected readonly isLoading = computed(() => !this.holdings()); + protected readonly isLoading = computed(() => { + return !this.holdings(); + }); + + protected readonly sortActive = computed(() => { + return this.mode() === 'default' + ? 'allocationInPercentage' + : 'assetProfile.name'; + }); + + protected readonly sortDirection = computed(() => { + return this.mode() === 'default' ? 'desc' : 'asc'; + }); public constructor() { this.dataSource.sortingDataAccessor = getLowercase; From 9a568d93e12a18e1154d4cfc7300d1c8e0af242b Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Sun, 6 Sep 2026 10:23:15 +0200 Subject: [PATCH 26/50] Task/migrate market data management to dedicated routes (#7823) * Migrate market data management to dedicated routes * Update changelog --- CHANGELOG.md | 1 + .../admin-market-data.component.ts | 141 +----------- .../admin-market-data/admin-market-data.html | 21 +- .../admin-market-data.service.ts | 10 + .../asset-profile-dialog-host.component.ts | 217 ++++++++++++++++++ .../types/asset-profile-dialog-mode.type.ts | 1 + .../holding-detail-dialog.component.ts | 5 +- .../holding-detail-dialog.html | 12 +- .../src/app/pages/admin/admin-page.routes.ts | 25 +- libs/common/src/lib/routes/routes.ts | 14 ++ .../assistant-list-item.component.ts | 11 +- 11 files changed, 307 insertions(+), 151 deletions(-) create mode 100644 apps/client/src/app/components/admin-market-data/asset-profile-dialog-host/asset-profile-dialog-host.component.ts create mode 100644 apps/client/src/app/components/admin-market-data/asset-profile-dialog-host/types/asset-profile-dialog-mode.type.ts diff --git a/CHANGELOG.md b/CHANGELOG.md index 19baa4cc3b..cf6458139c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed - Made the details of holdings excluded from analysis accessible via the activities table +- Migrated the asset profile dialogs of the market data management in the admin control panel to dedicated routes ## 3.67.1 - 2026-09-05 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 87389f957d..c01932b603 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 @@ -1,9 +1,5 @@ import { UserService } from '@ghostfolio/client/services/user/user.service'; -import { - DEFAULT_COLOR_SCHEME, - DEFAULT_LOCALE, - DEFAULT_PAGE_SIZE -} from '@ghostfolio/common/config'; +import { DEFAULT_PAGE_SIZE } from '@ghostfolio/common/config'; import { canDeleteAssetProfile } from '@ghostfolio/common/helper'; import { AssetProfileIdentifier, @@ -13,6 +9,7 @@ import { User } from '@ghostfolio/common/interfaces'; import { hasPermission, permissions } from '@ghostfolio/common/permissions'; +import { internalRoutes } from '@ghostfolio/common/routes/routes'; import { GfActivitiesFilterComponent } from '@ghostfolio/ui/activities-filter'; import { GfFabComponent } from '@ghostfolio/ui/fab'; import { translate } from '@ghostfolio/ui/i18n'; @@ -27,7 +24,6 @@ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, - computed, DestroyRef, inject, OnInit, @@ -36,7 +32,6 @@ import { import { takeUntilDestroyed } from '@angular/core/rxjs-interop'; import { MatButtonModule } from '@angular/material/button'; import { MatCheckboxModule } from '@angular/material/checkbox'; -import { MatDialog } from '@angular/material/dialog'; import { MatMenuModule } from '@angular/material/menu'; import { MatPaginator, @@ -51,7 +46,7 @@ import { SortDirection } from '@angular/material/sort'; import { MatTableDataSource, MatTableModule } from '@angular/material/table'; -import { ActivatedRoute, Router, RouterModule } from '@angular/router'; +import { Router, RouterModule } from '@angular/router'; import { IonIcon } from '@ionic/angular/standalone'; import { AssetSubClass, DataSource, SymbolProfile } from '@prisma/client'; import { isUUID } from 'class-validator'; @@ -66,16 +61,11 @@ import { trashOutline } from 'ionicons/icons'; import ms from 'ms'; -import { DeviceDetectorService } from 'ngx-device-detector'; import { NgxSkeletonLoaderModule } from 'ngx-skeleton-loader'; import { Subject } from 'rxjs'; import { distinctUntilChanged } from 'rxjs/operators'; import { AdminMarketDataService } from './admin-market-data.service'; -import { GfAssetProfileDialogComponent } from './asset-profile-dialog/asset-profile-dialog.component'; -import { AssetProfileDialogParams } from './asset-profile-dialog/interfaces/interfaces'; -import { GfCreateAssetProfileDialogComponent } from './create-asset-profile-dialog/create-asset-profile-dialog.component'; -import { CreateAssetProfileDialogParams } from './create-asset-profile-dialog/interfaces/interfaces'; @Component({ changeDetection: ChangeDetectionStrategy.OnPush, @@ -154,6 +144,7 @@ export class GfAdminMarketDataComponent implements AfterViewInit, OnInit { protected readonly displayedColumns: string[] = []; protected readonly filters$ = new Subject(); protected isLoading = true; + protected readonly internalRoutes = internalRoutes; protected readonly isUUID = isUUID; protected pageSize = DEFAULT_PAGE_SIZE; protected placeholder = ''; @@ -164,9 +155,6 @@ export class GfAdminMarketDataComponent implements AfterViewInit, OnInit { private activeFilters: Filter[] = []; private benchmarks: Partial[]; - private readonly deviceType = computed( - () => this.deviceDetectorService.deviceInfo().deviceType - ); private readonly hasPermissionForSubscription: boolean; private readonly info: InfoItem; private readonly paginator = viewChild.required(MatPaginator); @@ -176,9 +164,6 @@ export class GfAdminMarketDataComponent implements AfterViewInit, OnInit { private readonly changeDetectorRef = inject(ChangeDetectorRef); private readonly dataService = inject(DataService); private readonly destroyRef = inject(DestroyRef); - private readonly deviceDetectorService = inject(DeviceDetectorService); - private readonly dialog = inject(MatDialog); - private readonly route = inject(ActivatedRoute); private readonly router = inject(Router); private readonly snackBar = inject(MatSnackBar); private readonly userService = inject(UserService); @@ -213,21 +198,10 @@ export class GfAdminMarketDataComponent implements AfterViewInit, OnInit { this.displayedColumns.push('comment'); this.displayedColumns.push('actions'); - this.route.queryParams + this.adminMarketDataService.refresh$ .pipe(takeUntilDestroyed(this.destroyRef)) - .subscribe((params) => { - if ( - params['assetProfileDialog'] && - params['dataSource'] && - params['symbol'] - ) { - this.openAssetProfileDialog({ - dataSource: params['dataSource'], - symbol: params['symbol'] - }); - } else if (params['createAssetProfileDialog']) { - this.openCreateAssetProfileDialog(); - } + .subscribe(() => { + this.reloadData(); }); this.userService.stateChanged @@ -341,13 +315,12 @@ export class GfAdminMarketDataComponent implements AfterViewInit, OnInit { dataSource, symbol }: AssetProfileIdentifier) { - this.router.navigate([], { - queryParams: { + void this.router.navigate( + internalRoutes.adminControl.subRoutes.marketData.subRoutes.update.routerLink( dataSource, - symbol, - assetProfileDialog: true - } - }); + symbol + ) + ); } private loadData( @@ -418,96 +391,6 @@ export class GfAdminMarketDataComponent implements AfterViewInit, OnInit { ); } - private openAssetProfileDialog({ - dataSource, - symbol - }: AssetProfileIdentifier) { - this.userService - .get() - .pipe(takeUntilDestroyed(this.destroyRef)) - .subscribe((user) => { - this.user = user; - - const dialogRef = this.dialog.open< - GfAssetProfileDialogComponent, - AssetProfileDialogParams, - AssetProfileIdentifier - >(GfAssetProfileDialogComponent, { - autoFocus: false, - data: { - dataSource, - symbol, - colorScheme: - this.user?.settings.colorScheme ?? DEFAULT_COLOR_SCHEME, - deviceType: this.deviceType(), - locale: this.user?.settings?.locale ?? DEFAULT_LOCALE - } satisfies AssetProfileDialogParams, - height: this.deviceType() === 'mobile' ? '98vh' : '80vh', - width: this.deviceType() === 'mobile' ? '100vw' : '50rem' - }); - - dialogRef - .afterClosed() - .pipe(takeUntilDestroyed(this.destroyRef)) - .subscribe((newAssetProfileIdentifier) => { - this.reloadData(); - - if (newAssetProfileIdentifier) { - this.onOpenAssetProfileDialog(newAssetProfileIdentifier); - } else { - this.router.navigate(['.'], { relativeTo: this.route }); - } - }); - }); - } - - private openCreateAssetProfileDialog() { - this.userService - .get() - .pipe(takeUntilDestroyed(this.destroyRef)) - .subscribe((user) => { - this.user = user; - - const dialogRef = this.dialog.open< - GfCreateAssetProfileDialogComponent, - CreateAssetProfileDialogParams - >(GfCreateAssetProfileDialogComponent, { - autoFocus: false, - data: { - deviceType: this.deviceType(), - locale: this.user?.settings?.locale ?? DEFAULT_LOCALE - } satisfies CreateAssetProfileDialogParams, - width: this.deviceType() === 'mobile' ? '100vw' : '50rem' - }); - - dialogRef - .afterClosed() - .pipe(takeUntilDestroyed(this.destroyRef)) - .subscribe((result) => { - if (!result) { - this.router.navigate(['.'], { relativeTo: this.route }); - - return; - } - - const { addAssetProfile, dataSource, symbol } = result; - - if (addAssetProfile && dataSource && symbol) { - this.adminService - .addAssetProfile({ dataSource, symbol }) - .pipe(takeUntilDestroyed(this.destroyRef)) - .subscribe(() => { - this.loadData(); - }); - } else { - this.loadData(); - } - - this.onOpenAssetProfileDialog({ dataSource, symbol }); - }); - }); - } - private reloadData({ pageIndex = this.paginator().pageIndex }: { pageIndex?: number } = {}) { diff --git a/apps/client/src/app/components/admin-market-data/admin-market-data.html b/apps/client/src/app/components/admin-market-data/admin-market-data.html index 729ffede3f..9a0cacb5e9 100644 --- a/apps/client/src/app/components/admin-market-data/admin-market-data.html +++ b/apps/client/src/app/components/admin-market-data/admin-market-data.html @@ -303,12 +303,12 @@ @@ -381,5 +381,12 @@ - + + + diff --git a/apps/client/src/app/components/admin-market-data/admin-market-data.service.ts b/apps/client/src/app/components/admin-market-data/admin-market-data.service.ts index 73ea1e86fd..f86ba08a71 100644 --- a/apps/client/src/app/components/admin-market-data/admin-market-data.service.ts +++ b/apps/client/src/app/components/admin-market-data/admin-market-data.service.ts @@ -8,9 +8,15 @@ import { EMPTY, Subject, catchError, finalize, forkJoin } from 'rxjs'; @Service({ autoProvided: false }) export class AdminMarketDataService { + private readonly refreshSubject = new Subject(); + private readonly adminService = inject(AdminService); private readonly notificationService = inject(NotificationService); + public get refresh$() { + return this.refreshSubject.asObservable(); + } + public deleteAssetProfile({ dataSource, symbol }: AssetProfileIdentifier) { const assetProfileDeleted = new Subject(); @@ -72,4 +78,8 @@ export class AdminMarketDataService { return assetProfilesDeleted.asObservable(); } + + public triggerRefresh() { + this.refreshSubject.next(); + } } 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 new file mode 100644 index 0000000000..7b03762ff9 --- /dev/null +++ b/apps/client/src/app/components/admin-market-data/asset-profile-dialog-host/asset-profile-dialog-host.component.ts @@ -0,0 +1,217 @@ +import { UserService } from '@ghostfolio/client/services/user/user.service'; +import { + DEFAULT_COLOR_SCHEME, + DEFAULT_LOCALE +} from '@ghostfolio/common/config'; +import { AssetProfileIdentifier, User } from '@ghostfolio/common/interfaces'; +import { internalRoutes } from '@ghostfolio/common/routes/routes'; +import { AdminService } from '@ghostfolio/ui/services'; + +import { + ChangeDetectionStrategy, + Component, + computed, + DestroyRef, + inject, + OnDestroy, + OnInit +} from '@angular/core'; +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'; + +import { AdminMarketDataService } from '../admin-market-data.service'; +import { GfAssetProfileDialogComponent } from '../asset-profile-dialog/asset-profile-dialog.component'; +import { AssetProfileDialogParams } from '../asset-profile-dialog/interfaces/interfaces'; +import { GfCreateAssetProfileDialogComponent } from '../create-asset-profile-dialog/create-asset-profile-dialog.component'; +import { CreateAssetProfileDialogParams } from '../create-asset-profile-dialog/interfaces/interfaces'; +import { AssetProfileDialogMode } from './types/asset-profile-dialog-mode.type'; + +@Component({ + changeDetection: ChangeDetectionStrategy.OnPush, + selector: 'gf-asset-profile-dialog-host', + template: '' +}) +export class GfAssetProfileDialogHostComponent implements OnDestroy, OnInit { + private dialogRef: MatDialogRef< + GfAssetProfileDialogComponent | GfCreateAssetProfileDialogComponent + >; + + private readonly deviceType = computed(() => { + return this.deviceDetectorService.deviceInfo().deviceType; + }); + + private readonly dialogClosed = new Subject(); + + private readonly adminMarketDataService = inject(AdminMarketDataService); + private readonly adminService = inject(AdminService); + private readonly destroyRef = inject(DestroyRef); + private readonly deviceDetectorService = inject(DeviceDetectorService); + private readonly dialog = inject(MatDialog); + private readonly route = inject(ActivatedRoute); + private readonly router = inject(Router); + private readonly userService = inject(UserService); + + public ngOnInit() { + const mode = this.route.snapshot.data.mode as AssetProfileDialogMode; + + // The router reuses this component when only the asset profile identifier + // changes, so the parameters are observed instead of read from the + // snapshot once + this.route.paramMap + .pipe( + map((paramMap) => { + return { + dataSource: paramMap.get('dataSource'), + symbol: paramMap.get('symbol') + }; + }), + distinctUntilChanged((previous, current) => { + return ( + previous.dataSource === current.dataSource && + previous.symbol === current.symbol + ); + }), + tap(() => { + this.closeDialog(); + }), + takeUntilDestroyed(this.destroyRef) + ) + .subscribe(({ dataSource, symbol }) => { + this.userService + .get() + .pipe(takeUntilDestroyed(this.destroyRef)) + .subscribe((user) => { + if (mode === 'create') { + this.openCreateAssetProfileDialog({ user }); + } else if (dataSource && symbol) { + this.openAssetProfileDialog({ + symbol, + user, + dataSource: dataSource as DataSource + }); + } else { + this.navigateBack(); + } + }); + }); + } + + public ngOnDestroy() { + // The dialog lives in an overlay outside of this component, so it needs to + // be closed explicitly when leaving the route (for example via the browser + // navigation) + this.dialogRef?.close(); + + this.dialogClosed.complete(); + } + + private closeDialog() { + // Tear down the subscription of the dialog which is about to be replaced, + // so that its result is not mistaken for the user closing it + this.dialogClosed.next(); + + this.dialogRef?.close(); + } + + private navigateBack() { + void this.router.navigate( + internalRoutes.adminControl.subRoutes.marketData.routerLink + ); + } + + private navigateToAssetProfileDialog({ + dataSource, + symbol + }: AssetProfileIdentifier) { + void this.router.navigate( + internalRoutes.adminControl.subRoutes.marketData.subRoutes.update.routerLink( + dataSource, + symbol + ) + ); + } + + private openAssetProfileDialog({ + dataSource, + symbol, + user + }: AssetProfileIdentifier & { user: User }) { + const dialogRef = this.dialog.open< + GfAssetProfileDialogComponent, + AssetProfileDialogParams, + AssetProfileIdentifier + >(GfAssetProfileDialogComponent, { + autoFocus: false, + data: { + dataSource, + symbol, + colorScheme: user?.settings.colorScheme ?? DEFAULT_COLOR_SCHEME, + deviceType: this.deviceType(), + locale: user?.settings?.locale ?? DEFAULT_LOCALE + } satisfies AssetProfileDialogParams, + height: this.deviceType() === 'mobile' ? '98vh' : '80vh', + width: this.deviceType() === 'mobile' ? '100vw' : '50rem' + }); + + this.dialogRef = dialogRef; + + dialogRef + .afterClosed() + .pipe(takeUntil(this.dialogClosed), takeUntilDestroyed(this.destroyRef)) + .subscribe((newAssetProfileIdentifier) => { + this.adminMarketDataService.triggerRefresh(); + + if (newAssetProfileIdentifier) { + this.navigateToAssetProfileDialog(newAssetProfileIdentifier); + } else { + this.navigateBack(); + } + }); + } + + private openCreateAssetProfileDialog({ user }: { user: User }) { + const dialogRef = this.dialog.open< + GfCreateAssetProfileDialogComponent, + CreateAssetProfileDialogParams, + AssetProfileIdentifier & { addAssetProfile: boolean } + >(GfCreateAssetProfileDialogComponent, { + autoFocus: false, + data: { + deviceType: this.deviceType(), + locale: user?.settings?.locale ?? DEFAULT_LOCALE + } satisfies CreateAssetProfileDialogParams, + width: this.deviceType() === 'mobile' ? '100vw' : '50rem' + }); + + this.dialogRef = dialogRef; + + dialogRef + .afterClosed() + .pipe(takeUntil(this.dialogClosed), takeUntilDestroyed(this.destroyRef)) + .subscribe((result) => { + if (!result) { + this.navigateBack(); + + return; + } + + const { addAssetProfile, dataSource, symbol } = result; + + if (addAssetProfile && dataSource && symbol) { + this.adminService + .addAssetProfile({ dataSource, symbol }) + .pipe(takeUntilDestroyed(this.destroyRef)) + .subscribe(() => { + this.navigateToAssetProfileDialog({ dataSource, symbol }); + }); + } else { + this.navigateToAssetProfileDialog({ dataSource, symbol }); + } + }); + } +} diff --git a/apps/client/src/app/components/admin-market-data/asset-profile-dialog-host/types/asset-profile-dialog-mode.type.ts b/apps/client/src/app/components/admin-market-data/asset-profile-dialog-host/types/asset-profile-dialog-mode.type.ts new file mode 100644 index 0000000000..13460a9aef --- /dev/null +++ b/apps/client/src/app/components/admin-market-data/asset-profile-dialog-host/types/asset-profile-dialog-mode.type.ts @@ -0,0 +1 @@ +export type AssetProfileDialogMode = 'create' | 'update'; 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 b8f5ac5697..d8385d70e2 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 @@ -182,8 +182,9 @@ export class GfHoldingDetailDialogComponent implements OnInit { protected quantityPrecision = 2; protected reportDataGlitchMailHref: string; protected readonly round = round; - protected readonly routerLinkAdminControlMarketData = - internalRoutes.adminControl.subRoutes.marketData.routerLink; + protected readonly routerLinkAdminControlMarketDataUpdate = + internalRoutes.adminControl.subRoutes.marketData.subRoutes.update + .routerLink; protected sectors: { [name: string]: { name: string; value: number }; }; diff --git a/apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html b/apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html index dff4c2a1d9..2b378a4d60 100644 --- a/apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html +++ b/apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -484,12 +484,12 @@ @if (data.hasPermissionToAccessAdminControl) { Manage Asset Profile { + return ['/admin', 'market-data', aDataSource, aSymbol, 'update']; + }, + title: $localize`Asset Profile` + } + }, title: $localize`Market Data` }, settings: { diff --git a/libs/ui/src/lib/assistant/assistant-list-item/assistant-list-item.component.ts b/libs/ui/src/lib/assistant/assistant-list-item/assistant-list-item.component.ts index a45e6224c5..aabda169f9 100644 --- a/libs/ui/src/lib/assistant/assistant-list-item/assistant-list-item.component.ts +++ b/libs/ui/src/lib/assistant/assistant-list-item/assistant-list-item.component.ts @@ -55,14 +55,13 @@ export class GfAssistantListItemComponent this.queryParams = {}; this.routerLink = this.item.routerLink; } else if (this.item?.mode === SearchMode.ASSET_PROFILE) { - this.queryParams = { - assetProfileDialog: true, - dataSource: this.item.dataSource, - symbol: this.item.symbol - }; + this.queryParams = {}; this.routerLink = - internalRoutes.adminControl.subRoutes.marketData.routerLink ?? []; + internalRoutes.adminControl.subRoutes.marketData.subRoutes.update.routerLink( + this.item.dataSource, + this.item.symbol + ); } else if (this.item?.mode === SearchMode.HOLDING) { this.queryParams = { dataSource: this.item.dataSource, From b2ad0b9dd9b1e59ec8aabdb8144723a4b4df6fef Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Sun, 6 Sep 2026 19:49:56 +0200 Subject: [PATCH 27/50] Release 3.68.0 (#7836) --- 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 cf6458139c..ed9b8f191f 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.68.0 - 2026-09-06 ### Added diff --git a/package-lock.json b/package-lock.json index 2b7b58fd87..fdcd354776 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "ghostfolio", - "version": "3.67.1", + "version": "3.68.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "ghostfolio", - "version": "3.67.1", + "version": "3.68.0", "hasInstallScript": true, "license": "AGPL-3.0", "dependencies": { diff --git a/package.json b/package.json index 9ee6a75be6..3b786d13fb 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ghostfolio", - "version": "3.67.1", + "version": "3.68.0", "homepage": "https://ghostfol.io", "license": "AGPL-3.0", "repository": "https://github.com/ghostfolio/ghostfolio", From 85831dca8453a8f639b947994cc01f5cbd14c6c3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Szymon=20=C5=81=C4=85giewka?= Date: Mon, 7 Sep 2026 11:13:21 +0200 Subject: [PATCH 28/50] Task/upgrade zod to version 4.5.4 (#7774) * Update zod to version 4.5.4 * Update changelog --- CHANGELOG.md | 6 ++++++ .../src/app/endpoints/mcp/mcp.controller.ts | 1 + package-lock.json | 18 ++++++++++++++---- package.json | 2 +- 4 files changed, 22 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ed9b8f191f..c4275e2d61 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,12 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## Unreleased + +### Changed + +- Upgraded `zod` from version `4.4.3` to `4.5.4` + ## 3.68.0 - 2026-09-06 ### Added diff --git a/apps/api/src/app/endpoints/mcp/mcp.controller.ts b/apps/api/src/app/endpoints/mcp/mcp.controller.ts index 150347a9bf..6b838c108d 100644 --- a/apps/api/src/app/endpoints/mcp/mcp.controller.ts +++ b/apps/api/src/app/endpoints/mcp/mcp.controller.ts @@ -10,6 +10,7 @@ import { UseFilters } from '@nestjs/common'; import { Payload } from '@nestjs/microservices'; import { McpController, Tool } from '@rekog/mcp-nest'; import { z } from 'zod'; +import 'zod/compile'; import { GET_ACCOUNTS_PARAMETERS, diff --git a/package-lock.json b/package-lock.json index fdcd354776..563f7d4e2d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -105,7 +105,7 @@ "undici": "8.10.0", "uuid": "14.0.2", "yahoo-finance2": "4.0.2", - "zod": "4.4.3", + "zod": "4.5.4", "zone.js": "0.16.2" }, "devDependencies": { @@ -3378,6 +3378,16 @@ "node": ">=22.13.0" } }, + "node_modules/@angular/cli/node_modules/zod": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/zod/-/zod-4.4.3.tgz", + "integrity": "sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, "node_modules/@angular/common": { "version": "22.1.2", "resolved": "https://registry.npmjs.org/@angular/common/-/common-22.1.2.tgz", @@ -37225,9 +37235,9 @@ } }, "node_modules/zod": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/zod/-/zod-4.4.3.tgz", - "integrity": "sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ==", + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/zod/-/zod-4.5.4.tgz", + "integrity": "sha512-sC95tT5iHHH9gtpj6A81kh+NEaRAUFN+qlUPDUbRfOMvNf5QCBqsb3WgvnpVtK5Y+4UfA6KqufotuTvMGiTlsA==", "license": "MIT", "funding": { "url": "https://github.com/sponsors/colinhacks" diff --git a/package.json b/package.json index 3b786d13fb..1ddbf7ea64 100644 --- a/package.json +++ b/package.json @@ -149,7 +149,7 @@ "undici": "8.10.0", "uuid": "14.0.2", "yahoo-finance2": "4.0.2", - "zod": "4.4.3", + "zod": "4.5.4", "zone.js": "0.16.2" }, "devDependencies": { From f5b7e5f81aefde4af3a588a8196f91678f28462c Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Mon, 7 Sep 2026 19:52:16 +0200 Subject: [PATCH 29/50] Task/update OSS Friends (#7840) Remove OpenBB --- apps/client/src/assets/oss-friends.json | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/apps/client/src/assets/oss-friends.json b/apps/client/src/assets/oss-friends.json index da409ca2f9..2a49af6ffd 100644 --- a/apps/client/src/assets/oss-friends.json +++ b/apps/client/src/assets/oss-friends.json @@ -1,5 +1,5 @@ { - "createdAt": "2026-05-26T00:00:00.000Z", + "createdAt": "2026-09-07T00:00:00.000Z", "data": [ { "name": "Activepieces", @@ -76,11 +76,6 @@ "description": "Onyx is the open-source AI chat connected to your docs, apps, and people.", "href": "https://onyx.app" }, - { - "name": "OpenBB", - "description": "Democratizing investment research through an open source financial ecosystem. The OpenBB Terminal allows everyone to perform investment research, from everywhere.", - "href": "https://openbb.co" - }, { "name": "OpenStatus", "description": "Open-source monitoring platform with beautiful status pages", From 3e94e7f07a4befb443b03515f09fc154241804ac Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Mon, 7 Sep 2026 20:23:31 +0200 Subject: [PATCH 30/50] Task/improve loading state of activity count in portfolio summary component (#7841) * Improve loading state * Update changelog --- CHANGELOG.md | 1 + .../portfolio-summary.component.html | 59 +++++++++++-------- .../portfolio-summary.component.ts | 11 +++- 3 files changed, 47 insertions(+), 24 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c4275e2d61..46214cfba6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed +- Improved the loading state of the activity count in the portfolio summary - Upgraded `zod` from version `4.4.3` to `4.5.4` ## 3.68.0 - 2026-09-06 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 674fb76eb1..ea408c17d8 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 @@ -9,25 +9,33 @@ /> -
-
- {{ summary?.activityCount }} - {summary?.activityCount, plural, - =1 {activity} - other {activities} - } - - - + @if (isLoading) { +
+
+ +
-
+ } @else { +
+
+ {{ summary?.activityCount }} + {summary?.activityCount, plural, + =1 {activity} + other {activities} + } + + + +
+
+ }

@@ -127,11 +135,16 @@
Net Performance - (ROAI) + @if ( + user?.settings?.performanceCalculationType === + PerformanceCalculationType.ROAI + ) { + (ROAI) + }
Date: Mon, 7 Sep 2026 20:43:49 +0200 Subject: [PATCH 31/50] Task/include closed holdings by default in holdings endpoint (#7843) * Return active and closed holdings in holdings endpoint * Update changelog --- CHANGELOG.md | 1 + .../app/portfolio/portfolio.service.spec.ts | 136 +++++++++++++++++- .../src/app/portfolio/portfolio.service.ts | 37 +++-- .../account-detail-dialog.component.ts | 8 +- .../home-holdings/home-holdings.component.ts | 4 +- ...reate-or-update-access-dialog.component.ts | 4 +- ...ate-or-update-activity-dialog.component.ts | 4 +- .../import-activities-dialog.component.ts | 4 + .../analysis/analysis-page.component.ts | 5 +- .../src/lib/assistant/assistant.component.ts | 4 +- 10 files changed, 180 insertions(+), 27 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 46214cfba6..dd97e5e31c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed - Improved the loading state of the activity count in the portfolio summary +- Changed the holdings endpoint to return active and closed holdings by default and reuse a single snapshot for both types - Upgraded `zod` from version `4.4.3` to `4.5.4` ## 3.68.0 - 2026-09-06 diff --git a/apps/api/src/app/portfolio/portfolio.service.spec.ts b/apps/api/src/app/portfolio/portfolio.service.spec.ts index aed14e090f..0882ff7e64 100644 --- a/apps/api/src/app/portfolio/portfolio.service.spec.ts +++ b/apps/api/src/app/portfolio/portfolio.service.spec.ts @@ -355,8 +355,13 @@ describe('PortfolioService', () => { describe('getDetails', () => { const setUpCashOnlyPortfolio = ({ baseCurrency = 'CHF', - emergencyFund - }: { baseCurrency?: string; emergencyFund?: number } = {}) => { + emergencyFund, + quantity = 2000 + }: { + baseCurrency?: string; + emergencyFund?: number; + quantity?: number; + } = {}) => { const cashAccount: AccountWithBalance = { balance: 2000, comment: null, @@ -421,7 +426,7 @@ describe('PortfolioService', () => { netPerformancePercentage: new Big(0), netPerformancePercentageWithCurrencyEffectMap: {}, netPerformanceWithCurrencyEffectMap: {}, - quantity: new Big(2000), + quantity: new Big(quantity), symbol: 'USD', tags: [], timeWeightedInvestment: new Big(0), @@ -493,6 +498,131 @@ describe('PortfolioService', () => { expect(holdings[0].assetProfile.symbol).toBe('USD'); expect(holdings[0].valueInBaseCurrency).toBe(1000); }); + + it('should include closed holdings when all holdings are requested', async () => { + setUpCashOnlyPortfolio({ quantity: 0 }); + + const { holdings } = await portfolioService.getDetails({ + filters: [], + includeAllHoldings: true, + userId: userDummyData.id + }); + + expect(holdings).toHaveLength(1); + expect(holdings[0].quantity).toBe(0); + }); + + it.each([ + { holdingType: 'ACTIVE', quantity: 2000 }, + { holdingType: 'CLOSED', quantity: 0 } + ])( + 'should return $holdingType holdings when the holding type is specified', + async ({ holdingType, quantity }) => { + setUpCashOnlyPortfolio({ quantity }); + + const { holdings } = await portfolioService.getDetails({ + filters: [{ id: holdingType, type: 'HOLDING_TYPE' }], + userId: userDummyData.id + }); + + expect(holdings).toHaveLength(1); + expect(holdings[0].quantity).toBe(quantity); + } + ); + + it('should remove the holding type only from the snapshot filters', async () => { + setUpCashOnlyPortfolio({ quantity: 0 }); + + await portfolioService.getDetails({ + filters: [ + { id: AssetClass.EQUITY, type: 'ASSET_CLASS' }, + { id: 'CLOSED', type: 'HOLDING_TYPE' } + ], + userId: userDummyData.id + }); + + expect(portfolioCalculatorFactory.createCalculator).toHaveBeenCalledWith( + expect.objectContaining({ + filters: [{ id: AssetClass.EQUITY, type: 'ASSET_CLASS' }] + }) + ); + expect( + activitiesService.getActivitiesForPortfolioCalculator + ).toHaveBeenCalledWith({ + filters: [{ id: AssetClass.EQUITY, type: 'ASSET_CLASS' }], + userCurrency: 'CHF', + userId: userDummyData.id + }); + }); + }); + + describe('getHoldings', () => { + const activeHolding = { + assetProfile: { + isin: 'US0378331005', + name: 'Apple', + symbol: 'AAPL' + }, + quantity: 1 + }; + + const closedHolding = { + assetProfile: { + isin: 'US5949181045', + name: 'Microsoft', + symbol: 'MSFT' + }, + quantity: 0 + }; + + beforeEach(() => { + jest.spyOn(portfolioService, 'getDetails').mockResolvedValue({ + holdings: [activeHolding, closedHolding] + } as unknown as Awaited>); + }); + + it('should request all holdings when the holding type is not specified', async () => { + const holdings = await portfolioService.getHoldings({ + dateRange: 'max', + userId: userDummyData.id + }); + + expect(holdings).toEqual([activeHolding, closedHolding]); + expect(portfolioService.getDetails).toHaveBeenCalledWith({ + dateRange: 'max', + filters: undefined, + includeAllHoldings: true, + userId: userDummyData.id + }); + }); + + it('should find a closed holding when the holding type is not specified', async () => { + const holdings = await portfolioService.getHoldings({ + dateRange: 'max', + filters: [{ id: 'Microsoft', type: 'SEARCH_QUERY' }], + userId: userDummyData.id + }); + + expect(holdings).toEqual([closedHolding]); + }); + + it.each(['ACTIVE', 'CLOSED'])( + 'should not request all holdings when the holding type is %s', + async (holdingType) => { + await portfolioService.getHoldings({ + dateRange: 'max', + filters: [{ id: holdingType, type: 'HOLDING_TYPE' }], + userId: userDummyData.id + }); + + expect(portfolioService.getDetails).toHaveBeenCalledWith({ + dateRange: 'max', + filters: [{ id: holdingType, type: 'HOLDING_TYPE' }], + includeAllHoldings: false, + userId: userDummyData.id + }); + } + ); }); describe('getHolding', () => { diff --git a/apps/api/src/app/portfolio/portfolio.service.ts b/apps/api/src/app/portfolio/portfolio.service.ts index 19c2dd7948..60dab50329 100644 --- a/apps/api/src/app/portfolio/portfolio.service.ts +++ b/apps/api/src/app/portfolio/portfolio.service.ts @@ -477,12 +477,12 @@ export class PortfolioService { filters?: Filter[]; userId: string; }) { - const { SEARCH_QUERY: [filterBySearchQuery] = [] } = groupBy( - filters, - ({ type }) => { - return type; - } - ); + const { + HOLDING_TYPE: [filterByHoldingType] = [], + SEARCH_QUERY: [filterBySearchQuery] = [] + } = groupBy(filters, ({ type }) => { + return type; + }); const filtersWithoutSearchQueryFilter = filters?.filter(({ type }) => { return type !== 'SEARCH_QUERY'; @@ -491,7 +491,8 @@ export class PortfolioService { let { holdings } = await this.getDetails({ dateRange, userId, - filters: filtersWithoutSearchQueryFilter + filters: filtersWithoutSearchQueryFilter, + includeAllHoldings: !filterByHoldingType }); if (filterBySearchQuery) { @@ -592,6 +593,7 @@ export class PortfolioService { public async getDetails({ dateRange = DEFAULT_DATE_RANGE, filters, + includeAllHoldings = false, user: userFromCaller, userId, withExcludedAccounts = false, @@ -600,6 +602,7 @@ export class PortfolioService { }: { dateRange?: DateRange; filters?: Filter[]; + includeAllHoldings?: boolean; user?: UserWithSettings; userId: string; withExcludedAccounts?: boolean; @@ -614,19 +617,23 @@ export class PortfolioService { (user.settings?.settings as UserSettings)?.emergencyFund ?? 0 ); + const portfolioSnapshotFilters = filters?.filter(({ type }) => { + return type !== 'HOLDING_TYPE'; + }); + const { activities } = await this.activitiesService.getActivitiesForPortfolioCalculator({ - filters, userCurrency, - userId + userId, + filters: portfolioSnapshotFilters }); const portfolioCalculator = this.calculatorFactory.createCalculator({ activities, - filters, userId, calculationType: this.getUserPerformanceCalculationType(user), - currency: userCurrency + currency: userCurrency, + filters: portfolioSnapshotFilters }); const { createdAt, currentValueInBaseCurrency, hasErrors, positions } = @@ -706,13 +713,13 @@ export class PortfolioService { tags, valueInBaseCurrency } of positions) { - if (isFilteredByClosedHoldings === true) { - if (!quantity.eq(0)) { + if (!includeAllHoldings) { + if (isFilteredByClosedHoldings && !quantity.eq(0)) { // Ignore positions with a quantity continue; } - } else { - if (quantity.eq(0)) { + + if (!isFilteredByClosedHoldings && quantity.eq(0)) { // Ignore positions without any quantity continue; } 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 518458e8a4..75186b1744 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 @@ -393,8 +393,12 @@ export class GfAccountDetailDialogComponent implements OnInit { .fetchPortfolioHoldings({ filters: [ { - type: 'ACCOUNT', - id: this.data.accountId + id: this.data.accountId, + type: 'ACCOUNT' + }, + { + id: 'ACTIVE', + type: 'HOLDING_TYPE' } ] }) diff --git a/apps/client/src/app/components/home-holdings/home-holdings.component.ts b/apps/client/src/app/components/home-holdings/home-holdings.component.ts index 7f02cfb64e..f079e1c9c6 100644 --- a/apps/client/src/app/components/home-holdings/home-holdings.component.ts +++ b/apps/client/src/app/components/home-holdings/home-holdings.component.ts @@ -153,9 +153,7 @@ export class GfHomeHoldingsComponent implements OnInit { private fetchHoldings() { const filters = this.userService.getFilters(); - if (this.holdingType === 'CLOSED') { - filters.push({ id: 'CLOSED', type: 'HOLDING_TYPE' }); - } + filters.push({ id: this.holdingType, type: 'HOLDING_TYPE' }); return this.dataService.fetchPortfolioHoldings({ filters, 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 573d4e5bb6..63e7872c1e 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 @@ -367,7 +367,9 @@ export class GfCreateOrUpdateAccessDialogComponent implements OnInit { private loadHoldings() { this.dataService - .fetchPortfolioHoldings() + .fetchPortfolioHoldings({ + filters: [{ id: 'ACTIVE', type: 'HOLDING_TYPE' }] + }) .pipe(takeUntilDestroyed(this.destroyRef)) .subscribe(({ holdings }) => { this.holdings = getHoldingsForFilter(holdings); 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 853787f804..3b7938c8c4 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 @@ -153,7 +153,9 @@ export class GfCreateOrUpdateActivityDialogComponent { this.defaultDateFormat = getDateFormatString(this.locale); this.dataService - .fetchPortfolioHoldings() + .fetchPortfolioHoldings({ + filters: [{ id: 'ACTIVE', type: 'HOLDING_TYPE' }] + }) .pipe(takeUntilDestroyed(this.destroyRef)) .subscribe(({ holdings }) => { this.defaultLookupItems = holdings 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 48f1d5abd0..98e0c0ad82 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 @@ -144,6 +144,10 @@ export class GfImportActivitiesDialogComponent { { id: AssetClass.FIXED_INCOME, type: 'ASSET_CLASS' + }, + { + id: 'ACTIVE', + type: 'HOLDING_TYPE' } ], range: DEFAULT_DATE_RANGE 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 3a3c44269d..26fb711bb7 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 @@ -377,7 +377,10 @@ export class GfAnalysisPageComponent implements OnInit { this.dataService .fetchPortfolioHoldings({ - filters: this.userService.getFilters(), + filters: [ + ...this.userService.getFilters(), + { id: 'ACTIVE', type: 'HOLDING_TYPE' } + ], range: this.user?.settings?.dateRange }) .pipe(takeUntilDestroyed(this.destroyRef)) diff --git a/libs/ui/src/lib/assistant/assistant.component.ts b/libs/ui/src/lib/assistant/assistant.component.ts index bdbaa6cdb5..6babc10398 100644 --- a/libs/ui/src/lib/assistant/assistant.component.ts +++ b/libs/ui/src/lib/assistant/assistant.component.ts @@ -479,7 +479,9 @@ export class GfAssistantComponent implements OnChanges, OnDestroy, OnInit { this.setIsOpen(true); this.dataService - .fetchPortfolioHoldings() + .fetchPortfolioHoldings({ + filters: [{ id: 'ACTIVE', type: 'HOLDING_TYPE' }] + }) .pipe(takeUntilDestroyed(this.destroyRef)) .subscribe(({ holdings }) => { this.holdings = getHoldingsForFilter(holdings); From eee5d08084a90282a9bf5dcf07591a92e6e8d679 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Mon, 7 Sep 2026 20:45:11 +0200 Subject: [PATCH 32/50] Task/upgrade bull-board to version 9.5.0 (#7844) * Update bull-board to version 9.5.0 * Update changelog --- CHANGELOG.md | 1 + package-lock.json | 42 +++++++++++++++++++++--------------------- package.json | 6 +++--- 3 files changed, 25 insertions(+), 24 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index dd97e5e31c..f363f4cc5f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Improved the loading state of the activity count in the portfolio summary - Changed the holdings endpoint to return active and closed holdings by default and reuse a single snapshot for both types +- Upgraded `bull-board` from version `9.0.1` to `9.5.0` - Upgraded `zod` from version `4.4.3` to `4.5.4` ## 3.68.0 - 2026-09-06 diff --git a/package-lock.json b/package-lock.json index 563f7d4e2d..ba53c3025b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -21,9 +21,9 @@ "@angular/platform-browser-dynamic": "22.1.2", "@angular/router": "22.1.2", "@angular/service-worker": "22.1.2", - "@bull-board/api": "9.0.1", - "@bull-board/express": "9.0.1", - "@bull-board/nestjs": "9.0.1", + "@bull-board/api": "9.5.0", + "@bull-board/express": "9.5.0", + "@bull-board/nestjs": "9.5.0", "@codewithdan/observable-store": "2.2.15", "@date-fns/utc": "2.1.1", "@internationalized/number": "3.6.7", @@ -6166,17 +6166,17 @@ "license": "(Apache-2.0 AND BSD-3-Clause)" }, "node_modules/@bull-board/api": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/@bull-board/api/-/api-9.0.1.tgz", - "integrity": "sha512-QZ+SDOlD1MAePNqy8qfs+7zExZyJCW/+nEncGE6Mt/+MlxT9mqvyZWmPUm38QZvIBJGSKaA9i9ZElR9wDbbPhw==", + "version": "9.5.0", + "resolved": "https://registry.npmjs.org/@bull-board/api/-/api-9.5.0.tgz", + "integrity": "sha512-fmOyOy1lZiLZFyDJjI2osZrpTMO+JSgmGNhDf3MrmOf3oF084o6w0wpGefs0OqEfyUT1F5/1arE5AwmEUuxZ+A==", "license": "MIT", "dependencies": { "redis-info": "^3.1.0" }, "peerDependencies": { - "@bull-board/ui": "9.0.1", + "@bull-board/ui": "9.5.0", "bull": "^4.16.5", - "bullmq": "^5.79.2 || ^6.0.0" + "bullmq": "^5.56.0 || ^6.0.0" }, "peerDependenciesMeta": { "bull": { @@ -6188,13 +6188,13 @@ } }, "node_modules/@bull-board/express": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/@bull-board/express/-/express-9.0.1.tgz", - "integrity": "sha512-eblNP2imr639K9KG0n1sBaJp6lw6pu4/j7q3W+bydxtw83v4wobCcuVUxuhQkRaLTrIUMR/Snulc7+/vtxCshw==", + "version": "9.5.0", + "resolved": "https://registry.npmjs.org/@bull-board/express/-/express-9.5.0.tgz", + "integrity": "sha512-EKeXQzeb1zF9ra0hfYfPArU1JlWKl2vyL4Rb3gQW0XzU7SkEFgYm3727gDrQZdU8dvc5g/FLEqc0dr6UkDUHhg==", "license": "MIT", "dependencies": { - "@bull-board/api": "9.0.1", - "@bull-board/ui": "9.0.1", + "@bull-board/api": "9.5.0", + "@bull-board/ui": "9.5.0", "ejs": "^6.0.1", "express": "^5.2.1" } @@ -6212,12 +6212,12 @@ } }, "node_modules/@bull-board/nestjs": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/@bull-board/nestjs/-/nestjs-9.0.1.tgz", - "integrity": "sha512-pVcMZyuZ/X8SLjoayW8aREM1f4RFdI9WlwvHmT9RwlPhRnFLTnGMbnC5LOk+cYR/9WTB/Oeo1SDnzblIR99JtQ==", + "version": "9.5.0", + "resolved": "https://registry.npmjs.org/@bull-board/nestjs/-/nestjs-9.5.0.tgz", + "integrity": "sha512-0P/Ru3cbOnf6GwnDGv4iPJ/NEjbcaicdpYMISpp6K7JZ24RVkCnmoUIKt8KbQdjZGqfH2EWmyIRC2WhiUE3T+g==", "license": "MIT", "peerDependencies": { - "@bull-board/api": "^9.0.1", + "@bull-board/api": "^9.5.0", "@nestjs/bull-shared": "^10.0.0 || ^11.0.0", "@nestjs/common": "^9.0.0 || ^10.0.0 || ^11.0.0", "@nestjs/core": "^9.0.0 || ^10.0.0 || ^11.0.0", @@ -6226,12 +6226,12 @@ } }, "node_modules/@bull-board/ui": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/@bull-board/ui/-/ui-9.0.1.tgz", - "integrity": "sha512-yGg0CMAFCA49IM1zPS+JFvUJW/whftaLtRyMWiVtvyLRd53uX0QW/uTaPcHy0V4bApp6U0FTa9+L9rk/49ciwg==", + "version": "9.5.0", + "resolved": "https://registry.npmjs.org/@bull-board/ui/-/ui-9.5.0.tgz", + "integrity": "sha512-qrq0e906M8Ps/mV3bQXmj7EXJWLaFs5mNz+oBoLR/7EShBi5YooROzQ/SEFFedg/L9h6QWDWJ9Ph0AH7NrG9uw==", "license": "MIT", "dependencies": { - "@bull-board/api": "9.0.1" + "@bull-board/api": "9.5.0" } }, "node_modules/@cacheable/utils": { diff --git a/package.json b/package.json index 1ddbf7ea64..1f13ab86c2 100644 --- a/package.json +++ b/package.json @@ -65,9 +65,9 @@ "@angular/platform-browser-dynamic": "22.1.2", "@angular/router": "22.1.2", "@angular/service-worker": "22.1.2", - "@bull-board/api": "9.0.1", - "@bull-board/express": "9.0.1", - "@bull-board/nestjs": "9.0.1", + "@bull-board/api": "9.5.0", + "@bull-board/express": "9.5.0", + "@bull-board/nestjs": "9.5.0", "@codewithdan/observable-store": "2.2.15", "@date-fns/utc": "2.1.1", "@internationalized/number": "3.6.7", From ceaef13b70d5293c90e6d18518f45b3363e85135 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Mon, 7 Sep 2026 20:58:52 +0200 Subject: [PATCH 33/50] Task/migrate watchlist to dedicated routes (#7837) * Migrate create dialog to dedicated route * Update changelog --- CHANGELOG.md | 1 + .../home-watchlist.component.ts | 66 ++-------- .../home-watchlist/home-watchlist.html | 8 +- .../home-watchlist/home-watchlist.service.ts | 15 +++ .../watchlist-dialog-host.component.ts | 114 ++++++++++++++++++ .../src/app/pages/home/home-page.routes.ts | 9 ++ libs/common/src/lib/routes/routes.ts | 7 ++ 7 files changed, 162 insertions(+), 58 deletions(-) create mode 100644 apps/client/src/app/components/home-watchlist/home-watchlist.service.ts create mode 100644 apps/client/src/app/components/home-watchlist/watchlist-dialog-host/watchlist-dialog-host.component.ts diff --git a/CHANGELOG.md b/CHANGELOG.md index f363f4cc5f..9bac4d2e12 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed - Improved the loading state of the activity count in the portfolio summary +- Migrated the create dialog of the watchlist to a dedicated route - Changed the holdings endpoint to return active and closed holdings by default and reuse a single snapshot for both types - Upgraded `bull-board` from version `9.0.1` to `9.5.0` - Upgraded `zod` from version `4.4.3` to `4.5.4` diff --git a/apps/client/src/app/components/home-watchlist/home-watchlist.component.ts b/apps/client/src/app/components/home-watchlist/home-watchlist.component.ts index d3a7fb203f..b56d8d66ea 100644 --- a/apps/client/src/app/components/home-watchlist/home-watchlist.component.ts +++ b/apps/client/src/app/components/home-watchlist/home-watchlist.component.ts @@ -6,6 +6,7 @@ import { User } from '@ghostfolio/common/interfaces'; import { hasPermission, permissions } from '@ghostfolio/common/permissions'; +import { internalRoutes } from '@ghostfolio/common/routes/routes'; import { hasScope, scopes } from '@ghostfolio/common/scopes'; import { GfBenchmarkComponent } from '@ghostfolio/ui/benchmark'; import { GfFabComponent } from '@ghostfolio/ui/fab'; @@ -23,12 +24,10 @@ import { OnInit } from '@angular/core'; import { takeUntilDestroyed } from '@angular/core/rxjs-interop'; -import { MatDialog } from '@angular/material/dialog'; -import { ActivatedRoute, Router, RouterModule } from '@angular/router'; +import { RouterModule } from '@angular/router'; import { DeviceDetectorService } from 'ngx-device-detector'; -import { GfCreateWatchlistItemDialogComponent } from './create-watchlist-item-dialog/create-watchlist-item-dialog.component'; -import { CreateWatchlistItemDialogParams } from './create-watchlist-item-dialog/interfaces/interfaces'; +import { HomeWatchlistService } from './home-watchlist.service'; @Component({ changeDetection: ChangeDetectionStrategy.OnPush, @@ -38,6 +37,7 @@ import { CreateWatchlistItemDialogParams } from './create-watchlist-item-dialog/ GfPremiumIndicatorComponent, RouterModule ], + providers: [HomeWatchlistService], schemas: [CUSTOM_ELEMENTS_SCHEMA], selector: 'gf-home-watchlist', styleUrls: ['./home-watchlist.scss'], @@ -45,6 +45,7 @@ import { CreateWatchlistItemDialogParams } from './create-watchlist-item-dialog/ }) export class GfHomeWatchlistComponent implements OnInit { protected readonly DEFAULT_LOCALE = DEFAULT_LOCALE; + protected readonly internalRoutes = internalRoutes; protected hasPermissionToCreateWatchlistItem: boolean; protected hasPermissionToDeleteWatchlistItem: boolean; @@ -59,18 +60,14 @@ export class GfHomeWatchlistComponent implements OnInit { private readonly dataService = inject(DataService); private readonly destroyRef = inject(DestroyRef); private readonly deviceDetectorService = inject(DeviceDetectorService); - private readonly dialog = inject(MatDialog); - private readonly route = inject(ActivatedRoute); - private readonly router = inject(Router); + private readonly homeWatchlistService = inject(HomeWatchlistService); private readonly userService = inject(UserService); public constructor() { - this.route.queryParams + this.homeWatchlistService.refresh$ .pipe(takeUntilDestroyed(this.destroyRef)) - .subscribe((params) => { - if (params['createWatchlistItemDialog']) { - this.openCreateWatchlistItemDialog(); - } + .subscribe(() => { + this.loadWatchlistData(); }); this.userService.stateChanged @@ -130,49 +127,4 @@ export class GfHomeWatchlistComponent implements OnInit { } }); } - - private openCreateWatchlistItemDialog() { - this.userService - .get() - .pipe(takeUntilDestroyed(this.destroyRef)) - .subscribe((user) => { - this.user = user; - - if ( - !hasPermission(user?.permissions, permissions.createWatchlistItem) || - !hasScope(user?.scopes, scopes.watchlistCreate) - ) { - this.router.navigate(['.'], { relativeTo: this.route }); - - return; - } - - const dialogRef = this.dialog.open< - GfCreateWatchlistItemDialogComponent, - CreateWatchlistItemDialogParams - >(GfCreateWatchlistItemDialogComponent, { - data: { - deviceType: this.deviceType(), - locale: this.user?.settings?.locale ?? DEFAULT_LOCALE - }, - width: this.deviceType() === 'mobile' ? '100vw' : '50rem' - }); - - dialogRef - .afterClosed() - .pipe(takeUntilDestroyed(this.destroyRef)) - .subscribe(({ dataSource, symbol } = {}) => { - if (dataSource && symbol) { - this.dataService - .postWatchlistItem({ dataSource, symbol }) - .pipe(takeUntilDestroyed(this.destroyRef)) - .subscribe({ - next: () => this.loadWatchlistData() - }); - } - - this.router.navigate(['.'], { relativeTo: this.route }); - }); - }); - } } diff --git a/apps/client/src/app/components/home-watchlist/home-watchlist.html b/apps/client/src/app/components/home-watchlist/home-watchlist.html index fdd894de4e..11b2d9c2fe 100644 --- a/apps/client/src/app/components/home-watchlist/home-watchlist.html +++ b/apps/client/src/app/components/home-watchlist/home-watchlist.html @@ -22,5 +22,11 @@
@if (hasPermissionToCreateWatchlistItem) { - + } + + diff --git a/apps/client/src/app/components/home-watchlist/home-watchlist.service.ts b/apps/client/src/app/components/home-watchlist/home-watchlist.service.ts new file mode 100644 index 0000000000..47eafe6059 --- /dev/null +++ b/apps/client/src/app/components/home-watchlist/home-watchlist.service.ts @@ -0,0 +1,15 @@ +import { Service } from '@angular/core'; +import { Subject } from 'rxjs'; + +@Service({ autoProvided: false }) +export class HomeWatchlistService { + private readonly refreshSubject = new Subject(); + + public get refresh$() { + return this.refreshSubject.asObservable(); + } + + public triggerRefresh() { + this.refreshSubject.next(); + } +} diff --git a/apps/client/src/app/components/home-watchlist/watchlist-dialog-host/watchlist-dialog-host.component.ts b/apps/client/src/app/components/home-watchlist/watchlist-dialog-host/watchlist-dialog-host.component.ts new file mode 100644 index 0000000000..9e1887e278 --- /dev/null +++ b/apps/client/src/app/components/home-watchlist/watchlist-dialog-host/watchlist-dialog-host.component.ts @@ -0,0 +1,114 @@ +import { UserService } from '@ghostfolio/client/services/user/user.service'; +import { DEFAULT_LOCALE } from '@ghostfolio/common/config'; +import { User } from '@ghostfolio/common/interfaces'; +import { hasPermission, permissions } from '@ghostfolio/common/permissions'; +import { internalRoutes } from '@ghostfolio/common/routes/routes'; +import { hasScope, scopes } from '@ghostfolio/common/scopes'; +import { DataService } from '@ghostfolio/ui/services'; + +import { + ChangeDetectionStrategy, + Component, + DestroyRef, + inject, + OnDestroy, + OnInit +} from '@angular/core'; +import { takeUntilDestroyed } from '@angular/core/rxjs-interop'; +import { MatDialog, MatDialogRef } from '@angular/material/dialog'; +import { Router } from '@angular/router'; +import { DeviceDetectorService } from 'ngx-device-detector'; + +import { GfCreateWatchlistItemDialogComponent } from '../create-watchlist-item-dialog/create-watchlist-item-dialog.component'; +import { CreateWatchlistItemDialogParams } from '../create-watchlist-item-dialog/interfaces/interfaces'; +import { HomeWatchlistService } from '../home-watchlist.service'; + +@Component({ + changeDetection: ChangeDetectionStrategy.OnPush, + selector: 'gf-watchlist-dialog-host', + template: '' +}) +export class GfWatchlistDialogHostComponent implements OnDestroy, OnInit { + private dialogRef: MatDialogRef; + + private readonly dataService = inject(DataService); + private readonly destroyRef = inject(DestroyRef); + private readonly deviceDetectorService = inject(DeviceDetectorService); + private readonly dialog = inject(MatDialog); + private readonly homeWatchlistService = inject(HomeWatchlistService); + private readonly router = inject(Router); + private readonly userService = inject(UserService); + + public ngOnInit() { + this.userService + .get() + .pipe(takeUntilDestroyed(this.destroyRef)) + .subscribe((user) => { + if ( + !hasPermission(user?.permissions, permissions.createWatchlistItem) || + !hasScope(user?.scopes, scopes.watchlistCreate) + ) { + this.navigateBack(); + + return; + } + + this.openDialog(user); + }); + } + + public ngOnDestroy() { + // The dialog lives in an overlay outside of this component, so it needs to + // be closed explicitly when leaving the route (for example via the browser + // navigation) + this.dialogRef?.close(); + } + + private navigateBack() { + void this.router.navigate( + internalRoutes.home.subRoutes.watchlist.routerLink + ); + } + + private openDialog(user: User) { + const deviceType = this.deviceDetectorService.getDeviceInfo().deviceType; + + const dialogRef = this.dialog.open< + GfCreateWatchlistItemDialogComponent, + CreateWatchlistItemDialogParams + >(GfCreateWatchlistItemDialogComponent, { + data: { + deviceType, + locale: user?.settings?.locale ?? DEFAULT_LOCALE + }, + width: deviceType === 'mobile' ? '100vw' : '50rem' + }); + + this.dialogRef = dialogRef; + + dialogRef + .afterClosed() + .pipe(takeUntilDestroyed(this.destroyRef)) + .subscribe(({ dataSource, symbol } = {}) => { + if (!dataSource || !symbol) { + this.navigateBack(); + + return; + } + + this.dataService + .postWatchlistItem({ dataSource, symbol }) + .pipe(takeUntilDestroyed(this.destroyRef)) + .subscribe({ + error: () => { + this.navigateBack(); + }, + next: () => { + this.homeWatchlistService.triggerRefresh(); + + this.navigateBack(); + } + }); + }); + } +} diff --git a/apps/client/src/app/pages/home/home-page.routes.ts b/apps/client/src/app/pages/home/home-page.routes.ts index cc444c2b00..3e0ce7b266 100644 --- a/apps/client/src/app/pages/home/home-page.routes.ts +++ b/apps/client/src/app/pages/home/home-page.routes.ts @@ -2,6 +2,7 @@ import { GfHomeHoldingsComponent } from '@ghostfolio/client/components/home-hold import { GfHomeOverviewComponent } from '@ghostfolio/client/components/home-overview/home-overview.component'; import { GfHomeSummaryComponent } from '@ghostfolio/client/components/home-summary/home-summary.component'; import { GfHomeWatchlistComponent } from '@ghostfolio/client/components/home-watchlist/home-watchlist.component'; +import { GfWatchlistDialogHostComponent } from '@ghostfolio/client/components/home-watchlist/watchlist-dialog-host/watchlist-dialog-host.component'; import { GfMarketsComponent } from '@ghostfolio/client/components/markets/markets.component'; import { AuthGuard } from '@ghostfolio/client/core/auth.guard'; import { internalRoutes } from '@ghostfolio/common/routes/routes'; @@ -34,6 +35,14 @@ export const routes: Routes = [ title: internalRoutes.home.subRoutes.markets.title }, { + children: [ + { + component: GfWatchlistDialogHostComponent, + path: internalRoutes.home.subRoutes.watchlist.subRoutes.create.path, + title: + internalRoutes.home.subRoutes.watchlist.subRoutes.create.title + } + ], path: internalRoutes.home.subRoutes.watchlist.path, component: GfHomeWatchlistComponent, title: internalRoutes.home.subRoutes.watchlist.title diff --git a/libs/common/src/lib/routes/routes.ts b/libs/common/src/lib/routes/routes.ts index b45715607a..ca3cdd3663 100644 --- a/libs/common/src/lib/routes/routes.ts +++ b/libs/common/src/lib/routes/routes.ts @@ -156,6 +156,13 @@ export const internalRoutes = { watchlist: { path: 'watchlist', routerLink: ['/home', 'watchlist'], + subRoutes: { + create: { + path: 'create', + routerLink: ['/home', 'watchlist', 'create'], + title: $localize`Add to Watchlist` + } + }, title: $localize`Watchlist` } }, From e43e2178db4e969c42f1f9024d076ab8e0e1ed70 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Mon, 7 Sep 2026 21:12:09 +0200 Subject: [PATCH 34/50] Task/upgrade countries-and-timezones to version 3.10.0 (#7845) * Update countries-and-timezones to version 3.10.0 * Update changelog --- CHANGELOG.md | 1 + package-lock.json | 8 ++++---- package.json | 2 +- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9bac4d2e12..5bdc636c9b 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 - Improved the loading state of the activity count in the portfolio summary - Migrated the create dialog of the watchlist to a dedicated route - Changed the holdings endpoint to return active and closed holdings by default and reuse a single snapshot for both types +- Upgraded `countries-and-timezones` from version `3.9.0` to `3.10.0` - Upgraded `bull-board` from version `9.0.1` to `9.5.0` - Upgraded `zod` from version `4.4.3` to `4.5.4` diff --git a/package-lock.json b/package-lock.json index ba53c3025b..c740e90032 100644 --- a/package-lock.json +++ b/package-lock.json @@ -67,7 +67,7 @@ "class-validator": "0.15.1", "color": "5.0.3", "cookie-parser": "1.4.7", - "countries-and-timezones": "3.9.0", + "countries-and-timezones": "3.10.0", "countries-list": "3.4.1", "countup.js": "2.10.1", "date-fns": "4.4.0", @@ -19044,9 +19044,9 @@ } }, "node_modules/countries-and-timezones": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/countries-and-timezones/-/countries-and-timezones-3.9.0.tgz", - "integrity": "sha512-3upkVtUfZgdp5xOQI/Deg1ye73ae6bygJMO4UvtUi6wLjwcj7cBqx2PzSZ1VL8i5iveBbjhsQp2Judx7kPKivA==", + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/countries-and-timezones/-/countries-and-timezones-3.10.0.tgz", + "integrity": "sha512-HQ1GtXWNZy0r5MnZMLF9xmBmFNmtDVBeKQgX/5DY+RVmcZTODA+EPN/JLPCYRNP86nHG0QQrb1yJwGzXeqCCXw==", "license": "MIT", "engines": { "node": ">=8.x", diff --git a/package.json b/package.json index 1f13ab86c2..7d8e6edca8 100644 --- a/package.json +++ b/package.json @@ -111,7 +111,7 @@ "class-validator": "0.15.1", "color": "5.0.3", "cookie-parser": "1.4.7", - "countries-and-timezones": "3.9.0", + "countries-and-timezones": "3.10.0", "countries-list": "3.4.1", "countup.js": "2.10.1", "date-fns": "4.4.0", From 0c2ebee8ac7f9551e7c54dd9199655968beb36bf Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Mon, 7 Sep 2026 21:12:30 +0200 Subject: [PATCH 35/50] Bugfix/opening asset profile from watchlist (#7846) * Fix issue when opening asset profile * Update changelog --- CHANGELOG.md | 4 ++++ .../benchmark-detail-dialog.component.ts | 2 +- .../benchmark-detail-dialog/benchmark-detail-dialog.html | 2 +- 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5bdc636c9b..af0c7bfffd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,6 +16,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Upgraded `bull-board` from version `9.0.1` to `9.5.0` - Upgraded `zod` from version `4.4.3` to `4.5.4` +### Fixed + +- Resolved an issue when opening an asset profile from the watchlist + ## 3.68.0 - 2026-09-06 ### Added diff --git a/libs/ui/src/lib/benchmark/benchmark-detail-dialog/benchmark-detail-dialog.component.ts b/libs/ui/src/lib/benchmark/benchmark-detail-dialog/benchmark-detail-dialog.component.ts index 8a7e131568..f46722921f 100644 --- a/libs/ui/src/lib/benchmark/benchmark-detail-dialog/benchmark-detail-dialog.component.ts +++ b/libs/ui/src/lib/benchmark/benchmark-detail-dialog/benchmark-detail-dialog.component.ts @@ -44,7 +44,7 @@ import { BenchmarkDetailDialogParams } from './interfaces/interfaces'; templateUrl: 'benchmark-detail-dialog.html' }) export class GfBenchmarkDetailDialogComponent implements OnInit { - public assetProfile: AdminMarketDataDetails['assetProfile']; + public assetProfile?: AdminMarketDataDetails['assetProfile']; public historicalDataItems: LineChartItem[]; public isLoading = true; public value: number; diff --git a/libs/ui/src/lib/benchmark/benchmark-detail-dialog/benchmark-detail-dialog.html b/libs/ui/src/lib/benchmark/benchmark-detail-dialog/benchmark-detail-dialog.html index 2f415d874c..2ab60b9d2d 100644 --- a/libs/ui/src/lib/benchmark/benchmark-detail-dialog/benchmark-detail-dialog.html +++ b/libs/ui/src/lib/benchmark/benchmark-detail-dialog/benchmark-detail-dialog.html @@ -1,7 +1,7 @@ From fb8691e16a23c8b222b727947635c1194f56a657 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Mon, 7 Sep 2026 21:15:06 +0200 Subject: [PATCH 36/50] Release 3.69.0 (#7847) --- 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 af0c7bfffd..8bbc07ae2d 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.69.0 - 2026-09-07 ### Changed diff --git a/package-lock.json b/package-lock.json index c740e90032..8a2818c967 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "ghostfolio", - "version": "3.68.0", + "version": "3.69.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "ghostfolio", - "version": "3.68.0", + "version": "3.69.0", "hasInstallScript": true, "license": "AGPL-3.0", "dependencies": { diff --git a/package.json b/package.json index 7d8e6edca8..517bca30cb 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ghostfolio", - "version": "3.68.0", + "version": "3.69.0", "homepage": "https://ghostfol.io", "license": "AGPL-3.0", "repository": "https://github.com/ghostfolio/ghostfolio", From 84165724e9561c03034a88fde849963a3ab20991 Mon Sep 17 00:00:00 2001 From: asyncAndChill Date: Wed, 9 Sep 2026 09:19:14 +0300 Subject: [PATCH 37/50] Task/update Turbobulls in personal finance tools (#7851) Update Turbobulls --- libs/common/src/lib/personal-finance-tools.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/libs/common/src/lib/personal-finance-tools.ts b/libs/common/src/lib/personal-finance-tools.ts index d0d7a92ba2..75fdcd1608 100644 --- a/libs/common/src/lib/personal-finance-tools.ts +++ b/libs/common/src/lib/personal-finance-tools.ts @@ -2460,14 +2460,14 @@ export const personalFinanceTools: Product[] = [ { categories: ['NET_WORTH_TRACKING', 'STOCK_TRACKING'], founded: 2025, - hasFreePlan: false, + hasFreePlan: true, hasSelfHostingAbility: false, key: 'turbobulls', name: 'Turbobulls', origin: 'RO', platforms: ['WEB'], - pricingPerYear: '€39.99', - slogan: 'Your complete financial dashboard. Actually private.', + pricingPerYear: '€35.90', + slogan: 'Your complete portfolio and expense tracker. Actually private.', url: 'https://www.turbobulls.com' }, { From 483b55cde953de677e625761bc98dface7b7f4a0 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Wed, 9 Sep 2026 08:19:43 +0200 Subject: [PATCH 38/50] Task/improve style of dense selectors (#7856) * Improve style of dense selectors * Update changelog --- CHANGELOG.md | 7 +++++++ .../benchmark-comparator.component.html | 2 +- .../benchmark-comparator.component.scss | 9 --------- apps/client/src/styles/theme.scss | 12 ++++++++++++ .../activities-table/activities-table.component.html | 5 ++++- .../activities-table/activities-table.component.scss | 9 --------- 6 files changed, 24 insertions(+), 20 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8bbc07ae2d..bbb6b1762a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,13 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## Unreleased + +### Changed + +- Improved the style of the activity type filter on the activities page (experimental) +- Improved the style of the selector in the benchmark comparator + ## 3.69.0 - 2026-09-07 ### Changed diff --git a/apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.html b/apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.html index 328cccba1f..9ce99987a4 100644 --- a/apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.html +++ b/apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.html @@ -12,7 +12,7 @@
Compare with... diff --git a/apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.scss b/apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.scss index 4dc8cf6b5a..e02c91e3db 100644 --- a/apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.scss +++ b/apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.scss @@ -1,15 +1,6 @@ -@use '@angular/material' as mat; - :host { display: block; - @include mat.form-field-overrides( - ( - container-height: 2rem, - container-vertical-padding: 0.33rem - ) - ); - .chart-container { aspect-ratio: 16 / 9; diff --git a/apps/client/src/styles/theme.scss b/apps/client/src/styles/theme.scss index 3f81250116..d3c9e6022b 100644 --- a/apps/client/src/styles/theme.scss +++ b/apps/client/src/styles/theme.scss @@ -149,6 +149,14 @@ $gf-typography: ( regular-weight: 400 ); +$_dense-form-field-theme: mat.define-theme( + ( + density: ( + scale: -4 + ) + ) +); + .theme-light { color-scheme: light; @@ -412,6 +420,10 @@ $gf-typography: ( ) ); + .gf-form-field-dense { + @include mat.form-field-density($_dense-form-field-theme); + } + .mat-accent { @include mat.button-overrides( ( diff --git a/libs/ui/src/lib/activities-table/activities-table.component.html b/libs/ui/src/lib/activities-table/activities-table.component.html index 9bfd44b9da..ded8fe8c83 100644 --- a/libs/ui/src/lib/activities-table/activities-table.component.html +++ b/libs/ui/src/lib/activities-table/activities-table.component.html @@ -3,7 +3,10 @@ >
@if (hasPermissionToFilterByType && activityTypeOptions().length > 1) { - + Type @for (activityType of activityTypeOptions(); track activityType.key) { diff --git a/libs/ui/src/lib/activities-table/activities-table.component.scss b/libs/ui/src/lib/activities-table/activities-table.component.scss index 4e98f726e2..5d4e87f30f 100644 --- a/libs/ui/src/lib/activities-table/activities-table.component.scss +++ b/libs/ui/src/lib/activities-table/activities-table.component.scss @@ -1,12 +1,3 @@ -@use '@angular/material' as mat; - :host { display: block; - - @include mat.form-field-overrides( - ( - container-height: 2rem, - container-vertical-padding: 0.33rem - ) - ); } From 22b7b6396ade078b6a7103b2127005b5ce5e7dea Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Thu, 10 Sep 2026 17:33:12 +0200 Subject: [PATCH 39/50] Feature/add MCP tool to search asset profiles (#7849) * Add MCP tool to search asset profiles * Update changelog --- CHANGELOG.md | 4 + .../app/endpoints/mcp/mcp.controller.spec.ts | 6 ++ .../src/app/endpoints/mcp/mcp.controller.ts | 24 ++++- apps/api/src/app/endpoints/mcp/mcp.module.ts | 2 + .../src/app/endpoints/mcp/mcp.schemas.spec.ts | 47 +++++++++- apps/api/src/app/endpoints/mcp/mcp.schemas.ts | 15 +++- .../src/app/endpoints/mcp/mcp.service.spec.ts | 87 ++++++++++++++++++- apps/api/src/app/endpoints/mcp/mcp.service.ts | 60 ++++++++++++- 8 files changed, 235 insertions(+), 10 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index bbb6b1762a..be89cc1ed3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## Unreleased +### Added + +- Added a tool to search for asset profiles to the server of the Model Context Protocol (MCP) (experimental) + ### Changed - Improved the style of the activity type filter on the activities page (experimental) diff --git a/apps/api/src/app/endpoints/mcp/mcp.controller.spec.ts b/apps/api/src/app/endpoints/mcp/mcp.controller.spec.ts index 741e2a1aec..f6e1d04383 100644 --- a/apps/api/src/app/endpoints/mcp/mcp.controller.spec.ts +++ b/apps/api/src/app/endpoints/mcp/mcp.controller.spec.ts @@ -77,6 +77,12 @@ describe('GhostfolioMcpController', () => { ).toEqual([scopes.activityCreate]); }); + it('Requires the scope to create an activity for the tool to search asset profiles', () => { + expect( + getMetadataOfMethod(REQUIRES_SCOPE_KEY, 'searchAssetProfiles') + ).toEqual([scopes.activityCreate]); + }); + // The tools have no try and catch, hence the filter is the only guarantee // that an unexpected exception does not expose internals it('Applies the filter of the exceptions of the tools', () => { diff --git a/apps/api/src/app/endpoints/mcp/mcp.controller.ts b/apps/api/src/app/endpoints/mcp/mcp.controller.ts index 6b838c108d..3fe90c4dc3 100644 --- a/apps/api/src/app/endpoints/mcp/mcp.controller.ts +++ b/apps/api/src/app/endpoints/mcp/mcp.controller.ts @@ -15,7 +15,8 @@ import 'zod/compile'; import { GET_ACCOUNTS_PARAMETERS, GET_ACTIVITIES_PARAMETERS, - IMPORT_ACTIVITIES_PARAMETERS + IMPORT_ACTIVITIES_PARAMETERS, + SEARCH_ASSET_PROFILES_PARAMETERS } from './mcp.schemas'; import { McpService } from './mcp.service'; @@ -98,7 +99,7 @@ export class GhostfolioMcpController { readOnlyHint: false, title: 'Import activities' }, - description: `Imports activities into the portfolio and gives the number of the imported activities and the number of the skipped activities. An activity is skipped if an equal activity is in the portfolio already, hence send each activity one time only: two equal activities of the same call are both imported. The access needs the permission "Restricted view and manage". At most ${MCP_MAX_ACTIVITIES} activities are imported per call, while the instance can have a lower limit, which an error names. An error does not remove the activities of the same call which are imported already, hence get the activities after an error before you import them again.`, + description: `Imports activities into the portfolio and gives the number of the imported activities and the number of the skipped activities. Use search-asset-profiles first unless the exact symbol and data source are already known. An activity is skipped if an equal activity is in the portfolio already, hence send each activity one time only: two equal activities of the same call are both imported. The access needs the permission "Restricted view and manage". At most ${MCP_MAX_ACTIVITIES} activities are imported per call, while the instance can have a lower limit, which an error names. An error does not remove the activities of the same call which are imported already, hence get the activities after an error before you import them again.`, name: 'import-activities', parameters: IMPORT_ACTIVITIES_PARAMETERS }) @@ -108,4 +109,23 @@ export class GhostfolioMcpController { ) { return this.mcpService.importActivities({ ...parameters, userId }); } + + @RequiresScopeOfAccess(scopes.activityCreate) + @Tool({ + annotations: { + openWorldHint: true, + readOnlyHint: true, + title: 'Search asset profiles' + }, + description: + 'Searches for financial assets, such as stocks, ETFs, cryptocurrencies, mutual funds and commodities, which are available to the user. Each result is an asset profile that can be used to import an activity. Use this before importing an activity unless the exact symbol and data source are already known. Select the candidate that matches the intended asset and pass its symbol, dataSource and currency unchanged to import-activities.', + name: 'search-asset-profiles', + parameters: SEARCH_ASSET_PROFILES_PARAMETERS + }) + public async searchAssetProfiles( + @Impersonation() { userId }: ImpersonationContext, + @Payload() parameters: z.infer + ) { + return this.mcpService.searchAssetProfiles({ ...parameters, userId }); + } } diff --git a/apps/api/src/app/endpoints/mcp/mcp.module.ts b/apps/api/src/app/endpoints/mcp/mcp.module.ts index b782736c8f..33cf667118 100644 --- a/apps/api/src/app/endpoints/mcp/mcp.module.ts +++ b/apps/api/src/app/endpoints/mcp/mcp.module.ts @@ -1,4 +1,5 @@ import { ImportModule } from '@ghostfolio/api/app/import/import.module'; +import { SymbolModule } from '@ghostfolio/api/app/symbol/symbol.module'; import { UserModule } from '@ghostfolio/api/app/user/user.module'; import { environment } from '@ghostfolio/api/environments/environment'; import { ApiModule } from '@ghostfolio/api/services/api/api.module'; @@ -24,6 +25,7 @@ import { McpService } from './mcp.service'; ConfigurationModule, ImportModule, PortfolioTableModule, + SymbolModule, UserModule ], providers: [ diff --git a/apps/api/src/app/endpoints/mcp/mcp.schemas.spec.ts b/apps/api/src/app/endpoints/mcp/mcp.schemas.spec.ts index 2d38923b91..c946a9d131 100644 --- a/apps/api/src/app/endpoints/mcp/mcp.schemas.spec.ts +++ b/apps/api/src/app/endpoints/mcp/mcp.schemas.spec.ts @@ -1,6 +1,13 @@ -import { MCP_MAX_ACTIVITIES } from '@ghostfolio/common/config'; +import { + MCP_MAX_ACTIVITIES, + SEARCH_QUERY_MAXIMUM_LENGTH, + SEARCH_QUERY_MINIMUM_LENGTH +} from '@ghostfolio/common/config'; -import { IMPORT_ACTIVITIES_PARAMETERS } from './mcp.schemas'; +import { + IMPORT_ACTIVITIES_PARAMETERS, + SEARCH_ASSET_PROFILES_PARAMETERS +} from './mcp.schemas'; import { createActivity } from './mcp.test-utils'; describe('IMPORT_ACTIVITIES_PARAMETERS', () => { @@ -46,3 +53,39 @@ describe('IMPORT_ACTIVITIES_PARAMETERS', () => { ).toBe(false); }); }); + +describe('SEARCH_ASSET_PROFILES_PARAMETERS', () => { + it('Refuses a query that contains only spaces', () => { + expect( + SEARCH_ASSET_PROFILES_PARAMETERS.safeParse({ query: ' ' }).success + ).toBe(false); + }); + + it(`Refuses a query shorter than ${SEARCH_QUERY_MINIMUM_LENGTH} characters`, () => { + expect( + SEARCH_ASSET_PROFILES_PARAMETERS.safeParse({ query: 'A' }).success + ).toBe(false); + }); + + it(`Refuses a query longer than ${SEARCH_QUERY_MAXIMUM_LENGTH} characters`, () => { + expect( + SEARCH_ASSET_PROFILES_PARAMETERS.safeParse({ + query: 'A'.repeat(SEARCH_QUERY_MAXIMUM_LENGTH + 1) + }).success + ).toBe(false); + }); + + it('Accepts a name, symbol or ISIN', () => { + for (const query of ['Apple', 'AAPL', 'US0378331005']) { + expect( + SEARCH_ASSET_PROFILES_PARAMETERS.safeParse({ query }).success + ).toBe(true); + } + }); + + it('Removes spaces at the start and the end of a query', () => { + expect( + SEARCH_ASSET_PROFILES_PARAMETERS.parse({ query: ' Apple ' }).query + ).toBe('Apple'); + }); +}); diff --git a/apps/api/src/app/endpoints/mcp/mcp.schemas.ts b/apps/api/src/app/endpoints/mcp/mcp.schemas.ts index 44568890a3..2eb59264b3 100644 --- a/apps/api/src/app/endpoints/mcp/mcp.schemas.ts +++ b/apps/api/src/app/endpoints/mcp/mcp.schemas.ts @@ -2,7 +2,9 @@ import { DATE_RANGE_PATTERN } from '@ghostfolio/api/dtos/date-range-filter.dto'; import { DATE_RANGES, MCP_MAX_ACCOUNTS, - MCP_MAX_ACTIVITIES + MCP_MAX_ACTIVITIES, + SEARCH_QUERY_MAXIMUM_LENGTH, + SEARCH_QUERY_MINIMUM_LENGTH } from '@ghostfolio/common/config'; import { isValidCurrencyCode, @@ -113,3 +115,14 @@ export const IMPORT_ACTIVITIES_PARAMETERS = z.object({ .max(MCP_MAX_ACTIVITIES) .describe(`The activities to import, at most ${MCP_MAX_ACTIVITIES}`) }); + +export const SEARCH_ASSET_PROFILES_PARAMETERS = z.object({ + query: z + .string() + .trim() + .min(SEARCH_QUERY_MINIMUM_LENGTH) + .max(SEARCH_QUERY_MAXIMUM_LENGTH) + .describe( + 'The name, ticker symbol or ISIN of the financial asset, for example Apple, AAPL, Bitcoin or US0378331005' + ) +}); diff --git a/apps/api/src/app/endpoints/mcp/mcp.service.spec.ts b/apps/api/src/app/endpoints/mcp/mcp.service.spec.ts index ac074c7917..2ec4947c15 100644 --- a/apps/api/src/app/endpoints/mcp/mcp.service.spec.ts +++ b/apps/api/src/app/endpoints/mcp/mcp.service.spec.ts @@ -1,5 +1,6 @@ import { ImportValidationError } from '@ghostfolio/api/app/import/errors/import-validation.error'; import { ImportService } from '@ghostfolio/api/app/import/import.service'; +import { SymbolService } from '@ghostfolio/api/app/symbol/symbol.service'; import { UserService } from '@ghostfolio/api/app/user/user.service'; import { ApiService } from '@ghostfolio/api/services/api/api.service'; import { ConfigurationService } from '@ghostfolio/api/services/configuration/configuration.service'; @@ -13,7 +14,12 @@ import { permissions } from '@ghostfolio/common/permissions'; import type { UserWithSettings } from '@ghostfolio/common/types'; import { HttpException } from '@nestjs/common'; -import { AssetClass, DataSource, Type as ActivityType } from '@prisma/client'; +import { + AssetClass, + AssetSubClass, + DataSource, + Type as ActivityType +} from '@prisma/client'; import { McpService } from './mcp.service'; import { createActivity } from './mcp.test-utils'; @@ -29,12 +35,18 @@ describe('McpService', () => { let importService: ImportService; let mcpService: McpService; let portfolioTableService: PortfolioTableService; + let symbolService: SymbolService; let userService: UserService; function setupUser(userPermissions: string[]) { - jest.spyOn(userService, 'user').mockResolvedValue({ + const user = { + id: userId, permissions: userPermissions - } as UserWithSettings); + } as UserWithSettings; + + jest.spyOn(userService, 'user').mockResolvedValue(user); + + return user; } beforeEach(() => { @@ -63,6 +75,10 @@ describe('McpService', () => { getHoldingsTable: jest.fn().mockResolvedValue('## Holdings') } as unknown as PortfolioTableService; + symbolService = { + lookup: jest.fn().mockResolvedValue({ items: [] }) + } as unknown as SymbolService; + userService = { user: jest.fn() } as unknown as UserService; mcpService = new McpService( @@ -70,6 +86,7 @@ describe('McpService', () => { configurationService, importService, portfolioTableService, + symbolService, userService ); }); @@ -182,6 +199,70 @@ describe('McpService', () => { }); }); + describe('searchAssetProfiles', () => { + it('Refuses a user without the permission to create an activity', async () => { + setupUser([]); + + await expect( + mcpService.searchAssetProfiles({ query: 'Apple', userId }) + ).rejects.toThrow(HttpException); + + expect(symbolService.lookup).not.toHaveBeenCalled(); + }); + + it('Gives the import-ready asset profiles available to the user', async () => { + const user = setupUser([permissions.createActivity]); + + configuration.DATA_SOURCES_GHOSTFOLIO_DATA_PROVIDER = [DataSource.YAHOO]; + configuration.ENABLE_FEATURE_SUBSCRIPTION = true; + + jest.spyOn(symbolService, 'lookup').mockResolvedValue({ + items: [ + { + assetClass: AssetClass.EQUITY, + assetSubClass: AssetSubClass.STOCK, + currency: 'USD', + dataProviderInfo: { isPremium: false }, + dataSource: DataSource.YAHOO, + name: 'Apple Inc.', + symbol: 'AAPL' + }, + { + assetClass: AssetClass.EQUITY, + assetSubClass: AssetSubClass.STOCK, + currency: 'USD', + dataProviderInfo: { isPremium: true }, + dataSource: DataSource.GHOSTFOLIO, + name: 'Premium asset', + symbol: 'PREMIUM' + } + ] + }); + + const result = await mcpService.searchAssetProfiles({ + query: 'Apple', + userId + }); + + expect(symbolService.lookup).toHaveBeenCalledWith({ + query: 'Apple', + user + }); + expect(JSON.parse(result.content[0].text)).toEqual({ + assetProfiles: [ + { + assetClass: AssetClass.EQUITY, + assetSubClass: AssetSubClass.STOCK, + currency: 'USD', + dataSource: DataSource.GHOSTFOLIO, + name: 'Apple Inc.', + symbol: 'AAPL' + } + ] + }); + }); + }); + describe('importActivities', () => { it('Refuses a user without the permission to create an activity', async () => { setupUser([]); diff --git a/apps/api/src/app/endpoints/mcp/mcp.service.ts b/apps/api/src/app/endpoints/mcp/mcp.service.ts index 3cd95aaa0c..1bf25cdcce 100644 --- a/apps/api/src/app/endpoints/mcp/mcp.service.ts +++ b/apps/api/src/app/endpoints/mcp/mcp.service.ts @@ -1,6 +1,10 @@ import { ImportService } from '@ghostfolio/api/app/import/import.service'; +import { SymbolService } from '@ghostfolio/api/app/symbol/symbol.service'; import { UserService } from '@ghostfolio/api/app/user/user.service'; -import { getUnmaskedGhostfolioDataSource } from '@ghostfolio/api/helper/data-source.helper'; +import { + getMaskedGhostfolioDataSource, + getUnmaskedGhostfolioDataSource +} from '@ghostfolio/api/helper/data-source.helper'; import { ApiService } from '@ghostfolio/api/services/api/api.service'; import { ConfigurationService } from '@ghostfolio/api/services/configuration/configuration.service'; import { PortfolioTableService } from '@ghostfolio/api/services/portfolio-table/portfolio-table.service'; @@ -15,7 +19,8 @@ import { z } from 'zod'; import { GET_ACCOUNTS_PARAMETERS, GET_ACTIVITIES_PARAMETERS, - IMPORT_ACTIVITIES_PARAMETERS + IMPORT_ACTIVITIES_PARAMETERS, + SEARCH_ASSET_PROFILES_PARAMETERS } from './mcp.schemas'; @Injectable() @@ -25,6 +30,7 @@ export class McpService { private readonly configurationService: ConfigurationService, private readonly importService: ImportService, private readonly portfolioTableService: PortfolioTableService, + private readonly symbolService: SymbolService, private readonly userService: UserService ) {} @@ -146,6 +152,56 @@ export class McpService { return this.getTextResult(text); } + public async searchAssetProfiles({ + query, + userId + }: z.infer & { userId: string }) { + const user = await this.getUserWithPermission({ + userId, + permission: permissions.createActivity + }); + + const { items } = await this.symbolService.lookup({ query, user }); + + const ghostfolioDataSources = this.configurationService.get( + 'ENABLE_FEATURE_SUBSCRIPTION' + ) + ? this.configurationService.get('DATA_SOURCES_GHOSTFOLIO_DATA_PROVIDER') + : []; + + const assetProfiles = items.flatMap( + ({ + assetClass, + assetSubClass, + currency, + dataProviderInfo, + dataSource, + name, + symbol + }) => { + if (!dataSource || dataProviderInfo.isPremium) { + return []; + } + + return [ + { + assetClass, + assetSubClass, + currency, + name, + symbol, + dataSource: getMaskedGhostfolioDataSource({ + dataSource, + ghostfolioDataSources + }) + } + ]; + } + ); + + return this.getTextResult(JSON.stringify({ assetProfiles }, null, 2)); + } + private getTextResult(text: string) { return { content: [{ text, type: 'text' as const }] }; } From da7b5dfb9d3758f2de4a35483555f5bbfa81bc82 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 10 Sep 2026 17:40:45 +0200 Subject: [PATCH 40/50] Task/update locales (#7821) Co-authored-by: github-actions[bot] --- apps/client/src/locales/messages.ca.xlf | 382 ++++++++++++------------ apps/client/src/locales/messages.de.xlf | 382 ++++++++++++------------ apps/client/src/locales/messages.es.xlf | 382 ++++++++++++------------ apps/client/src/locales/messages.fr.xlf | 382 ++++++++++++------------ apps/client/src/locales/messages.it.xlf | 382 ++++++++++++------------ apps/client/src/locales/messages.ja.xlf | 382 ++++++++++++------------ apps/client/src/locales/messages.ko.xlf | 382 ++++++++++++------------ apps/client/src/locales/messages.nl.xlf | 382 ++++++++++++------------ apps/client/src/locales/messages.pl.xlf | 382 ++++++++++++------------ apps/client/src/locales/messages.pt.xlf | 382 ++++++++++++------------ apps/client/src/locales/messages.tr.xlf | 382 ++++++++++++------------ apps/client/src/locales/messages.uk.xlf | 382 ++++++++++++------------ apps/client/src/locales/messages.xlf | 381 +++++++++++------------ apps/client/src/locales/messages.zh.xlf | 382 ++++++++++++------------ 14 files changed, 2785 insertions(+), 2562 deletions(-) diff --git a/apps/client/src/locales/messages.ca.xlf b/apps/client/src/locales/messages.ca.xlf index d2bf5f425e..7de5ed15ff 100644 --- a/apps/client/src/locales/messages.ca.xlf +++ b/apps/client/src/locales/messages.ca.xlf @@ -26,7 +26,7 @@ libs/common/src/lib/routes/routes.ts - 311 + 332 @@ -34,7 +34,7 @@ Internacionalització libs/common/src/lib/routes/routes.ts - 154 + 175 @@ -54,7 +54,7 @@ libs/common/src/lib/routes/routes.ts - 121 + 135 @@ -115,31 +115,31 @@ kebab-case libs/common/src/lib/routes/routes.ts - 231 + 252 libs/common/src/lib/routes/routes.ts - 232 + 253 libs/common/src/lib/routes/routes.ts - 237 + 258 libs/common/src/lib/routes/routes.ts - 245 + 266 libs/common/src/lib/routes/routes.ts - 253 + 274 libs/common/src/lib/routes/routes.ts - 261 + 282 libs/common/src/lib/routes/routes.ts - 269 + 290 @@ -148,11 +148,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 243 + 264 libs/common/src/lib/routes/routes.ts - 246 + 267 @@ -161,11 +161,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 259 + 280 libs/common/src/lib/routes/routes.ts - 262 + 283 @@ -174,19 +174,19 @@ kebab-case libs/common/src/lib/routes/routes.ts - 289 + 310 libs/common/src/lib/routes/routes.ts - 290 + 311 libs/common/src/lib/routes/routes.ts - 294 + 315 libs/common/src/lib/routes/routes.ts - 300 + 321 @@ -195,11 +195,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 309 + 330 libs/common/src/lib/routes/routes.ts - 310 + 331 @@ -208,11 +208,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 314 + 335 libs/common/src/lib/routes/routes.ts - 315 + 336 @@ -221,11 +221,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 324 + 345 libs/common/src/lib/routes/routes.ts - 325 + 346 @@ -234,11 +234,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 334 + 355 libs/common/src/lib/routes/routes.ts - 335 + 356 @@ -247,31 +247,31 @@ kebab-case libs/common/src/lib/routes/routes.ts - 339 + 360 libs/common/src/lib/routes/routes.ts - 340 + 361 libs/common/src/lib/routes/routes.ts - 345 + 366 libs/common/src/lib/routes/routes.ts - 353 + 374 libs/common/src/lib/routes/routes.ts - 361 + 382 libs/common/src/lib/routes/routes.ts - 369 + 390 libs/common/src/lib/routes/routes.ts - 377 + 398 @@ -427,7 +427,7 @@ libs/common/src/lib/routes/routes.ts - 99 + 113 libs/ui/src/lib/accounts-table/accounts-table.component.html @@ -479,7 +479,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 182 + 185 libs/ui/src/lib/benchmark/benchmark.component.html @@ -543,7 +543,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 329 + 332 @@ -579,15 +579,15 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 309 + 312 libs/ui/src/lib/activities-table/activities-table.component.html - 346 + 349 libs/ui/src/lib/holdings-table/holdings-table.component.html - 99 + 101 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -623,7 +623,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 510 + 513 @@ -643,7 +643,7 @@ apps/client/src/app/components/admin-overview/admin-overview.html - 241 + 236 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -671,7 +671,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 545 + 548 libs/ui/src/lib/benchmark/benchmark.component.html @@ -715,11 +715,11 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 7 + 10 libs/ui/src/lib/activities-table/activities-table.component.html - 204 + 207 @@ -729,6 +729,10 @@ apps/client/src/app/components/admin-jobs/admin-jobs.html 52 + + libs/common/src/lib/routes/routes.ts + 76 + Historical Market Data @@ -919,7 +923,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 213 + 216 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html @@ -955,7 +959,7 @@ Punts de referència apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 128 + 118 @@ -963,7 +967,7 @@ Divises apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 133 + 123 apps/client/src/app/pages/public/public-page.html @@ -983,7 +987,7 @@ ETFs sense País apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 138 + 128 @@ -991,7 +995,7 @@ ETFs sense Sector apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 143 + 133 @@ -1007,7 +1011,7 @@ Filtra per... apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 377 + 350 @@ -1027,7 +1031,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 50 + 52 @@ -1115,11 +1119,11 @@ Realment vol eliminar el perfil d’aquest actiu? apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 27 + 33 apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 69 + 75 @@ -1259,7 +1263,7 @@ Update Activity libs/common/src/lib/routes/routes.ts - 181 + 202 @@ -1359,7 +1363,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 396 + 399 @@ -1369,6 +1373,10 @@ apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html 7 + + libs/common/src/lib/routes/routes.ts + 69 + Search @@ -1499,7 +1507,7 @@ Update Account libs/common/src/lib/routes/routes.ts - 106 + 120 @@ -1563,7 +1571,7 @@ apps/client/src/app/components/admin-overview/admin-overview.html - 304 + 299 libs/ui/src/lib/account-balances/account-balances.component.html @@ -1823,7 +1831,7 @@ libs/common/src/lib/routes/routes.ts - 207 + 228 @@ -1951,11 +1959,11 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 235 + 238 libs/ui/src/lib/holdings-table/holdings-table.component.html - 74 + 76 @@ -1975,7 +1983,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 94 + 102 @@ -2347,7 +2355,7 @@ {VAR_PLURAL, plural, =1 {activitat} other {activitats}} apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 18 + 25 @@ -2355,7 +2363,7 @@ Rendiment brut absolut apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 80 + 88 @@ -2363,7 +2371,7 @@ Rendiment net absolut apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 114 + 122 apps/client/src/app/pages/portfolio/analysis/analysis-page.html @@ -2375,7 +2383,7 @@ Rendiment net apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 129 + 137 apps/client/src/app/pages/portfolio/analysis/analysis-page.html @@ -2387,7 +2395,7 @@ Actius totals apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 152 + 165 @@ -2395,7 +2403,7 @@ Poder adquisitiu apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 292 + 305 @@ -2403,7 +2411,7 @@ Exclòs de l’anàlisi apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 324 + 337 @@ -2411,7 +2419,7 @@ Passius apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 355 + 368 apps/client/src/app/pages/features/features-page.html @@ -2423,7 +2431,7 @@ Valor net apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 378 + 391 @@ -2431,7 +2439,7 @@ Rendiment anualitzat apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 393 + 406 @@ -2439,7 +2447,7 @@ Definiu l’import del vostre fons d’emergència. apps/client/src/app/components/portfolio-summary/portfolio-summary.component.ts - 160 + 169 @@ -2663,7 +2671,7 @@ Vaja! No s’ha pogut concedir l’accés. apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.component.ts - 311 + 314 @@ -2747,7 +2755,7 @@ Add Account libs/common/src/lib/routes/routes.ts - 87 + 101 @@ -2843,7 +2851,7 @@ Clone Activity libs/common/src/lib/routes/routes.ts - 169 + 190 @@ -3015,7 +3023,7 @@ Investments apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 214 + 227 @@ -3095,7 +3103,7 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 193 + 197 @@ -3115,7 +3123,7 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 191 + 195 @@ -3127,7 +3135,7 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 194 + 198 @@ -3167,7 +3175,7 @@ libs/common/src/lib/routes/routes.ts - 275 + 296 @@ -3183,7 +3191,7 @@ libs/common/src/lib/routes/routes.ts - 240 + 261 @@ -3199,7 +3207,7 @@ libs/common/src/lib/routes/routes.ts - 248 + 269 @@ -3215,7 +3223,7 @@ libs/common/src/lib/routes/routes.ts - 264 + 285 @@ -3287,7 +3295,7 @@ libs/common/src/lib/routes/routes.ts - 109 + 123 libs/ui/src/lib/assistant/assistant.html @@ -3371,7 +3379,7 @@ libs/common/src/lib/routes/routes.ts - 78 + 92 @@ -3395,7 +3403,7 @@ libs/common/src/lib/routes/routes.ts - 65 + 79 @@ -3411,7 +3419,7 @@ libs/common/src/lib/routes/routes.ts - 70 + 84 @@ -3423,7 +3431,7 @@ libs/common/src/lib/routes/routes.ts - 75 + 89 @@ -3459,11 +3467,11 @@ libs/common/src/lib/routes/routes.ts - 148 + 169 libs/common/src/lib/routes/routes.ts - 225 + 246 @@ -3575,7 +3583,7 @@ libs/common/src/lib/routes/routes.ts - 280 + 301 @@ -3639,7 +3647,7 @@ libs/common/src/lib/routes/routes.ts - 306 + 327 @@ -3659,7 +3667,7 @@ libs/common/src/lib/routes/routes.ts - 295 + 316 @@ -3671,7 +3679,7 @@ libs/common/src/lib/routes/routes.ts - 303 + 324 @@ -3680,11 +3688,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 298 + 319 libs/common/src/lib/routes/routes.ts - 301 + 322 @@ -3856,7 +3864,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 183 + 196 apps/client/src/app/pages/public/public-page.html @@ -3864,11 +3872,11 @@ libs/common/src/lib/routes/routes.ts - 130 + 144 libs/common/src/lib/routes/routes.ts - 222 + 243 libs/ui/src/lib/assistant/assistant.html @@ -3900,7 +3908,7 @@ libs/common/src/lib/routes/routes.ts - 140 + 154 @@ -3932,15 +3940,15 @@ libs/common/src/lib/routes/routes.ts - 135 + 149 libs/common/src/lib/routes/routes.ts - 316 + 337 libs/common/src/lib/routes/routes.ts - 364 + 385 @@ -4264,7 +4272,7 @@ Do you really want to delete these activities? libs/ui/src/lib/activities-table/activities-table.component.ts - 344 + 327 @@ -4368,7 +4376,7 @@ Oops! Could not delete the asset profiles. apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 54 + 60 @@ -4440,7 +4448,7 @@ Add Activity libs/common/src/lib/routes/routes.ts - 174 + 195 @@ -4640,7 +4648,7 @@ libs/common/src/lib/routes/routes.ts - 184 + 205 libs/ui/src/lib/accounts-table/accounts-table.component.html @@ -4724,7 +4732,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 260 + 263 @@ -4736,11 +4744,11 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 28 + 31 libs/ui/src/lib/activities-table/activities-table.component.html - 432 + 435 @@ -4752,11 +4760,11 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 54 + 57 libs/ui/src/lib/activities-table/activities-table.component.html - 446 + 449 @@ -4764,7 +4772,7 @@ S’estan important dades... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 172 + 176 @@ -4772,7 +4780,7 @@ La importació s’ha completat apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 183 + 187 @@ -4788,7 +4796,7 @@ S’estan validant les dades... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 294 + 298 @@ -4908,7 +4916,7 @@ libs/common/src/lib/routes/routes.ts - 189 + 210 @@ -5096,7 +5104,7 @@ libs/common/src/lib/routes/routes.ts - 194 + 215 @@ -5120,7 +5128,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 479 + 492 apps/client/src/app/pages/features/features-page.html @@ -5316,7 +5324,7 @@ libs/common/src/lib/routes/routes.ts - 326 + 347 @@ -5568,7 +5576,7 @@ libs/common/src/lib/routes/routes.ts - 336 + 357 @@ -5600,7 +5608,7 @@ libs/common/src/lib/routes/routes.ts - 384 + 405 @@ -5609,11 +5617,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 375 + 396 libs/common/src/lib/routes/routes.ts - 379 + 400 @@ -5653,7 +5661,7 @@ Data gathering has been started. apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 413 + 386 @@ -5949,7 +5957,7 @@ libs/common/src/lib/routes/routes.ts - 387 + 408 @@ -6033,11 +6041,11 @@ Activitats d’exportació libs/ui/src/lib/activities-table/activities-table.component.html - 73 + 76 libs/ui/src/lib/activities-table/activities-table.component.html - 460 + 463 @@ -6045,11 +6053,11 @@ Exporta esborranys com a ICS libs/ui/src/lib/activities-table/activities-table.component.html - 87 + 90 libs/ui/src/lib/activities-table/activities-table.component.html - 473 + 476 @@ -6057,7 +6065,7 @@ Suprimeix les activitats libs/ui/src/lib/activities-table/activities-table.component.html - 111 + 114 @@ -6065,7 +6073,7 @@ Esborrany libs/ui/src/lib/activities-table/activities-table.component.html - 188 + 191 libs/ui/src/lib/i18n.ts @@ -6077,7 +6085,7 @@ Clonar libs/ui/src/lib/activities-table/activities-table.component.html - 521 + 524 @@ -6085,7 +6093,7 @@ Exporta l’esborrany com a ICS libs/ui/src/lib/activities-table/activities-table.component.html - 533 + 536 @@ -6093,11 +6101,11 @@ Realment vols suprimir aquesta activitat? libs/ui/src/lib/activities-table/activities-table.component.ts - 343 + 326 libs/ui/src/lib/activities-table/activities-table.component.ts - 354 + 337 @@ -6288,6 +6296,14 @@ 286 + + Add to Watchlist + Add to Watchlist + + libs/common/src/lib/routes/routes.ts + 163 + + Market data provided by Dades de mercat proporcionades per @@ -6353,7 +6369,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 465 + 478 libs/ui/src/lib/fire-calculator/fire-calculator.component.ts @@ -6381,11 +6397,11 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 124 + 126 libs/ui/src/lib/holdings-table/holdings-table.component.html - 125 + 127 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -6405,7 +6421,7 @@ Mostra-ho tot libs/ui/src/lib/holdings-table/holdings-table.component.html - 216 + 222 @@ -6417,11 +6433,11 @@ libs/common/src/lib/routes/routes.ts - 94 + 108 libs/ui/src/lib/activities-table/activities-table.component.html - 362 + 365 libs/ui/src/lib/i18n.ts @@ -6533,15 +6549,15 @@ Fons d’emergència apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 229 + 242 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 307 + 320 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 412 + 425 apps/client/src/app/pages/features/features-page.html @@ -6637,7 +6653,7 @@ No Activities apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 148 + 138 @@ -6697,7 +6713,7 @@ Export libs/ui/src/lib/activities-table/activities-table.component.html - 69 + 72 @@ -6753,7 +6769,7 @@ Comprar apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 35 + 43 libs/ui/src/lib/i18n.ts @@ -6769,7 +6785,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 285 + 288 libs/ui/src/lib/i18n.ts @@ -6797,7 +6813,7 @@ Vendre apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 49 + 57 libs/ui/src/lib/i18n.ts @@ -6817,7 +6833,7 @@ Efectiu apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 261 + 274 @@ -6917,7 +6933,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 66 + 74 apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts @@ -7109,7 +7125,7 @@ Oops! Could not delete the asset profile. apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 53 + 59 @@ -7213,7 +7229,7 @@ View Holding libs/ui/src/lib/activities-table/activities-table.component.html - 499 + 502 @@ -7221,7 +7237,7 @@ Do you really want to delete these asset profiles? apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 70 + 76 @@ -7261,7 +7277,7 @@ Oops! Could not update access. apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.component.ts - 409 + 414 @@ -7589,7 +7605,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 107 + 110 @@ -7737,7 +7753,7 @@ libs/common/src/lib/routes/routes.ts - 348 + 369 @@ -7753,7 +7769,7 @@ libs/common/src/lib/routes/routes.ts - 356 + 377 @@ -7762,11 +7778,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 351 + 372 libs/common/src/lib/routes/routes.ts - 354 + 375 @@ -7775,11 +7791,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 343 + 364 libs/common/src/lib/routes/routes.ts - 346 + 367 @@ -7939,7 +7955,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.ts - 158 + 167 apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html @@ -8123,7 +8139,7 @@ Change libs/ui/src/lib/holdings-table/holdings-table.component.html - 146 + 148 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -8159,11 +8175,11 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 168 + 170 libs/ui/src/lib/holdings-table/holdings-table.component.html - 169 + 171 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -8296,11 +8312,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 267 + 288 libs/common/src/lib/routes/routes.ts - 270 + 291 @@ -8312,7 +8328,7 @@ libs/common/src/lib/routes/routes.ts - 272 + 293 @@ -8424,7 +8440,7 @@ libs/common/src/lib/routes/routes.ts - 145 + 166 @@ -8440,11 +8456,11 @@ {VAR_PLURAL, plural, =1 {Activity} other {Activities}} libs/ui/src/lib/activities-table/activities-table.component.html - 70 + 73 libs/ui/src/lib/activities-table/activities-table.component.html - 108 + 111 @@ -8469,11 +8485,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 235 + 256 libs/common/src/lib/routes/routes.ts - 238 + 259 @@ -8609,7 +8625,7 @@ libs/common/src/lib/routes/routes.ts - 286 + 307 @@ -8617,7 +8633,7 @@ Open Source Alternative to libs/common/src/lib/routes/routes.ts - 381 + 402 @@ -8650,15 +8666,15 @@ kebab-case libs/common/src/lib/routes/routes.ts - 367 + 388 libs/common/src/lib/routes/routes.ts - 370 + 391 libs/common/src/lib/routes/routes.ts - 378 + 399 @@ -8667,11 +8683,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 359 + 380 libs/common/src/lib/routes/routes.ts - 362 + 383 @@ -8896,11 +8912,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 391 + 412 libs/common/src/lib/routes/routes.ts - 392 + 413 diff --git a/apps/client/src/locales/messages.de.xlf b/apps/client/src/locales/messages.de.xlf index 8e857aaf41..935e8b1de5 100644 --- a/apps/client/src/locales/messages.de.xlf +++ b/apps/client/src/locales/messages.de.xlf @@ -66,11 +66,11 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 7 + 10 libs/ui/src/lib/activities-table/activities-table.component.html - 204 + 207 @@ -158,7 +158,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 182 + 185 libs/ui/src/lib/benchmark/benchmark.component.html @@ -218,15 +218,15 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 309 + 312 libs/ui/src/lib/activities-table/activities-table.component.html - 346 + 349 libs/ui/src/lib/holdings-table/holdings-table.component.html - 99 + 101 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -262,7 +262,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 510 + 513 @@ -282,7 +282,7 @@ apps/client/src/app/components/admin-overview/admin-overview.html - 241 + 236 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -310,7 +310,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 545 + 548 libs/ui/src/lib/benchmark/benchmark.component.html @@ -518,7 +518,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 213 + 216 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html @@ -566,7 +566,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 50 + 52 @@ -686,7 +686,7 @@ Konto bearbeiten libs/common/src/lib/routes/routes.ts - 106 + 120 @@ -706,7 +706,7 @@ apps/client/src/app/components/admin-overview/admin-overview.html - 304 + 299 libs/ui/src/lib/account-balances/account-balances.component.html @@ -862,7 +862,7 @@ libs/common/src/lib/routes/routes.ts - 121 + 135 @@ -1034,7 +1034,7 @@ Absolute Brutto Performance apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 80 + 88 @@ -1042,7 +1042,7 @@ Absolute Netto Performance apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 114 + 122 apps/client/src/app/pages/portfolio/analysis/analysis-page.html @@ -1054,7 +1054,7 @@ Netto Performance apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 129 + 137 apps/client/src/app/pages/portfolio/analysis/analysis-page.html @@ -1066,7 +1066,7 @@ Gesamtanlagevermögen apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 152 + 165 @@ -1074,7 +1074,7 @@ Kaufkraft apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 292 + 305 @@ -1082,7 +1082,7 @@ Gesamtvermögen apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 378 + 391 @@ -1090,7 +1090,7 @@ Performance pro Jahr apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 393 + 406 @@ -1098,7 +1098,7 @@ Bitte setze den Betrag deines Notfallfonds. apps/client/src/app/components/portfolio-summary/portfolio-summary.component.ts - 160 + 169 @@ -1170,11 +1170,11 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 124 + 126 libs/ui/src/lib/holdings-table/holdings-table.component.html - 125 + 127 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -1194,7 +1194,7 @@ Alle anzeigen libs/ui/src/lib/holdings-table/holdings-table.component.html - 216 + 222 @@ -1282,7 +1282,7 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 194 + 198 @@ -1306,7 +1306,7 @@ libs/common/src/lib/routes/routes.ts - 275 + 296 @@ -1322,7 +1322,7 @@ libs/common/src/lib/routes/routes.ts - 264 + 285 @@ -1350,7 +1350,7 @@ Konto hinzufügen libs/common/src/lib/routes/routes.ts - 87 + 101 @@ -1582,7 +1582,7 @@ libs/common/src/lib/routes/routes.ts - 109 + 123 libs/ui/src/lib/assistant/assistant.html @@ -1642,7 +1642,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 329 + 332 @@ -1706,7 +1706,7 @@ libs/common/src/lib/routes/routes.ts - 78 + 92 @@ -1818,7 +1818,7 @@ libs/common/src/lib/routes/routes.ts - 280 + 301 @@ -1862,7 +1862,7 @@ libs/common/src/lib/routes/routes.ts - 306 + 327 @@ -1890,7 +1890,7 @@ libs/common/src/lib/routes/routes.ts - 311 + 332 @@ -1926,11 +1926,11 @@ libs/common/src/lib/routes/routes.ts - 148 + 169 libs/common/src/lib/routes/routes.ts - 225 + 246 @@ -1962,15 +1962,15 @@ libs/common/src/lib/routes/routes.ts - 135 + 149 libs/common/src/lib/routes/routes.ts - 316 + 337 libs/common/src/lib/routes/routes.ts - 364 + 385 @@ -1986,7 +1986,7 @@ libs/common/src/lib/routes/routes.ts - 189 + 210 @@ -2074,7 +2074,7 @@ libs/common/src/lib/routes/routes.ts - 194 + 215 @@ -2130,7 +2130,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 183 + 196 apps/client/src/app/pages/public/public-page.html @@ -2138,11 +2138,11 @@ libs/common/src/lib/routes/routes.ts - 130 + 144 libs/common/src/lib/routes/routes.ts - 222 + 243 libs/ui/src/lib/assistant/assistant.html @@ -2182,7 +2182,7 @@ Verkauf apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 49 + 57 libs/ui/src/lib/i18n.ts @@ -2242,11 +2242,11 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 235 + 238 libs/ui/src/lib/holdings-table/holdings-table.component.html - 74 + 76 @@ -2258,7 +2258,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 260 + 263 @@ -2282,7 +2282,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 396 + 399 @@ -2330,7 +2330,7 @@ libs/common/src/lib/routes/routes.ts - 184 + 205 libs/ui/src/lib/accounts-table/accounts-table.component.html @@ -2342,7 +2342,7 @@ Daten importieren... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 172 + 176 @@ -2350,7 +2350,7 @@ Der Import wurde abgeschlossen apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 183 + 187 @@ -2390,7 +2390,7 @@ libs/common/src/lib/routes/routes.ts - 326 + 347 @@ -2414,7 +2414,7 @@ libs/common/src/lib/routes/routes.ts - 207 + 228 @@ -2450,7 +2450,7 @@ libs/common/src/lib/routes/routes.ts - 336 + 357 @@ -2494,7 +2494,7 @@ libs/common/src/lib/routes/routes.ts - 387 + 408 @@ -2526,7 +2526,7 @@ Geplant libs/ui/src/lib/activities-table/activities-table.component.html - 188 + 191 libs/ui/src/lib/i18n.ts @@ -2542,11 +2542,11 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 28 + 31 libs/ui/src/lib/activities-table/activities-table.component.html - 432 + 435 @@ -2554,11 +2554,11 @@ Aktivitäten exportieren libs/ui/src/lib/activities-table/activities-table.component.html - 73 + 76 libs/ui/src/lib/activities-table/activities-table.component.html - 460 + 463 @@ -2566,11 +2566,11 @@ Geplante Aktivitäten als ICS exportieren libs/ui/src/lib/activities-table/activities-table.component.html - 87 + 90 libs/ui/src/lib/activities-table/activities-table.component.html - 473 + 476 @@ -2578,7 +2578,7 @@ Kopieren libs/ui/src/lib/activities-table/activities-table.component.html - 521 + 524 @@ -2586,7 +2586,7 @@ Geplante Aktivität als ICS exportieren libs/ui/src/lib/activities-table/activities-table.component.html - 533 + 536 @@ -2594,11 +2594,11 @@ Möchtest du diese Aktivität wirklich löschen? libs/ui/src/lib/activities-table/activities-table.component.ts - 343 + 326 libs/ui/src/lib/activities-table/activities-table.component.ts - 354 + 337 @@ -2678,7 +2678,7 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 193 + 197 @@ -2690,7 +2690,7 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 191 + 195 @@ -2834,7 +2834,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 465 + 478 libs/ui/src/lib/fire-calculator/fire-calculator.component.ts @@ -2914,7 +2914,7 @@ Filtern nach... apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 377 + 350 @@ -2990,7 +2990,7 @@ Von der Analyse ausgenommen apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 324 + 337 @@ -3090,11 +3090,11 @@ libs/common/src/lib/routes/routes.ts - 94 + 108 libs/ui/src/lib/activities-table/activities-table.component.html - 362 + 365 libs/ui/src/lib/i18n.ts @@ -3166,7 +3166,7 @@ exportieren libs/ui/src/lib/activities-table/activities-table.component.html - 69 + 72 @@ -3186,7 +3186,7 @@ Bargeld apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 261 + 274 @@ -3218,15 +3218,15 @@ Notfallfonds apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 229 + 242 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 307 + 320 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 412 + 425 apps/client/src/app/pages/features/features-page.html @@ -3354,7 +3354,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 66 + 74 apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts @@ -3474,7 +3474,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 479 + 492 apps/client/src/app/pages/features/features-page.html @@ -3534,7 +3534,7 @@ Daten validieren... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 294 + 298 @@ -3562,7 +3562,7 @@ libs/common/src/lib/routes/routes.ts - 65 + 79 @@ -3574,7 +3574,7 @@ libs/common/src/lib/routes/routes.ts - 75 + 89 @@ -3602,7 +3602,7 @@ libs/common/src/lib/routes/routes.ts - 140 + 154 @@ -3642,11 +3642,11 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 54 + 57 libs/ui/src/lib/activities-table/activities-table.component.html - 446 + 449 @@ -3698,7 +3698,7 @@ Keine Aktivitäten apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 148 + 138 @@ -3746,7 +3746,7 @@ Investitionen apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 214 + 227 @@ -4026,7 +4026,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 94 + 102 @@ -4101,6 +4101,14 @@ 18 + + Add to Watchlist + Add to Watchlist + + libs/common/src/lib/routes/routes.ts + 163 + + Market data provided by Marktdaten bereitgestellt von @@ -4362,7 +4370,7 @@ libs/common/src/lib/routes/routes.ts - 70 + 84 @@ -4502,7 +4510,7 @@ Verbindlichkeiten apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 355 + 368 apps/client/src/app/pages/features/features-page.html @@ -4522,7 +4530,7 @@ libs/common/src/lib/routes/routes.ts - 240 + 261 @@ -4538,7 +4546,7 @@ libs/common/src/lib/routes/routes.ts - 248 + 269 @@ -4658,7 +4666,7 @@ Aktivität bearbeiten libs/common/src/lib/routes/routes.ts - 181 + 202 @@ -4700,6 +4708,10 @@ apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html 7 + + libs/common/src/lib/routes/routes.ts + 69 + Personal Finance Tools @@ -4710,7 +4722,7 @@ libs/common/src/lib/routes/routes.ts - 384 + 405 @@ -4938,7 +4950,7 @@ Kauf apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 35 + 43 libs/ui/src/lib/i18n.ts @@ -4966,7 +4978,7 @@ ETFs ohne Länder apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 138 + 128 @@ -4974,7 +4986,7 @@ ETFs ohne Sektoren apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 143 + 133 @@ -5202,7 +5214,7 @@ Währungen apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 133 + 123 apps/client/src/app/pages/public/public-page.html @@ -5398,7 +5410,7 @@ Möchtest du diese Aktivitäten wirklich löschen? libs/ui/src/lib/activities-table/activities-table.component.ts - 344 + 327 @@ -5502,7 +5514,7 @@ Ups! Die Anlageprofile konnten nicht gelöscht werden. apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 54 + 60 @@ -5558,7 +5570,7 @@ Aktivität hinzufügen libs/common/src/lib/routes/routes.ts - 174 + 195 @@ -5607,19 +5619,19 @@ kebab-case libs/common/src/lib/routes/routes.ts - 289 + 310 libs/common/src/lib/routes/routes.ts - 290 + 311 libs/common/src/lib/routes/routes.ts - 294 + 315 libs/common/src/lib/routes/routes.ts - 300 + 321 @@ -5628,11 +5640,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 309 + 330 libs/common/src/lib/routes/routes.ts - 310 + 331 @@ -5641,31 +5653,31 @@ kebab-case libs/common/src/lib/routes/routes.ts - 231 + 252 libs/common/src/lib/routes/routes.ts - 232 + 253 libs/common/src/lib/routes/routes.ts - 237 + 258 libs/common/src/lib/routes/routes.ts - 245 + 266 libs/common/src/lib/routes/routes.ts - 253 + 274 libs/common/src/lib/routes/routes.ts - 261 + 282 libs/common/src/lib/routes/routes.ts - 269 + 290 @@ -5674,11 +5686,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 259 + 280 libs/common/src/lib/routes/routes.ts - 262 + 283 @@ -5687,11 +5699,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 243 + 264 libs/common/src/lib/routes/routes.ts - 246 + 267 @@ -5700,11 +5712,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 314 + 335 libs/common/src/lib/routes/routes.ts - 315 + 336 @@ -5713,11 +5725,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 324 + 345 libs/common/src/lib/routes/routes.ts - 325 + 346 @@ -5726,11 +5738,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 334 + 355 libs/common/src/lib/routes/routes.ts - 335 + 356 @@ -5739,31 +5751,31 @@ kebab-case libs/common/src/lib/routes/routes.ts - 339 + 360 libs/common/src/lib/routes/routes.ts - 340 + 361 libs/common/src/lib/routes/routes.ts - 345 + 366 libs/common/src/lib/routes/routes.ts - 353 + 374 libs/common/src/lib/routes/routes.ts - 361 + 382 libs/common/src/lib/routes/routes.ts - 369 + 390 libs/common/src/lib/routes/routes.ts - 377 + 398 @@ -5836,11 +5848,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 375 + 396 libs/common/src/lib/routes/routes.ts - 379 + 400 @@ -5872,7 +5884,7 @@ Finanzmarktdaten synchronisieren wurde gestartet. apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 413 + 386 @@ -5996,7 +6008,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 285 + 288 libs/ui/src/lib/i18n.ts @@ -6052,7 +6064,7 @@ libs/common/src/lib/routes/routes.ts - 99 + 113 libs/ui/src/lib/accounts-table/accounts-table.component.html @@ -6130,17 +6142,21 @@ apps/client/src/app/components/admin-jobs/admin-jobs.html 52 + + libs/common/src/lib/routes/routes.ts + 76 + Do you really want to delete this asset profile? Möchtest du dieses Anlageprofil wirklich löschen? apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 27 + 33 apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 69 + 75 @@ -6508,7 +6524,7 @@ Ups! Der Zugang konnte nicht gewährt werden. apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.component.ts - 311 + 314 @@ -6764,7 +6780,7 @@ libs/common/src/lib/routes/routes.ts - 295 + 316 @@ -6776,7 +6792,7 @@ libs/common/src/lib/routes/routes.ts - 303 + 324 @@ -6785,11 +6801,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 298 + 319 libs/common/src/lib/routes/routes.ts - 301 + 322 @@ -6881,7 +6897,7 @@ {VAR_PLURAL, plural, =1 {Aktivität} other {Aktivitäten}} apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 18 + 25 @@ -6897,7 +6913,7 @@ Aktivitäten löschen libs/ui/src/lib/activities-table/activities-table.component.html - 111 + 114 @@ -6905,7 +6921,7 @@ Internationalisierung libs/common/src/lib/routes/routes.ts - 154 + 175 @@ -6969,7 +6985,7 @@ Aktivität kopieren libs/common/src/lib/routes/routes.ts - 169 + 190 @@ -7009,7 +7025,7 @@ Benchmarks apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 128 + 118 @@ -7133,7 +7149,7 @@ Ups! Das Anlageprofil konnte nicht gelöscht werden. apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 53 + 59 @@ -7237,7 +7253,7 @@ Position ansehen libs/ui/src/lib/activities-table/activities-table.component.html - 499 + 502 @@ -7245,7 +7261,7 @@ Möchtest du diese Anlageprofile wirklich löschen? apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 70 + 76 @@ -7285,7 +7301,7 @@ Ups! Der Zugang konnte nicht bearbeitet werden. apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.component.ts - 409 + 414 @@ -7613,7 +7629,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 107 + 110 @@ -7761,7 +7777,7 @@ libs/common/src/lib/routes/routes.ts - 348 + 369 @@ -7777,7 +7793,7 @@ libs/common/src/lib/routes/routes.ts - 356 + 377 @@ -7786,11 +7802,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 351 + 372 libs/common/src/lib/routes/routes.ts - 354 + 375 @@ -7799,11 +7815,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 343 + 364 libs/common/src/lib/routes/routes.ts - 346 + 367 @@ -7963,7 +7979,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.ts - 158 + 167 apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html @@ -8147,7 +8163,7 @@ Änderung libs/ui/src/lib/holdings-table/holdings-table.component.html - 146 + 148 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -8183,11 +8199,11 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 168 + 170 libs/ui/src/lib/holdings-table/holdings-table.component.html - 169 + 171 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -8320,11 +8336,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 267 + 288 libs/common/src/lib/routes/routes.ts - 270 + 291 @@ -8336,7 +8352,7 @@ libs/common/src/lib/routes/routes.ts - 272 + 293 @@ -8424,7 +8440,7 @@ libs/common/src/lib/routes/routes.ts - 145 + 166 @@ -8440,11 +8456,11 @@ {VAR_PLURAL, plural, =1 {Aktivität} other {Aktivitäten}} libs/ui/src/lib/activities-table/activities-table.component.html - 70 + 73 libs/ui/src/lib/activities-table/activities-table.component.html - 108 + 111 @@ -8469,11 +8485,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 235 + 256 libs/common/src/lib/routes/routes.ts - 238 + 259 @@ -8609,7 +8625,7 @@ libs/common/src/lib/routes/routes.ts - 286 + 307 @@ -8617,7 +8633,7 @@ Open Source Alternative zu libs/common/src/lib/routes/routes.ts - 381 + 402 @@ -8650,15 +8666,15 @@ kebab-case libs/common/src/lib/routes/routes.ts - 367 + 388 libs/common/src/lib/routes/routes.ts - 370 + 391 libs/common/src/lib/routes/routes.ts - 378 + 399 @@ -8667,11 +8683,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 359 + 380 libs/common/src/lib/routes/routes.ts - 362 + 383 @@ -8896,11 +8912,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 391 + 412 libs/common/src/lib/routes/routes.ts - 392 + 413 diff --git a/apps/client/src/locales/messages.es.xlf b/apps/client/src/locales/messages.es.xlf index 8c38c0e391..bda5678c05 100644 --- a/apps/client/src/locales/messages.es.xlf +++ b/apps/client/src/locales/messages.es.xlf @@ -67,11 +67,11 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 7 + 10 libs/ui/src/lib/activities-table/activities-table.component.html - 204 + 207 @@ -159,7 +159,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 182 + 185 libs/ui/src/lib/benchmark/benchmark.component.html @@ -219,15 +219,15 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 309 + 312 libs/ui/src/lib/activities-table/activities-table.component.html - 346 + 349 libs/ui/src/lib/holdings-table/holdings-table.component.html - 99 + 101 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -263,7 +263,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 510 + 513 @@ -283,7 +283,7 @@ apps/client/src/app/components/admin-overview/admin-overview.html - 241 + 236 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -311,7 +311,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 545 + 548 libs/ui/src/lib/benchmark/benchmark.component.html @@ -519,7 +519,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 213 + 216 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html @@ -567,7 +567,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 50 + 52 @@ -671,7 +671,7 @@ Actualizar cuenta libs/common/src/lib/routes/routes.ts - 106 + 120 @@ -691,7 +691,7 @@ apps/client/src/app/components/admin-overview/admin-overview.html - 304 + 299 libs/ui/src/lib/account-balances/account-balances.component.html @@ -847,7 +847,7 @@ libs/common/src/lib/routes/routes.ts - 121 + 135 @@ -1019,7 +1019,7 @@ Rendimiento bruto absoluto apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 80 + 88 @@ -1027,7 +1027,7 @@ Rendimiento neto absoluto apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 114 + 122 apps/client/src/app/pages/portfolio/analysis/analysis-page.html @@ -1039,7 +1039,7 @@ Rendimiento neto apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 129 + 137 apps/client/src/app/pages/portfolio/analysis/analysis-page.html @@ -1051,7 +1051,7 @@ Total de activos apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 152 + 165 @@ -1059,7 +1059,7 @@ Poder adquisitivo apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 292 + 305 @@ -1067,7 +1067,7 @@ Patrimonio neto apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 378 + 391 @@ -1075,7 +1075,7 @@ Rendimiento anualizado apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 393 + 406 @@ -1083,7 +1083,7 @@ Por favor, ingresa la cantidad de tu fondo de emergencia. apps/client/src/app/components/portfolio-summary/portfolio-summary.component.ts - 160 + 169 @@ -1155,11 +1155,11 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 124 + 126 libs/ui/src/lib/holdings-table/holdings-table.component.html - 125 + 127 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -1179,7 +1179,7 @@ Mostrar todos libs/ui/src/lib/holdings-table/holdings-table.component.html - 216 + 222 @@ -1267,7 +1267,7 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 194 + 198 @@ -1291,7 +1291,7 @@ libs/common/src/lib/routes/routes.ts - 275 + 296 @@ -1307,7 +1307,7 @@ libs/common/src/lib/routes/routes.ts - 264 + 285 @@ -1335,7 +1335,7 @@ Añadir cuenta libs/common/src/lib/routes/routes.ts - 87 + 101 @@ -1567,7 +1567,7 @@ libs/common/src/lib/routes/routes.ts - 109 + 123 libs/ui/src/lib/assistant/assistant.html @@ -1627,7 +1627,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 329 + 332 @@ -1691,7 +1691,7 @@ libs/common/src/lib/routes/routes.ts - 78 + 92 @@ -1803,7 +1803,7 @@ libs/common/src/lib/routes/routes.ts - 280 + 301 @@ -1847,7 +1847,7 @@ libs/common/src/lib/routes/routes.ts - 306 + 327 @@ -1875,7 +1875,7 @@ libs/common/src/lib/routes/routes.ts - 311 + 332 @@ -1911,11 +1911,11 @@ libs/common/src/lib/routes/routes.ts - 148 + 169 libs/common/src/lib/routes/routes.ts - 225 + 246 @@ -1947,15 +1947,15 @@ libs/common/src/lib/routes/routes.ts - 135 + 149 libs/common/src/lib/routes/routes.ts - 316 + 337 libs/common/src/lib/routes/routes.ts - 364 + 385 @@ -1971,7 +1971,7 @@ libs/common/src/lib/routes/routes.ts - 189 + 210 @@ -2059,7 +2059,7 @@ libs/common/src/lib/routes/routes.ts - 194 + 215 @@ -2115,7 +2115,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 183 + 196 apps/client/src/app/pages/public/public-page.html @@ -2123,11 +2123,11 @@ libs/common/src/lib/routes/routes.ts - 130 + 144 libs/common/src/lib/routes/routes.ts - 222 + 243 libs/ui/src/lib/assistant/assistant.html @@ -2167,7 +2167,7 @@ Venta apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 49 + 57 libs/ui/src/lib/i18n.ts @@ -2227,11 +2227,11 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 235 + 238 libs/ui/src/lib/holdings-table/holdings-table.component.html - 74 + 76 @@ -2243,7 +2243,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 260 + 263 @@ -2267,7 +2267,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 396 + 399 @@ -2315,7 +2315,7 @@ libs/common/src/lib/routes/routes.ts - 184 + 205 libs/ui/src/lib/accounts-table/accounts-table.component.html @@ -2327,7 +2327,7 @@ Importando datos... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 172 + 176 @@ -2335,7 +2335,7 @@ La importación se ha completado apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 183 + 187 @@ -2375,7 +2375,7 @@ libs/common/src/lib/routes/routes.ts - 326 + 347 @@ -2399,7 +2399,7 @@ libs/common/src/lib/routes/routes.ts - 207 + 228 @@ -2435,7 +2435,7 @@ libs/common/src/lib/routes/routes.ts - 336 + 357 @@ -2479,7 +2479,7 @@ libs/common/src/lib/routes/routes.ts - 387 + 408 @@ -2511,7 +2511,7 @@ Borrador libs/ui/src/lib/activities-table/activities-table.component.html - 188 + 191 libs/ui/src/lib/i18n.ts @@ -2527,11 +2527,11 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 28 + 31 libs/ui/src/lib/activities-table/activities-table.component.html - 432 + 435 @@ -2539,11 +2539,11 @@ Exportar operaciones libs/ui/src/lib/activities-table/activities-table.component.html - 73 + 76 libs/ui/src/lib/activities-table/activities-table.component.html - 460 + 463 @@ -2551,11 +2551,11 @@ Exportar borrador como ICS libs/ui/src/lib/activities-table/activities-table.component.html - 87 + 90 libs/ui/src/lib/activities-table/activities-table.component.html - 473 + 476 @@ -2563,7 +2563,7 @@ Clonar libs/ui/src/lib/activities-table/activities-table.component.html - 521 + 524 @@ -2571,7 +2571,7 @@ Exportar borrador como ICS libs/ui/src/lib/activities-table/activities-table.component.html - 533 + 536 @@ -2579,11 +2579,11 @@ ¿Seguro que quieres eliminar esta operación? libs/ui/src/lib/activities-table/activities-table.component.ts - 343 + 326 libs/ui/src/lib/activities-table/activities-table.component.ts - 354 + 337 @@ -2659,7 +2659,7 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 191 + 195 @@ -2675,7 +2675,7 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 193 + 197 @@ -2811,7 +2811,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 465 + 478 libs/ui/src/lib/fire-calculator/fire-calculator.component.ts @@ -2899,7 +2899,7 @@ Filtrar por... apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 377 + 350 @@ -2975,7 +2975,7 @@ Excluido del análisis apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 324 + 337 @@ -3075,11 +3075,11 @@ libs/common/src/lib/routes/routes.ts - 94 + 108 libs/ui/src/lib/activities-table/activities-table.component.html - 362 + 365 libs/ui/src/lib/i18n.ts @@ -3151,7 +3151,7 @@ Exportar libs/ui/src/lib/activities-table/activities-table.component.html - 69 + 72 @@ -3171,7 +3171,7 @@ Efectivo apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 261 + 274 @@ -3203,15 +3203,15 @@ Fondo de emergencia apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 229 + 242 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 307 + 320 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 412 + 425 apps/client/src/app/pages/features/features-page.html @@ -3339,7 +3339,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 66 + 74 apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts @@ -3451,7 +3451,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 479 + 492 apps/client/src/app/pages/features/features-page.html @@ -3519,7 +3519,7 @@ Validando datos... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 294 + 298 @@ -3547,7 +3547,7 @@ libs/common/src/lib/routes/routes.ts - 65 + 79 @@ -3559,7 +3559,7 @@ libs/common/src/lib/routes/routes.ts - 75 + 89 @@ -3587,7 +3587,7 @@ libs/common/src/lib/routes/routes.ts - 140 + 154 @@ -3627,11 +3627,11 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 54 + 57 libs/ui/src/lib/activities-table/activities-table.component.html - 446 + 449 @@ -3683,7 +3683,7 @@ Sin operaciones apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 148 + 138 @@ -3731,7 +3731,7 @@ Inversiones apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 214 + 227 @@ -4011,7 +4011,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 94 + 102 @@ -4086,6 +4086,14 @@ 18 + + Add to Watchlist + Add to Watchlist + + libs/common/src/lib/routes/routes.ts + 163 + + Market data provided by Datos de mercado proporcionados por @@ -4339,7 +4347,7 @@ libs/common/src/lib/routes/routes.ts - 70 + 84 @@ -4479,7 +4487,7 @@ Pasivos apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 355 + 368 apps/client/src/app/pages/features/features-page.html @@ -4499,7 +4507,7 @@ libs/common/src/lib/routes/routes.ts - 240 + 261 @@ -4515,7 +4523,7 @@ libs/common/src/lib/routes/routes.ts - 248 + 269 @@ -4635,7 +4643,7 @@ Actualizar operación libs/common/src/lib/routes/routes.ts - 181 + 202 @@ -4677,6 +4685,10 @@ apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html 7 + + libs/common/src/lib/routes/routes.ts + 69 + Personal Finance Tools @@ -4687,7 +4699,7 @@ libs/common/src/lib/routes/routes.ts - 384 + 405 @@ -4915,7 +4927,7 @@ Compra apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 35 + 43 libs/ui/src/lib/i18n.ts @@ -4943,7 +4955,7 @@ ETFs sin países apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 138 + 128 @@ -4951,7 +4963,7 @@ ETFs sin sectores apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 143 + 133 @@ -5179,7 +5191,7 @@ Divisas apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 133 + 123 apps/client/src/app/pages/public/public-page.html @@ -5375,7 +5387,7 @@ ¿De verdad quieres eliminar estas actividades? libs/ui/src/lib/activities-table/activities-table.component.ts - 344 + 327 @@ -5479,7 +5491,7 @@ ¡Ups! No se pudieron eliminar los perfiles de activos. apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 54 + 60 @@ -5535,7 +5547,7 @@ Añadir operación libs/common/src/lib/routes/routes.ts - 174 + 195 @@ -5584,19 +5596,19 @@ kebab-case libs/common/src/lib/routes/routes.ts - 289 + 310 libs/common/src/lib/routes/routes.ts - 290 + 311 libs/common/src/lib/routes/routes.ts - 294 + 315 libs/common/src/lib/routes/routes.ts - 300 + 321 @@ -5605,11 +5617,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 309 + 330 libs/common/src/lib/routes/routes.ts - 310 + 331 @@ -5618,31 +5630,31 @@ kebab-case libs/common/src/lib/routes/routes.ts - 231 + 252 libs/common/src/lib/routes/routes.ts - 232 + 253 libs/common/src/lib/routes/routes.ts - 237 + 258 libs/common/src/lib/routes/routes.ts - 245 + 266 libs/common/src/lib/routes/routes.ts - 253 + 274 libs/common/src/lib/routes/routes.ts - 261 + 282 libs/common/src/lib/routes/routes.ts - 269 + 290 @@ -5651,11 +5663,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 259 + 280 libs/common/src/lib/routes/routes.ts - 262 + 283 @@ -5664,11 +5676,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 243 + 264 libs/common/src/lib/routes/routes.ts - 246 + 267 @@ -5677,11 +5689,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 314 + 335 libs/common/src/lib/routes/routes.ts - 315 + 336 @@ -5690,11 +5702,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 324 + 345 libs/common/src/lib/routes/routes.ts - 325 + 346 @@ -5703,11 +5715,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 334 + 355 libs/common/src/lib/routes/routes.ts - 335 + 356 @@ -5716,31 +5728,31 @@ kebab-case libs/common/src/lib/routes/routes.ts - 339 + 360 libs/common/src/lib/routes/routes.ts - 340 + 361 libs/common/src/lib/routes/routes.ts - 345 + 366 libs/common/src/lib/routes/routes.ts - 353 + 374 libs/common/src/lib/routes/routes.ts - 361 + 382 libs/common/src/lib/routes/routes.ts - 369 + 390 libs/common/src/lib/routes/routes.ts - 377 + 398 @@ -5813,11 +5825,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 375 + 396 libs/common/src/lib/routes/routes.ts - 379 + 400 @@ -5849,7 +5861,7 @@ La recopilación de datos ha comenzado. apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 413 + 386 @@ -5973,7 +5985,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 285 + 288 libs/ui/src/lib/i18n.ts @@ -6029,7 +6041,7 @@ libs/common/src/lib/routes/routes.ts - 99 + 113 libs/ui/src/lib/accounts-table/accounts-table.component.html @@ -6107,17 +6119,21 @@ apps/client/src/app/components/admin-jobs/admin-jobs.html 52 + + libs/common/src/lib/routes/routes.ts + 76 + Do you really want to delete this asset profile? ¿Seguro que quieres eliminar este perfil de activo? apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 27 + 33 apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 69 + 75 @@ -6485,7 +6501,7 @@ ¡Vaya! No se pudo otorgar acceso. apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.component.ts - 311 + 314 @@ -6741,7 +6757,7 @@ libs/common/src/lib/routes/routes.ts - 295 + 316 @@ -6753,7 +6769,7 @@ libs/common/src/lib/routes/routes.ts - 303 + 324 @@ -6762,11 +6778,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 298 + 319 libs/common/src/lib/routes/routes.ts - 301 + 322 @@ -6858,7 +6874,7 @@ {VAR_PLURAL, plural, =1 {operación} other {operaciones}} apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 18 + 25 @@ -6874,7 +6890,7 @@ Eliminar operaciones libs/ui/src/lib/activities-table/activities-table.component.html - 111 + 114 @@ -6882,7 +6898,7 @@ Internacionalización libs/common/src/lib/routes/routes.ts - 154 + 175 @@ -6946,7 +6962,7 @@ Clonar operación libs/common/src/lib/routes/routes.ts - 169 + 190 @@ -6986,7 +7002,7 @@ Índices de referencia apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 128 + 118 @@ -7110,7 +7126,7 @@ ¡Ups! No se pudo eliminar el perfil de activo. apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 53 + 59 @@ -7214,7 +7230,7 @@ Ver posición libs/ui/src/lib/activities-table/activities-table.component.html - 499 + 502 @@ -7222,7 +7238,7 @@ ¿Seguro que quieres eliminar estos perfiles de activos? apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 70 + 76 @@ -7262,7 +7278,7 @@ ¡Vaya! No se pudo actualizar el acceso. apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.component.ts - 409 + 414 @@ -7590,7 +7606,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 107 + 110 @@ -7738,7 +7754,7 @@ libs/common/src/lib/routes/routes.ts - 348 + 369 @@ -7754,7 +7770,7 @@ libs/common/src/lib/routes/routes.ts - 356 + 377 @@ -7763,11 +7779,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 351 + 372 libs/common/src/lib/routes/routes.ts - 354 + 375 @@ -7776,11 +7792,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 343 + 364 libs/common/src/lib/routes/routes.ts - 346 + 367 @@ -7940,7 +7956,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.ts - 158 + 167 apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html @@ -8124,7 +8140,7 @@ Cambio libs/ui/src/lib/holdings-table/holdings-table.component.html - 146 + 148 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -8160,11 +8176,11 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 168 + 170 libs/ui/src/lib/holdings-table/holdings-table.component.html - 169 + 171 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -8297,11 +8313,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 267 + 288 libs/common/src/lib/routes/routes.ts - 270 + 291 @@ -8313,7 +8329,7 @@ libs/common/src/lib/routes/routes.ts - 272 + 293 @@ -8425,7 +8441,7 @@ libs/common/src/lib/routes/routes.ts - 145 + 166 @@ -8441,11 +8457,11 @@ {VAR_PLURAL, plural, =1 {Actividad} other {Actividades}} libs/ui/src/lib/activities-table/activities-table.component.html - 70 + 73 libs/ui/src/lib/activities-table/activities-table.component.html - 108 + 111 @@ -8470,11 +8486,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 235 + 256 libs/common/src/lib/routes/routes.ts - 238 + 259 @@ -8610,7 +8626,7 @@ libs/common/src/lib/routes/routes.ts - 286 + 307 @@ -8618,7 +8634,7 @@ Alternativa de software de código abierto a libs/common/src/lib/routes/routes.ts - 381 + 402 @@ -8651,15 +8667,15 @@ kebab-case libs/common/src/lib/routes/routes.ts - 367 + 388 libs/common/src/lib/routes/routes.ts - 370 + 391 libs/common/src/lib/routes/routes.ts - 378 + 399 @@ -8668,11 +8684,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 359 + 380 libs/common/src/lib/routes/routes.ts - 362 + 383 @@ -8897,11 +8913,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 391 + 412 libs/common/src/lib/routes/routes.ts - 392 + 413 diff --git a/apps/client/src/locales/messages.fr.xlf b/apps/client/src/locales/messages.fr.xlf index 92acbf502f..da0d5da102 100644 --- a/apps/client/src/locales/messages.fr.xlf +++ b/apps/client/src/locales/messages.fr.xlf @@ -58,11 +58,11 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 7 + 10 libs/ui/src/lib/activities-table/activities-table.component.html - 204 + 207 @@ -166,7 +166,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 182 + 185 libs/ui/src/lib/benchmark/benchmark.component.html @@ -230,7 +230,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 329 + 332 @@ -282,15 +282,15 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 309 + 312 libs/ui/src/lib/activities-table/activities-table.component.html - 346 + 349 libs/ui/src/lib/holdings-table/holdings-table.component.html - 99 + 101 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -326,7 +326,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 510 + 513 @@ -346,7 +346,7 @@ apps/client/src/app/components/admin-overview/admin-overview.html - 241 + 236 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -374,7 +374,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 545 + 548 libs/ui/src/lib/benchmark/benchmark.component.html @@ -582,7 +582,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 213 + 216 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html @@ -618,7 +618,7 @@ Filtrer par... apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 377 + 350 @@ -638,7 +638,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 50 + 52 @@ -834,7 +834,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 396 + 399 @@ -914,7 +914,7 @@ Update Account libs/common/src/lib/routes/routes.ts - 106 + 120 @@ -958,7 +958,7 @@ apps/client/src/app/components/admin-overview/admin-overview.html - 304 + 299 libs/ui/src/lib/account-balances/account-balances.component.html @@ -1074,7 +1074,7 @@ libs/common/src/lib/routes/routes.ts - 207 + 228 @@ -1126,7 +1126,7 @@ libs/common/src/lib/routes/routes.ts - 121 + 135 @@ -1346,7 +1346,7 @@ Performance Absolue Brute apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 80 + 88 @@ -1354,7 +1354,7 @@ Performance Absolue Nette apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 114 + 122 apps/client/src/app/pages/portfolio/analysis/analysis-page.html @@ -1366,7 +1366,7 @@ Performance nette apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 129 + 137 apps/client/src/app/pages/portfolio/analysis/analysis-page.html @@ -1378,7 +1378,7 @@ Actifs Totaux apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 152 + 165 @@ -1386,7 +1386,7 @@ Pouvoir d’Achat apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 292 + 305 @@ -1394,7 +1394,7 @@ Exclus de l’Analyse apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 324 + 337 @@ -1402,7 +1402,7 @@ Fortune apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 378 + 391 @@ -1410,7 +1410,7 @@ Performance annualisée apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 393 + 406 @@ -1418,7 +1418,7 @@ Veuillez entrer le montant de votre fonds d’urgence : apps/client/src/app/components/portfolio-summary/portfolio-summary.component.ts - 160 + 169 @@ -1454,11 +1454,11 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 235 + 238 libs/ui/src/lib/holdings-table/holdings-table.component.html - 74 + 76 @@ -1566,7 +1566,7 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 193 + 197 @@ -1578,7 +1578,7 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 191 + 195 @@ -1590,7 +1590,7 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 194 + 198 @@ -1614,7 +1614,7 @@ libs/common/src/lib/routes/routes.ts - 275 + 296 @@ -1630,7 +1630,7 @@ libs/common/src/lib/routes/routes.ts - 264 + 285 @@ -1670,7 +1670,7 @@ Add Account libs/common/src/lib/routes/routes.ts - 87 + 101 @@ -1962,7 +1962,7 @@ libs/common/src/lib/routes/routes.ts - 109 + 123 libs/ui/src/lib/assistant/assistant.html @@ -2010,7 +2010,7 @@ libs/common/src/lib/routes/routes.ts - 65 + 79 @@ -2026,7 +2026,7 @@ libs/common/src/lib/routes/routes.ts - 78 + 92 @@ -2038,7 +2038,7 @@ libs/common/src/lib/routes/routes.ts - 75 + 89 @@ -2150,7 +2150,7 @@ libs/common/src/lib/routes/routes.ts - 280 + 301 @@ -2194,7 +2194,7 @@ libs/common/src/lib/routes/routes.ts - 306 + 327 @@ -2222,7 +2222,7 @@ libs/common/src/lib/routes/routes.ts - 311 + 332 @@ -2238,7 +2238,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 183 + 196 apps/client/src/app/pages/public/public-page.html @@ -2246,11 +2246,11 @@ libs/common/src/lib/routes/routes.ts - 130 + 144 libs/common/src/lib/routes/routes.ts - 222 + 243 libs/ui/src/lib/assistant/assistant.html @@ -2282,7 +2282,7 @@ libs/common/src/lib/routes/routes.ts - 140 + 154 @@ -2314,15 +2314,15 @@ libs/common/src/lib/routes/routes.ts - 135 + 149 libs/common/src/lib/routes/routes.ts - 316 + 337 libs/common/src/lib/routes/routes.ts - 364 + 385 @@ -2370,7 +2370,7 @@ libs/common/src/lib/routes/routes.ts - 184 + 205 libs/ui/src/lib/accounts-table/accounts-table.component.html @@ -2410,7 +2410,7 @@ Vente apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 49 + 57 libs/ui/src/lib/i18n.ts @@ -2462,7 +2462,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 260 + 263 @@ -2470,7 +2470,7 @@ Import des données... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 172 + 176 @@ -2478,7 +2478,7 @@ L’import est terminé apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 183 + 187 @@ -2494,7 +2494,7 @@ Validation des données... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 294 + 298 @@ -2562,7 +2562,7 @@ libs/common/src/lib/routes/routes.ts - 189 + 210 @@ -2710,7 +2710,7 @@ libs/common/src/lib/routes/routes.ts - 194 + 215 @@ -2734,7 +2734,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 479 + 492 apps/client/src/app/pages/features/features-page.html @@ -2854,7 +2854,7 @@ libs/common/src/lib/routes/routes.ts - 326 + 347 @@ -2942,7 +2942,7 @@ libs/common/src/lib/routes/routes.ts - 336 + 357 @@ -3006,7 +3006,7 @@ libs/common/src/lib/routes/routes.ts - 387 + 408 @@ -3066,11 +3066,11 @@ libs/common/src/lib/routes/routes.ts - 148 + 169 libs/common/src/lib/routes/routes.ts - 225 + 246 @@ -3078,7 +3078,7 @@ Brouillon libs/ui/src/lib/activities-table/activities-table.component.html - 188 + 191 libs/ui/src/lib/i18n.ts @@ -3094,11 +3094,11 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 28 + 31 libs/ui/src/lib/activities-table/activities-table.component.html - 432 + 435 @@ -3106,11 +3106,11 @@ Exporter Activités libs/ui/src/lib/activities-table/activities-table.component.html - 73 + 76 libs/ui/src/lib/activities-table/activities-table.component.html - 460 + 463 @@ -3118,11 +3118,11 @@ Exporter Brouillons sous ICS libs/ui/src/lib/activities-table/activities-table.component.html - 87 + 90 libs/ui/src/lib/activities-table/activities-table.component.html - 473 + 476 @@ -3130,7 +3130,7 @@ Dupliquer libs/ui/src/lib/activities-table/activities-table.component.html - 521 + 524 @@ -3138,7 +3138,7 @@ Exporter Brouillon sous ICS libs/ui/src/lib/activities-table/activities-table.component.html - 533 + 536 @@ -3146,11 +3146,11 @@ Voulez-vous vraiment supprimer cette activité ? libs/ui/src/lib/activities-table/activities-table.component.ts - 343 + 326 libs/ui/src/lib/activities-table/activities-table.component.ts - 354 + 337 @@ -3210,7 +3210,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 465 + 478 libs/ui/src/lib/fire-calculator/fire-calculator.component.ts @@ -3238,11 +3238,11 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 124 + 126 libs/ui/src/lib/holdings-table/holdings-table.component.html - 125 + 127 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -3262,7 +3262,7 @@ Montrer tout libs/ui/src/lib/holdings-table/holdings-table.component.html - 216 + 222 @@ -3274,11 +3274,11 @@ libs/common/src/lib/routes/routes.ts - 94 + 108 libs/ui/src/lib/activities-table/activities-table.component.html - 362 + 365 libs/ui/src/lib/i18n.ts @@ -3350,15 +3350,15 @@ Fonds d’Urgence apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 229 + 242 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 307 + 320 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 412 + 425 apps/client/src/app/pages/features/features-page.html @@ -3418,7 +3418,7 @@ Export libs/ui/src/lib/activities-table/activities-table.component.html - 69 + 72 @@ -3438,7 +3438,7 @@ Cash apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 261 + 274 @@ -3538,7 +3538,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 66 + 74 apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts @@ -3626,11 +3626,11 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 54 + 57 libs/ui/src/lib/activities-table/activities-table.component.html - 446 + 449 @@ -3682,7 +3682,7 @@ Aucune Activité apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 148 + 138 @@ -3730,7 +3730,7 @@ Investments apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 214 + 227 @@ -4010,7 +4010,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 94 + 102 @@ -4085,6 +4085,14 @@ 18 + + Add to Watchlist + Add to Watchlist + + libs/common/src/lib/routes/routes.ts + 163 + + Market data provided by Données de marché fournies par @@ -4338,7 +4346,7 @@ libs/common/src/lib/routes/routes.ts - 70 + 84 @@ -4478,7 +4486,7 @@ Dettes apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 355 + 368 apps/client/src/app/pages/features/features-page.html @@ -4498,7 +4506,7 @@ libs/common/src/lib/routes/routes.ts - 240 + 261 @@ -4514,7 +4522,7 @@ libs/common/src/lib/routes/routes.ts - 248 + 269 @@ -4634,7 +4642,7 @@ Update Activity libs/common/src/lib/routes/routes.ts - 181 + 202 @@ -4676,6 +4684,10 @@ apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html 7 + + libs/common/src/lib/routes/routes.ts + 69 + Personal Finance Tools @@ -4686,7 +4698,7 @@ libs/common/src/lib/routes/routes.ts - 384 + 405 @@ -4914,7 +4926,7 @@ Achat apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 35 + 43 libs/ui/src/lib/i18n.ts @@ -4942,7 +4954,7 @@ ETF sans Pays apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 138 + 128 @@ -4950,7 +4962,7 @@ ETF sans Secteurs apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 143 + 133 @@ -5178,7 +5190,7 @@ Devises apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 133 + 123 apps/client/src/app/pages/public/public-page.html @@ -5374,7 +5386,7 @@ Do you really want to delete these activities? libs/ui/src/lib/activities-table/activities-table.component.ts - 344 + 327 @@ -5478,7 +5490,7 @@ Oops! Could not delete the asset profiles. apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 54 + 60 @@ -5534,7 +5546,7 @@ Add Activity libs/common/src/lib/routes/routes.ts - 174 + 195 @@ -5583,19 +5595,19 @@ kebab-case libs/common/src/lib/routes/routes.ts - 289 + 310 libs/common/src/lib/routes/routes.ts - 290 + 311 libs/common/src/lib/routes/routes.ts - 294 + 315 libs/common/src/lib/routes/routes.ts - 300 + 321 @@ -5604,11 +5616,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 309 + 330 libs/common/src/lib/routes/routes.ts - 310 + 331 @@ -5617,31 +5629,31 @@ kebab-case libs/common/src/lib/routes/routes.ts - 231 + 252 libs/common/src/lib/routes/routes.ts - 232 + 253 libs/common/src/lib/routes/routes.ts - 237 + 258 libs/common/src/lib/routes/routes.ts - 245 + 266 libs/common/src/lib/routes/routes.ts - 253 + 274 libs/common/src/lib/routes/routes.ts - 261 + 282 libs/common/src/lib/routes/routes.ts - 269 + 290 @@ -5650,11 +5662,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 259 + 280 libs/common/src/lib/routes/routes.ts - 262 + 283 @@ -5663,11 +5675,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 243 + 264 libs/common/src/lib/routes/routes.ts - 246 + 267 @@ -5676,11 +5688,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 314 + 335 libs/common/src/lib/routes/routes.ts - 315 + 336 @@ -5689,11 +5701,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 324 + 345 libs/common/src/lib/routes/routes.ts - 325 + 346 @@ -5702,11 +5714,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 334 + 355 libs/common/src/lib/routes/routes.ts - 335 + 356 @@ -5715,31 +5727,31 @@ kebab-case libs/common/src/lib/routes/routes.ts - 339 + 360 libs/common/src/lib/routes/routes.ts - 340 + 361 libs/common/src/lib/routes/routes.ts - 345 + 366 libs/common/src/lib/routes/routes.ts - 353 + 374 libs/common/src/lib/routes/routes.ts - 361 + 382 libs/common/src/lib/routes/routes.ts - 369 + 390 libs/common/src/lib/routes/routes.ts - 377 + 398 @@ -5812,11 +5824,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 375 + 396 libs/common/src/lib/routes/routes.ts - 379 + 400 @@ -5848,7 +5860,7 @@ Data gathering has been started. apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 413 + 386 @@ -5972,7 +5984,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 285 + 288 libs/ui/src/lib/i18n.ts @@ -6028,7 +6040,7 @@ libs/common/src/lib/routes/routes.ts - 99 + 113 libs/ui/src/lib/accounts-table/accounts-table.component.html @@ -6106,17 +6118,21 @@ apps/client/src/app/components/admin-jobs/admin-jobs.html 52 + + libs/common/src/lib/routes/routes.ts + 76 + Do you really want to delete this asset profile? Confirmez la suppressoion de ce profil d’actif? apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 27 + 33 apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 69 + 75 @@ -6484,7 +6500,7 @@ Oops! Impossible d’accorder l’accès. apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.component.ts - 311 + 314 @@ -6740,7 +6756,7 @@ libs/common/src/lib/routes/routes.ts - 295 + 316 @@ -6752,7 +6768,7 @@ libs/common/src/lib/routes/routes.ts - 303 + 324 @@ -6761,11 +6777,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 298 + 319 libs/common/src/lib/routes/routes.ts - 301 + 322 @@ -6857,7 +6873,7 @@ {VAR_PLURAL, plural, =1 {activity} autres {activities}} apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 18 + 25 @@ -6873,7 +6889,7 @@ Supprimer les Activitées libs/ui/src/lib/activities-table/activities-table.component.html - 111 + 114 @@ -6881,7 +6897,7 @@ Internationalisation libs/common/src/lib/routes/routes.ts - 154 + 175 @@ -6945,7 +6961,7 @@ Clone Activity libs/common/src/lib/routes/routes.ts - 169 + 190 @@ -6985,7 +7001,7 @@ Benchmarks apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 128 + 118 @@ -7109,7 +7125,7 @@ Oops! Could not delete the asset profile. apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 53 + 59 @@ -7213,7 +7229,7 @@ Voir la Position libs/ui/src/lib/activities-table/activities-table.component.html - 499 + 502 @@ -7221,7 +7237,7 @@ Voulez-vous vraiment supprimer ces profils d’actifs ? apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 70 + 76 @@ -7261,7 +7277,7 @@ Oops! Could not update access. apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.component.ts - 409 + 414 @@ -7589,7 +7605,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 107 + 110 @@ -7737,7 +7753,7 @@ libs/common/src/lib/routes/routes.ts - 348 + 369 @@ -7753,7 +7769,7 @@ libs/common/src/lib/routes/routes.ts - 356 + 377 @@ -7762,11 +7778,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 351 + 372 libs/common/src/lib/routes/routes.ts - 354 + 375 @@ -7775,11 +7791,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 343 + 364 libs/common/src/lib/routes/routes.ts - 346 + 367 @@ -7939,7 +7955,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.ts - 158 + 167 apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html @@ -8123,7 +8139,7 @@ Variation libs/ui/src/lib/holdings-table/holdings-table.component.html - 146 + 148 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -8159,11 +8175,11 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 168 + 170 libs/ui/src/lib/holdings-table/holdings-table.component.html - 169 + 171 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -8296,11 +8312,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 267 + 288 libs/common/src/lib/routes/routes.ts - 270 + 291 @@ -8312,7 +8328,7 @@ libs/common/src/lib/routes/routes.ts - 272 + 293 @@ -8424,7 +8440,7 @@ libs/common/src/lib/routes/routes.ts - 145 + 166 @@ -8440,11 +8456,11 @@ {VAR_PLURAL, plural, =1 {Activity} other {Activities}} libs/ui/src/lib/activities-table/activities-table.component.html - 70 + 73 libs/ui/src/lib/activities-table/activities-table.component.html - 108 + 111 @@ -8469,11 +8485,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 235 + 256 libs/common/src/lib/routes/routes.ts - 238 + 259 @@ -8609,7 +8625,7 @@ libs/common/src/lib/routes/routes.ts - 286 + 307 @@ -8617,7 +8633,7 @@ Solutions open source alternatives à libs/common/src/lib/routes/routes.ts - 381 + 402 @@ -8650,15 +8666,15 @@ kebab-case libs/common/src/lib/routes/routes.ts - 367 + 388 libs/common/src/lib/routes/routes.ts - 370 + 391 libs/common/src/lib/routes/routes.ts - 378 + 399 @@ -8667,11 +8683,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 359 + 380 libs/common/src/lib/routes/routes.ts - 362 + 383 @@ -8896,11 +8912,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 391 + 412 libs/common/src/lib/routes/routes.ts - 392 + 413 diff --git a/apps/client/src/locales/messages.it.xlf b/apps/client/src/locales/messages.it.xlf index ec8acc2238..dd5800f319 100644 --- a/apps/client/src/locales/messages.it.xlf +++ b/apps/client/src/locales/messages.it.xlf @@ -67,11 +67,11 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 7 + 10 libs/ui/src/lib/activities-table/activities-table.component.html - 204 + 207 @@ -159,7 +159,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 182 + 185 libs/ui/src/lib/benchmark/benchmark.component.html @@ -219,15 +219,15 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 309 + 312 libs/ui/src/lib/activities-table/activities-table.component.html - 346 + 349 libs/ui/src/lib/holdings-table/holdings-table.component.html - 99 + 101 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -263,7 +263,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 510 + 513 @@ -283,7 +283,7 @@ apps/client/src/app/components/admin-overview/admin-overview.html - 241 + 236 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -311,7 +311,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 545 + 548 libs/ui/src/lib/benchmark/benchmark.component.html @@ -519,7 +519,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 213 + 216 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html @@ -567,7 +567,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 50 + 52 @@ -671,7 +671,7 @@ Aggiorna account libs/common/src/lib/routes/routes.ts - 106 + 120 @@ -691,7 +691,7 @@ apps/client/src/app/components/admin-overview/admin-overview.html - 304 + 299 libs/ui/src/lib/account-balances/account-balances.component.html @@ -847,7 +847,7 @@ libs/common/src/lib/routes/routes.ts - 121 + 135 @@ -1019,7 +1019,7 @@ Prestazioni lorde assolute apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 80 + 88 @@ -1027,7 +1027,7 @@ Prestazioni nette assolute apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 114 + 122 apps/client/src/app/pages/portfolio/analysis/analysis-page.html @@ -1039,7 +1039,7 @@ Prestazioni nette apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 129 + 137 apps/client/src/app/pages/portfolio/analysis/analysis-page.html @@ -1051,7 +1051,7 @@ Asset totali apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 152 + 165 @@ -1059,7 +1059,7 @@ Potere d’acquisto apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 292 + 305 @@ -1067,7 +1067,7 @@ Patrimonio netto apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 378 + 391 @@ -1075,7 +1075,7 @@ Prestazioni annualizzate apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 393 + 406 @@ -1083,7 +1083,7 @@ Inserisci l’importo del tuo fondo di emergenza: apps/client/src/app/components/portfolio-summary/portfolio-summary.component.ts - 160 + 169 @@ -1155,11 +1155,11 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 124 + 126 libs/ui/src/lib/holdings-table/holdings-table.component.html - 125 + 127 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -1179,7 +1179,7 @@ Mostra tutti libs/ui/src/lib/holdings-table/holdings-table.component.html - 216 + 222 @@ -1267,7 +1267,7 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 194 + 198 @@ -1291,7 +1291,7 @@ libs/common/src/lib/routes/routes.ts - 275 + 296 @@ -1307,7 +1307,7 @@ libs/common/src/lib/routes/routes.ts - 264 + 285 @@ -1335,7 +1335,7 @@ Aggiungi account libs/common/src/lib/routes/routes.ts - 87 + 101 @@ -1567,7 +1567,7 @@ libs/common/src/lib/routes/routes.ts - 109 + 123 libs/ui/src/lib/assistant/assistant.html @@ -1627,7 +1627,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 329 + 332 @@ -1691,7 +1691,7 @@ libs/common/src/lib/routes/routes.ts - 78 + 92 @@ -1803,7 +1803,7 @@ libs/common/src/lib/routes/routes.ts - 280 + 301 @@ -1847,7 +1847,7 @@ libs/common/src/lib/routes/routes.ts - 306 + 327 @@ -1875,7 +1875,7 @@ libs/common/src/lib/routes/routes.ts - 311 + 332 @@ -1911,11 +1911,11 @@ libs/common/src/lib/routes/routes.ts - 148 + 169 libs/common/src/lib/routes/routes.ts - 225 + 246 @@ -1947,15 +1947,15 @@ libs/common/src/lib/routes/routes.ts - 135 + 149 libs/common/src/lib/routes/routes.ts - 316 + 337 libs/common/src/lib/routes/routes.ts - 364 + 385 @@ -1971,7 +1971,7 @@ libs/common/src/lib/routes/routes.ts - 189 + 210 @@ -2059,7 +2059,7 @@ libs/common/src/lib/routes/routes.ts - 194 + 215 @@ -2115,7 +2115,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 183 + 196 apps/client/src/app/pages/public/public-page.html @@ -2123,11 +2123,11 @@ libs/common/src/lib/routes/routes.ts - 130 + 144 libs/common/src/lib/routes/routes.ts - 222 + 243 libs/ui/src/lib/assistant/assistant.html @@ -2167,7 +2167,7 @@ Vendi apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 49 + 57 libs/ui/src/lib/i18n.ts @@ -2227,11 +2227,11 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 235 + 238 libs/ui/src/lib/holdings-table/holdings-table.component.html - 74 + 76 @@ -2243,7 +2243,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 260 + 263 @@ -2267,7 +2267,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 396 + 399 @@ -2315,7 +2315,7 @@ libs/common/src/lib/routes/routes.ts - 184 + 205 libs/ui/src/lib/accounts-table/accounts-table.component.html @@ -2327,7 +2327,7 @@ Importazione dei dati... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 172 + 176 @@ -2335,7 +2335,7 @@ L’importazione è stata completata apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 183 + 187 @@ -2375,7 +2375,7 @@ libs/common/src/lib/routes/routes.ts - 326 + 347 @@ -2399,7 +2399,7 @@ libs/common/src/lib/routes/routes.ts - 207 + 228 @@ -2435,7 +2435,7 @@ libs/common/src/lib/routes/routes.ts - 336 + 357 @@ -2479,7 +2479,7 @@ libs/common/src/lib/routes/routes.ts - 387 + 408 @@ -2511,7 +2511,7 @@ Bozza libs/ui/src/lib/activities-table/activities-table.component.html - 188 + 191 libs/ui/src/lib/i18n.ts @@ -2527,11 +2527,11 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 28 + 31 libs/ui/src/lib/activities-table/activities-table.component.html - 432 + 435 @@ -2539,11 +2539,11 @@ Esporta le attività libs/ui/src/lib/activities-table/activities-table.component.html - 73 + 76 libs/ui/src/lib/activities-table/activities-table.component.html - 460 + 463 @@ -2551,11 +2551,11 @@ Esporta le bozze come ICS libs/ui/src/lib/activities-table/activities-table.component.html - 87 + 90 libs/ui/src/lib/activities-table/activities-table.component.html - 473 + 476 @@ -2563,7 +2563,7 @@ Clona libs/ui/src/lib/activities-table/activities-table.component.html - 521 + 524 @@ -2571,7 +2571,7 @@ Esporta la bozza come ICS libs/ui/src/lib/activities-table/activities-table.component.html - 533 + 536 @@ -2579,11 +2579,11 @@ Vuoi davvero eliminare questa attività? libs/ui/src/lib/activities-table/activities-table.component.ts - 343 + 326 libs/ui/src/lib/activities-table/activities-table.component.ts - 354 + 337 @@ -2659,7 +2659,7 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 191 + 195 @@ -2675,7 +2675,7 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 193 + 197 @@ -2811,7 +2811,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 465 + 478 libs/ui/src/lib/fire-calculator/fire-calculator.component.ts @@ -2899,7 +2899,7 @@ Filtra per... apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 377 + 350 @@ -2975,7 +2975,7 @@ Escluso dall’analisi apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 324 + 337 @@ -3075,11 +3075,11 @@ libs/common/src/lib/routes/routes.ts - 94 + 108 libs/ui/src/lib/activities-table/activities-table.component.html - 362 + 365 libs/ui/src/lib/i18n.ts @@ -3151,7 +3151,7 @@ Export libs/ui/src/lib/activities-table/activities-table.component.html - 69 + 72 @@ -3171,7 +3171,7 @@ Contanti apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 261 + 274 @@ -3203,15 +3203,15 @@ Fondo di emergenza apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 229 + 242 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 307 + 320 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 412 + 425 apps/client/src/app/pages/features/features-page.html @@ -3339,7 +3339,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 66 + 74 apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts @@ -3451,7 +3451,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 479 + 492 apps/client/src/app/pages/features/features-page.html @@ -3519,7 +3519,7 @@ Convalida dei dati... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 294 + 298 @@ -3547,7 +3547,7 @@ libs/common/src/lib/routes/routes.ts - 65 + 79 @@ -3559,7 +3559,7 @@ libs/common/src/lib/routes/routes.ts - 75 + 89 @@ -3587,7 +3587,7 @@ libs/common/src/lib/routes/routes.ts - 140 + 154 @@ -3627,11 +3627,11 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 54 + 57 libs/ui/src/lib/activities-table/activities-table.component.html - 446 + 449 @@ -3683,7 +3683,7 @@ No Activities apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 148 + 138 @@ -3731,7 +3731,7 @@ Investments apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 214 + 227 @@ -4011,7 +4011,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 94 + 102 @@ -4086,6 +4086,14 @@ 18 + + Add to Watchlist + Add to Watchlist + + libs/common/src/lib/routes/routes.ts + 163 + + Market data provided by Dati del mercato forniti da @@ -4339,7 +4347,7 @@ libs/common/src/lib/routes/routes.ts - 70 + 84 @@ -4479,7 +4487,7 @@ Passività apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 355 + 368 apps/client/src/app/pages/features/features-page.html @@ -4499,7 +4507,7 @@ libs/common/src/lib/routes/routes.ts - 240 + 261 @@ -4515,7 +4523,7 @@ libs/common/src/lib/routes/routes.ts - 248 + 269 @@ -4635,7 +4643,7 @@ Update Activity libs/common/src/lib/routes/routes.ts - 181 + 202 @@ -4677,6 +4685,10 @@ apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html 7 + + libs/common/src/lib/routes/routes.ts + 69 + Personal Finance Tools @@ -4687,7 +4699,7 @@ libs/common/src/lib/routes/routes.ts - 384 + 405 @@ -4915,7 +4927,7 @@ Compra apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 35 + 43 libs/ui/src/lib/i18n.ts @@ -4943,7 +4955,7 @@ ETF senza paesi apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 138 + 128 @@ -4951,7 +4963,7 @@ ETF senza settori apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 143 + 133 @@ -5179,7 +5191,7 @@ Valute apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 133 + 123 apps/client/src/app/pages/public/public-page.html @@ -5375,7 +5387,7 @@ Do you really want to delete these activities? libs/ui/src/lib/activities-table/activities-table.component.ts - 344 + 327 @@ -5479,7 +5491,7 @@ Oops! Could not delete the asset profiles. apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 54 + 60 @@ -5535,7 +5547,7 @@ Add Activity libs/common/src/lib/routes/routes.ts - 174 + 195 @@ -5584,19 +5596,19 @@ kebab-case libs/common/src/lib/routes/routes.ts - 289 + 310 libs/common/src/lib/routes/routes.ts - 290 + 311 libs/common/src/lib/routes/routes.ts - 294 + 315 libs/common/src/lib/routes/routes.ts - 300 + 321 @@ -5605,11 +5617,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 309 + 330 libs/common/src/lib/routes/routes.ts - 310 + 331 @@ -5618,31 +5630,31 @@ kebab-case libs/common/src/lib/routes/routes.ts - 231 + 252 libs/common/src/lib/routes/routes.ts - 232 + 253 libs/common/src/lib/routes/routes.ts - 237 + 258 libs/common/src/lib/routes/routes.ts - 245 + 266 libs/common/src/lib/routes/routes.ts - 253 + 274 libs/common/src/lib/routes/routes.ts - 261 + 282 libs/common/src/lib/routes/routes.ts - 269 + 290 @@ -5651,11 +5663,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 259 + 280 libs/common/src/lib/routes/routes.ts - 262 + 283 @@ -5664,11 +5676,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 243 + 264 libs/common/src/lib/routes/routes.ts - 246 + 267 @@ -5677,11 +5689,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 314 + 335 libs/common/src/lib/routes/routes.ts - 315 + 336 @@ -5690,11 +5702,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 324 + 345 libs/common/src/lib/routes/routes.ts - 325 + 346 @@ -5703,11 +5715,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 334 + 355 libs/common/src/lib/routes/routes.ts - 335 + 356 @@ -5716,31 +5728,31 @@ kebab-case libs/common/src/lib/routes/routes.ts - 339 + 360 libs/common/src/lib/routes/routes.ts - 340 + 361 libs/common/src/lib/routes/routes.ts - 345 + 366 libs/common/src/lib/routes/routes.ts - 353 + 374 libs/common/src/lib/routes/routes.ts - 361 + 382 libs/common/src/lib/routes/routes.ts - 369 + 390 libs/common/src/lib/routes/routes.ts - 377 + 398 @@ -5813,11 +5825,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 375 + 396 libs/common/src/lib/routes/routes.ts - 379 + 400 @@ -5849,7 +5861,7 @@ Data gathering has been started. apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 413 + 386 @@ -5973,7 +5985,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 285 + 288 libs/ui/src/lib/i18n.ts @@ -6029,7 +6041,7 @@ libs/common/src/lib/routes/routes.ts - 99 + 113 libs/ui/src/lib/accounts-table/accounts-table.component.html @@ -6107,17 +6119,21 @@ apps/client/src/app/components/admin-jobs/admin-jobs.html 52 + + libs/common/src/lib/routes/routes.ts + 76 + Do you really want to delete this asset profile? Vuoi veramente eliminare il profilo di questo asset? apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 27 + 33 apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 69 + 75 @@ -6485,7 +6501,7 @@ Ops! Impossibile abilitare l’accesso. apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.component.ts - 311 + 314 @@ -6741,7 +6757,7 @@ libs/common/src/lib/routes/routes.ts - 295 + 316 @@ -6753,7 +6769,7 @@ libs/common/src/lib/routes/routes.ts - 303 + 324 @@ -6762,11 +6778,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 298 + 319 libs/common/src/lib/routes/routes.ts - 301 + 322 @@ -6858,7 +6874,7 @@ {VAR_PLURAL, plural, =1 {attività} other {attività}} apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 18 + 25 @@ -6874,7 +6890,7 @@ Elimina le attività libs/ui/src/lib/activities-table/activities-table.component.html - 111 + 114 @@ -6882,7 +6898,7 @@ Internazionalizzazione libs/common/src/lib/routes/routes.ts - 154 + 175 @@ -6946,7 +6962,7 @@ Clone Activity libs/common/src/lib/routes/routes.ts - 169 + 190 @@ -6986,7 +7002,7 @@ Benchmarks apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 128 + 118 @@ -7110,7 +7126,7 @@ Oops! Could not delete the asset profile. apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 53 + 59 @@ -7214,7 +7230,7 @@ View Holding libs/ui/src/lib/activities-table/activities-table.component.html - 499 + 502 @@ -7222,7 +7238,7 @@ Do you really want to delete these asset profiles? apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 70 + 76 @@ -7262,7 +7278,7 @@ Oops! Could not update access. apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.component.ts - 409 + 414 @@ -7590,7 +7606,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 107 + 110 @@ -7738,7 +7754,7 @@ libs/common/src/lib/routes/routes.ts - 348 + 369 @@ -7754,7 +7770,7 @@ libs/common/src/lib/routes/routes.ts - 356 + 377 @@ -7763,11 +7779,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 351 + 372 libs/common/src/lib/routes/routes.ts - 354 + 375 @@ -7776,11 +7792,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 343 + 364 libs/common/src/lib/routes/routes.ts - 346 + 367 @@ -7940,7 +7956,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.ts - 158 + 167 apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html @@ -8124,7 +8140,7 @@ Cambia libs/ui/src/lib/holdings-table/holdings-table.component.html - 146 + 148 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -8160,11 +8176,11 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 168 + 170 libs/ui/src/lib/holdings-table/holdings-table.component.html - 169 + 171 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -8297,11 +8313,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 267 + 288 libs/common/src/lib/routes/routes.ts - 270 + 291 @@ -8313,7 +8329,7 @@ libs/common/src/lib/routes/routes.ts - 272 + 293 @@ -8425,7 +8441,7 @@ libs/common/src/lib/routes/routes.ts - 145 + 166 @@ -8441,11 +8457,11 @@ {VAR_PLURAL, plural, =1 {Activity} other {Activities}} libs/ui/src/lib/activities-table/activities-table.component.html - 70 + 73 libs/ui/src/lib/activities-table/activities-table.component.html - 108 + 111 @@ -8470,11 +8486,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 235 + 256 libs/common/src/lib/routes/routes.ts - 238 + 259 @@ -8610,7 +8626,7 @@ libs/common/src/lib/routes/routes.ts - 286 + 307 @@ -8618,7 +8634,7 @@ L’alternativa open source a libs/common/src/lib/routes/routes.ts - 381 + 402 @@ -8651,15 +8667,15 @@ kebab-case libs/common/src/lib/routes/routes.ts - 367 + 388 libs/common/src/lib/routes/routes.ts - 370 + 391 libs/common/src/lib/routes/routes.ts - 378 + 399 @@ -8668,11 +8684,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 359 + 380 libs/common/src/lib/routes/routes.ts - 362 + 383 @@ -8897,11 +8913,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 391 + 412 libs/common/src/lib/routes/routes.ts - 392 + 413 diff --git a/apps/client/src/locales/messages.ja.xlf b/apps/client/src/locales/messages.ja.xlf index 46d3ee8b6e..dd10a3f8e6 100644 --- a/apps/client/src/locales/messages.ja.xlf +++ b/apps/client/src/locales/messages.ja.xlf @@ -8,31 +8,31 @@ kebab-case libs/common/src/lib/routes/routes.ts - 231 + 252 libs/common/src/lib/routes/routes.ts - 232 + 253 libs/common/src/lib/routes/routes.ts - 237 + 258 libs/common/src/lib/routes/routes.ts - 245 + 266 libs/common/src/lib/routes/routes.ts - 253 + 274 libs/common/src/lib/routes/routes.ts - 261 + 282 libs/common/src/lib/routes/routes.ts - 269 + 290 @@ -41,19 +41,19 @@ kebab-case libs/common/src/lib/routes/routes.ts - 289 + 310 libs/common/src/lib/routes/routes.ts - 290 + 311 libs/common/src/lib/routes/routes.ts - 294 + 315 libs/common/src/lib/routes/routes.ts - 300 + 321 @@ -62,11 +62,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 309 + 330 libs/common/src/lib/routes/routes.ts - 310 + 331 @@ -75,11 +75,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 243 + 264 libs/common/src/lib/routes/routes.ts - 246 + 267 @@ -88,11 +88,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 314 + 335 libs/common/src/lib/routes/routes.ts - 315 + 336 @@ -101,11 +101,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 324 + 345 libs/common/src/lib/routes/routes.ts - 325 + 346 @@ -114,11 +114,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 259 + 280 libs/common/src/lib/routes/routes.ts - 262 + 283 @@ -127,11 +127,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 334 + 355 libs/common/src/lib/routes/routes.ts - 335 + 356 @@ -140,31 +140,31 @@ kebab-case libs/common/src/lib/routes/routes.ts - 339 + 360 libs/common/src/lib/routes/routes.ts - 340 + 361 libs/common/src/lib/routes/routes.ts - 345 + 366 libs/common/src/lib/routes/routes.ts - 353 + 374 libs/common/src/lib/routes/routes.ts - 361 + 382 libs/common/src/lib/routes/routes.ts - 369 + 390 libs/common/src/lib/routes/routes.ts - 377 + 398 @@ -268,11 +268,11 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 7 + 10 libs/ui/src/lib/activities-table/activities-table.component.html - 204 + 207 @@ -364,7 +364,7 @@ libs/common/src/lib/routes/routes.ts - 99 + 113 libs/ui/src/lib/accounts-table/accounts-table.component.html @@ -416,7 +416,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 182 + 185 libs/ui/src/lib/benchmark/benchmark.component.html @@ -480,7 +480,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 329 + 332 @@ -516,15 +516,15 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 309 + 312 libs/ui/src/lib/activities-table/activities-table.component.html - 346 + 349 libs/ui/src/lib/holdings-table/holdings-table.component.html - 99 + 101 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -560,7 +560,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 510 + 513 @@ -580,7 +580,7 @@ apps/client/src/app/components/admin-overview/admin-overview.html - 241 + 236 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -608,7 +608,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 545 + 548 libs/ui/src/lib/benchmark/benchmark.component.html @@ -638,6 +638,10 @@ apps/client/src/app/components/admin-jobs/admin-jobs.html 52 + + libs/common/src/lib/routes/routes.ts + 76 + Historical Market Data @@ -812,7 +816,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 213 + 216 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html @@ -848,7 +852,7 @@ 通貨 apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 133 + 123 apps/client/src/app/pages/public/public-page.html @@ -868,7 +872,7 @@ 国に縛られないETF apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 138 + 128 @@ -876,7 +880,7 @@ セクター別ではないETF apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 143 + 133 @@ -892,11 +896,11 @@ この資産プロファイルを削除してもよろしいですか? apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 27 + 33 apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 69 + 75 @@ -904,7 +908,7 @@ 絞り込み... apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 377 + 350 @@ -924,7 +928,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 50 + 52 @@ -1160,7 +1164,7 @@ Update Activity libs/common/src/lib/routes/routes.ts - 181 + 202 @@ -1216,7 +1220,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 396 + 399 @@ -1226,6 +1230,10 @@ apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html 7 + + libs/common/src/lib/routes/routes.ts + 69 + Search @@ -1356,7 +1364,7 @@ Update Account libs/common/src/lib/routes/routes.ts - 106 + 120 @@ -1400,7 +1408,7 @@ apps/client/src/app/components/admin-overview/admin-overview.html - 304 + 299 libs/ui/src/lib/account-balances/account-balances.component.html @@ -1696,7 +1704,7 @@ libs/common/src/lib/routes/routes.ts - 207 + 228 @@ -1748,7 +1756,7 @@ libs/common/src/lib/routes/routes.ts - 121 + 135 @@ -2068,7 +2076,7 @@ 絶対グロス・パフォーマンス apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 80 + 88 @@ -2080,7 +2088,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 94 + 102 @@ -2088,7 +2096,7 @@ 実質純パフォーマンス apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 114 + 122 apps/client/src/app/pages/portfolio/analysis/analysis-page.html @@ -2100,7 +2108,7 @@ 純パフォーマンス apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 129 + 137 apps/client/src/app/pages/portfolio/analysis/analysis-page.html @@ -2112,7 +2120,7 @@ 総資産 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 152 + 165 @@ -2120,7 +2128,7 @@ 購買力 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 292 + 305 @@ -2128,7 +2136,7 @@ 分析から除外 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 324 + 337 @@ -2136,7 +2144,7 @@ 負債 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 355 + 368 apps/client/src/app/pages/features/features-page.html @@ -2148,7 +2156,7 @@ 純資産(ネットワース) apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 378 + 391 @@ -2156,7 +2164,7 @@ 年率換算パフォーマンス apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 393 + 406 @@ -2164,7 +2172,7 @@ 緊急用資金の金額を設定してください。 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.ts - 160 + 169 @@ -2200,11 +2208,11 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 235 + 238 libs/ui/src/lib/holdings-table/holdings-table.component.html - 74 + 76 @@ -2516,7 +2524,7 @@ Add Account libs/common/src/lib/routes/routes.ts - 87 + 101 @@ -2728,7 +2736,7 @@ Investments apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 214 + 227 @@ -2808,7 +2816,7 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 193 + 197 @@ -2820,7 +2828,7 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 191 + 195 @@ -2832,7 +2840,7 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 194 + 198 @@ -2856,7 +2864,7 @@ libs/common/src/lib/routes/routes.ts - 275 + 296 @@ -2872,7 +2880,7 @@ libs/common/src/lib/routes/routes.ts - 240 + 261 @@ -2888,7 +2896,7 @@ libs/common/src/lib/routes/routes.ts - 248 + 269 @@ -2904,7 +2912,7 @@ libs/common/src/lib/routes/routes.ts - 264 + 285 @@ -2976,7 +2984,7 @@ libs/common/src/lib/routes/routes.ts - 109 + 123 libs/ui/src/lib/assistant/assistant.html @@ -3060,7 +3068,7 @@ libs/common/src/lib/routes/routes.ts - 78 + 92 @@ -3072,7 +3080,7 @@ libs/common/src/lib/routes/routes.ts - 65 + 79 @@ -3088,7 +3096,7 @@ libs/common/src/lib/routes/routes.ts - 70 + 84 @@ -3100,7 +3108,7 @@ libs/common/src/lib/routes/routes.ts - 75 + 89 @@ -3136,11 +3144,11 @@ libs/common/src/lib/routes/routes.ts - 148 + 169 libs/common/src/lib/routes/routes.ts - 225 + 246 @@ -3252,7 +3260,7 @@ libs/common/src/lib/routes/routes.ts - 280 + 301 @@ -3316,7 +3324,7 @@ libs/common/src/lib/routes/routes.ts - 306 + 327 @@ -3344,7 +3352,7 @@ libs/common/src/lib/routes/routes.ts - 311 + 332 @@ -3516,7 +3524,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 183 + 196 apps/client/src/app/pages/public/public-page.html @@ -3524,11 +3532,11 @@ libs/common/src/lib/routes/routes.ts - 130 + 144 libs/common/src/lib/routes/routes.ts - 222 + 243 libs/ui/src/lib/assistant/assistant.html @@ -3560,7 +3568,7 @@ libs/common/src/lib/routes/routes.ts - 140 + 154 @@ -3592,15 +3600,15 @@ libs/common/src/lib/routes/routes.ts - 135 + 149 libs/common/src/lib/routes/routes.ts - 316 + 337 libs/common/src/lib/routes/routes.ts - 364 + 385 @@ -3916,7 +3924,7 @@ Do you really want to delete these activities? libs/ui/src/lib/activities-table/activities-table.component.ts - 344 + 327 @@ -4028,7 +4036,7 @@ おっと!資産プロファイルを削除できませんでした。 apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 54 + 60 @@ -4100,7 +4108,7 @@ Add Activity libs/common/src/lib/routes/routes.ts - 174 + 195 @@ -4292,7 +4300,7 @@ libs/common/src/lib/routes/routes.ts - 184 + 205 libs/ui/src/lib/accounts-table/accounts-table.component.html @@ -4376,7 +4384,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 260 + 263 @@ -4388,11 +4396,11 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 28 + 31 libs/ui/src/lib/activities-table/activities-table.component.html - 432 + 435 @@ -4404,11 +4412,11 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 54 + 57 libs/ui/src/lib/activities-table/activities-table.component.html - 446 + 449 @@ -4416,7 +4424,7 @@ データをインポート中... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 172 + 176 @@ -4424,7 +4432,7 @@ インポートが完了しました apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 183 + 187 @@ -4440,7 +4448,7 @@ データを検証中... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 294 + 298 @@ -4560,7 +4568,7 @@ libs/common/src/lib/routes/routes.ts - 189 + 210 @@ -4732,7 +4740,7 @@ libs/common/src/lib/routes/routes.ts - 194 + 215 @@ -4756,7 +4764,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 479 + 492 apps/client/src/app/pages/features/features-page.html @@ -4900,7 +4908,7 @@ libs/common/src/lib/routes/routes.ts - 326 + 347 @@ -5160,7 +5168,7 @@ libs/common/src/lib/routes/routes.ts - 336 + 357 @@ -5192,7 +5200,7 @@ libs/common/src/lib/routes/routes.ts - 384 + 405 @@ -5201,11 +5209,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 375 + 396 libs/common/src/lib/routes/routes.ts - 379 + 400 @@ -5505,7 +5513,7 @@ Data gathering has been started. apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 413 + 386 @@ -5541,7 +5549,7 @@ libs/common/src/lib/routes/routes.ts - 387 + 408 @@ -5625,11 +5633,11 @@ アクティビティをエクスポート libs/ui/src/lib/activities-table/activities-table.component.html - 73 + 76 libs/ui/src/lib/activities-table/activities-table.component.html - 460 + 463 @@ -5637,11 +5645,11 @@ ドラフトをICSとしてエクスポート libs/ui/src/lib/activities-table/activities-table.component.html - 87 + 90 libs/ui/src/lib/activities-table/activities-table.component.html - 473 + 476 @@ -5649,7 +5657,7 @@ ドラフト libs/ui/src/lib/activities-table/activities-table.component.html - 188 + 191 libs/ui/src/lib/i18n.ts @@ -5661,7 +5669,7 @@ クローン libs/ui/src/lib/activities-table/activities-table.component.html - 521 + 524 @@ -5669,7 +5677,7 @@ ドラフトをICSとしてエクスポート libs/ui/src/lib/activities-table/activities-table.component.html - 533 + 536 @@ -5677,11 +5685,11 @@ 本当にこのアクティビティを削除したいですか? libs/ui/src/lib/activities-table/activities-table.component.ts - 343 + 326 libs/ui/src/lib/activities-table/activities-table.component.ts - 354 + 337 @@ -5760,6 +5768,14 @@ 286 + + Add to Watchlist + Add to Watchlist + + libs/common/src/lib/routes/routes.ts + 163 + + Market data provided by 市場データの提供元 @@ -5817,7 +5833,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 465 + 478 libs/ui/src/lib/fire-calculator/fire-calculator.component.ts @@ -5845,11 +5861,11 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 124 + 126 libs/ui/src/lib/holdings-table/holdings-table.component.html - 125 + 127 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -5869,7 +5885,7 @@ すべて表示 libs/ui/src/lib/holdings-table/holdings-table.component.html - 216 + 222 @@ -5881,11 +5897,11 @@ libs/common/src/lib/routes/routes.ts - 94 + 108 libs/ui/src/lib/activities-table/activities-table.component.html - 362 + 365 libs/ui/src/lib/i18n.ts @@ -5989,15 +6005,15 @@ 緊急資金 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 229 + 242 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 307 + 320 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 412 + 425 apps/client/src/app/pages/features/features-page.html @@ -6093,7 +6109,7 @@ アクティビティなし apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 148 + 138 @@ -6145,7 +6161,7 @@ Export libs/ui/src/lib/activities-table/activities-table.component.html - 69 + 72 @@ -6201,7 +6217,7 @@ 買い apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 35 + 43 libs/ui/src/lib/i18n.ts @@ -6217,7 +6233,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 285 + 288 libs/ui/src/lib/i18n.ts @@ -6245,7 +6261,7 @@ 売る apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 49 + 57 libs/ui/src/lib/i18n.ts @@ -6265,7 +6281,7 @@ 現金 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 261 + 274 @@ -6365,7 +6381,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 66 + 74 apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts @@ -6489,7 +6505,7 @@ おっと!アクセスを許可できませんでした。 apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.component.ts - 311 + 314 @@ -6734,11 +6750,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 298 + 319 libs/common/src/lib/routes/routes.ts - 301 + 322 @@ -6750,7 +6766,7 @@ libs/common/src/lib/routes/routes.ts - 303 + 324 @@ -6790,7 +6806,7 @@ libs/common/src/lib/routes/routes.ts - 295 + 316 @@ -6890,7 +6906,7 @@ {VAR_PLURAL, plural, =1 {アクティビティ} other {アクティビティ}} apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 18 + 25 @@ -6898,7 +6914,7 @@ アクティビティを削除する libs/ui/src/lib/activities-table/activities-table.component.html - 111 + 114 @@ -6906,7 +6922,7 @@ 国際化 libs/common/src/lib/routes/routes.ts - 154 + 175 @@ -6970,7 +6986,7 @@ Clone Activity libs/common/src/lib/routes/routes.ts - 169 + 190 @@ -7010,7 +7026,7 @@ Benchmarks apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 128 + 118 @@ -7118,7 +7134,7 @@ Oops! Could not delete the asset profile. apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 53 + 59 @@ -7174,7 +7190,7 @@ View Holding libs/ui/src/lib/activities-table/activities-table.component.html - 499 + 502 @@ -7246,7 +7262,7 @@ Do you really want to delete these asset profiles? apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 70 + 76 @@ -7410,7 +7426,7 @@ Oops! Could not update access. apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.component.ts - 409 + 414 @@ -7614,7 +7630,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 107 + 110 @@ -7762,7 +7778,7 @@ libs/common/src/lib/routes/routes.ts - 348 + 369 @@ -7771,11 +7787,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 343 + 364 libs/common/src/lib/routes/routes.ts - 346 + 367 @@ -7791,7 +7807,7 @@ libs/common/src/lib/routes/routes.ts - 356 + 377 @@ -7800,11 +7816,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 351 + 372 libs/common/src/lib/routes/routes.ts - 354 + 375 @@ -7964,7 +7980,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.ts - 158 + 167 apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html @@ -8148,7 +8164,7 @@ Change libs/ui/src/lib/holdings-table/holdings-table.component.html - 146 + 148 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -8184,11 +8200,11 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 168 + 170 libs/ui/src/lib/holdings-table/holdings-table.component.html - 169 + 171 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -8316,7 +8332,7 @@ libs/common/src/lib/routes/routes.ts - 272 + 293 @@ -8325,11 +8341,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 267 + 288 libs/common/src/lib/routes/routes.ts - 270 + 291 @@ -8425,7 +8441,7 @@ libs/common/src/lib/routes/routes.ts - 145 + 166 @@ -8441,11 +8457,11 @@ {VAR_PLURAL, plural, =1 {Activity} other {Activities}} libs/ui/src/lib/activities-table/activities-table.component.html - 70 + 73 libs/ui/src/lib/activities-table/activities-table.component.html - 108 + 111 @@ -8470,11 +8486,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 235 + 256 libs/common/src/lib/routes/routes.ts - 238 + 259 @@ -8610,7 +8626,7 @@ libs/common/src/lib/routes/routes.ts - 286 + 307 @@ -8618,7 +8634,7 @@ Open Source Alternative to libs/common/src/lib/routes/routes.ts - 381 + 402 @@ -8651,15 +8667,15 @@ kebab-case libs/common/src/lib/routes/routes.ts - 367 + 388 libs/common/src/lib/routes/routes.ts - 370 + 391 libs/common/src/lib/routes/routes.ts - 378 + 399 @@ -8668,11 +8684,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 359 + 380 libs/common/src/lib/routes/routes.ts - 362 + 383 @@ -8897,11 +8913,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 391 + 412 libs/common/src/lib/routes/routes.ts - 392 + 413 diff --git a/apps/client/src/locales/messages.ko.xlf b/apps/client/src/locales/messages.ko.xlf index 56a4ab453b..6eba590199 100644 --- a/apps/client/src/locales/messages.ko.xlf +++ b/apps/client/src/locales/messages.ko.xlf @@ -8,31 +8,31 @@ kebab-case libs/common/src/lib/routes/routes.ts - 231 + 252 libs/common/src/lib/routes/routes.ts - 232 + 253 libs/common/src/lib/routes/routes.ts - 237 + 258 libs/common/src/lib/routes/routes.ts - 245 + 266 libs/common/src/lib/routes/routes.ts - 253 + 274 libs/common/src/lib/routes/routes.ts - 261 + 282 libs/common/src/lib/routes/routes.ts - 269 + 290 @@ -41,19 +41,19 @@ kebab-case libs/common/src/lib/routes/routes.ts - 289 + 310 libs/common/src/lib/routes/routes.ts - 290 + 311 libs/common/src/lib/routes/routes.ts - 294 + 315 libs/common/src/lib/routes/routes.ts - 300 + 321 @@ -62,11 +62,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 309 + 330 libs/common/src/lib/routes/routes.ts - 310 + 331 @@ -75,11 +75,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 243 + 264 libs/common/src/lib/routes/routes.ts - 246 + 267 @@ -88,11 +88,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 314 + 335 libs/common/src/lib/routes/routes.ts - 315 + 336 @@ -101,11 +101,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 324 + 345 libs/common/src/lib/routes/routes.ts - 325 + 346 @@ -114,11 +114,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 259 + 280 libs/common/src/lib/routes/routes.ts - 262 + 283 @@ -127,11 +127,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 334 + 355 libs/common/src/lib/routes/routes.ts - 335 + 356 @@ -140,31 +140,31 @@ kebab-case libs/common/src/lib/routes/routes.ts - 339 + 360 libs/common/src/lib/routes/routes.ts - 340 + 361 libs/common/src/lib/routes/routes.ts - 345 + 366 libs/common/src/lib/routes/routes.ts - 353 + 374 libs/common/src/lib/routes/routes.ts - 361 + 382 libs/common/src/lib/routes/routes.ts - 369 + 390 libs/common/src/lib/routes/routes.ts - 377 + 398 @@ -268,11 +268,11 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 7 + 10 libs/ui/src/lib/activities-table/activities-table.component.html - 204 + 207 @@ -364,7 +364,7 @@ libs/common/src/lib/routes/routes.ts - 99 + 113 libs/ui/src/lib/accounts-table/accounts-table.component.html @@ -416,7 +416,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 182 + 185 libs/ui/src/lib/benchmark/benchmark.component.html @@ -480,7 +480,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 329 + 332 @@ -516,15 +516,15 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 309 + 312 libs/ui/src/lib/activities-table/activities-table.component.html - 346 + 349 libs/ui/src/lib/holdings-table/holdings-table.component.html - 99 + 101 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -560,7 +560,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 510 + 513 @@ -580,7 +580,7 @@ apps/client/src/app/components/admin-overview/admin-overview.html - 241 + 236 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -608,7 +608,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 545 + 548 libs/ui/src/lib/benchmark/benchmark.component.html @@ -638,6 +638,10 @@ apps/client/src/app/components/admin-jobs/admin-jobs.html 52 + + libs/common/src/lib/routes/routes.ts + 76 + Historical Market Data @@ -812,7 +816,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 213 + 216 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html @@ -848,7 +852,7 @@ 통화 apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 133 + 123 apps/client/src/app/pages/public/public-page.html @@ -868,7 +872,7 @@ 국가 정보 없는 ETF apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 138 + 128 @@ -876,7 +880,7 @@ 섹터 정보 없는 ETF apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 143 + 133 @@ -892,11 +896,11 @@ 이 자산 프로필을 정말 삭제하시겠습니까? apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 27 + 33 apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 69 + 75 @@ -904,7 +908,7 @@ 다음 기준으로 필터... apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 377 + 350 @@ -924,7 +928,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 50 + 52 @@ -1160,7 +1164,7 @@ Update Activity libs/common/src/lib/routes/routes.ts - 181 + 202 @@ -1216,7 +1220,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 396 + 399 @@ -1226,6 +1230,10 @@ apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html 7 + + libs/common/src/lib/routes/routes.ts + 69 + Search @@ -1356,7 +1364,7 @@ Update Account libs/common/src/lib/routes/routes.ts - 106 + 120 @@ -1400,7 +1408,7 @@ apps/client/src/app/components/admin-overview/admin-overview.html - 304 + 299 libs/ui/src/lib/account-balances/account-balances.component.html @@ -1696,7 +1704,7 @@ libs/common/src/lib/routes/routes.ts - 207 + 228 @@ -1748,7 +1756,7 @@ libs/common/src/lib/routes/routes.ts - 121 + 135 @@ -2068,7 +2076,7 @@ 절대 총 성과 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 80 + 88 @@ -2080,7 +2088,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 94 + 102 @@ -2088,7 +2096,7 @@ 절대 순 성과 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 114 + 122 apps/client/src/app/pages/portfolio/analysis/analysis-page.html @@ -2100,7 +2108,7 @@ 순 성과 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 129 + 137 apps/client/src/app/pages/portfolio/analysis/analysis-page.html @@ -2112,7 +2120,7 @@ 총자산 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 152 + 165 @@ -2120,7 +2128,7 @@ 매수 가능 금액 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 292 + 305 @@ -2128,7 +2136,7 @@ 분석에서 제외됨 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 324 + 337 @@ -2136,7 +2144,7 @@ 부채 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 355 + 368 apps/client/src/app/pages/features/features-page.html @@ -2148,7 +2156,7 @@ 순자산 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 378 + 391 @@ -2156,7 +2164,7 @@ 연환산 성과 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 393 + 406 @@ -2164,7 +2172,7 @@ 비상금 금액을 설정해 주세요. apps/client/src/app/components/portfolio-summary/portfolio-summary.component.ts - 160 + 169 @@ -2200,11 +2208,11 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 235 + 238 libs/ui/src/lib/holdings-table/holdings-table.component.html - 74 + 76 @@ -2516,7 +2524,7 @@ Add Account libs/common/src/lib/routes/routes.ts - 87 + 101 @@ -2728,7 +2736,7 @@ Investments apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 214 + 227 @@ -2808,7 +2816,7 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 193 + 197 @@ -2820,7 +2828,7 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 191 + 195 @@ -2832,7 +2840,7 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 194 + 198 @@ -2856,7 +2864,7 @@ libs/common/src/lib/routes/routes.ts - 275 + 296 @@ -2872,7 +2880,7 @@ libs/common/src/lib/routes/routes.ts - 240 + 261 @@ -2888,7 +2896,7 @@ libs/common/src/lib/routes/routes.ts - 248 + 269 @@ -2904,7 +2912,7 @@ libs/common/src/lib/routes/routes.ts - 264 + 285 @@ -2976,7 +2984,7 @@ libs/common/src/lib/routes/routes.ts - 109 + 123 libs/ui/src/lib/assistant/assistant.html @@ -3060,7 +3068,7 @@ libs/common/src/lib/routes/routes.ts - 78 + 92 @@ -3072,7 +3080,7 @@ libs/common/src/lib/routes/routes.ts - 65 + 79 @@ -3088,7 +3096,7 @@ libs/common/src/lib/routes/routes.ts - 70 + 84 @@ -3100,7 +3108,7 @@ libs/common/src/lib/routes/routes.ts - 75 + 89 @@ -3136,11 +3144,11 @@ libs/common/src/lib/routes/routes.ts - 148 + 169 libs/common/src/lib/routes/routes.ts - 225 + 246 @@ -3252,7 +3260,7 @@ libs/common/src/lib/routes/routes.ts - 280 + 301 @@ -3316,7 +3324,7 @@ libs/common/src/lib/routes/routes.ts - 306 + 327 @@ -3344,7 +3352,7 @@ libs/common/src/lib/routes/routes.ts - 311 + 332 @@ -3516,7 +3524,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 183 + 196 apps/client/src/app/pages/public/public-page.html @@ -3524,11 +3532,11 @@ libs/common/src/lib/routes/routes.ts - 130 + 144 libs/common/src/lib/routes/routes.ts - 222 + 243 libs/ui/src/lib/assistant/assistant.html @@ -3560,7 +3568,7 @@ libs/common/src/lib/routes/routes.ts - 140 + 154 @@ -3592,15 +3600,15 @@ libs/common/src/lib/routes/routes.ts - 135 + 149 libs/common/src/lib/routes/routes.ts - 316 + 337 libs/common/src/lib/routes/routes.ts - 364 + 385 @@ -3916,7 +3924,7 @@ Do you really want to delete these activities? libs/ui/src/lib/activities-table/activities-table.component.ts - 344 + 327 @@ -4020,7 +4028,7 @@ 이런! 자산 프로필을 삭제할 수 없습니다. apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 54 + 60 @@ -4092,7 +4100,7 @@ Add Activity libs/common/src/lib/routes/routes.ts - 174 + 195 @@ -4284,7 +4292,7 @@ libs/common/src/lib/routes/routes.ts - 184 + 205 libs/ui/src/lib/accounts-table/accounts-table.component.html @@ -4368,7 +4376,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 260 + 263 @@ -4380,11 +4388,11 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 28 + 31 libs/ui/src/lib/activities-table/activities-table.component.html - 432 + 435 @@ -4396,11 +4404,11 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 54 + 57 libs/ui/src/lib/activities-table/activities-table.component.html - 446 + 449 @@ -4408,7 +4416,7 @@ 데이터 가져오는 중... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 172 + 176 @@ -4416,7 +4424,7 @@ 가져오기가 완료되었습니다. apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 183 + 187 @@ -4432,7 +4440,7 @@ 데이터 유효성을 검사하는 중... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 294 + 298 @@ -4552,7 +4560,7 @@ libs/common/src/lib/routes/routes.ts - 189 + 210 @@ -4724,7 +4732,7 @@ libs/common/src/lib/routes/routes.ts - 194 + 215 @@ -4748,7 +4756,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 479 + 492 apps/client/src/app/pages/features/features-page.html @@ -4892,7 +4900,7 @@ libs/common/src/lib/routes/routes.ts - 326 + 347 @@ -5152,7 +5160,7 @@ libs/common/src/lib/routes/routes.ts - 336 + 357 @@ -5184,7 +5192,7 @@ libs/common/src/lib/routes/routes.ts - 384 + 405 @@ -5193,11 +5201,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 375 + 396 libs/common/src/lib/routes/routes.ts - 379 + 400 @@ -5497,7 +5505,7 @@ Data gathering has been started. apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 413 + 386 @@ -5533,7 +5541,7 @@ libs/common/src/lib/routes/routes.ts - 387 + 408 @@ -5617,11 +5625,11 @@ 거래 내역 내보내기 libs/ui/src/lib/activities-table/activities-table.component.html - 73 + 76 libs/ui/src/lib/activities-table/activities-table.component.html - 460 + 463 @@ -5629,11 +5637,11 @@ 초안을 달력 파일로 내보내기 libs/ui/src/lib/activities-table/activities-table.component.html - 87 + 90 libs/ui/src/lib/activities-table/activities-table.component.html - 473 + 476 @@ -5641,7 +5649,7 @@ 초안 libs/ui/src/lib/activities-table/activities-table.component.html - 188 + 191 libs/ui/src/lib/i18n.ts @@ -5653,7 +5661,7 @@ 클론 libs/ui/src/lib/activities-table/activities-table.component.html - 521 + 524 @@ -5661,7 +5669,7 @@ 초안을 달력 파일로 내보내기 libs/ui/src/lib/activities-table/activities-table.component.html - 533 + 536 @@ -5669,11 +5677,11 @@ 정말로 이 거래를 삭제하시겠습니까? libs/ui/src/lib/activities-table/activities-table.component.ts - 343 + 326 libs/ui/src/lib/activities-table/activities-table.component.ts - 354 + 337 @@ -5752,6 +5760,14 @@ 286 + + Add to Watchlist + Add to Watchlist + + libs/common/src/lib/routes/routes.ts + 163 + + Market data provided by 시장 데이터 제공: @@ -5809,7 +5825,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 465 + 478 libs/ui/src/lib/fire-calculator/fire-calculator.component.ts @@ -5837,11 +5853,11 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 124 + 126 libs/ui/src/lib/holdings-table/holdings-table.component.html - 125 + 127 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -5861,7 +5877,7 @@ 모두 표시 libs/ui/src/lib/holdings-table/holdings-table.component.html - 216 + 222 @@ -5873,11 +5889,11 @@ libs/common/src/lib/routes/routes.ts - 94 + 108 libs/ui/src/lib/activities-table/activities-table.component.html - 362 + 365 libs/ui/src/lib/i18n.ts @@ -5981,15 +5997,15 @@ 비상자금 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 229 + 242 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 307 + 320 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 412 + 425 apps/client/src/app/pages/features/features-page.html @@ -6085,7 +6101,7 @@ 거래 내역 없음 apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 148 + 138 @@ -6145,7 +6161,7 @@ Export libs/ui/src/lib/activities-table/activities-table.component.html - 69 + 72 @@ -6201,7 +6217,7 @@ 구입하다 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 35 + 43 libs/ui/src/lib/i18n.ts @@ -6217,7 +6233,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 285 + 288 libs/ui/src/lib/i18n.ts @@ -6245,7 +6261,7 @@ 팔다 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 49 + 57 libs/ui/src/lib/i18n.ts @@ -6265,7 +6281,7 @@ 현금 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 261 + 274 @@ -6365,7 +6381,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 66 + 74 apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts @@ -6489,7 +6505,7 @@ 이런! 액세스 권한을 부여할 수 없습니다. apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.component.ts - 311 + 314 @@ -6734,11 +6750,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 298 + 319 libs/common/src/lib/routes/routes.ts - 301 + 322 @@ -6750,7 +6766,7 @@ libs/common/src/lib/routes/routes.ts - 303 + 324 @@ -6790,7 +6806,7 @@ libs/common/src/lib/routes/routes.ts - 295 + 316 @@ -6890,7 +6906,7 @@ {VAR_PLURAL, plural, =1 {거래} other {거래}} apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 18 + 25 @@ -6898,7 +6914,7 @@ 거래 삭제 libs/ui/src/lib/activities-table/activities-table.component.html - 111 + 114 @@ -6906,7 +6922,7 @@ 국제화 libs/common/src/lib/routes/routes.ts - 154 + 175 @@ -6970,7 +6986,7 @@ Clone Activity libs/common/src/lib/routes/routes.ts - 169 + 190 @@ -7010,7 +7026,7 @@ 벤치마크 apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 128 + 118 @@ -7118,7 +7134,7 @@ 이런! 자산 프로필을 삭제할 수 없습니다. apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 53 + 59 @@ -7174,7 +7190,7 @@ 보유 종목 보기 libs/ui/src/lib/activities-table/activities-table.component.html - 499 + 502 @@ -7246,7 +7262,7 @@ 이 개의 자산 프로필을 정말 삭제하시겠습니까? apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 70 + 76 @@ -7410,7 +7426,7 @@ 이런! 액세스를 업데이트할 수 없습니다. apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.component.ts - 409 + 414 @@ -7614,7 +7630,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 107 + 110 @@ -7762,7 +7778,7 @@ libs/common/src/lib/routes/routes.ts - 348 + 369 @@ -7771,11 +7787,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 343 + 364 libs/common/src/lib/routes/routes.ts - 346 + 367 @@ -7791,7 +7807,7 @@ libs/common/src/lib/routes/routes.ts - 356 + 377 @@ -7800,11 +7816,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 351 + 372 libs/common/src/lib/routes/routes.ts - 354 + 375 @@ -7964,7 +7980,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.ts - 158 + 167 apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html @@ -8148,7 +8164,7 @@ 변동 libs/ui/src/lib/holdings-table/holdings-table.component.html - 146 + 148 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -8184,11 +8200,11 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 168 + 170 libs/ui/src/lib/holdings-table/holdings-table.component.html - 169 + 171 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -8316,7 +8332,7 @@ libs/common/src/lib/routes/routes.ts - 272 + 293 @@ -8325,11 +8341,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 267 + 288 libs/common/src/lib/routes/routes.ts - 270 + 291 @@ -8425,7 +8441,7 @@ libs/common/src/lib/routes/routes.ts - 145 + 166 @@ -8441,11 +8457,11 @@ {VAR_PLURAL, plural, =1 {Activity} other {Activities}} libs/ui/src/lib/activities-table/activities-table.component.html - 70 + 73 libs/ui/src/lib/activities-table/activities-table.component.html - 108 + 111 @@ -8470,11 +8486,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 235 + 256 libs/common/src/lib/routes/routes.ts - 238 + 259 @@ -8610,7 +8626,7 @@ libs/common/src/lib/routes/routes.ts - 286 + 307 @@ -8618,7 +8634,7 @@ 오픈 소스 대안 libs/common/src/lib/routes/routes.ts - 381 + 402 @@ -8651,15 +8667,15 @@ kebab-case libs/common/src/lib/routes/routes.ts - 367 + 388 libs/common/src/lib/routes/routes.ts - 370 + 391 libs/common/src/lib/routes/routes.ts - 378 + 399 @@ -8668,11 +8684,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 359 + 380 libs/common/src/lib/routes/routes.ts - 362 + 383 @@ -8897,11 +8913,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 391 + 412 libs/common/src/lib/routes/routes.ts - 392 + 413 diff --git a/apps/client/src/locales/messages.nl.xlf b/apps/client/src/locales/messages.nl.xlf index 546958de43..a0c9f0c4c0 100644 --- a/apps/client/src/locales/messages.nl.xlf +++ b/apps/client/src/locales/messages.nl.xlf @@ -66,11 +66,11 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 7 + 10 libs/ui/src/lib/activities-table/activities-table.component.html - 204 + 207 @@ -158,7 +158,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 182 + 185 libs/ui/src/lib/benchmark/benchmark.component.html @@ -218,15 +218,15 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 309 + 312 libs/ui/src/lib/activities-table/activities-table.component.html - 346 + 349 libs/ui/src/lib/holdings-table/holdings-table.component.html - 99 + 101 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -262,7 +262,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 510 + 513 @@ -282,7 +282,7 @@ apps/client/src/app/components/admin-overview/admin-overview.html - 241 + 236 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -310,7 +310,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 545 + 548 libs/ui/src/lib/benchmark/benchmark.component.html @@ -518,7 +518,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 213 + 216 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html @@ -566,7 +566,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 50 + 52 @@ -670,7 +670,7 @@ Update Account libs/common/src/lib/routes/routes.ts - 106 + 120 @@ -690,7 +690,7 @@ apps/client/src/app/components/admin-overview/admin-overview.html - 304 + 299 libs/ui/src/lib/account-balances/account-balances.component.html @@ -846,7 +846,7 @@ libs/common/src/lib/routes/routes.ts - 121 + 135 @@ -1018,7 +1018,7 @@ Absoluut bruto rendement apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 80 + 88 @@ -1026,7 +1026,7 @@ Absoluut netto rendement apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 114 + 122 apps/client/src/app/pages/portfolio/analysis/analysis-page.html @@ -1038,7 +1038,7 @@ Netto rendement apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 129 + 137 apps/client/src/app/pages/portfolio/analysis/analysis-page.html @@ -1050,7 +1050,7 @@ Totaal Activa apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 152 + 165 @@ -1058,7 +1058,7 @@ Koopkracht apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 292 + 305 @@ -1066,7 +1066,7 @@ Netto waarde apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 378 + 391 @@ -1074,7 +1074,7 @@ Rendement per jaar apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 393 + 406 @@ -1082,7 +1082,7 @@ Voer het bedrag van je noodfonds in: apps/client/src/app/components/portfolio-summary/portfolio-summary.component.ts - 160 + 169 @@ -1154,11 +1154,11 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 124 + 126 libs/ui/src/lib/holdings-table/holdings-table.component.html - 125 + 127 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -1178,7 +1178,7 @@ Toon alle libs/ui/src/lib/holdings-table/holdings-table.component.html - 216 + 222 @@ -1266,7 +1266,7 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 194 + 198 @@ -1290,7 +1290,7 @@ libs/common/src/lib/routes/routes.ts - 275 + 296 @@ -1306,7 +1306,7 @@ libs/common/src/lib/routes/routes.ts - 264 + 285 @@ -1334,7 +1334,7 @@ Add Account libs/common/src/lib/routes/routes.ts - 87 + 101 @@ -1566,7 +1566,7 @@ libs/common/src/lib/routes/routes.ts - 109 + 123 libs/ui/src/lib/assistant/assistant.html @@ -1626,7 +1626,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 329 + 332 @@ -1690,7 +1690,7 @@ libs/common/src/lib/routes/routes.ts - 78 + 92 @@ -1802,7 +1802,7 @@ libs/common/src/lib/routes/routes.ts - 280 + 301 @@ -1846,7 +1846,7 @@ libs/common/src/lib/routes/routes.ts - 306 + 327 @@ -1874,7 +1874,7 @@ libs/common/src/lib/routes/routes.ts - 311 + 332 @@ -1910,11 +1910,11 @@ libs/common/src/lib/routes/routes.ts - 148 + 169 libs/common/src/lib/routes/routes.ts - 225 + 246 @@ -1946,15 +1946,15 @@ libs/common/src/lib/routes/routes.ts - 135 + 149 libs/common/src/lib/routes/routes.ts - 316 + 337 libs/common/src/lib/routes/routes.ts - 364 + 385 @@ -1970,7 +1970,7 @@ libs/common/src/lib/routes/routes.ts - 189 + 210 @@ -2058,7 +2058,7 @@ libs/common/src/lib/routes/routes.ts - 194 + 215 @@ -2114,7 +2114,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 183 + 196 apps/client/src/app/pages/public/public-page.html @@ -2122,11 +2122,11 @@ libs/common/src/lib/routes/routes.ts - 130 + 144 libs/common/src/lib/routes/routes.ts - 222 + 243 libs/ui/src/lib/assistant/assistant.html @@ -2166,7 +2166,7 @@ Verkopen apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 49 + 57 libs/ui/src/lib/i18n.ts @@ -2226,11 +2226,11 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 235 + 238 libs/ui/src/lib/holdings-table/holdings-table.component.html - 74 + 76 @@ -2242,7 +2242,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 260 + 263 @@ -2266,7 +2266,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 396 + 399 @@ -2314,7 +2314,7 @@ libs/common/src/lib/routes/routes.ts - 184 + 205 libs/ui/src/lib/accounts-table/accounts-table.component.html @@ -2326,7 +2326,7 @@ Gegevens importeren... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 172 + 176 @@ -2334,7 +2334,7 @@ Importeren is voltooid apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 183 + 187 @@ -2374,7 +2374,7 @@ libs/common/src/lib/routes/routes.ts - 326 + 347 @@ -2398,7 +2398,7 @@ libs/common/src/lib/routes/routes.ts - 207 + 228 @@ -2434,7 +2434,7 @@ libs/common/src/lib/routes/routes.ts - 336 + 357 @@ -2478,7 +2478,7 @@ libs/common/src/lib/routes/routes.ts - 387 + 408 @@ -2510,7 +2510,7 @@ Concept libs/ui/src/lib/activities-table/activities-table.component.html - 188 + 191 libs/ui/src/lib/i18n.ts @@ -2526,11 +2526,11 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 28 + 31 libs/ui/src/lib/activities-table/activities-table.component.html - 432 + 435 @@ -2538,11 +2538,11 @@ Activiteiten exporteren libs/ui/src/lib/activities-table/activities-table.component.html - 73 + 76 libs/ui/src/lib/activities-table/activities-table.component.html - 460 + 463 @@ -2550,11 +2550,11 @@ Concept exporteren als ICS libs/ui/src/lib/activities-table/activities-table.component.html - 87 + 90 libs/ui/src/lib/activities-table/activities-table.component.html - 473 + 476 @@ -2562,7 +2562,7 @@ Kloon libs/ui/src/lib/activities-table/activities-table.component.html - 521 + 524 @@ -2570,7 +2570,7 @@ Concept exporteren als ICS libs/ui/src/lib/activities-table/activities-table.component.html - 533 + 536 @@ -2578,11 +2578,11 @@ Wil je deze activiteit echt verwijderen? libs/ui/src/lib/activities-table/activities-table.component.ts - 343 + 326 libs/ui/src/lib/activities-table/activities-table.component.ts - 354 + 337 @@ -2658,7 +2658,7 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 191 + 195 @@ -2674,7 +2674,7 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 193 + 197 @@ -2810,7 +2810,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 465 + 478 libs/ui/src/lib/fire-calculator/fire-calculator.component.ts @@ -2898,7 +2898,7 @@ Filter op... apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 377 + 350 @@ -2974,7 +2974,7 @@ Uitgesloten van analyse apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 324 + 337 @@ -3074,11 +3074,11 @@ libs/common/src/lib/routes/routes.ts - 94 + 108 libs/ui/src/lib/activities-table/activities-table.component.html - 362 + 365 libs/ui/src/lib/i18n.ts @@ -3150,7 +3150,7 @@ Export libs/ui/src/lib/activities-table/activities-table.component.html - 69 + 72 @@ -3170,7 +3170,7 @@ Contant geld apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 261 + 274 @@ -3202,15 +3202,15 @@ Noodfonds apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 229 + 242 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 307 + 320 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 412 + 425 apps/client/src/app/pages/features/features-page.html @@ -3338,7 +3338,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 66 + 74 apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts @@ -3450,7 +3450,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 479 + 492 apps/client/src/app/pages/features/features-page.html @@ -3518,7 +3518,7 @@ Gegevens valideren... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 294 + 298 @@ -3546,7 +3546,7 @@ libs/common/src/lib/routes/routes.ts - 65 + 79 @@ -3558,7 +3558,7 @@ libs/common/src/lib/routes/routes.ts - 75 + 89 @@ -3586,7 +3586,7 @@ libs/common/src/lib/routes/routes.ts - 140 + 154 @@ -3626,11 +3626,11 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 54 + 57 libs/ui/src/lib/activities-table/activities-table.component.html - 446 + 449 @@ -3682,7 +3682,7 @@ Geen activiteiten apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 148 + 138 @@ -3730,7 +3730,7 @@ Investments apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 214 + 227 @@ -4010,7 +4010,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 94 + 102 @@ -4085,6 +4085,14 @@ 18 + + Add to Watchlist + Add to Watchlist + + libs/common/src/lib/routes/routes.ts + 163 + + Market data provided by Marktgegevens geleverd door @@ -4338,7 +4346,7 @@ libs/common/src/lib/routes/routes.ts - 70 + 84 @@ -4478,7 +4486,7 @@ Verplichtingen apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 355 + 368 apps/client/src/app/pages/features/features-page.html @@ -4498,7 +4506,7 @@ libs/common/src/lib/routes/routes.ts - 240 + 261 @@ -4514,7 +4522,7 @@ libs/common/src/lib/routes/routes.ts - 248 + 269 @@ -4634,7 +4642,7 @@ Update Activity libs/common/src/lib/routes/routes.ts - 181 + 202 @@ -4676,6 +4684,10 @@ apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html 7 + + libs/common/src/lib/routes/routes.ts + 69 + Personal Finance Tools @@ -4686,7 +4698,7 @@ libs/common/src/lib/routes/routes.ts - 384 + 405 @@ -4914,7 +4926,7 @@ Koop apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 35 + 43 libs/ui/src/lib/i18n.ts @@ -4942,7 +4954,7 @@ ETF’s zonder Landen apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 138 + 128 @@ -4950,7 +4962,7 @@ ETF’s zonder Sectoren apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 143 + 133 @@ -5178,7 +5190,7 @@ Valuta apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 133 + 123 apps/client/src/app/pages/public/public-page.html @@ -5374,7 +5386,7 @@ Do you really want to delete these activities? libs/ui/src/lib/activities-table/activities-table.component.ts - 344 + 327 @@ -5478,7 +5490,7 @@ Oeps! De activaprofielen konden niet worden verwijderd. apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 54 + 60 @@ -5534,7 +5546,7 @@ Add Activity libs/common/src/lib/routes/routes.ts - 174 + 195 @@ -5583,19 +5595,19 @@ kebab-case libs/common/src/lib/routes/routes.ts - 289 + 310 libs/common/src/lib/routes/routes.ts - 290 + 311 libs/common/src/lib/routes/routes.ts - 294 + 315 libs/common/src/lib/routes/routes.ts - 300 + 321 @@ -5604,11 +5616,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 309 + 330 libs/common/src/lib/routes/routes.ts - 310 + 331 @@ -5617,31 +5629,31 @@ kebab-case libs/common/src/lib/routes/routes.ts - 231 + 252 libs/common/src/lib/routes/routes.ts - 232 + 253 libs/common/src/lib/routes/routes.ts - 237 + 258 libs/common/src/lib/routes/routes.ts - 245 + 266 libs/common/src/lib/routes/routes.ts - 253 + 274 libs/common/src/lib/routes/routes.ts - 261 + 282 libs/common/src/lib/routes/routes.ts - 269 + 290 @@ -5650,11 +5662,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 259 + 280 libs/common/src/lib/routes/routes.ts - 262 + 283 @@ -5663,11 +5675,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 243 + 264 libs/common/src/lib/routes/routes.ts - 246 + 267 @@ -5676,11 +5688,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 314 + 335 libs/common/src/lib/routes/routes.ts - 315 + 336 @@ -5689,11 +5701,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 324 + 345 libs/common/src/lib/routes/routes.ts - 325 + 346 @@ -5702,11 +5714,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 334 + 355 libs/common/src/lib/routes/routes.ts - 335 + 356 @@ -5715,31 +5727,31 @@ kebab-case libs/common/src/lib/routes/routes.ts - 339 + 360 libs/common/src/lib/routes/routes.ts - 340 + 361 libs/common/src/lib/routes/routes.ts - 345 + 366 libs/common/src/lib/routes/routes.ts - 353 + 374 libs/common/src/lib/routes/routes.ts - 361 + 382 libs/common/src/lib/routes/routes.ts - 369 + 390 libs/common/src/lib/routes/routes.ts - 377 + 398 @@ -5812,11 +5824,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 375 + 396 libs/common/src/lib/routes/routes.ts - 379 + 400 @@ -5848,7 +5860,7 @@ Data gathering has been started. apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 413 + 386 @@ -5972,7 +5984,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 285 + 288 libs/ui/src/lib/i18n.ts @@ -6028,7 +6040,7 @@ libs/common/src/lib/routes/routes.ts - 99 + 113 libs/ui/src/lib/accounts-table/accounts-table.component.html @@ -6106,17 +6118,21 @@ apps/client/src/app/components/admin-jobs/admin-jobs.html 52 + + libs/common/src/lib/routes/routes.ts + 76 + Do you really want to delete this asset profile? Weet u zeker dat u dit bezittingen profiel wilt verwijderen? apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 27 + 33 apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 69 + 75 @@ -6484,7 +6500,7 @@ Oeps! Kan geen toegang verlenen. apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.component.ts - 311 + 314 @@ -6740,7 +6756,7 @@ libs/common/src/lib/routes/routes.ts - 295 + 316 @@ -6752,7 +6768,7 @@ libs/common/src/lib/routes/routes.ts - 303 + 324 @@ -6761,11 +6777,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 298 + 319 libs/common/src/lib/routes/routes.ts - 301 + 322 @@ -6857,7 +6873,7 @@ {VAR_PLURAL, plural, =1 {activiteit} other {activiteiten}} apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 18 + 25 @@ -6873,7 +6889,7 @@ Verwijder Activiteiten libs/ui/src/lib/activities-table/activities-table.component.html - 111 + 114 @@ -6881,7 +6897,7 @@ Internationalizering libs/common/src/lib/routes/routes.ts - 154 + 175 @@ -6945,7 +6961,7 @@ Clone Activity libs/common/src/lib/routes/routes.ts - 169 + 190 @@ -6985,7 +7001,7 @@ Benchmarks apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 128 + 118 @@ -7109,7 +7125,7 @@ Oeps! Het activaprofiel kon niet worden verwijderd. apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 53 + 59 @@ -7213,7 +7229,7 @@ Bekijk Holding libs/ui/src/lib/activities-table/activities-table.component.html - 499 + 502 @@ -7221,7 +7237,7 @@ Wil je deze activaprofielen echt verwijderen? apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 70 + 76 @@ -7261,7 +7277,7 @@ Oops! Kan de toegang niet updaten. apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.component.ts - 409 + 414 @@ -7589,7 +7605,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 107 + 110 @@ -7737,7 +7753,7 @@ libs/common/src/lib/routes/routes.ts - 348 + 369 @@ -7753,7 +7769,7 @@ libs/common/src/lib/routes/routes.ts - 356 + 377 @@ -7762,11 +7778,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 351 + 372 libs/common/src/lib/routes/routes.ts - 354 + 375 @@ -7775,11 +7791,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 343 + 364 libs/common/src/lib/routes/routes.ts - 346 + 367 @@ -7939,7 +7955,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.ts - 158 + 167 apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html @@ -8123,7 +8139,7 @@ Aanpassen libs/ui/src/lib/holdings-table/holdings-table.component.html - 146 + 148 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -8159,11 +8175,11 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 168 + 170 libs/ui/src/lib/holdings-table/holdings-table.component.html - 169 + 171 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -8296,11 +8312,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 267 + 288 libs/common/src/lib/routes/routes.ts - 270 + 291 @@ -8312,7 +8328,7 @@ libs/common/src/lib/routes/routes.ts - 272 + 293 @@ -8424,7 +8440,7 @@ libs/common/src/lib/routes/routes.ts - 145 + 166 @@ -8440,11 +8456,11 @@ {VAR_PLURAL, plural, =1 {Activity} other {Activities}} libs/ui/src/lib/activities-table/activities-table.component.html - 70 + 73 libs/ui/src/lib/activities-table/activities-table.component.html - 108 + 111 @@ -8469,11 +8485,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 235 + 256 libs/common/src/lib/routes/routes.ts - 238 + 259 @@ -8609,7 +8625,7 @@ libs/common/src/lib/routes/routes.ts - 286 + 307 @@ -8617,7 +8633,7 @@ Open Source alternatief voor libs/common/src/lib/routes/routes.ts - 381 + 402 @@ -8650,15 +8666,15 @@ kebab-case libs/common/src/lib/routes/routes.ts - 367 + 388 libs/common/src/lib/routes/routes.ts - 370 + 391 libs/common/src/lib/routes/routes.ts - 378 + 399 @@ -8667,11 +8683,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 359 + 380 libs/common/src/lib/routes/routes.ts - 362 + 383 @@ -8896,11 +8912,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 391 + 412 libs/common/src/lib/routes/routes.ts - 392 + 413 diff --git a/apps/client/src/locales/messages.pl.xlf b/apps/client/src/locales/messages.pl.xlf index bb274372fa..653c7245cf 100644 --- a/apps/client/src/locales/messages.pl.xlf +++ b/apps/client/src/locales/messages.pl.xlf @@ -7,31 +7,31 @@ kebab-case libs/common/src/lib/routes/routes.ts - 231 + 252 libs/common/src/lib/routes/routes.ts - 232 + 253 libs/common/src/lib/routes/routes.ts - 237 + 258 libs/common/src/lib/routes/routes.ts - 245 + 266 libs/common/src/lib/routes/routes.ts - 253 + 274 libs/common/src/lib/routes/routes.ts - 261 + 282 libs/common/src/lib/routes/routes.ts - 269 + 290 @@ -40,19 +40,19 @@ kebab-case libs/common/src/lib/routes/routes.ts - 289 + 310 libs/common/src/lib/routes/routes.ts - 290 + 311 libs/common/src/lib/routes/routes.ts - 294 + 315 libs/common/src/lib/routes/routes.ts - 300 + 321 @@ -61,11 +61,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 309 + 330 libs/common/src/lib/routes/routes.ts - 310 + 331 @@ -74,11 +74,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 243 + 264 libs/common/src/lib/routes/routes.ts - 246 + 267 @@ -87,11 +87,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 314 + 335 libs/common/src/lib/routes/routes.ts - 315 + 336 @@ -100,11 +100,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 324 + 345 libs/common/src/lib/routes/routes.ts - 325 + 346 @@ -113,11 +113,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 259 + 280 libs/common/src/lib/routes/routes.ts - 262 + 283 @@ -126,11 +126,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 334 + 355 libs/common/src/lib/routes/routes.ts - 335 + 356 @@ -139,31 +139,31 @@ kebab-case libs/common/src/lib/routes/routes.ts - 339 + 360 libs/common/src/lib/routes/routes.ts - 340 + 361 libs/common/src/lib/routes/routes.ts - 345 + 366 libs/common/src/lib/routes/routes.ts - 353 + 374 libs/common/src/lib/routes/routes.ts - 361 + 382 libs/common/src/lib/routes/routes.ts - 369 + 390 libs/common/src/lib/routes/routes.ts - 377 + 398 @@ -267,11 +267,11 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 7 + 10 libs/ui/src/lib/activities-table/activities-table.component.html - 204 + 207 @@ -355,7 +355,7 @@ libs/common/src/lib/routes/routes.ts - 99 + 113 libs/ui/src/lib/accounts-table/accounts-table.component.html @@ -407,7 +407,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 182 + 185 libs/ui/src/lib/benchmark/benchmark.component.html @@ -471,7 +471,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 329 + 332 @@ -507,15 +507,15 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 309 + 312 libs/ui/src/lib/activities-table/activities-table.component.html - 346 + 349 libs/ui/src/lib/holdings-table/holdings-table.component.html - 99 + 101 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -551,7 +551,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 510 + 513 @@ -571,7 +571,7 @@ apps/client/src/app/components/admin-overview/admin-overview.html - 241 + 236 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -599,7 +599,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 545 + 548 libs/ui/src/lib/benchmark/benchmark.component.html @@ -629,6 +629,10 @@ apps/client/src/app/components/admin-jobs/admin-jobs.html 52 + + libs/common/src/lib/routes/routes.ts + 76 + Historical Market Data @@ -803,7 +807,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 213 + 216 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html @@ -839,7 +843,7 @@ Waluty apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 133 + 123 apps/client/src/app/pages/public/public-page.html @@ -859,7 +863,7 @@ ETF-y bez Krajów apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 138 + 128 @@ -867,7 +871,7 @@ ETF-y bez Sektorów apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 143 + 133 @@ -883,11 +887,11 @@ Czy na pewno chcesz usunąć ten profil aktywów? apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 27 + 33 apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 69 + 75 @@ -895,7 +899,7 @@ Filtruj według... apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 377 + 350 @@ -915,7 +919,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 50 + 52 @@ -1127,7 +1131,7 @@ Update Activity libs/common/src/lib/routes/routes.ts - 181 + 202 @@ -1183,7 +1187,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 396 + 399 @@ -1193,6 +1197,10 @@ apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html 7 + + libs/common/src/lib/routes/routes.ts + 69 + Search @@ -1323,7 +1331,7 @@ Update Account libs/common/src/lib/routes/routes.ts - 106 + 120 @@ -1367,7 +1375,7 @@ apps/client/src/app/components/admin-overview/admin-overview.html - 304 + 299 libs/ui/src/lib/account-balances/account-balances.component.html @@ -1663,7 +1671,7 @@ libs/common/src/lib/routes/routes.ts - 207 + 228 @@ -1715,7 +1723,7 @@ libs/common/src/lib/routes/routes.ts - 121 + 135 @@ -2035,7 +2043,7 @@ Bezwzględne Osiągi Brutto apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 80 + 88 @@ -2047,7 +2055,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 94 + 102 @@ -2055,7 +2063,7 @@ Bezwzględne Osiągi Netto apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 114 + 122 apps/client/src/app/pages/portfolio/analysis/analysis-page.html @@ -2067,7 +2075,7 @@ Osiągi Netto apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 129 + 137 apps/client/src/app/pages/portfolio/analysis/analysis-page.html @@ -2079,7 +2087,7 @@ Suma Aktywów apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 152 + 165 @@ -2087,7 +2095,7 @@ Siła Nabywcza apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 292 + 305 @@ -2095,7 +2103,7 @@ Wykluczone z Analizy apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 324 + 337 @@ -2103,7 +2111,7 @@ Pasywa (Zobowiązania Finansowe) apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 355 + 368 apps/client/src/app/pages/features/features-page.html @@ -2115,7 +2123,7 @@ Wartość Netto apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 378 + 391 @@ -2123,7 +2131,7 @@ Osiągi w Ujęciu Rocznym apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 393 + 406 @@ -2131,7 +2139,7 @@ Wprowadź wysokość funduszu rezerwowego: apps/client/src/app/components/portfolio-summary/portfolio-summary.component.ts - 160 + 169 @@ -2167,11 +2175,11 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 235 + 238 libs/ui/src/lib/holdings-table/holdings-table.component.html - 74 + 76 @@ -2483,7 +2491,7 @@ Add Account libs/common/src/lib/routes/routes.ts - 87 + 101 @@ -2695,7 +2703,7 @@ Investments apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 214 + 227 @@ -2775,7 +2783,7 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 193 + 197 @@ -2787,7 +2795,7 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 191 + 195 @@ -2799,7 +2807,7 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 194 + 198 @@ -2823,7 +2831,7 @@ libs/common/src/lib/routes/routes.ts - 275 + 296 @@ -2839,7 +2847,7 @@ libs/common/src/lib/routes/routes.ts - 240 + 261 @@ -2855,7 +2863,7 @@ libs/common/src/lib/routes/routes.ts - 248 + 269 @@ -2871,7 +2879,7 @@ libs/common/src/lib/routes/routes.ts - 264 + 285 @@ -2943,7 +2951,7 @@ libs/common/src/lib/routes/routes.ts - 109 + 123 libs/ui/src/lib/assistant/assistant.html @@ -3027,7 +3035,7 @@ libs/common/src/lib/routes/routes.ts - 78 + 92 @@ -3039,7 +3047,7 @@ libs/common/src/lib/routes/routes.ts - 65 + 79 @@ -3055,7 +3063,7 @@ libs/common/src/lib/routes/routes.ts - 70 + 84 @@ -3067,7 +3075,7 @@ libs/common/src/lib/routes/routes.ts - 75 + 89 @@ -3103,11 +3111,11 @@ libs/common/src/lib/routes/routes.ts - 148 + 169 libs/common/src/lib/routes/routes.ts - 225 + 246 @@ -3219,7 +3227,7 @@ libs/common/src/lib/routes/routes.ts - 280 + 301 @@ -3283,7 +3291,7 @@ libs/common/src/lib/routes/routes.ts - 306 + 327 @@ -3311,7 +3319,7 @@ libs/common/src/lib/routes/routes.ts - 311 + 332 @@ -3483,7 +3491,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 183 + 196 apps/client/src/app/pages/public/public-page.html @@ -3491,11 +3499,11 @@ libs/common/src/lib/routes/routes.ts - 130 + 144 libs/common/src/lib/routes/routes.ts - 222 + 243 libs/ui/src/lib/assistant/assistant.html @@ -3527,7 +3535,7 @@ libs/common/src/lib/routes/routes.ts - 140 + 154 @@ -3559,15 +3567,15 @@ libs/common/src/lib/routes/routes.ts - 135 + 149 libs/common/src/lib/routes/routes.ts - 316 + 337 libs/common/src/lib/routes/routes.ts - 364 + 385 @@ -3883,7 +3891,7 @@ Do you really want to delete these activities? libs/ui/src/lib/activities-table/activities-table.component.ts - 344 + 327 @@ -3987,7 +3995,7 @@ Oops! Could not delete the asset profiles. apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 54 + 60 @@ -4059,7 +4067,7 @@ Add Activity libs/common/src/lib/routes/routes.ts - 174 + 195 @@ -4251,7 +4259,7 @@ libs/common/src/lib/routes/routes.ts - 184 + 205 libs/ui/src/lib/accounts-table/accounts-table.component.html @@ -4335,7 +4343,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 260 + 263 @@ -4347,11 +4355,11 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 28 + 31 libs/ui/src/lib/activities-table/activities-table.component.html - 432 + 435 @@ -4363,11 +4371,11 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 54 + 57 libs/ui/src/lib/activities-table/activities-table.component.html - 446 + 449 @@ -4375,7 +4383,7 @@ Importowanie danych... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 172 + 176 @@ -4383,7 +4391,7 @@ Importowanie zakończone apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 183 + 187 @@ -4399,7 +4407,7 @@ Weryfikacja danych... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 294 + 298 @@ -4519,7 +4527,7 @@ libs/common/src/lib/routes/routes.ts - 189 + 210 @@ -4691,7 +4699,7 @@ libs/common/src/lib/routes/routes.ts - 194 + 215 @@ -4715,7 +4723,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 479 + 492 apps/client/src/app/pages/features/features-page.html @@ -4859,7 +4867,7 @@ libs/common/src/lib/routes/routes.ts - 326 + 347 @@ -5119,7 +5127,7 @@ libs/common/src/lib/routes/routes.ts - 336 + 357 @@ -5151,7 +5159,7 @@ libs/common/src/lib/routes/routes.ts - 384 + 405 @@ -5160,11 +5168,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 375 + 396 libs/common/src/lib/routes/routes.ts - 379 + 400 @@ -5452,7 +5460,7 @@ Data gathering has been started. apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 413 + 386 @@ -5488,7 +5496,7 @@ libs/common/src/lib/routes/routes.ts - 387 + 408 @@ -5564,11 +5572,11 @@ Eksportuj Działalności libs/ui/src/lib/activities-table/activities-table.component.html - 73 + 76 libs/ui/src/lib/activities-table/activities-table.component.html - 460 + 463 @@ -5576,11 +5584,11 @@ Eksportuj Wersje Robocze jako ICS libs/ui/src/lib/activities-table/activities-table.component.html - 87 + 90 libs/ui/src/lib/activities-table/activities-table.component.html - 473 + 476 @@ -5588,7 +5596,7 @@ Przygotuj Wstępną Wersję libs/ui/src/lib/activities-table/activities-table.component.html - 188 + 191 libs/ui/src/lib/i18n.ts @@ -5600,7 +5608,7 @@ Sklonuj libs/ui/src/lib/activities-table/activities-table.component.html - 521 + 524 @@ -5608,7 +5616,7 @@ Eksportuj Wersję Roboczą jako ICS libs/ui/src/lib/activities-table/activities-table.component.html - 533 + 536 @@ -5616,11 +5624,11 @@ Czy na pewno chcesz usunąć tę działalność? libs/ui/src/lib/activities-table/activities-table.component.ts - 343 + 326 libs/ui/src/lib/activities-table/activities-table.component.ts - 354 + 337 @@ -5675,6 +5683,14 @@ 286 + + Add to Watchlist + Add to Watchlist + + libs/common/src/lib/routes/routes.ts + 163 + + Market data provided by Dane rynkowe dostarczone przez @@ -5732,7 +5748,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 465 + 478 libs/ui/src/lib/fire-calculator/fire-calculator.component.ts @@ -5760,11 +5776,11 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 124 + 126 libs/ui/src/lib/holdings-table/holdings-table.component.html - 125 + 127 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -5784,7 +5800,7 @@ Pokaż wszystko libs/ui/src/lib/holdings-table/holdings-table.component.html - 216 + 222 @@ -5796,11 +5812,11 @@ libs/common/src/lib/routes/routes.ts - 94 + 108 libs/ui/src/lib/activities-table/activities-table.component.html - 362 + 365 libs/ui/src/lib/i18n.ts @@ -5904,15 +5920,15 @@ Fundusz Rezerwowy apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 229 + 242 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 307 + 320 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 412 + 425 apps/client/src/app/pages/features/features-page.html @@ -6008,7 +6024,7 @@ Brak transakcji apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 148 + 138 @@ -6068,7 +6084,7 @@ Export libs/ui/src/lib/activities-table/activities-table.component.html - 69 + 72 @@ -6124,7 +6140,7 @@ Kupno apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 35 + 43 libs/ui/src/lib/i18n.ts @@ -6140,7 +6156,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 285 + 288 libs/ui/src/lib/i18n.ts @@ -6168,7 +6184,7 @@ Sprzedaż apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 49 + 57 libs/ui/src/lib/i18n.ts @@ -6188,7 +6204,7 @@ Gotówka apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 261 + 274 @@ -6288,7 +6304,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 66 + 74 apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts @@ -6484,7 +6500,7 @@ Ups! Nie udało się przyznać dostępu. apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.component.ts - 311 + 314 @@ -6740,7 +6756,7 @@ libs/common/src/lib/routes/routes.ts - 295 + 316 @@ -6752,7 +6768,7 @@ libs/common/src/lib/routes/routes.ts - 303 + 324 @@ -6761,11 +6777,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 298 + 319 libs/common/src/lib/routes/routes.ts - 301 + 322 @@ -6857,7 +6873,7 @@ {VAR_PLURAL, plural, =1 {działalność} other {działalność}} apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 18 + 25 @@ -6873,7 +6889,7 @@ Usuń aktywności libs/ui/src/lib/activities-table/activities-table.component.html - 111 + 114 @@ -6881,7 +6897,7 @@ Internacjonalizacja libs/common/src/lib/routes/routes.ts - 154 + 175 @@ -6945,7 +6961,7 @@ Clone Activity libs/common/src/lib/routes/routes.ts - 169 + 190 @@ -6985,7 +7001,7 @@ Punkty Odniesienia apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 128 + 118 @@ -7109,7 +7125,7 @@ Oops! Could not delete the asset profile. apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 53 + 59 @@ -7213,7 +7229,7 @@ Podgląd inwestycji libs/ui/src/lib/activities-table/activities-table.component.html - 499 + 502 @@ -7221,7 +7237,7 @@ Do you really want to delete these asset profiles? apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 70 + 76 @@ -7261,7 +7277,7 @@ Ups! Nie udało się zaktualizować dostępu. apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.component.ts - 409 + 414 @@ -7589,7 +7605,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 107 + 110 @@ -7737,7 +7753,7 @@ libs/common/src/lib/routes/routes.ts - 348 + 369 @@ -7753,7 +7769,7 @@ libs/common/src/lib/routes/routes.ts - 356 + 377 @@ -7762,11 +7778,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 351 + 372 libs/common/src/lib/routes/routes.ts - 354 + 375 @@ -7775,11 +7791,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 343 + 364 libs/common/src/lib/routes/routes.ts - 346 + 367 @@ -7939,7 +7955,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.ts - 158 + 167 apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html @@ -8123,7 +8139,7 @@ Zmiana libs/ui/src/lib/holdings-table/holdings-table.component.html - 146 + 148 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -8159,11 +8175,11 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 168 + 170 libs/ui/src/lib/holdings-table/holdings-table.component.html - 169 + 171 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -8296,11 +8312,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 267 + 288 libs/common/src/lib/routes/routes.ts - 270 + 291 @@ -8312,7 +8328,7 @@ libs/common/src/lib/routes/routes.ts - 272 + 293 @@ -8424,7 +8440,7 @@ libs/common/src/lib/routes/routes.ts - 145 + 166 @@ -8440,11 +8456,11 @@ {VAR_PLURAL, plural, =1 {Activity} other {Activities}} libs/ui/src/lib/activities-table/activities-table.component.html - 70 + 73 libs/ui/src/lib/activities-table/activities-table.component.html - 108 + 111 @@ -8469,11 +8485,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 235 + 256 libs/common/src/lib/routes/routes.ts - 238 + 259 @@ -8609,7 +8625,7 @@ libs/common/src/lib/routes/routes.ts - 286 + 307 @@ -8617,7 +8633,7 @@ Alternatywa Open Source dla libs/common/src/lib/routes/routes.ts - 381 + 402 @@ -8650,15 +8666,15 @@ kebab-case libs/common/src/lib/routes/routes.ts - 367 + 388 libs/common/src/lib/routes/routes.ts - 370 + 391 libs/common/src/lib/routes/routes.ts - 378 + 399 @@ -8667,11 +8683,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 359 + 380 libs/common/src/lib/routes/routes.ts - 362 + 383 @@ -8896,11 +8912,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 391 + 412 libs/common/src/lib/routes/routes.ts - 392 + 413 diff --git a/apps/client/src/locales/messages.pt.xlf b/apps/client/src/locales/messages.pt.xlf index c788079e37..fa8cd24b96 100644 --- a/apps/client/src/locales/messages.pt.xlf +++ b/apps/client/src/locales/messages.pt.xlf @@ -58,11 +58,11 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 7 + 10 libs/ui/src/lib/activities-table/activities-table.component.html - 204 + 207 @@ -166,7 +166,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 182 + 185 libs/ui/src/lib/benchmark/benchmark.component.html @@ -230,7 +230,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 329 + 332 @@ -282,15 +282,15 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 309 + 312 libs/ui/src/lib/activities-table/activities-table.component.html - 346 + 349 libs/ui/src/lib/holdings-table/holdings-table.component.html - 99 + 101 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -326,7 +326,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 510 + 513 @@ -346,7 +346,7 @@ apps/client/src/app/components/admin-overview/admin-overview.html - 241 + 236 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -374,7 +374,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 545 + 548 libs/ui/src/lib/benchmark/benchmark.component.html @@ -582,7 +582,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 213 + 216 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html @@ -618,7 +618,7 @@ Filtrar por... apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 377 + 350 @@ -638,7 +638,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 50 + 52 @@ -774,7 +774,7 @@ Update Account libs/common/src/lib/routes/routes.ts - 106 + 120 @@ -794,7 +794,7 @@ apps/client/src/app/components/admin-overview/admin-overview.html - 304 + 299 libs/ui/src/lib/account-balances/account-balances.component.html @@ -910,7 +910,7 @@ libs/common/src/lib/routes/routes.ts - 207 + 228 @@ -962,7 +962,7 @@ libs/common/src/lib/routes/routes.ts - 121 + 135 @@ -1190,7 +1190,7 @@ Desempenho Bruto Absoluto apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 80 + 88 @@ -1198,7 +1198,7 @@ Desempenho Líquido Absoluto apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 114 + 122 apps/client/src/app/pages/portfolio/analysis/analysis-page.html @@ -1210,7 +1210,7 @@ Desempenho Líquido apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 129 + 137 apps/client/src/app/pages/portfolio/analysis/analysis-page.html @@ -1222,7 +1222,7 @@ Ativos Totais apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 152 + 165 @@ -1230,7 +1230,7 @@ Poder de Compra apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 292 + 305 @@ -1238,7 +1238,7 @@ Excluído da Análise apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 324 + 337 @@ -1246,7 +1246,7 @@ Valor Líquido apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 378 + 391 @@ -1254,7 +1254,7 @@ Desempenho Anual apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 393 + 406 @@ -1262,7 +1262,7 @@ Por favor, insira o valor do seu fundo de emergência: apps/client/src/app/components/portfolio-summary/portfolio-summary.component.ts - 160 + 169 @@ -1298,11 +1298,11 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 235 + 238 libs/ui/src/lib/holdings-table/holdings-table.component.html - 74 + 76 @@ -1414,11 +1414,11 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 124 + 126 libs/ui/src/lib/holdings-table/holdings-table.component.html - 125 + 127 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -1438,7 +1438,7 @@ Mostrar tudo libs/ui/src/lib/holdings-table/holdings-table.component.html - 216 + 222 @@ -1538,7 +1538,7 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 193 + 197 @@ -1550,7 +1550,7 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 191 + 195 @@ -1562,7 +1562,7 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 194 + 198 @@ -1586,7 +1586,7 @@ libs/common/src/lib/routes/routes.ts - 275 + 296 @@ -1602,7 +1602,7 @@ libs/common/src/lib/routes/routes.ts - 264 + 285 @@ -1642,7 +1642,7 @@ Add Account libs/common/src/lib/routes/routes.ts - 87 + 101 @@ -1754,7 +1754,7 @@ libs/common/src/lib/routes/routes.ts - 75 + 89 @@ -1946,7 +1946,7 @@ libs/common/src/lib/routes/routes.ts - 109 + 123 libs/ui/src/lib/assistant/assistant.html @@ -1998,7 +1998,7 @@ libs/common/src/lib/routes/routes.ts - 78 + 92 @@ -2110,7 +2110,7 @@ libs/common/src/lib/routes/routes.ts - 280 + 301 @@ -2154,7 +2154,7 @@ libs/common/src/lib/routes/routes.ts - 306 + 327 @@ -2182,7 +2182,7 @@ libs/common/src/lib/routes/routes.ts - 311 + 332 @@ -2218,11 +2218,11 @@ libs/common/src/lib/routes/routes.ts - 148 + 169 libs/common/src/lib/routes/routes.ts - 225 + 246 @@ -2254,15 +2254,15 @@ libs/common/src/lib/routes/routes.ts - 135 + 149 libs/common/src/lib/routes/routes.ts - 316 + 337 libs/common/src/lib/routes/routes.ts - 364 + 385 @@ -2310,7 +2310,7 @@ libs/common/src/lib/routes/routes.ts - 184 + 205 libs/ui/src/lib/accounts-table/accounts-table.component.html @@ -2350,7 +2350,7 @@ Venda apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 49 + 57 libs/ui/src/lib/i18n.ts @@ -2402,7 +2402,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 260 + 263 @@ -2426,7 +2426,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 396 + 399 @@ -2434,7 +2434,7 @@ A importar dados... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 172 + 176 @@ -2442,7 +2442,7 @@ A importação foi concluída apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 183 + 187 @@ -2502,7 +2502,7 @@ libs/common/src/lib/routes/routes.ts - 189 + 210 @@ -2650,7 +2650,7 @@ libs/common/src/lib/routes/routes.ts - 194 + 215 @@ -2722,7 +2722,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 183 + 196 apps/client/src/app/pages/public/public-page.html @@ -2730,11 +2730,11 @@ libs/common/src/lib/routes/routes.ts - 130 + 144 libs/common/src/lib/routes/routes.ts - 222 + 243 libs/ui/src/lib/assistant/assistant.html @@ -2770,7 +2770,7 @@ libs/common/src/lib/routes/routes.ts - 326 + 347 @@ -2858,7 +2858,7 @@ libs/common/src/lib/routes/routes.ts - 336 + 357 @@ -2922,7 +2922,7 @@ libs/common/src/lib/routes/routes.ts - 387 + 408 @@ -2954,7 +2954,7 @@ Rascunho libs/ui/src/lib/activities-table/activities-table.component.html - 188 + 191 libs/ui/src/lib/i18n.ts @@ -2970,11 +2970,11 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 28 + 31 libs/ui/src/lib/activities-table/activities-table.component.html - 432 + 435 @@ -2982,11 +2982,11 @@ Exportar Atividades libs/ui/src/lib/activities-table/activities-table.component.html - 73 + 76 libs/ui/src/lib/activities-table/activities-table.component.html - 460 + 463 @@ -2994,11 +2994,11 @@ Exportar Rascunhos como ICS libs/ui/src/lib/activities-table/activities-table.component.html - 87 + 90 libs/ui/src/lib/activities-table/activities-table.component.html - 473 + 476 @@ -3006,7 +3006,7 @@ Clonar libs/ui/src/lib/activities-table/activities-table.component.html - 521 + 524 @@ -3014,7 +3014,7 @@ Exportar Rascunho como ICS libs/ui/src/lib/activities-table/activities-table.component.html - 533 + 536 @@ -3022,11 +3022,11 @@ Deseja realmente eliminar esta atividade? libs/ui/src/lib/activities-table/activities-table.component.ts - 343 + 326 libs/ui/src/lib/activities-table/activities-table.component.ts - 354 + 337 @@ -3086,7 +3086,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 465 + 478 libs/ui/src/lib/fire-calculator/fire-calculator.component.ts @@ -3114,11 +3114,11 @@ libs/common/src/lib/routes/routes.ts - 94 + 108 libs/ui/src/lib/activities-table/activities-table.component.html - 362 + 365 libs/ui/src/lib/i18n.ts @@ -3162,15 +3162,15 @@ Fundo de Emergência apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 229 + 242 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 307 + 320 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 412 + 425 apps/client/src/app/pages/features/features-page.html @@ -3230,7 +3230,7 @@ Export libs/ui/src/lib/activities-table/activities-table.component.html - 69 + 72 @@ -3250,7 +3250,7 @@ Dinheiro apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 261 + 274 @@ -3350,7 +3350,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 66 + 74 apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts @@ -3458,7 +3458,7 @@ libs/common/src/lib/routes/routes.ts - 65 + 79 @@ -3486,7 +3486,7 @@ libs/common/src/lib/routes/routes.ts - 140 + 154 @@ -3494,7 +3494,7 @@ A validar dados... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 294 + 298 @@ -3534,7 +3534,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 479 + 492 apps/client/src/app/pages/features/features-page.html @@ -3626,11 +3626,11 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 54 + 57 libs/ui/src/lib/activities-table/activities-table.component.html - 446 + 449 @@ -3682,7 +3682,7 @@ No Activities apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 148 + 138 @@ -3730,7 +3730,7 @@ Investments apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 214 + 227 @@ -4010,7 +4010,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 94 + 102 @@ -4085,6 +4085,14 @@ 18 + + Add to Watchlist + Add to Watchlist + + libs/common/src/lib/routes/routes.ts + 163 + + Market data provided by Dados de mercado fornecidos por @@ -4338,7 +4346,7 @@ libs/common/src/lib/routes/routes.ts - 70 + 84 @@ -4478,7 +4486,7 @@ Responsabilidades apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 355 + 368 apps/client/src/app/pages/features/features-page.html @@ -4498,7 +4506,7 @@ libs/common/src/lib/routes/routes.ts - 240 + 261 @@ -4514,7 +4522,7 @@ libs/common/src/lib/routes/routes.ts - 248 + 269 @@ -4634,7 +4642,7 @@ Update Activity libs/common/src/lib/routes/routes.ts - 181 + 202 @@ -4676,6 +4684,10 @@ apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html 7 + + libs/common/src/lib/routes/routes.ts + 69 + Personal Finance Tools @@ -4686,7 +4698,7 @@ libs/common/src/lib/routes/routes.ts - 384 + 405 @@ -4914,7 +4926,7 @@ Comprar apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 35 + 43 libs/ui/src/lib/i18n.ts @@ -4942,7 +4954,7 @@ ETFs sem países apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 138 + 128 @@ -4950,7 +4962,7 @@ ETFs sem setores apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 143 + 133 @@ -5178,7 +5190,7 @@ Moedas apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 133 + 123 apps/client/src/app/pages/public/public-page.html @@ -5374,7 +5386,7 @@ Do you really want to delete these activities? libs/ui/src/lib/activities-table/activities-table.component.ts - 344 + 327 @@ -5478,7 +5490,7 @@ Oops! Could not delete the asset profiles. apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 54 + 60 @@ -5534,7 +5546,7 @@ Add Activity libs/common/src/lib/routes/routes.ts - 174 + 195 @@ -5583,19 +5595,19 @@ kebab-case libs/common/src/lib/routes/routes.ts - 289 + 310 libs/common/src/lib/routes/routes.ts - 290 + 311 libs/common/src/lib/routes/routes.ts - 294 + 315 libs/common/src/lib/routes/routes.ts - 300 + 321 @@ -5604,11 +5616,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 309 + 330 libs/common/src/lib/routes/routes.ts - 310 + 331 @@ -5617,31 +5629,31 @@ kebab-case libs/common/src/lib/routes/routes.ts - 231 + 252 libs/common/src/lib/routes/routes.ts - 232 + 253 libs/common/src/lib/routes/routes.ts - 237 + 258 libs/common/src/lib/routes/routes.ts - 245 + 266 libs/common/src/lib/routes/routes.ts - 253 + 274 libs/common/src/lib/routes/routes.ts - 261 + 282 libs/common/src/lib/routes/routes.ts - 269 + 290 @@ -5650,11 +5662,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 259 + 280 libs/common/src/lib/routes/routes.ts - 262 + 283 @@ -5663,11 +5675,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 243 + 264 libs/common/src/lib/routes/routes.ts - 246 + 267 @@ -5676,11 +5688,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 314 + 335 libs/common/src/lib/routes/routes.ts - 315 + 336 @@ -5689,11 +5701,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 324 + 345 libs/common/src/lib/routes/routes.ts - 325 + 346 @@ -5702,11 +5714,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 334 + 355 libs/common/src/lib/routes/routes.ts - 335 + 356 @@ -5715,31 +5727,31 @@ kebab-case libs/common/src/lib/routes/routes.ts - 339 + 360 libs/common/src/lib/routes/routes.ts - 340 + 361 libs/common/src/lib/routes/routes.ts - 345 + 366 libs/common/src/lib/routes/routes.ts - 353 + 374 libs/common/src/lib/routes/routes.ts - 361 + 382 libs/common/src/lib/routes/routes.ts - 369 + 390 libs/common/src/lib/routes/routes.ts - 377 + 398 @@ -5812,11 +5824,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 375 + 396 libs/common/src/lib/routes/routes.ts - 379 + 400 @@ -5848,7 +5860,7 @@ Data gathering has been started. apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 413 + 386 @@ -5972,7 +5984,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 285 + 288 libs/ui/src/lib/i18n.ts @@ -6028,7 +6040,7 @@ libs/common/src/lib/routes/routes.ts - 99 + 113 libs/ui/src/lib/accounts-table/accounts-table.component.html @@ -6106,17 +6118,21 @@ apps/client/src/app/components/admin-jobs/admin-jobs.html 52 + + libs/common/src/lib/routes/routes.ts + 76 + Do you really want to delete this asset profile? Você realmente deseja excluir este perfil de ativo? apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 27 + 33 apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 69 + 75 @@ -6484,7 +6500,7 @@ Ops! Não foi possível conceder acesso. apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.component.ts - 311 + 314 @@ -6740,7 +6756,7 @@ libs/common/src/lib/routes/routes.ts - 295 + 316 @@ -6752,7 +6768,7 @@ libs/common/src/lib/routes/routes.ts - 303 + 324 @@ -6761,11 +6777,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 298 + 319 libs/common/src/lib/routes/routes.ts - 301 + 322 @@ -6857,7 +6873,7 @@ {VAR_PLURAL, plural, =1 {activity} other {activities}} apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 18 + 25 @@ -6873,7 +6889,7 @@ Excluir atividades libs/ui/src/lib/activities-table/activities-table.component.html - 111 + 114 @@ -6881,7 +6897,7 @@ Internacionalização libs/common/src/lib/routes/routes.ts - 154 + 175 @@ -6945,7 +6961,7 @@ Clone Activity libs/common/src/lib/routes/routes.ts - 169 + 190 @@ -6985,7 +7001,7 @@ Referências apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 128 + 118 @@ -7109,7 +7125,7 @@ Oops! Could not delete the asset profile. apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 53 + 59 @@ -7213,7 +7229,7 @@ View Holding libs/ui/src/lib/activities-table/activities-table.component.html - 499 + 502 @@ -7221,7 +7237,7 @@ Do you really want to delete these asset profiles? apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 70 + 76 @@ -7261,7 +7277,7 @@ Oops! Could not update access. apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.component.ts - 409 + 414 @@ -7589,7 +7605,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 107 + 110 @@ -7737,7 +7753,7 @@ libs/common/src/lib/routes/routes.ts - 348 + 369 @@ -7753,7 +7769,7 @@ libs/common/src/lib/routes/routes.ts - 356 + 377 @@ -7762,11 +7778,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 351 + 372 libs/common/src/lib/routes/routes.ts - 354 + 375 @@ -7775,11 +7791,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 343 + 364 libs/common/src/lib/routes/routes.ts - 346 + 367 @@ -7939,7 +7955,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.ts - 158 + 167 apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html @@ -8123,7 +8139,7 @@ Mudar libs/ui/src/lib/holdings-table/holdings-table.component.html - 146 + 148 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -8159,11 +8175,11 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 168 + 170 libs/ui/src/lib/holdings-table/holdings-table.component.html - 169 + 171 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -8296,11 +8312,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 267 + 288 libs/common/src/lib/routes/routes.ts - 270 + 291 @@ -8312,7 +8328,7 @@ libs/common/src/lib/routes/routes.ts - 272 + 293 @@ -8424,7 +8440,7 @@ libs/common/src/lib/routes/routes.ts - 145 + 166 @@ -8440,11 +8456,11 @@ {VAR_PLURAL, plural, =1 {Activity} other {Activities}} libs/ui/src/lib/activities-table/activities-table.component.html - 70 + 73 libs/ui/src/lib/activities-table/activities-table.component.html - 108 + 111 @@ -8469,11 +8485,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 235 + 256 libs/common/src/lib/routes/routes.ts - 238 + 259 @@ -8609,7 +8625,7 @@ libs/common/src/lib/routes/routes.ts - 286 + 307 @@ -8617,7 +8633,7 @@ Alternativa de software livre ao libs/common/src/lib/routes/routes.ts - 381 + 402 @@ -8650,15 +8666,15 @@ kebab-case libs/common/src/lib/routes/routes.ts - 367 + 388 libs/common/src/lib/routes/routes.ts - 370 + 391 libs/common/src/lib/routes/routes.ts - 378 + 399 @@ -8667,11 +8683,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 359 + 380 libs/common/src/lib/routes/routes.ts - 362 + 383 @@ -8896,11 +8912,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 391 + 412 libs/common/src/lib/routes/routes.ts - 392 + 413 diff --git a/apps/client/src/locales/messages.tr.xlf b/apps/client/src/locales/messages.tr.xlf index bc811c626c..201d907ea5 100644 --- a/apps/client/src/locales/messages.tr.xlf +++ b/apps/client/src/locales/messages.tr.xlf @@ -7,31 +7,31 @@ kebab-case libs/common/src/lib/routes/routes.ts - 231 + 252 libs/common/src/lib/routes/routes.ts - 232 + 253 libs/common/src/lib/routes/routes.ts - 237 + 258 libs/common/src/lib/routes/routes.ts - 245 + 266 libs/common/src/lib/routes/routes.ts - 253 + 274 libs/common/src/lib/routes/routes.ts - 261 + 282 libs/common/src/lib/routes/routes.ts - 269 + 290 @@ -40,19 +40,19 @@ kebab-case libs/common/src/lib/routes/routes.ts - 289 + 310 libs/common/src/lib/routes/routes.ts - 290 + 311 libs/common/src/lib/routes/routes.ts - 294 + 315 libs/common/src/lib/routes/routes.ts - 300 + 321 @@ -61,11 +61,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 309 + 330 libs/common/src/lib/routes/routes.ts - 310 + 331 @@ -74,11 +74,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 243 + 264 libs/common/src/lib/routes/routes.ts - 246 + 267 @@ -87,11 +87,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 314 + 335 libs/common/src/lib/routes/routes.ts - 315 + 336 @@ -100,11 +100,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 324 + 345 libs/common/src/lib/routes/routes.ts - 325 + 346 @@ -113,11 +113,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 259 + 280 libs/common/src/lib/routes/routes.ts - 262 + 283 @@ -126,11 +126,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 334 + 355 libs/common/src/lib/routes/routes.ts - 335 + 356 @@ -139,31 +139,31 @@ kebab-case libs/common/src/lib/routes/routes.ts - 339 + 360 libs/common/src/lib/routes/routes.ts - 340 + 361 libs/common/src/lib/routes/routes.ts - 345 + 366 libs/common/src/lib/routes/routes.ts - 353 + 374 libs/common/src/lib/routes/routes.ts - 361 + 382 libs/common/src/lib/routes/routes.ts - 369 + 390 libs/common/src/lib/routes/routes.ts - 377 + 398 @@ -239,11 +239,11 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 7 + 10 libs/ui/src/lib/activities-table/activities-table.component.html - 204 + 207 @@ -363,7 +363,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 182 + 185 libs/ui/src/lib/benchmark/benchmark.component.html @@ -427,7 +427,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 329 + 332 @@ -463,15 +463,15 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 309 + 312 libs/ui/src/lib/activities-table/activities-table.component.html - 346 + 349 libs/ui/src/lib/holdings-table/holdings-table.component.html - 99 + 101 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -507,7 +507,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 510 + 513 @@ -527,7 +527,7 @@ apps/client/src/app/components/admin-overview/admin-overview.html - 241 + 236 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -555,7 +555,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 545 + 548 libs/ui/src/lib/benchmark/benchmark.component.html @@ -763,7 +763,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 213 + 216 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html @@ -799,7 +799,7 @@ Para Birimleri apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 133 + 123 apps/client/src/app/pages/public/public-page.html @@ -819,7 +819,7 @@ Ülkesi Olmayan ETF’ler apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 138 + 128 @@ -827,7 +827,7 @@ Sektörü Olmayan ETF’ler apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 143 + 133 @@ -843,7 +843,7 @@ Filtrele... apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 377 + 350 @@ -863,7 +863,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 50 + 52 @@ -1043,7 +1043,7 @@ Update Activity libs/common/src/lib/routes/routes.ts - 181 + 202 @@ -1099,7 +1099,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 396 + 399 @@ -1109,6 +1109,10 @@ apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html 7 + + libs/common/src/lib/routes/routes.ts + 69 + Name, symbol or ISIN @@ -1215,7 +1219,7 @@ Update Account libs/common/src/lib/routes/routes.ts - 106 + 120 @@ -1259,7 +1263,7 @@ apps/client/src/app/components/admin-overview/admin-overview.html - 304 + 299 libs/ui/src/lib/account-balances/account-balances.component.html @@ -1507,7 +1511,7 @@ libs/common/src/lib/routes/routes.ts - 207 + 228 @@ -1559,7 +1563,7 @@ libs/common/src/lib/routes/routes.ts - 121 + 135 @@ -1879,7 +1883,7 @@ Toplam Brüt Performans apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 80 + 88 @@ -1887,7 +1891,7 @@ Toplam Net Performans apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 114 + 122 apps/client/src/app/pages/portfolio/analysis/analysis-page.html @@ -1899,7 +1903,7 @@ Net Performans apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 129 + 137 apps/client/src/app/pages/portfolio/analysis/analysis-page.html @@ -1911,7 +1915,7 @@ Toplam Varlıklar apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 152 + 165 @@ -1919,7 +1923,7 @@ Alım Limiti apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 292 + 305 @@ -1927,7 +1931,7 @@ Analize Dahil Edilmemiştir. apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 324 + 337 @@ -1935,7 +1939,7 @@ Yükümlülükler apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 355 + 368 apps/client/src/app/pages/features/features-page.html @@ -1947,7 +1951,7 @@ Toplam Varlık apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 378 + 391 @@ -1955,7 +1959,7 @@ Yıllıklandırılmış Performans apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 393 + 406 @@ -1963,7 +1967,7 @@ Lütfen acil durum yedeği meblağını giriniz: apps/client/src/app/components/portfolio-summary/portfolio-summary.component.ts - 160 + 169 @@ -1999,11 +2003,11 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 235 + 238 libs/ui/src/lib/holdings-table/holdings-table.component.html - 74 + 76 @@ -2015,7 +2019,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 94 + 102 @@ -2291,7 +2295,7 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 193 + 197 @@ -2303,7 +2307,7 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 191 + 195 @@ -2315,7 +2319,7 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 194 + 198 @@ -2339,7 +2343,7 @@ libs/common/src/lib/routes/routes.ts - 275 + 296 @@ -2355,7 +2359,7 @@ libs/common/src/lib/routes/routes.ts - 240 + 261 @@ -2371,7 +2375,7 @@ libs/common/src/lib/routes/routes.ts - 248 + 269 @@ -2387,7 +2391,7 @@ libs/common/src/lib/routes/routes.ts - 264 + 285 @@ -2459,7 +2463,7 @@ libs/common/src/lib/routes/routes.ts - 109 + 123 libs/ui/src/lib/assistant/assistant.html @@ -2511,7 +2515,7 @@ libs/common/src/lib/routes/routes.ts - 78 + 92 @@ -2523,7 +2527,7 @@ libs/common/src/lib/routes/routes.ts - 65 + 79 @@ -2539,7 +2543,7 @@ libs/common/src/lib/routes/routes.ts - 70 + 84 @@ -2551,7 +2555,7 @@ libs/common/src/lib/routes/routes.ts - 75 + 89 @@ -2587,11 +2591,11 @@ libs/common/src/lib/routes/routes.ts - 148 + 169 libs/common/src/lib/routes/routes.ts - 225 + 246 @@ -2703,7 +2707,7 @@ libs/common/src/lib/routes/routes.ts - 280 + 301 @@ -2767,7 +2771,7 @@ libs/common/src/lib/routes/routes.ts - 306 + 327 @@ -2795,7 +2799,7 @@ libs/common/src/lib/routes/routes.ts - 311 + 332 @@ -2979,7 +2983,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 183 + 196 apps/client/src/app/pages/public/public-page.html @@ -2987,11 +2991,11 @@ libs/common/src/lib/routes/routes.ts - 130 + 144 libs/common/src/lib/routes/routes.ts - 222 + 243 libs/ui/src/lib/assistant/assistant.html @@ -3023,7 +3027,7 @@ libs/common/src/lib/routes/routes.ts - 140 + 154 @@ -3055,15 +3059,15 @@ libs/common/src/lib/routes/routes.ts - 135 + 149 libs/common/src/lib/routes/routes.ts - 316 + 337 libs/common/src/lib/routes/routes.ts - 364 + 385 @@ -3219,7 +3223,7 @@ Do you really want to delete these activities? libs/ui/src/lib/activities-table/activities-table.component.ts - 344 + 327 @@ -3323,7 +3327,7 @@ Oops! Could not delete the asset profiles. apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 54 + 60 @@ -3395,7 +3399,7 @@ Add Activity libs/common/src/lib/routes/routes.ts - 174 + 195 @@ -3519,7 +3523,7 @@ libs/common/src/lib/routes/routes.ts - 184 + 205 libs/ui/src/lib/accounts-table/accounts-table.component.html @@ -3579,7 +3583,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 260 + 263 @@ -3591,11 +3595,11 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 28 + 31 libs/ui/src/lib/activities-table/activities-table.component.html - 432 + 435 @@ -3607,11 +3611,11 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 54 + 57 libs/ui/src/lib/activities-table/activities-table.component.html - 446 + 449 @@ -3619,7 +3623,7 @@ Veri içe aktarılıyor... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 172 + 176 @@ -3627,7 +3631,7 @@ İçe aktarma tamamlandı apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 183 + 187 @@ -3643,7 +3647,7 @@ Veri doğrulanıyor... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 294 + 298 @@ -3771,7 +3775,7 @@ libs/common/src/lib/routes/routes.ts - 189 + 210 @@ -3943,7 +3947,7 @@ libs/common/src/lib/routes/routes.ts - 194 + 215 @@ -3967,7 +3971,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 479 + 492 apps/client/src/app/pages/features/features-page.html @@ -4111,7 +4115,7 @@ libs/common/src/lib/routes/routes.ts - 326 + 347 @@ -4371,7 +4375,7 @@ libs/common/src/lib/routes/routes.ts - 336 + 357 @@ -4423,7 +4427,7 @@ libs/common/src/lib/routes/routes.ts - 384 + 405 @@ -4432,11 +4436,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 375 + 396 libs/common/src/lib/routes/routes.ts - 379 + 400 @@ -4716,7 +4720,7 @@ Data gathering has been started. apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 413 + 386 @@ -4752,7 +4756,7 @@ libs/common/src/lib/routes/routes.ts - 387 + 408 @@ -4828,7 +4832,7 @@ Add Account libs/common/src/lib/routes/routes.ts - 87 + 101 @@ -5028,7 +5032,7 @@ Investments apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 214 + 227 @@ -5124,11 +5128,11 @@ İşlemleri Dışa Aktar libs/ui/src/lib/activities-table/activities-table.component.html - 73 + 76 libs/ui/src/lib/activities-table/activities-table.component.html - 460 + 463 @@ -5136,11 +5140,11 @@ Taslakları ICS Olarak Dışa Aktar libs/ui/src/lib/activities-table/activities-table.component.html - 87 + 90 libs/ui/src/lib/activities-table/activities-table.component.html - 473 + 476 @@ -5148,7 +5152,7 @@ Taslak libs/ui/src/lib/activities-table/activities-table.component.html - 188 + 191 libs/ui/src/lib/i18n.ts @@ -5160,7 +5164,7 @@ Klonla libs/ui/src/lib/activities-table/activities-table.component.html - 521 + 524 @@ -5168,7 +5172,7 @@ Taslakları ICS Olarak Dışa Aktar libs/ui/src/lib/activities-table/activities-table.component.html - 533 + 536 @@ -5176,11 +5180,11 @@ TBu işlemi silmeyi gerçekten istiyor musunuz? libs/ui/src/lib/activities-table/activities-table.component.ts - 343 + 326 libs/ui/src/lib/activities-table/activities-table.component.ts - 354 + 337 @@ -5215,6 +5219,14 @@ 286 + + Add to Watchlist + Add to Watchlist + + libs/common/src/lib/routes/routes.ts + 163 + + Market data provided by Piyasa verileri tarafından sağlanmıştır @@ -5272,7 +5284,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 465 + 478 libs/ui/src/lib/fire-calculator/fire-calculator.component.ts @@ -5300,11 +5312,11 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 124 + 126 libs/ui/src/lib/holdings-table/holdings-table.component.html - 125 + 127 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -5324,7 +5336,7 @@ Tümünü göster libs/ui/src/lib/holdings-table/holdings-table.component.html - 216 + 222 @@ -5336,11 +5348,11 @@ libs/common/src/lib/routes/routes.ts - 94 + 108 libs/ui/src/lib/activities-table/activities-table.component.html - 362 + 365 libs/ui/src/lib/i18n.ts @@ -5444,15 +5456,15 @@ Acil Durum Fonu apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 229 + 242 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 307 + 320 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 412 + 425 apps/client/src/app/pages/features/features-page.html @@ -5548,7 +5560,7 @@ No Activities apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 148 + 138 @@ -5608,7 +5620,7 @@ Export libs/ui/src/lib/activities-table/activities-table.component.html - 69 + 72 @@ -5664,7 +5676,7 @@ Al apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 35 + 43 libs/ui/src/lib/i18n.ts @@ -5692,7 +5704,7 @@ Sat apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 49 + 57 libs/ui/src/lib/i18n.ts @@ -5712,7 +5724,7 @@ Nakit apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 261 + 274 @@ -5812,7 +5824,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 66 + 74 apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts @@ -5980,7 +5992,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 285 + 288 libs/ui/src/lib/i18n.ts @@ -6028,7 +6040,7 @@ libs/common/src/lib/routes/routes.ts - 99 + 113 libs/ui/src/lib/accounts-table/accounts-table.component.html @@ -6106,17 +6118,21 @@ apps/client/src/app/components/admin-jobs/admin-jobs.html 52 + + libs/common/src/lib/routes/routes.ts + 76 + Do you really want to delete this asset profile? Bu varlık profilini silmeyi gerçekten istiyor musunuz? apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 27 + 33 apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 69 + 75 @@ -6484,7 +6500,7 @@ Hay Allah! Erişim izni verilemedi. apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.component.ts - 311 + 314 @@ -6740,7 +6756,7 @@ libs/common/src/lib/routes/routes.ts - 295 + 316 @@ -6752,7 +6768,7 @@ libs/common/src/lib/routes/routes.ts - 303 + 324 @@ -6761,11 +6777,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 298 + 319 libs/common/src/lib/routes/routes.ts - 301 + 322 @@ -6857,7 +6873,7 @@ {VAR_PLURAL, plural, =1 {Etkinlik} other {Etkinlikler}} apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 18 + 25 @@ -6873,7 +6889,7 @@ Etkinlikleri Sil libs/ui/src/lib/activities-table/activities-table.component.html - 111 + 114 @@ -6881,7 +6897,7 @@ İnternasyonalizasyon libs/common/src/lib/routes/routes.ts - 154 + 175 @@ -6945,7 +6961,7 @@ Clone Activity libs/common/src/lib/routes/routes.ts - 169 + 190 @@ -6985,7 +7001,7 @@ Kıyaslamalar apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 128 + 118 @@ -7109,7 +7125,7 @@ Oops! Could not delete the asset profile. apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 53 + 59 @@ -7213,7 +7229,7 @@ View Holding libs/ui/src/lib/activities-table/activities-table.component.html - 499 + 502 @@ -7221,7 +7237,7 @@ Do you really want to delete these asset profiles? apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 70 + 76 @@ -7261,7 +7277,7 @@ Oops! Could not update access. apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.component.ts - 409 + 414 @@ -7589,7 +7605,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 107 + 110 @@ -7737,7 +7753,7 @@ libs/common/src/lib/routes/routes.ts - 348 + 369 @@ -7753,7 +7769,7 @@ libs/common/src/lib/routes/routes.ts - 356 + 377 @@ -7762,11 +7778,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 351 + 372 libs/common/src/lib/routes/routes.ts - 354 + 375 @@ -7775,11 +7791,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 343 + 364 libs/common/src/lib/routes/routes.ts - 346 + 367 @@ -7939,7 +7955,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.ts - 158 + 167 apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html @@ -8123,7 +8139,7 @@ Değişim libs/ui/src/lib/holdings-table/holdings-table.component.html - 146 + 148 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -8159,11 +8175,11 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 168 + 170 libs/ui/src/lib/holdings-table/holdings-table.component.html - 169 + 171 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -8296,11 +8312,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 267 + 288 libs/common/src/lib/routes/routes.ts - 270 + 291 @@ -8312,7 +8328,7 @@ libs/common/src/lib/routes/routes.ts - 272 + 293 @@ -8424,7 +8440,7 @@ libs/common/src/lib/routes/routes.ts - 145 + 166 @@ -8440,11 +8456,11 @@ {VAR_PLURAL, plural, =1 {Activity} other {Activities}} libs/ui/src/lib/activities-table/activities-table.component.html - 70 + 73 libs/ui/src/lib/activities-table/activities-table.component.html - 108 + 111 @@ -8469,11 +8485,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 235 + 256 libs/common/src/lib/routes/routes.ts - 238 + 259 @@ -8609,7 +8625,7 @@ libs/common/src/lib/routes/routes.ts - 286 + 307 @@ -8617,7 +8633,7 @@ Açık Kaynak Alternatifi libs/common/src/lib/routes/routes.ts - 381 + 402 @@ -8650,15 +8666,15 @@ kebab-case libs/common/src/lib/routes/routes.ts - 367 + 388 libs/common/src/lib/routes/routes.ts - 370 + 391 libs/common/src/lib/routes/routes.ts - 378 + 399 @@ -8667,11 +8683,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 359 + 380 libs/common/src/lib/routes/routes.ts - 362 + 383 @@ -8896,11 +8912,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 391 + 412 libs/common/src/lib/routes/routes.ts - 392 + 413 diff --git a/apps/client/src/locales/messages.uk.xlf b/apps/client/src/locales/messages.uk.xlf index 806528d5ca..5a632dcc1e 100644 --- a/apps/client/src/locales/messages.uk.xlf +++ b/apps/client/src/locales/messages.uk.xlf @@ -26,7 +26,7 @@ libs/common/src/lib/routes/routes.ts - 311 + 332 @@ -34,7 +34,7 @@ Інтернаціоналізація libs/common/src/lib/routes/routes.ts - 154 + 175 @@ -54,7 +54,7 @@ libs/common/src/lib/routes/routes.ts - 121 + 135 @@ -115,31 +115,31 @@ kebab-case libs/common/src/lib/routes/routes.ts - 231 + 252 libs/common/src/lib/routes/routes.ts - 232 + 253 libs/common/src/lib/routes/routes.ts - 237 + 258 libs/common/src/lib/routes/routes.ts - 245 + 266 libs/common/src/lib/routes/routes.ts - 253 + 274 libs/common/src/lib/routes/routes.ts - 261 + 282 libs/common/src/lib/routes/routes.ts - 269 + 290 @@ -148,11 +148,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 243 + 264 libs/common/src/lib/routes/routes.ts - 246 + 267 @@ -161,11 +161,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 259 + 280 libs/common/src/lib/routes/routes.ts - 262 + 283 @@ -174,19 +174,19 @@ kebab-case libs/common/src/lib/routes/routes.ts - 289 + 310 libs/common/src/lib/routes/routes.ts - 290 + 311 libs/common/src/lib/routes/routes.ts - 294 + 315 libs/common/src/lib/routes/routes.ts - 300 + 321 @@ -195,11 +195,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 309 + 330 libs/common/src/lib/routes/routes.ts - 310 + 331 @@ -208,11 +208,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 314 + 335 libs/common/src/lib/routes/routes.ts - 315 + 336 @@ -221,11 +221,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 324 + 345 libs/common/src/lib/routes/routes.ts - 325 + 346 @@ -234,11 +234,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 334 + 355 libs/common/src/lib/routes/routes.ts - 335 + 356 @@ -247,31 +247,31 @@ kebab-case libs/common/src/lib/routes/routes.ts - 339 + 360 libs/common/src/lib/routes/routes.ts - 340 + 361 libs/common/src/lib/routes/routes.ts - 345 + 366 libs/common/src/lib/routes/routes.ts - 353 + 374 libs/common/src/lib/routes/routes.ts - 361 + 382 libs/common/src/lib/routes/routes.ts - 369 + 390 libs/common/src/lib/routes/routes.ts - 377 + 398 @@ -451,7 +451,7 @@ libs/common/src/lib/routes/routes.ts - 99 + 113 libs/ui/src/lib/accounts-table/accounts-table.component.html @@ -503,7 +503,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 182 + 185 libs/ui/src/lib/benchmark/benchmark.component.html @@ -567,7 +567,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 329 + 332 @@ -603,15 +603,15 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 309 + 312 libs/ui/src/lib/activities-table/activities-table.component.html - 346 + 349 libs/ui/src/lib/holdings-table/holdings-table.component.html - 99 + 101 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -647,7 +647,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 510 + 513 @@ -667,7 +667,7 @@ apps/client/src/app/components/admin-overview/admin-overview.html - 241 + 236 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -695,7 +695,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 545 + 548 libs/ui/src/lib/benchmark/benchmark.component.html @@ -739,11 +739,11 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 7 + 10 libs/ui/src/lib/activities-table/activities-table.component.html - 204 + 207 @@ -753,6 +753,10 @@ apps/client/src/app/components/admin-jobs/admin-jobs.html 52 + + libs/common/src/lib/routes/routes.ts + 76 + Historical Market Data @@ -919,7 +923,7 @@ Порівняльні показники apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 128 + 118 @@ -927,7 +931,7 @@ Валюти apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 133 + 123 apps/client/src/app/pages/public/public-page.html @@ -947,7 +951,7 @@ ETF без країн apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 138 + 128 @@ -955,7 +959,7 @@ ETF без секторів apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 143 + 133 @@ -971,7 +975,7 @@ Фільтрувати за... apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 377 + 350 @@ -1015,7 +1019,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 50 + 52 @@ -1103,11 +1107,11 @@ Ви дійсно хочете видалити цей профіль активу? apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 27 + 33 apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 69 + 75 @@ -1115,7 +1119,7 @@ Ви справді хочете видалити ці профілі активів? apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 70 + 76 @@ -1239,7 +1243,7 @@ Update Activity libs/common/src/lib/routes/routes.ts - 181 + 202 @@ -1339,7 +1343,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 396 + 399 @@ -1349,6 +1353,10 @@ apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html 7 + + libs/common/src/lib/routes/routes.ts + 69 + Search @@ -1487,7 +1495,7 @@ Update Account libs/common/src/lib/routes/routes.ts - 106 + 120 @@ -1551,7 +1559,7 @@ apps/client/src/app/components/admin-overview/admin-overview.html - 304 + 299 libs/ui/src/lib/account-balances/account-balances.component.html @@ -1947,7 +1955,7 @@ libs/common/src/lib/routes/routes.ts - 207 + 228 @@ -2099,11 +2107,11 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 235 + 238 libs/ui/src/lib/holdings-table/holdings-table.component.html - 74 + 76 @@ -2123,7 +2131,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 94 + 102 @@ -2447,7 +2455,7 @@ {VAR_PLURAL, plural, =1 {дія} other {дій}} apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 18 + 25 @@ -2455,7 +2463,7 @@ Абсолютний валовий дохід apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 80 + 88 @@ -2463,7 +2471,7 @@ Абсолютний чистий прибуток apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 114 + 122 apps/client/src/app/pages/portfolio/analysis/analysis-page.html @@ -2475,7 +2483,7 @@ Чистий прибуток apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 129 + 137 apps/client/src/app/pages/portfolio/analysis/analysis-page.html @@ -2487,7 +2495,7 @@ Загальні активи apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 152 + 165 @@ -2495,7 +2503,7 @@ Купівельна спроможність apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 292 + 305 @@ -2503,7 +2511,7 @@ Виключено з аналізу apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 324 + 337 @@ -2511,7 +2519,7 @@ Зобов’язання apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 355 + 368 apps/client/src/app/pages/features/features-page.html @@ -2523,7 +2531,7 @@ Чиста вартість apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 378 + 391 @@ -2531,7 +2539,7 @@ Річна доходність apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 393 + 406 @@ -2559,7 +2567,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.ts - 158 + 167 apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html @@ -2587,7 +2595,7 @@ Будь ласка, встановіть суму вашого резервного фонду. apps/client/src/app/components/portfolio-summary/portfolio-summary.component.ts - 160 + 169 @@ -2651,7 +2659,7 @@ Упс! Не вдалося оновити права доступу. apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.component.ts - 409 + 414 @@ -2891,7 +2899,7 @@ Упс! Не вдалося надати доступ. apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.component.ts - 311 + 314 @@ -3007,7 +3015,7 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 194 + 198 @@ -3079,7 +3087,7 @@ Add Account libs/common/src/lib/routes/routes.ts - 87 + 101 @@ -3151,7 +3159,7 @@ Clone Activity libs/common/src/lib/routes/routes.ts - 169 + 190 @@ -3323,7 +3331,7 @@ Інвестиції apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 214 + 227 @@ -3403,7 +3411,7 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 193 + 197 @@ -3423,7 +3431,7 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 191 + 195 @@ -3463,7 +3471,7 @@ libs/common/src/lib/routes/routes.ts - 275 + 296 @@ -3479,7 +3487,7 @@ libs/common/src/lib/routes/routes.ts - 240 + 261 @@ -3495,7 +3503,7 @@ libs/common/src/lib/routes/routes.ts - 248 + 269 @@ -3511,7 +3519,7 @@ libs/common/src/lib/routes/routes.ts - 264 + 285 @@ -3583,7 +3591,7 @@ libs/common/src/lib/routes/routes.ts - 109 + 123 libs/ui/src/lib/assistant/assistant.html @@ -3667,7 +3675,7 @@ libs/common/src/lib/routes/routes.ts - 78 + 92 @@ -3691,7 +3699,7 @@ libs/common/src/lib/routes/routes.ts - 65 + 79 @@ -3707,7 +3715,7 @@ libs/common/src/lib/routes/routes.ts - 70 + 84 @@ -3719,7 +3727,7 @@ libs/common/src/lib/routes/routes.ts - 75 + 89 @@ -3755,11 +3763,11 @@ libs/common/src/lib/routes/routes.ts - 148 + 169 libs/common/src/lib/routes/routes.ts - 225 + 246 @@ -3879,7 +3887,7 @@ libs/common/src/lib/routes/routes.ts - 280 + 301 @@ -3943,7 +3951,7 @@ libs/common/src/lib/routes/routes.ts - 306 + 327 @@ -3963,7 +3971,7 @@ libs/common/src/lib/routes/routes.ts - 295 + 316 @@ -3975,7 +3983,7 @@ libs/common/src/lib/routes/routes.ts - 303 + 324 @@ -3984,11 +3992,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 298 + 319 libs/common/src/lib/routes/routes.ts - 301 + 322 @@ -4160,7 +4168,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 183 + 196 apps/client/src/app/pages/public/public-page.html @@ -4168,11 +4176,11 @@ libs/common/src/lib/routes/routes.ts - 130 + 144 libs/common/src/lib/routes/routes.ts - 222 + 243 libs/ui/src/lib/assistant/assistant.html @@ -4204,7 +4212,7 @@ libs/common/src/lib/routes/routes.ts - 140 + 154 @@ -4236,15 +4244,15 @@ libs/common/src/lib/routes/routes.ts - 135 + 149 libs/common/src/lib/routes/routes.ts - 316 + 337 libs/common/src/lib/routes/routes.ts - 364 + 385 @@ -4568,7 +4576,7 @@ Do you really want to delete these activities? libs/ui/src/lib/activities-table/activities-table.component.ts - 344 + 327 @@ -4672,7 +4680,7 @@ Упс! Не вдалося видалити профілі активів. apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 54 + 60 @@ -4744,7 +4752,7 @@ Add Activity libs/common/src/lib/routes/routes.ts - 174 + 195 @@ -4944,7 +4952,7 @@ libs/common/src/lib/routes/routes.ts - 184 + 205 libs/ui/src/lib/accounts-table/accounts-table.component.html @@ -5048,7 +5056,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 213 + 216 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html @@ -5064,7 +5072,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 260 + 263 @@ -5076,11 +5084,11 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 28 + 31 libs/ui/src/lib/activities-table/activities-table.component.html - 432 + 435 @@ -5092,11 +5100,11 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 54 + 57 libs/ui/src/lib/activities-table/activities-table.component.html - 446 + 449 @@ -5104,7 +5112,7 @@ Імпортуються дані... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 172 + 176 @@ -5112,7 +5120,7 @@ Імпорт завершено apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 183 + 187 @@ -5128,7 +5136,7 @@ Перевірка даних... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 294 + 298 @@ -5264,7 +5272,7 @@ libs/common/src/lib/routes/routes.ts - 189 + 210 @@ -5452,7 +5460,7 @@ libs/common/src/lib/routes/routes.ts - 194 + 215 @@ -5476,7 +5484,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 479 + 492 apps/client/src/app/pages/features/features-page.html @@ -5696,7 +5704,7 @@ libs/common/src/lib/routes/routes.ts - 326 + 347 @@ -5984,7 +5992,7 @@ libs/common/src/lib/routes/routes.ts - 336 + 357 @@ -6020,7 +6028,7 @@ libs/common/src/lib/routes/routes.ts - 348 + 369 @@ -6036,7 +6044,7 @@ libs/common/src/lib/routes/routes.ts - 356 + 377 @@ -6045,11 +6053,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 351 + 372 libs/common/src/lib/routes/routes.ts - 354 + 375 @@ -6058,11 +6066,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 343 + 364 libs/common/src/lib/routes/routes.ts - 346 + 367 @@ -6074,7 +6082,7 @@ libs/common/src/lib/routes/routes.ts - 384 + 405 @@ -6083,11 +6091,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 375 + 396 libs/common/src/lib/routes/routes.ts - 379 + 400 @@ -6127,7 +6135,7 @@ Data gathering has been started. apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 413 + 386 @@ -6239,7 +6247,7 @@ От халепа! Не вдалося видалити профіль активу. apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 53 + 59 @@ -6591,7 +6599,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 107 + 110 @@ -6775,7 +6783,7 @@ libs/common/src/lib/routes/routes.ts - 387 + 408 @@ -6859,11 +6867,11 @@ Експорт активності libs/ui/src/lib/activities-table/activities-table.component.html - 73 + 76 libs/ui/src/lib/activities-table/activities-table.component.html - 460 + 463 @@ -6871,11 +6879,11 @@ Експортувати чернетки як ICS libs/ui/src/lib/activities-table/activities-table.component.html - 87 + 90 libs/ui/src/lib/activities-table/activities-table.component.html - 473 + 476 @@ -6883,7 +6891,7 @@ Видалити активності libs/ui/src/lib/activities-table/activities-table.component.html - 111 + 114 @@ -6891,7 +6899,7 @@ Чернетка libs/ui/src/lib/activities-table/activities-table.component.html - 188 + 191 libs/ui/src/lib/i18n.ts @@ -6903,7 +6911,7 @@ Клонувати libs/ui/src/lib/activities-table/activities-table.component.html - 521 + 524 @@ -6911,7 +6919,7 @@ Експортувати чернетку як ICS libs/ui/src/lib/activities-table/activities-table.component.html - 533 + 536 @@ -6919,11 +6927,11 @@ Ви дійсно хочете видалити цю активність? libs/ui/src/lib/activities-table/activities-table.component.ts - 343 + 326 libs/ui/src/lib/activities-table/activities-table.component.ts - 354 + 337 @@ -7114,6 +7122,14 @@ 286 + + Add to Watchlist + Add to Watchlist + + libs/common/src/lib/routes/routes.ts + 163 + + Market data provided by Ринкові дані надані @@ -7179,7 +7195,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 465 + 478 libs/ui/src/lib/fire-calculator/fire-calculator.component.ts @@ -7231,11 +7247,11 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 124 + 126 libs/ui/src/lib/holdings-table/holdings-table.component.html - 125 + 127 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -7255,7 +7271,7 @@ Показати все libs/ui/src/lib/holdings-table/holdings-table.component.html - 216 + 222 @@ -7267,11 +7283,11 @@ libs/common/src/lib/routes/routes.ts - 94 + 108 libs/ui/src/lib/activities-table/activities-table.component.html - 362 + 365 libs/ui/src/lib/i18n.ts @@ -7491,15 +7507,15 @@ Резервний фонд apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 229 + 242 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 307 + 320 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 412 + 425 apps/client/src/app/pages/features/features-page.html @@ -7603,7 +7619,7 @@ No Activities apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 148 + 138 @@ -7663,7 +7679,7 @@ Export libs/ui/src/lib/activities-table/activities-table.component.html - 69 + 72 @@ -7735,7 +7751,7 @@ Купити apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 35 + 43 libs/ui/src/lib/i18n.ts @@ -7751,7 +7767,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 285 + 288 libs/ui/src/lib/i18n.ts @@ -7779,7 +7795,7 @@ Продати apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 49 + 57 libs/ui/src/lib/i18n.ts @@ -7799,7 +7815,7 @@ Готівка apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 261 + 274 @@ -7899,7 +7915,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 66 + 74 apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts @@ -7919,7 +7935,7 @@ Переглянути позицію libs/ui/src/lib/activities-table/activities-table.component.html - 499 + 502 @@ -8123,7 +8139,7 @@ Змінити libs/ui/src/lib/holdings-table/holdings-table.component.html - 146 + 148 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -8159,11 +8175,11 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 168 + 170 libs/ui/src/lib/holdings-table/holdings-table.component.html - 169 + 171 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -8296,11 +8312,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 267 + 288 libs/common/src/lib/routes/routes.ts - 270 + 291 @@ -8312,7 +8328,7 @@ libs/common/src/lib/routes/routes.ts - 272 + 293 @@ -8424,7 +8440,7 @@ libs/common/src/lib/routes/routes.ts - 145 + 166 @@ -8440,11 +8456,11 @@ {VAR_PLURAL, plural, =1 {Activity} other {Activities}} libs/ui/src/lib/activities-table/activities-table.component.html - 70 + 73 libs/ui/src/lib/activities-table/activities-table.component.html - 108 + 111 @@ -8469,11 +8485,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 235 + 256 libs/common/src/lib/routes/routes.ts - 238 + 259 @@ -8609,7 +8625,7 @@ libs/common/src/lib/routes/routes.ts - 286 + 307 @@ -8617,7 +8633,7 @@ Альтернатива з відкритим кодом для libs/common/src/lib/routes/routes.ts - 381 + 402 @@ -8650,15 +8666,15 @@ kebab-case libs/common/src/lib/routes/routes.ts - 367 + 388 libs/common/src/lib/routes/routes.ts - 370 + 391 libs/common/src/lib/routes/routes.ts - 378 + 399 @@ -8667,11 +8683,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 359 + 380 libs/common/src/lib/routes/routes.ts - 362 + 383 @@ -8896,11 +8912,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 391 + 412 libs/common/src/lib/routes/routes.ts - 392 + 413 diff --git a/apps/client/src/locales/messages.xlf b/apps/client/src/locales/messages.xlf index f307ec3666..dea659d90c 100644 --- a/apps/client/src/locales/messages.xlf +++ b/apps/client/src/locales/messages.xlf @@ -7,31 +7,31 @@ kebab-case libs/common/src/lib/routes/routes.ts - 231 + 252 libs/common/src/lib/routes/routes.ts - 232 + 253 libs/common/src/lib/routes/routes.ts - 237 + 258 libs/common/src/lib/routes/routes.ts - 245 + 266 libs/common/src/lib/routes/routes.ts - 253 + 274 libs/common/src/lib/routes/routes.ts - 261 + 282 libs/common/src/lib/routes/routes.ts - 269 + 290 @@ -39,19 +39,19 @@ kebab-case libs/common/src/lib/routes/routes.ts - 289 + 310 libs/common/src/lib/routes/routes.ts - 290 + 311 libs/common/src/lib/routes/routes.ts - 294 + 315 libs/common/src/lib/routes/routes.ts - 300 + 321 @@ -59,11 +59,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 309 + 330 libs/common/src/lib/routes/routes.ts - 310 + 331 @@ -71,11 +71,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 243 + 264 libs/common/src/lib/routes/routes.ts - 246 + 267 @@ -83,11 +83,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 314 + 335 libs/common/src/lib/routes/routes.ts - 315 + 336 @@ -95,11 +95,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 324 + 345 libs/common/src/lib/routes/routes.ts - 325 + 346 @@ -107,11 +107,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 259 + 280 libs/common/src/lib/routes/routes.ts - 262 + 283 @@ -119,11 +119,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 334 + 355 libs/common/src/lib/routes/routes.ts - 335 + 356 @@ -131,31 +131,31 @@ kebab-case libs/common/src/lib/routes/routes.ts - 339 + 360 libs/common/src/lib/routes/routes.ts - 340 + 361 libs/common/src/lib/routes/routes.ts - 345 + 366 libs/common/src/lib/routes/routes.ts - 353 + 374 libs/common/src/lib/routes/routes.ts - 361 + 382 libs/common/src/lib/routes/routes.ts - 369 + 390 libs/common/src/lib/routes/routes.ts - 377 + 398 @@ -251,11 +251,11 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 7 + 10 libs/ui/src/lib/activities-table/activities-table.component.html - 204 + 207 @@ -338,7 +338,7 @@ libs/common/src/lib/routes/routes.ts - 99 + 113 libs/ui/src/lib/accounts-table/accounts-table.component.html @@ -389,7 +389,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 182 + 185 libs/ui/src/lib/benchmark/benchmark.component.html @@ -450,7 +450,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 329 + 332 @@ -485,15 +485,15 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 309 + 312 libs/ui/src/lib/activities-table/activities-table.component.html - 346 + 349 libs/ui/src/lib/holdings-table/holdings-table.component.html - 99 + 101 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -528,7 +528,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 510 + 513 @@ -547,7 +547,7 @@ apps/client/src/app/components/admin-overview/admin-overview.html - 241 + 236 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -575,7 +575,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 545 + 548 libs/ui/src/lib/benchmark/benchmark.component.html @@ -602,6 +602,10 @@ apps/client/src/app/components/admin-jobs/admin-jobs.html 52 + + libs/common/src/lib/routes/routes.ts + 76 + Historical Market Data @@ -759,7 +763,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 213 + 216 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html @@ -792,7 +796,7 @@ Currencies apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 133 + 123 apps/client/src/app/pages/public/public-page.html @@ -810,14 +814,14 @@ ETFs without Countries apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 138 + 128 ETFs without Sectors apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 143 + 133 @@ -831,18 +835,18 @@ Do you really want to delete this asset profile? apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 27 + 33 apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 69 + 75 Filter by... apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 377 + 350 @@ -861,7 +865,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 50 + 52 @@ -1074,7 +1078,7 @@ Update Activity libs/common/src/lib/routes/routes.ts - 181 + 202 @@ -1125,7 +1129,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 396 + 399 @@ -1134,6 +1138,10 @@ apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html 7 + + libs/common/src/lib/routes/routes.ts + 69 + Search @@ -1249,7 +1257,7 @@ Update Account libs/common/src/lib/routes/routes.ts - 106 + 120 @@ -1288,7 +1296,7 @@ apps/client/src/app/components/admin-overview/admin-overview.html - 304 + 299 libs/ui/src/lib/account-balances/account-balances.component.html @@ -1554,7 +1562,7 @@ libs/common/src/lib/routes/routes.ts - 207 + 228 @@ -1602,7 +1610,7 @@ libs/common/src/lib/routes/routes.ts - 121 + 135 @@ -1891,7 +1899,7 @@ Absolute Gross Performance apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 80 + 88 @@ -1902,14 +1910,14 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 94 + 102 Absolute Net Performance apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 114 + 122 apps/client/src/app/pages/portfolio/analysis/analysis-page.html @@ -1920,7 +1928,7 @@ Net Performance apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 129 + 137 apps/client/src/app/pages/portfolio/analysis/analysis-page.html @@ -1931,28 +1939,28 @@ Total Assets apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 152 + 165 Buying Power apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 292 + 305 Excluded from Analysis apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 324 + 337 Liabilities apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 355 + 368 apps/client/src/app/pages/features/features-page.html @@ -1963,21 +1971,21 @@ Net Worth apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 378 + 391 Annualized Performance apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 393 + 406 Please set the amount of your emergency fund. apps/client/src/app/components/portfolio-summary/portfolio-summary.component.ts - 160 + 169 @@ -2010,11 +2018,11 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 235 + 238 libs/ui/src/lib/holdings-table/holdings-table.component.html - 74 + 76 @@ -2301,7 +2309,7 @@ Add Account libs/common/src/lib/routes/routes.ts - 87 + 101 @@ -2489,7 +2497,7 @@ Investments apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 214 + 227 @@ -2561,7 +2569,7 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 193 + 197 @@ -2572,7 +2580,7 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 191 + 195 @@ -2583,7 +2591,7 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 194 + 198 @@ -2606,7 +2614,7 @@ libs/common/src/lib/routes/routes.ts - 275 + 296 @@ -2621,7 +2629,7 @@ libs/common/src/lib/routes/routes.ts - 240 + 261 @@ -2636,7 +2644,7 @@ libs/common/src/lib/routes/routes.ts - 248 + 269 @@ -2651,7 +2659,7 @@ libs/common/src/lib/routes/routes.ts - 264 + 285 @@ -2718,7 +2726,7 @@ libs/common/src/lib/routes/routes.ts - 109 + 123 libs/ui/src/lib/assistant/assistant.html @@ -2793,7 +2801,7 @@ libs/common/src/lib/routes/routes.ts - 78 + 92 @@ -2804,7 +2812,7 @@ libs/common/src/lib/routes/routes.ts - 65 + 79 @@ -2819,7 +2827,7 @@ libs/common/src/lib/routes/routes.ts - 70 + 84 @@ -2830,7 +2838,7 @@ libs/common/src/lib/routes/routes.ts - 75 + 89 @@ -2865,11 +2873,11 @@ libs/common/src/lib/routes/routes.ts - 148 + 169 libs/common/src/lib/routes/routes.ts - 225 + 246 @@ -2980,7 +2988,7 @@ libs/common/src/lib/routes/routes.ts - 280 + 301 @@ -3038,7 +3046,7 @@ libs/common/src/lib/routes/routes.ts - 306 + 327 @@ -3064,7 +3072,7 @@ libs/common/src/lib/routes/routes.ts - 311 + 332 @@ -3219,7 +3227,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 183 + 196 apps/client/src/app/pages/public/public-page.html @@ -3227,11 +3235,11 @@ libs/common/src/lib/routes/routes.ts - 130 + 144 libs/common/src/lib/routes/routes.ts - 222 + 243 libs/ui/src/lib/assistant/assistant.html @@ -3260,7 +3268,7 @@ libs/common/src/lib/routes/routes.ts - 140 + 154 @@ -3291,15 +3299,15 @@ libs/common/src/lib/routes/routes.ts - 135 + 149 libs/common/src/lib/routes/routes.ts - 316 + 337 libs/common/src/lib/routes/routes.ts - 364 + 385 @@ -3577,7 +3585,7 @@ Do you really want to delete these activities? libs/ui/src/lib/activities-table/activities-table.component.ts - 344 + 327 @@ -3675,7 +3683,7 @@ Oops! Could not delete the asset profiles. apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 54 + 60 @@ -3738,7 +3746,7 @@ Add Activity libs/common/src/lib/routes/routes.ts - 174 + 195 @@ -3912,7 +3920,7 @@ libs/common/src/lib/routes/routes.ts - 184 + 205 libs/ui/src/lib/accounts-table/accounts-table.component.html @@ -3987,7 +3995,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 260 + 263 @@ -3998,11 +4006,11 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 28 + 31 libs/ui/src/lib/activities-table/activities-table.component.html - 432 + 435 @@ -4013,25 +4021,25 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 54 + 57 libs/ui/src/lib/activities-table/activities-table.component.html - 446 + 449 Importing data... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 172 + 176 Import has been completed apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 183 + 187 @@ -4045,7 +4053,7 @@ Validating data... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 294 + 298 @@ -4152,7 +4160,7 @@ libs/common/src/lib/routes/routes.ts - 189 + 210 @@ -4305,7 +4313,7 @@ libs/common/src/lib/routes/routes.ts - 194 + 215 @@ -4327,7 +4335,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 479 + 492 apps/client/src/app/pages/features/features-page.html @@ -4458,7 +4466,7 @@ libs/common/src/lib/routes/routes.ts - 326 + 347 @@ -4691,7 +4699,7 @@ libs/common/src/lib/routes/routes.ts - 336 + 357 @@ -4720,7 +4728,7 @@ libs/common/src/lib/routes/routes.ts - 384 + 405 @@ -4728,11 +4736,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 375 + 396 libs/common/src/lib/routes/routes.ts - 379 + 400 @@ -5002,7 +5010,7 @@ Data gathering has been started. apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 413 + 386 @@ -5036,7 +5044,7 @@ libs/common/src/lib/routes/routes.ts - 387 + 408 @@ -5111,29 +5119,29 @@ Export Activities libs/ui/src/lib/activities-table/activities-table.component.html - 73 + 76 libs/ui/src/lib/activities-table/activities-table.component.html - 460 + 463 Export Drafts as ICS libs/ui/src/lib/activities-table/activities-table.component.html - 87 + 90 libs/ui/src/lib/activities-table/activities-table.component.html - 473 + 476 Draft libs/ui/src/lib/activities-table/activities-table.component.html - 188 + 191 libs/ui/src/lib/i18n.ts @@ -5144,25 +5152,25 @@ Clone libs/ui/src/lib/activities-table/activities-table.component.html - 521 + 524 Export Draft as ICS libs/ui/src/lib/activities-table/activities-table.component.html - 533 + 536 Do you really want to delete this activity? libs/ui/src/lib/activities-table/activities-table.component.ts - 343 + 326 libs/ui/src/lib/activities-table/activities-table.component.ts - 354 + 337 @@ -5232,6 +5240,13 @@ 286 + + Add to Watchlist + + libs/common/src/lib/routes/routes.ts + 163 + + Market data provided by @@ -5282,7 +5297,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 465 + 478 libs/ui/src/lib/fire-calculator/fire-calculator.component.ts @@ -5308,11 +5323,11 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 124 + 126 libs/ui/src/lib/holdings-table/holdings-table.component.html - 125 + 127 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -5331,7 +5346,7 @@ Show all libs/ui/src/lib/holdings-table/holdings-table.component.html - 216 + 222 @@ -5342,11 +5357,11 @@ libs/common/src/lib/routes/routes.ts - 94 + 108 libs/ui/src/lib/activities-table/activities-table.component.html - 362 + 365 libs/ui/src/lib/i18n.ts @@ -5443,15 +5458,15 @@ Emergency Fund apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 229 + 242 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 307 + 320 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 412 + 425 apps/client/src/app/pages/features/features-page.html @@ -5537,7 +5552,7 @@ No Activities apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 148 + 138 @@ -5585,7 +5600,7 @@ Export libs/ui/src/lib/activities-table/activities-table.component.html - 69 + 72 @@ -5635,7 +5650,7 @@ Buy apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 35 + 43 libs/ui/src/lib/i18n.ts @@ -5650,7 +5665,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 285 + 288 libs/ui/src/lib/i18n.ts @@ -5675,7 +5690,7 @@ Sell apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 49 + 57 libs/ui/src/lib/i18n.ts @@ -5693,7 +5708,7 @@ Cash apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 261 + 274 @@ -5781,7 +5796,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 66 + 74 apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts @@ -5893,7 +5908,7 @@ Oops! Could not grant access. apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.component.ts - 311 + 314 @@ -6112,11 +6127,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 298 + 319 libs/common/src/lib/routes/routes.ts - 301 + 322 @@ -6127,7 +6142,7 @@ libs/common/src/lib/routes/routes.ts - 303 + 324 @@ -6163,7 +6178,7 @@ libs/common/src/lib/routes/routes.ts - 295 + 316 @@ -6251,21 +6266,21 @@ {VAR_PLURAL, plural, =1 {activity} other {activities}} apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 18 + 25 Delete Activities libs/ui/src/lib/activities-table/activities-table.component.html - 111 + 114 Internationalization libs/common/src/lib/routes/routes.ts - 154 + 175 @@ -6321,7 +6336,7 @@ Clone Activity libs/common/src/lib/routes/routes.ts - 169 + 190 @@ -6356,7 +6371,7 @@ Benchmarks apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 128 + 118 @@ -6457,7 +6472,7 @@ Oops! Could not delete the asset profile. apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 53 + 59 @@ -6506,7 +6521,7 @@ View Holding libs/ui/src/lib/activities-table/activities-table.component.html - 499 + 502 @@ -6570,7 +6585,7 @@ Do you really want to delete these asset profiles? apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 70 + 76 @@ -6726,7 +6741,7 @@ Oops! Could not update access. apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.component.ts - 409 + 414 @@ -6907,7 +6922,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 107 + 110 @@ -7040,7 +7055,7 @@ libs/common/src/lib/routes/routes.ts - 348 + 369 @@ -7048,11 +7063,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 343 + 364 libs/common/src/lib/routes/routes.ts - 346 + 367 @@ -7067,7 +7082,7 @@ libs/common/src/lib/routes/routes.ts - 356 + 377 @@ -7075,11 +7090,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 351 + 372 libs/common/src/lib/routes/routes.ts - 354 + 375 @@ -7222,7 +7237,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.ts - 158 + 167 apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html @@ -7386,7 +7401,7 @@ Change libs/ui/src/lib/holdings-table/holdings-table.component.html - 146 + 148 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -7419,11 +7434,11 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 168 + 170 libs/ui/src/lib/holdings-table/holdings-table.component.html - 169 + 171 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -7537,7 +7552,7 @@ libs/common/src/lib/routes/routes.ts - 272 + 293 @@ -7545,11 +7560,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 267 + 288 libs/common/src/lib/routes/routes.ts - 270 + 291 @@ -7634,7 +7649,7 @@ libs/common/src/lib/routes/routes.ts - 145 + 166 @@ -7648,11 +7663,11 @@ {VAR_PLURAL, plural, =1 {Activity} other {Activities}} libs/ui/src/lib/activities-table/activities-table.component.html - 70 + 73 libs/ui/src/lib/activities-table/activities-table.component.html - 108 + 111 @@ -7674,11 +7689,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 235 + 256 libs/common/src/lib/routes/routes.ts - 238 + 259 @@ -7798,14 +7813,14 @@ libs/common/src/lib/routes/routes.ts - 286 + 307 Open Source Alternative to libs/common/src/lib/routes/routes.ts - 381 + 402 @@ -7834,15 +7849,15 @@ kebab-case libs/common/src/lib/routes/routes.ts - 367 + 388 libs/common/src/lib/routes/routes.ts - 370 + 391 libs/common/src/lib/routes/routes.ts - 378 + 399 @@ -7850,11 +7865,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 359 + 380 libs/common/src/lib/routes/routes.ts - 362 + 383 @@ -8052,11 +8067,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 391 + 412 libs/common/src/lib/routes/routes.ts - 392 + 413 diff --git a/apps/client/src/locales/messages.zh.xlf b/apps/client/src/locales/messages.zh.xlf index 7b1600c9e5..d04fb0fd38 100644 --- a/apps/client/src/locales/messages.zh.xlf +++ b/apps/client/src/locales/messages.zh.xlf @@ -8,31 +8,31 @@ kebab-case libs/common/src/lib/routes/routes.ts - 231 + 252 libs/common/src/lib/routes/routes.ts - 232 + 253 libs/common/src/lib/routes/routes.ts - 237 + 258 libs/common/src/lib/routes/routes.ts - 245 + 266 libs/common/src/lib/routes/routes.ts - 253 + 274 libs/common/src/lib/routes/routes.ts - 261 + 282 libs/common/src/lib/routes/routes.ts - 269 + 290 @@ -41,19 +41,19 @@ kebab-case libs/common/src/lib/routes/routes.ts - 289 + 310 libs/common/src/lib/routes/routes.ts - 290 + 311 libs/common/src/lib/routes/routes.ts - 294 + 315 libs/common/src/lib/routes/routes.ts - 300 + 321 @@ -62,11 +62,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 309 + 330 libs/common/src/lib/routes/routes.ts - 310 + 331 @@ -75,11 +75,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 243 + 264 libs/common/src/lib/routes/routes.ts - 246 + 267 @@ -88,11 +88,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 314 + 335 libs/common/src/lib/routes/routes.ts - 315 + 336 @@ -101,11 +101,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 324 + 345 libs/common/src/lib/routes/routes.ts - 325 + 346 @@ -114,11 +114,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 259 + 280 libs/common/src/lib/routes/routes.ts - 262 + 283 @@ -127,11 +127,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 334 + 355 libs/common/src/lib/routes/routes.ts - 335 + 356 @@ -140,31 +140,31 @@ kebab-case libs/common/src/lib/routes/routes.ts - 339 + 360 libs/common/src/lib/routes/routes.ts - 340 + 361 libs/common/src/lib/routes/routes.ts - 345 + 366 libs/common/src/lib/routes/routes.ts - 353 + 374 libs/common/src/lib/routes/routes.ts - 361 + 382 libs/common/src/lib/routes/routes.ts - 369 + 390 libs/common/src/lib/routes/routes.ts - 377 + 398 @@ -268,11 +268,11 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 7 + 10 libs/ui/src/lib/activities-table/activities-table.component.html - 204 + 207 @@ -364,7 +364,7 @@ libs/common/src/lib/routes/routes.ts - 99 + 113 libs/ui/src/lib/accounts-table/accounts-table.component.html @@ -416,7 +416,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 182 + 185 libs/ui/src/lib/benchmark/benchmark.component.html @@ -480,7 +480,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 329 + 332 @@ -516,15 +516,15 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 309 + 312 libs/ui/src/lib/activities-table/activities-table.component.html - 346 + 349 libs/ui/src/lib/holdings-table/holdings-table.component.html - 99 + 101 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -560,7 +560,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 510 + 513 @@ -580,7 +580,7 @@ apps/client/src/app/components/admin-overview/admin-overview.html - 241 + 236 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -608,7 +608,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 545 + 548 libs/ui/src/lib/benchmark/benchmark.component.html @@ -638,6 +638,10 @@ apps/client/src/app/components/admin-jobs/admin-jobs.html 52 + + libs/common/src/lib/routes/routes.ts + 76 + Historical Market Data @@ -812,7 +816,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 213 + 216 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html @@ -848,7 +852,7 @@ 货币 apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 133 + 123 apps/client/src/app/pages/public/public-page.html @@ -868,7 +872,7 @@ 没有国家的 ETF apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 138 + 128 @@ -876,7 +880,7 @@ 无行业类别的 ETF apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 143 + 133 @@ -892,11 +896,11 @@ 您确实要删除此资产配置文件吗? apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 27 + 33 apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 69 + 75 @@ -904,7 +908,7 @@ 过滤... apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 377 + 350 @@ -924,7 +928,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 50 + 52 @@ -1136,7 +1140,7 @@ 更新活动 libs/common/src/lib/routes/routes.ts - 181 + 202 @@ -1192,7 +1196,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 396 + 399 @@ -1202,6 +1206,10 @@ apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html 7 + + libs/common/src/lib/routes/routes.ts + 69 + Search @@ -1332,7 +1340,7 @@ Update Account libs/common/src/lib/routes/routes.ts - 106 + 120 @@ -1376,7 +1384,7 @@ apps/client/src/app/components/admin-overview/admin-overview.html - 304 + 299 libs/ui/src/lib/account-balances/account-balances.component.html @@ -1672,7 +1680,7 @@ libs/common/src/lib/routes/routes.ts - 207 + 228 @@ -1724,7 +1732,7 @@ libs/common/src/lib/routes/routes.ts - 121 + 135 @@ -2044,7 +2052,7 @@ 绝对总业绩 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 80 + 88 @@ -2056,7 +2064,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 94 + 102 @@ -2064,7 +2072,7 @@ 绝对净绩效 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 114 + 122 apps/client/src/app/pages/portfolio/analysis/analysis-page.html @@ -2076,7 +2084,7 @@ 净绩效 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 129 + 137 apps/client/src/app/pages/portfolio/analysis/analysis-page.html @@ -2088,7 +2096,7 @@ 总资产 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 152 + 165 @@ -2096,7 +2104,7 @@ 购买力 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 292 + 305 @@ -2104,7 +2112,7 @@ 从分析中排除 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 324 + 337 @@ -2112,7 +2120,7 @@ 负债 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 355 + 368 apps/client/src/app/pages/features/features-page.html @@ -2124,7 +2132,7 @@ 净值 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 378 + 391 @@ -2132,7 +2140,7 @@ 年化业绩 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 393 + 406 @@ -2140,7 +2148,7 @@ 请输入您的应急基金金额。 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.ts - 160 + 169 @@ -2176,11 +2184,11 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 235 + 238 libs/ui/src/lib/holdings-table/holdings-table.component.html - 74 + 76 @@ -2492,7 +2500,7 @@ Add Account libs/common/src/lib/routes/routes.ts - 87 + 101 @@ -2704,7 +2712,7 @@ 投资 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 214 + 227 @@ -2784,7 +2792,7 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 193 + 197 @@ -2796,7 +2804,7 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 191 + 195 @@ -2808,7 +2816,7 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 194 + 198 @@ -2832,7 +2840,7 @@ libs/common/src/lib/routes/routes.ts - 275 + 296 @@ -2848,7 +2856,7 @@ libs/common/src/lib/routes/routes.ts - 240 + 261 @@ -2864,7 +2872,7 @@ libs/common/src/lib/routes/routes.ts - 248 + 269 @@ -2880,7 +2888,7 @@ libs/common/src/lib/routes/routes.ts - 264 + 285 @@ -2952,7 +2960,7 @@ libs/common/src/lib/routes/routes.ts - 109 + 123 libs/ui/src/lib/assistant/assistant.html @@ -3036,7 +3044,7 @@ libs/common/src/lib/routes/routes.ts - 78 + 92 @@ -3048,7 +3056,7 @@ libs/common/src/lib/routes/routes.ts - 65 + 79 @@ -3064,7 +3072,7 @@ libs/common/src/lib/routes/routes.ts - 70 + 84 @@ -3076,7 +3084,7 @@ libs/common/src/lib/routes/routes.ts - 75 + 89 @@ -3112,11 +3120,11 @@ libs/common/src/lib/routes/routes.ts - 148 + 169 libs/common/src/lib/routes/routes.ts - 225 + 246 @@ -3228,7 +3236,7 @@ libs/common/src/lib/routes/routes.ts - 280 + 301 @@ -3292,7 +3300,7 @@ libs/common/src/lib/routes/routes.ts - 306 + 327 @@ -3320,7 +3328,7 @@ libs/common/src/lib/routes/routes.ts - 311 + 332 @@ -3492,7 +3500,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 183 + 196 apps/client/src/app/pages/public/public-page.html @@ -3500,11 +3508,11 @@ libs/common/src/lib/routes/routes.ts - 130 + 144 libs/common/src/lib/routes/routes.ts - 222 + 243 libs/ui/src/lib/assistant/assistant.html @@ -3536,7 +3544,7 @@ libs/common/src/lib/routes/routes.ts - 140 + 154 @@ -3568,15 +3576,15 @@ libs/common/src/lib/routes/routes.ts - 135 + 149 libs/common/src/lib/routes/routes.ts - 316 + 337 libs/common/src/lib/routes/routes.ts - 364 + 385 @@ -3892,7 +3900,7 @@ Do you really want to delete these activities? libs/ui/src/lib/activities-table/activities-table.component.ts - 344 + 327 @@ -4004,7 +4012,7 @@ 哎呀!无法删除资产概况。 apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 54 + 60 @@ -4076,7 +4084,7 @@ 添加活动 libs/common/src/lib/routes/routes.ts - 174 + 195 @@ -4268,7 +4276,7 @@ libs/common/src/lib/routes/routes.ts - 184 + 205 libs/ui/src/lib/accounts-table/accounts-table.component.html @@ -4352,7 +4360,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 260 + 263 @@ -4364,11 +4372,11 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 28 + 31 libs/ui/src/lib/activities-table/activities-table.component.html - 432 + 435 @@ -4380,11 +4388,11 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 54 + 57 libs/ui/src/lib/activities-table/activities-table.component.html - 446 + 449 @@ -4392,7 +4400,7 @@ 正在导入数据... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 172 + 176 @@ -4400,7 +4408,7 @@ 导入已完成 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 183 + 187 @@ -4416,7 +4424,7 @@ 验证数据... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 294 + 298 @@ -4536,7 +4544,7 @@ libs/common/src/lib/routes/routes.ts - 189 + 210 @@ -4708,7 +4716,7 @@ libs/common/src/lib/routes/routes.ts - 194 + 215 @@ -4732,7 +4740,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 479 + 492 apps/client/src/app/pages/features/features-page.html @@ -4876,7 +4884,7 @@ libs/common/src/lib/routes/routes.ts - 326 + 347 @@ -5136,7 +5144,7 @@ libs/common/src/lib/routes/routes.ts - 336 + 357 @@ -5168,7 +5176,7 @@ libs/common/src/lib/routes/routes.ts - 384 + 405 @@ -5177,11 +5185,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 375 + 396 libs/common/src/lib/routes/routes.ts - 379 + 400 @@ -5481,7 +5489,7 @@ Data gathering has been started. apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 413 + 386 @@ -5517,7 +5525,7 @@ libs/common/src/lib/routes/routes.ts - 387 + 408 @@ -5601,11 +5609,11 @@ 导出活动记录 libs/ui/src/lib/activities-table/activities-table.component.html - 73 + 76 libs/ui/src/lib/activities-table/activities-table.component.html - 460 + 463 @@ -5613,11 +5621,11 @@ 将汇票导出为 ICS libs/ui/src/lib/activities-table/activities-table.component.html - 87 + 90 libs/ui/src/lib/activities-table/activities-table.component.html - 473 + 476 @@ -5625,7 +5633,7 @@ 草稿 libs/ui/src/lib/activities-table/activities-table.component.html - 188 + 191 libs/ui/src/lib/i18n.ts @@ -5637,7 +5645,7 @@ 克隆 libs/ui/src/lib/activities-table/activities-table.component.html - 521 + 524 @@ -5645,7 +5653,7 @@ 将汇票导出为 ICS libs/ui/src/lib/activities-table/activities-table.component.html - 533 + 536 @@ -5653,11 +5661,11 @@ 您确实要删除此活动吗? libs/ui/src/lib/activities-table/activities-table.component.ts - 343 + 326 libs/ui/src/lib/activities-table/activities-table.component.ts - 354 + 337 @@ -5736,6 +5744,14 @@ 286 + + Add to Watchlist + Add to Watchlist + + libs/common/src/lib/routes/routes.ts + 163 + + Market data provided by 市场数据提供者 @@ -5793,7 +5809,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 465 + 478 libs/ui/src/lib/fire-calculator/fire-calculator.component.ts @@ -5821,11 +5837,11 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 124 + 126 libs/ui/src/lib/holdings-table/holdings-table.component.html - 125 + 127 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -5845,7 +5861,7 @@ 显示所有 libs/ui/src/lib/holdings-table/holdings-table.component.html - 216 + 222 @@ -5857,11 +5873,11 @@ libs/common/src/lib/routes/routes.ts - 94 + 108 libs/ui/src/lib/activities-table/activities-table.component.html - 362 + 365 libs/ui/src/lib/i18n.ts @@ -5965,15 +5981,15 @@ 应急基金 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 229 + 242 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 307 + 320 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 412 + 425 apps/client/src/app/pages/features/features-page.html @@ -6069,7 +6085,7 @@ 暂无活动 apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 148 + 138 @@ -6121,7 +6137,7 @@ Export libs/ui/src/lib/activities-table/activities-table.component.html - 69 + 72 @@ -6177,7 +6193,7 @@ 买入 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 35 + 43 libs/ui/src/lib/i18n.ts @@ -6193,7 +6209,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 285 + 288 libs/ui/src/lib/i18n.ts @@ -6221,7 +6237,7 @@ 卖出 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 49 + 57 libs/ui/src/lib/i18n.ts @@ -6241,7 +6257,7 @@ 现金 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 261 + 274 @@ -6341,7 +6357,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 66 + 74 apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts @@ -6465,7 +6481,7 @@ 哎呀!无法授予访问权限。 apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.component.ts - 311 + 314 @@ -6710,11 +6726,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 298 + 319 libs/common/src/lib/routes/routes.ts - 301 + 322 @@ -6726,7 +6742,7 @@ libs/common/src/lib/routes/routes.ts - 303 + 324 @@ -6766,7 +6782,7 @@ libs/common/src/lib/routes/routes.ts - 295 + 316 @@ -6858,7 +6874,7 @@ {VAR_PLURAL, plural, =1 {活动} other {活动}} apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 18 + 25 @@ -6874,7 +6890,7 @@ 删除活动 libs/ui/src/lib/activities-table/activities-table.component.html - 111 + 114 @@ -6882,7 +6898,7 @@ 国际化 libs/common/src/lib/routes/routes.ts - 154 + 175 @@ -6946,7 +6962,7 @@ 克隆活动 libs/common/src/lib/routes/routes.ts - 169 + 190 @@ -6986,7 +7002,7 @@ 基准 apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 128 + 118 @@ -7110,7 +7126,7 @@ 哎呀!无法删除资产概况。 apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 53 + 59 @@ -7214,7 +7230,7 @@ 查看持仓 libs/ui/src/lib/activities-table/activities-table.component.html - 499 + 502 @@ -7222,7 +7238,7 @@ 您确定要删除这 个资产概况吗? apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 70 + 76 @@ -7262,7 +7278,7 @@ 哎呀!无法更新访问权限。 apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.component.ts - 409 + 414 @@ -7590,7 +7606,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 107 + 110 @@ -7738,7 +7754,7 @@ libs/common/src/lib/routes/routes.ts - 348 + 369 @@ -7754,7 +7770,7 @@ libs/common/src/lib/routes/routes.ts - 356 + 377 @@ -7763,11 +7779,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 351 + 372 libs/common/src/lib/routes/routes.ts - 354 + 375 @@ -7776,11 +7792,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 343 + 364 libs/common/src/lib/routes/routes.ts - 346 + 367 @@ -7940,7 +7956,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.ts - 158 + 167 apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html @@ -8124,7 +8140,7 @@ 涨跌 libs/ui/src/lib/holdings-table/holdings-table.component.html - 146 + 148 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -8160,11 +8176,11 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 168 + 170 libs/ui/src/lib/holdings-table/holdings-table.component.html - 169 + 171 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -8297,11 +8313,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 267 + 288 libs/common/src/lib/routes/routes.ts - 270 + 291 @@ -8313,7 +8329,7 @@ libs/common/src/lib/routes/routes.ts - 272 + 293 @@ -8425,7 +8441,7 @@ libs/common/src/lib/routes/routes.ts - 145 + 166 @@ -8441,11 +8457,11 @@ {VAR_PLURAL, plural, =1 {Activity} other {Activities}} libs/ui/src/lib/activities-table/activities-table.component.html - 70 + 73 libs/ui/src/lib/activities-table/activities-table.component.html - 108 + 111 @@ -8470,11 +8486,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 235 + 256 libs/common/src/lib/routes/routes.ts - 238 + 259 @@ -8610,7 +8626,7 @@ libs/common/src/lib/routes/routes.ts - 286 + 307 @@ -8618,7 +8634,7 @@ 开源替代方案 libs/common/src/lib/routes/routes.ts - 381 + 402 @@ -8651,15 +8667,15 @@ kebab-case libs/common/src/lib/routes/routes.ts - 367 + 388 libs/common/src/lib/routes/routes.ts - 370 + 391 libs/common/src/lib/routes/routes.ts - 378 + 399 @@ -8668,11 +8684,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 359 + 380 libs/common/src/lib/routes/routes.ts - 362 + 383 @@ -8897,11 +8913,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 391 + 412 libs/common/src/lib/routes/routes.ts - 392 + 413 From bef1c0df2416bda9297975bd4cc1f224748d84b6 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Fri, 11 Sep 2026 17:07:19 +0200 Subject: [PATCH 41/50] Task/upgrade papaparse to version 5.7.0 (#7855) * Update papaparse to version 5.7.0 * Update changelog --- CHANGELOG.md | 1 + package-lock.json | 8 ++++---- package.json | 2 +- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index be89cc1ed3..6f291883cb 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 - Improved the style of the activity type filter on the activities page (experimental) - Improved the style of the selector in the benchmark comparator +- Upgraded `papaparse` from version `5.5.3` to `5.7.0` ## 3.69.0 - 2026-09-07 diff --git a/package-lock.json b/package-lock.json index 8a2818c967..c1c7831963 100644 --- a/package-lock.json +++ b/package-lock.json @@ -90,7 +90,7 @@ "ngx-markdown": "22.0.0", "ngx-skeleton-loader": "13.0.0", "open-color": "1.9.1", - "papaparse": "5.5.3", + "papaparse": "5.7.0", "passport": "0.7.0", "passport-google-oauth20": "2.0.0", "passport-headerapikey": "1.2.2", @@ -29413,9 +29413,9 @@ "license": "BlueOak-1.0.0" }, "node_modules/papaparse": { - "version": "5.5.3", - "resolved": "https://registry.npmjs.org/papaparse/-/papaparse-5.5.3.tgz", - "integrity": "sha512-5QvjGxYVjxO59MGU2lHVYpRWBBtKHnlIAcSe1uNFCkkptUh63NFRj0FJQm7nR67puEruUci/ZkjmEFrjCAyP4A==", + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/papaparse/-/papaparse-5.7.0.tgz", + "integrity": "sha512-qBGxg/7Q3Kl9Wfhrz2Z74UnvnHTXLNG6jmKJFeBvP2+y4lV7So+7SR62+Zd47JvdrCkX+nDcnr0ObPzek/+6RA==", "license": "MIT" }, "node_modules/param-case": { diff --git a/package.json b/package.json index 517bca30cb..63547ef0d8 100644 --- a/package.json +++ b/package.json @@ -134,7 +134,7 @@ "ngx-markdown": "22.0.0", "ngx-skeleton-loader": "13.0.0", "open-color": "1.9.1", - "papaparse": "5.5.3", + "papaparse": "5.7.0", "passport": "0.7.0", "passport-google-oauth20": "2.0.0", "passport-headerapikey": "1.2.2", From f33cf14c5d094ed22403c553572f8056afb2beb4 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Sat, 12 Sep 2026 08:02:29 +0200 Subject: [PATCH 42/50] Task/improve language localization for DE (20260910) (#7863) * Add translation * Update changelog --- CHANGELOG.md | 1 + apps/client/src/locales/messages.de.xlf | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6f291883cb..790e07ab6f 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 - Improved the style of the activity type filter on the activities page (experimental) - Improved the style of the selector in the benchmark comparator +- Improved the language localization for German (`de`) - Upgraded `papaparse` from version `5.5.3` to `5.7.0` ## 3.69.0 - 2026-09-07 diff --git a/apps/client/src/locales/messages.de.xlf b/apps/client/src/locales/messages.de.xlf index 935e8b1de5..c46ea477e3 100644 --- a/apps/client/src/locales/messages.de.xlf +++ b/apps/client/src/locales/messages.de.xlf @@ -4103,7 +4103,7 @@ Add to Watchlist - Add to Watchlist + Zur Beobachtungsliste hinzufügen libs/common/src/lib/routes/routes.ts 163 From 9884fa0be2e7649cf004967d9d70178be119318b Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Sun, 13 Sep 2026 07:47:28 +0200 Subject: [PATCH 43/50] Task/improve no activities info component (#7857) * Various improvements * Update changelog --- CHANGELOG.md | 1 + .../no-activities-info.component.html | 18 ++++++++++-------- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 790e07ab6f..f6659e6b60 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed - Improved the style of the activity type filter on the activities page (experimental) +- Improved the style of the no activities info component - Improved the style of the selector in the benchmark comparator - Improved the language localization for German (`de`) - Upgraded `papaparse` from version `5.5.3` to `5.7.0` diff --git a/libs/ui/src/lib/no-activities-info/no-activities-info.component.html b/libs/ui/src/lib/no-activities-info/no-activities-info.component.html index 3c7f9fd107..f9a174137c 100644 --- a/libs/ui/src/lib/no-activities-info/no-activities-info.component.html +++ b/libs/ui/src/lib/no-activities-info/no-activities-info.component.html @@ -2,12 +2,14 @@
-
- Time to add your first activity. - +
From 9e151db899273441af0b9ee20d7974e76fb13efc Mon Sep 17 00:00:00 2001 From: Kenrick Tandrian <60643640+KenTandrian@users.noreply.github.com> Date: Mon, 14 Sep 2026 15:14:33 +0700 Subject: [PATCH 44/50] Task/improve language localization for ZH (#7869) * Update translations * Update changelog --- CHANGELOG.md | 1 + apps/client/src/locales/messages.zh.xlf | 206 ++++++++++++------------ 2 files changed, 104 insertions(+), 103 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f6659e6b60..8368061f1d 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 - Improved the style of the activity type filter on the activities page (experimental) - Improved the style of the no activities info component - Improved the style of the selector in the benchmark comparator +- Improved the language localization for Chinese (`zh`) - Improved the language localization for German (`de`) - Upgraded `papaparse` from version `5.5.3` to `5.7.0` diff --git a/apps/client/src/locales/messages.zh.xlf b/apps/client/src/locales/messages.zh.xlf index d04fb0fd38..6a761c1a87 100644 --- a/apps/client/src/locales/messages.zh.xlf +++ b/apps/client/src/locales/messages.zh.xlf @@ -301,7 +301,7 @@ Any person who has the link can view the data. - Any person who has the link can view the data. + 任何拥有此链接的人都可以查看数据。 apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html 42 @@ -697,7 +697,7 @@ View and manage - View and manage + 查看与管理 libs/ui/src/lib/access-level-icon/access-level-icon.component.html 9 @@ -757,7 +757,7 @@ Splits - Splits + 拆股 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html 519 @@ -933,7 +933,7 @@ Find quick answers to commonly asked questions about the fully managed Ghostfolio cloud offering in our Frequently Asked Questions (FAQ) section. - Find quick answers to commonly asked questions about the fully managed Ghostfolio cloud offering in our Frequently Asked Questions (FAQ) section. + 在我们的常见问题 (FAQ) 页面中查找关于完全托管的 Ghostfolio 云服务的常见问题快速解答。 apps/client/src/app/pages/faq/saas/saas-page.html 8 @@ -1337,7 +1337,7 @@ Update Account - Update Account + 更新账户 libs/common/src/lib/routes/routes.ts 120 @@ -1353,7 +1353,7 @@ Explore our guides to help you get started with investing and managing your finances. - Explore our guides to help you get started with investing and managing your finances. + 探索我们的指南,帮助您开启投资与财务管理之旅。 apps/client/src/app/pages/resources/overview/resources-overview.component.ts 21 @@ -1437,7 +1437,7 @@ Adjust the rules below and set custom thresholds to align with a personal investment strategy. - Adjust the rules below and set custom thresholds to align with a personal investment strategy. + 调整下方规则并设置自定义阈值,以贴合您的个人投资策略。 apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html 12 @@ -1469,7 +1469,7 @@ Please select a date in the future. - Please select a date in the future. + 请选择一个未来的日期。 apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html 70 @@ -1477,7 +1477,7 @@ The data of this asset profile is moved to () and this asset profile is deleted. - 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 @@ -1509,7 +1509,7 @@ Cache has been flushed. - Cache has been flushed. + 缓存已刷新。 apps/client/src/app/components/admin-overview/admin-overview.component.ts 281 @@ -1761,7 +1761,7 @@ Split Ratio - Split Ratio + 拆股比例 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html 533 @@ -1793,7 +1793,7 @@ Last Used - Last Used + 上次使用 apps/client/src/app/components/access-table/access-table.component.html 31 @@ -1801,7 +1801,7 @@ An error occurred while merging this asset profile into (). - 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 @@ -1969,7 +1969,7 @@ Find quick answers to commonly asked questions about Ghostfolio in our Frequently Asked Questions (FAQ) section. - Find quick answers to commonly asked questions about Ghostfolio in our Frequently Asked Questions (FAQ) section. + 在我们的常见问题 (FAQ) 页面中查找关于 Ghostfolio 的常见问题快速解答。 apps/client/src/app/pages/resources/overview/resources-overview.component.ts 16 @@ -2497,7 +2497,7 @@ Add Account - Add Account + 添加账户 libs/common/src/lib/routes/routes.ts 101 @@ -3521,7 +3521,7 @@ This action cannot be undone. - This action cannot be undone. + 此操作无法撤销。 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts 963 @@ -3589,7 +3589,7 @@ Alternative Investment - Alternative Investment + 另类投资 libs/ui/src/lib/i18n.ts 52 @@ -3597,7 +3597,7 @@ Commodity - Commodity + 大宗商品 libs/ui/src/lib/i18n.ts 53 @@ -3605,7 +3605,7 @@ Equity - Equity + 股权 libs/ui/src/lib/i18n.ts 54 @@ -3613,7 +3613,7 @@ Fixed Income - Fixed Income + 固定收益 libs/ui/src/lib/i18n.ts 55 @@ -3621,7 +3621,7 @@ Liquidity - Liquidity + 流动性 libs/ui/src/lib/i18n.ts 56 @@ -3629,7 +3629,7 @@ Real Estate - Real Estate + 房地产 libs/ui/src/lib/i18n.ts 57 @@ -3637,7 +3637,7 @@ Bond - Bond + 债券 libs/ui/src/lib/i18n.ts 60 @@ -3645,7 +3645,7 @@ Cash - Cash + 现金 libs/ui/src/lib/i18n.ts 61 @@ -3653,7 +3653,7 @@ Collectible - Collectible + 收藏品 libs/ui/src/lib/i18n.ts 62 @@ -3661,7 +3661,7 @@ Commodity - Commodity + 大宗商品 apps/client/src/app/pages/i18n/i18n-page.html 5 @@ -3669,7 +3669,7 @@ Cryptocurrency - Cryptocurrency + 加密货币 libs/ui/src/lib/i18n.ts 63 @@ -3677,7 +3677,7 @@ ETF - ETF + ETF libs/ui/src/lib/i18n.ts 64 @@ -3685,7 +3685,7 @@ Loan - Loan + 贷款 libs/ui/src/lib/i18n.ts 65 @@ -3693,7 +3693,7 @@ Mutual Fund - Mutual Fund + 共同基金 libs/ui/src/lib/i18n.ts 66 @@ -3701,7 +3701,7 @@ Precious Metal - Precious Metal + 贵金属 libs/ui/src/lib/i18n.ts 67 @@ -3709,7 +3709,7 @@ Private Equity - Private Equity + 私募股权 libs/ui/src/lib/i18n.ts 68 @@ -3717,7 +3717,7 @@ Stock - Stock + 股票 libs/ui/src/lib/i18n.ts 69 @@ -3865,7 +3865,7 @@ Learn key financial terms and concepts in our comprehensive glossary. - Learn key financial terms and concepts in our comprehensive glossary. + 在我们的全面词汇表中学习关键的财务术语和概念。 apps/client/src/app/pages/resources/overview/resources-overview.component.ts 31 @@ -3897,7 +3897,7 @@ Do you really want to delete these activities? - Do you really want to delete these activities? + 您确定要删除这 笔活动吗? libs/ui/src/lib/activities-table/activities-table.component.ts 327 @@ -4129,7 +4129,7 @@ Do you really want to merge this asset profile into it? - 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 @@ -4497,7 +4497,7 @@ Shares After - Shares After + 拆股后股数 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html 591 @@ -4905,7 +4905,7 @@ Do you really want to remove this received access? - Do you really want to remove this received access? + 您确定要移除接收到的此访问权限吗? apps/client/src/app/components/access-table/access-table.component.ts 152 @@ -5242,7 +5242,7 @@ Expiration Date - Expiration Date + 到期日 apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html 54 @@ -5486,7 +5486,7 @@ Data gathering has been started. - Data gathering has been started. + 数据收集已开始。 apps/client/src/app/components/admin-market-data/admin-market-data.component.ts 386 @@ -5746,7 +5746,7 @@ Add to Watchlist - Add to Watchlist + 添加到关注列表 libs/common/src/lib/routes/routes.ts 163 @@ -5786,7 +5786,7 @@ This asset profile cannot be merged into (). - This asset profile cannot be merged into (). + 无法将此资产概况合并到 ()。 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts 922 @@ -6134,7 +6134,7 @@ Export - Export + 导出 libs/ui/src/lib/activities-table/activities-table.component.html 72 @@ -6246,7 +6246,7 @@ Restricted view and manage - Restricted view and manage + 受限的查看与管理 libs/ui/src/lib/access-level-icon/access-level-icon.component.html 5 @@ -6302,7 +6302,7 @@ Find quick answers to commonly asked questions about self-hosting Ghostfolio in our Frequently Asked Questions (FAQ) section. - Find quick answers to commonly asked questions about self-hosting Ghostfolio in our Frequently Asked Questions (FAQ) section. + 在我们的常见问题 (FAQ) 页面中查找关于自托管 Ghostfolio 的常见问题快速解答。 apps/client/src/app/pages/faq/self-hosting/self-hosting-page.html 8 @@ -6975,7 +6975,7 @@ Derived from the portfolio you are viewing - Derived from the portfolio you are viewing + 源自您正在查看的投资组合 apps/client/src/app/components/user-account-settings/user-account-settings.html 27 @@ -7115,7 +7115,7 @@ Ghostfolio X-ray uses static analysis to uncover potential issues and risks in the portfolio. - Ghostfolio X-ray uses static analysis to uncover potential issues and risks in the portfolio. + Ghostfolio X-ray 使用静态分析来揭示投资组合中的潜在问题和风险。 apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html 7 @@ -7195,7 +7195,7 @@ Find quick answers to commonly asked questions about Ghostfolio in our Frequently Asked Questions (FAQ) section. Discover what Ghostfolio is, explore its features, and learn about our privacy practices. Get all the information you need in one place. - Find quick answers to commonly asked questions about Ghostfolio in our Frequently Asked Questions (FAQ) section. Discover what Ghostfolio is, explore its features, and learn about our privacy practices. Get all the information you need in one place. + 在我们的常见问题 (FAQ) 页面中查找关于 Ghostfolio 的常见问题快速解答。了解什么是 Ghostfolio,探索其功能,并了解我们的隐私规范。一站式获取您所需的所有信息。 apps/client/src/app/pages/faq/overview/faq-overview-page.html 8 @@ -7635,7 +7635,7 @@ Shares Before - Shares Before + 拆股前股数 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html 604 @@ -7877,7 +7877,7 @@ Access various market resources and tools to stay informed about financial markets. - Access various market resources and tools to stay informed about financial markets. + 访问各种市场资源和工具,随时了解金融市场动态。 apps/client/src/app/pages/resources/overview/resources-overview.component.ts 26 @@ -7925,7 +7925,7 @@ rules align with the portfolio. - 条规则与您的投资组合一致。 + 项规则符合投资组合。 apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html 65 @@ -8157,7 +8157,7 @@ Oops! Could not remove the received access. - Oops! Could not remove the received access. + 哎呀!无法移除接收到的访问权限。 apps/client/src/app/components/user-account-access/user-account-access.component.ts 156 @@ -8241,7 +8241,7 @@ Additional requests are granted while you are setting up your instance - Additional requests are granted while you are setting up your instance + 在您配置实例期间已授予额外请求额度 apps/client/src/app/components/admin-settings/admin-settings.component.ts 88 @@ -8342,7 +8342,7 @@ () is already in use. - () 已在使用中。 + () 已被使用。 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts 965 @@ -8454,7 +8454,7 @@ {VAR_PLURAL, plural, =1 {Activity} other {Activities}} - {VAR_PLURAL, plural, =1 {Activity} other {Activities}} + {VAR_PLURAL, plural, =1 {活动} other {活动}} libs/ui/src/lib/activities-table/activities-table.component.html 73 @@ -8519,7 +8519,7 @@ Coverage - Coverage + 覆盖范围 apps/client/src/app/pages/i18n/i18n-page.html 147 @@ -8527,7 +8527,7 @@ The assets tagged as emergency fund exceed the emergency fund of ${emergencyFund} ${baseCurrency} - The assets tagged as emergency fund exceed the emergency fund of ${emergencyFund} ${baseCurrency} + 标记为应急基金的资产已超过设立的 ${emergencyFund} ${baseCurrency} 应急基金 apps/client/src/app/pages/i18n/i18n-page.html 149 @@ -8535,7 +8535,7 @@ The emergency fund of ${emergencyFund} ${baseCurrency} is not covered - The emergency fund of ${emergencyFund} ${baseCurrency} is not covered + ${emergencyFund} ${baseCurrency} 的应急基金尚未得到充分覆盖 apps/client/src/app/pages/i18n/i18n-page.html 153 @@ -8543,7 +8543,7 @@ No emergency fund amount has been set to determine the coverage - No emergency fund amount has been set to determine the coverage + 未设置应急基金金额,无法确定覆盖情况 apps/client/src/app/pages/i18n/i18n-page.html 157 @@ -8551,7 +8551,7 @@ The emergency fund of ${emergencyFund} ${baseCurrency} is covered - The emergency fund of ${emergencyFund} ${baseCurrency} is covered + ${emergencyFund} ${baseCurrency} 的应急基金已得到充分覆盖 apps/client/src/app/pages/i18n/i18n-page.html 160 @@ -8559,7 +8559,7 @@ Setup - 应急资金:设置 + 设置 apps/client/src/app/pages/i18n/i18n-page.html 163 @@ -8591,7 +8591,7 @@ The fees do exceed ${thresholdMax}% of the total investment volume (${feeRatio}%) - 费用已超过您总投资金额的 ${thresholdMax}%(${feeRatio}%) + 费用已超过总投资额的 ${thresholdMax}%(当前为 ${feeRatio}%) apps/client/src/app/pages/i18n/i18n-page.html 172 @@ -8599,7 +8599,7 @@ The fees do not exceed ${thresholdMax}% of the total investment volume (${feeRatio}%) - 费用未超过您总投资金额的 ${thresholdMax}%(${feeRatio}%) + 费用未超过总投资额的 ${thresholdMax}%(当前为 ${feeRatio}%) apps/client/src/app/pages/i18n/i18n-page.html 176 @@ -8647,7 +8647,7 @@ The net worth is managed by a single account - 您的净资产由单一账户管理 + 净资产由单个账户管理 apps/client/src/app/pages/i18n/i18n-page.html 32 @@ -8655,7 +8655,7 @@ The net worth is managed by ${accountsLength} accounts - 您的净资产由 ${accountsLength} 个账户管理 + 净资产由 ${accountsLength} 个账户管理 apps/client/src/app/pages/i18n/i18n-page.html 38 @@ -8781,7 +8781,7 @@ Over ${thresholdMax}% of the current investment is at ${maxAccountName} (${maxInvestmentRatio}%) - 您当前投资中有超过 ${thresholdMax}% 的资金在 ${maxAccountName} (${maxInvestmentRatio}%) + 当前投资中有超过 ${thresholdMax}% 集中于 ${maxAccountName}(${maxInvestmentRatio}%) apps/client/src/app/pages/i18n/i18n-page.html 19 @@ -8789,7 +8789,7 @@ The major part of the current investment is at ${maxAccountName} (${maxInvestmentRatio}%) and does not exceed ${thresholdMax}% - 您的当前投资大部分位于 ${maxAccountName} (${maxInvestmentRatio}%) 且不超过 ${thresholdMax}% + 当前投资的主要部分位于 ${maxAccountName}(${maxInvestmentRatio}%),且未超过 ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html 26 @@ -8805,7 +8805,7 @@ The equity contribution of the current investment (${equityValueRatio}%) exceeds ${thresholdMax}% - 您目前投资中股权占比 (${equityValueRatio}%) 超过了 ${thresholdMax}% + 股票类资产在当前投资中的占比(${equityValueRatio}%)超过了 ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html 45 @@ -8813,7 +8813,7 @@ The equity contribution of the current investment (${equityValueRatio}%) is below ${thresholdMin}% - 您目前投资中股权占比 (${equityValueRatio}%) 低于 ${thresholdMin}% + 股票类资产在当前投资中的占比(${equityValueRatio}%)低于 ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html 49 @@ -8821,7 +8821,7 @@ The equity contribution of the current investment (${equityValueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% - 您目前投资中股权占比 (${equityValueRatio}%) 在 ${thresholdMin}% 和 ${thresholdMax}% 之间 + 股票类资产在当前投资中的占比(${equityValueRatio}%)介于 ${thresholdMin}% 到 ${thresholdMax}% 之间 apps/client/src/app/pages/i18n/i18n-page.html 53 @@ -8837,7 +8837,7 @@ The fixed income contribution of the current investment (${fixedIncomeValueRatio}%) exceeds ${thresholdMax}% - 您目前投资中固定收益占比 (${fixedIncomeValueRatio}%) 超过了 ${thresholdMax}% + 固定收益类资产在当前投资中的占比(${fixedIncomeValueRatio}%)超过了 ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html 59 @@ -8845,7 +8845,7 @@ The fixed income contribution of the current investment (${fixedIncomeValueRatio}%) is below ${thresholdMin}% - 您目前投资中固定收益占比 (${fixedIncomeValueRatio}%) 低于 ${thresholdMin}% + 固定收益类资产在当前投资中的占比(${fixedIncomeValueRatio}%)低于 ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html 63 @@ -8853,7 +8853,7 @@ The fixed income contribution of the current investment (${fixedIncomeValueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% - 您目前投资中固定收益占比 (${fixedIncomeValueRatio}%) 在 ${thresholdMin}% 和 ${thresholdMax}% 之间 + 固定收益类资产在当前投资中的占比(${fixedIncomeValueRatio}%)介于 ${thresholdMin}% 到 ${thresholdMax}% 之间 apps/client/src/app/pages/i18n/i18n-page.html 68 @@ -8869,7 +8869,7 @@ The major part of the current investment is not in the base currency (${baseCurrencyValueRatio}% in ${baseCurrency}) - 您的当前投资的主要部分未以您的基础货币计价 ( ${baseCurrency} 仅占 ${baseCurrencyValueRatio}%) + 当前投资的主要部分未以基础货币计价(${baseCurrency} 占比为 ${baseCurrencyValueRatio}%) apps/client/src/app/pages/i18n/i18n-page.html 90 @@ -8877,7 +8877,7 @@ The major part of the current investment is in the base currency (${baseCurrencyValueRatio}% in ${baseCurrency}) - 您的当前投资的主要部分以您的基础货币计价(其中 ${baseCurrency} 占比 ${baseCurrencyValueRatio}%) + 当前投资的主要部分以基础货币计价(${baseCurrency} 占比为 ${baseCurrencyValueRatio}%) apps/client/src/app/pages/i18n/i18n-page.html 94 @@ -8893,7 +8893,7 @@ Over ${thresholdMax}% of the current investment is in ${currency} (${maxValueRatio}%) - 超过 ${thresholdMax}% 的当前投资在 ${currency} 中(占比 ${maxValueRatio}%) + 当前投资中有超过 ${thresholdMax}% 以 ${currency} 计价(${maxValueRatio}%) apps/client/src/app/pages/i18n/i18n-page.html 99 @@ -8901,7 +8901,7 @@ The major part of the current investment is in ${currency} (${maxValueRatio}%) and does not exceed ${thresholdMax}% - 您的当前投资的主要部分以 ${currency} 计价(占比 ${maxValueRatio}%),并且未超过 ${thresholdMax}% + 当前投资的主要部分以 ${currency} 计价(${maxValueRatio}%),且未超过 ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html 103 @@ -9054,7 +9054,7 @@ The buying power is below ${thresholdMin} ${baseCurrency} - 您的购买力低于 ${thresholdMin} ${baseCurrency} + 购买力低于 ${thresholdMin} ${baseCurrency} apps/client/src/app/pages/i18n/i18n-page.html 75 @@ -9062,7 +9062,7 @@ The buying power is 0 ${baseCurrency} - 您的购买力为 0 ${baseCurrency} + 购买力为 0 ${baseCurrency} apps/client/src/app/pages/i18n/i18n-page.html 79 @@ -9070,7 +9070,7 @@ The buying power exceeds ${thresholdMin} ${baseCurrency} - 您的购买力超过了 ${thresholdMin} ${baseCurrency} + 购买力超过 ${thresholdMin} ${baseCurrency} apps/client/src/app/pages/i18n/i18n-page.html 82 @@ -9102,7 +9102,7 @@ The developed markets contribution of the current investment (${developedMarketsValueRatio}%) exceeds ${thresholdMax}% - 发达市场对您的当前投资 (${developedMarketsValueRatio}%) 的贡献超过了 ${thresholdMax}% + 发达市场在当前投资中的占比(${developedMarketsValueRatio}%)超过了 ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html 114 @@ -9110,7 +9110,7 @@ The developed markets contribution of the current investment (${developedMarketsValueRatio}%) is below ${thresholdMin}% - 发达市场对您的当前投资 (${developedMarketsValueRatio}%) 的贡献低于 ${thresholdMin}% + 发达市场在当前投资中的占比(${developedMarketsValueRatio}%)低于 ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html 119 @@ -9118,7 +9118,7 @@ The developed markets contribution of the current investment (${developedMarketsValueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% - 发达市场对您的当前投资 (${developedMarketsValueRatio}%) 的贡献在 ${thresholdMin}% 和 ${thresholdMax}% 之间 + 发达市场在当前投资中的占比(${developedMarketsValueRatio}%)介于 ${thresholdMin}% 到 ${thresholdMax}% 之间 apps/client/src/app/pages/i18n/i18n-page.html 124 @@ -9134,7 +9134,7 @@ The emerging markets contribution of the current investment (${emergingMarketsValueRatio}%) exceeds ${thresholdMax}% - 新兴市场对您的当前投资 (${emergingMarketsValueRatio}%) 的贡献超过了 ${thresholdMax}% + 新兴市场在当前投资中的占比(${emergingMarketsValueRatio}%)超过了 ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html 132 @@ -9142,7 +9142,7 @@ The emerging markets contribution of the current investment (${emergingMarketsValueRatio}%) is below ${thresholdMin}% - 新兴市场对您的当前投资 (${emergingMarketsValueRatio}%) 的贡献低于 ${thresholdMin}% + 新兴市场在当前投资中的占比(${emergingMarketsValueRatio}%)低于 ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html 137 @@ -9150,7 +9150,7 @@ The emerging markets contribution of the current investment (${emergingMarketsValueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% - 新兴市场对您的当前投资 (${emergingMarketsValueRatio}%) 的贡献在 ${thresholdMin}% 和 ${thresholdMax}% 之间 + 新兴市场在当前投资中的占比(${emergingMarketsValueRatio}%)介于 ${thresholdMin}% 到 ${thresholdMax}% 之间 apps/client/src/app/pages/i18n/i18n-page.html 142 @@ -9166,7 +9166,7 @@ The net worth is managed by 0 accounts - 您的净资产由 0 个帐户管理 + 净资产由 0 个账户管理 apps/client/src/app/pages/i18n/i18n-page.html 35 @@ -9182,7 +9182,7 @@ The Asia-Pacific market contribution of the current investment (${valueRatio}%) exceeds ${thresholdMax}% - 亚太地区对您的当前投资 (${valueRatio}%) 的贡献超过了 ${thresholdMax}% + 亚太市场在当前投资中的占比(${valueRatio}%)超过了 ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html 185 @@ -9190,7 +9190,7 @@ The Asia-Pacific market contribution of the current investment (${valueRatio}%) is below ${thresholdMin}% - 亚太地区对您的当前投资 (${valueRatio}%) 的贡献低于 ${thresholdMin}% + 亚太市场在当前投资中的占比(${valueRatio}%)低于 ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html 189 @@ -9198,7 +9198,7 @@ The Asia-Pacific market contribution of the current investment (${valueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% - 亚太地区对您的当前投资 (${valueRatio}%) 的贡献在 ${thresholdMin}% 和 ${thresholdMax}% 之间 + 亚太市场在当前投资中的占比(${valueRatio}%)介于 ${thresholdMin}% 到 ${thresholdMax}% 之间 apps/client/src/app/pages/i18n/i18n-page.html 193 @@ -9214,7 +9214,7 @@ The Emerging Markets contribution of the current investment (${valueRatio}%) exceeds ${thresholdMax}% - 新兴市场对您的当前投资 (${valueRatio}%) 的贡献超过了 ${thresholdMax}% + 新兴市场在当前投资中的占比(${valueRatio}%)超过了 ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html 201 @@ -9222,7 +9222,7 @@ The Emerging Markets contribution of the current investment (${valueRatio}%) is below ${thresholdMin}% - 新兴市场对您的当前投资 (${valueRatio}%) 的贡献低于 ${thresholdMin}% + 新兴市场在当前投资中的占比(${valueRatio}%)低于 ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html 205 @@ -9230,7 +9230,7 @@ The Emerging Markets contribution of the current investment (${valueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% - 新兴市场对您的当前投资 (${valueRatio}%) 的贡献在 ${thresholdMin}% 和 ${thresholdMax}% 之间 + 新兴市场在当前投资中的占比(${valueRatio}%)介于 ${thresholdMin}% 到 ${thresholdMax}% 之间 apps/client/src/app/pages/i18n/i18n-page.html 209 @@ -9246,7 +9246,7 @@ The Europe market contribution of the current investment (${valueRatio}%) exceeds ${thresholdMax}% - 欧洲市场对您的当前投资 (${valueRatio}%) 的贡献超过了 ${thresholdMax}% + 欧洲市场在当前投资中的占比(${valueRatio}%)超过了 ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html 215 @@ -9254,7 +9254,7 @@ The Europe market contribution of the current investment (${valueRatio}%) is below ${thresholdMin}% - 欧洲市场对您的当前投资 (${valueRatio}%) 的贡献低于 ${thresholdMin}% + 欧洲市场在当前投资中的占比(${valueRatio}%)低于 ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html 219 @@ -9262,7 +9262,7 @@ The Europe market contribution of the current investment (${valueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% - 欧洲市场对您的当前投资 (${valueRatio}%) 的贡献在 ${thresholdMin}% 和 ${thresholdMax}% 之间 + 欧洲市场在当前投资中的占比(${valueRatio}%)介于 ${thresholdMin}% 到 ${thresholdMax}% 之间 apps/client/src/app/pages/i18n/i18n-page.html 223 @@ -9278,7 +9278,7 @@ The Japan market contribution of the current investment (${valueRatio}%) exceeds ${thresholdMax}% - 日本市场对您的当前投资 (${valueRatio}%) 的贡献超过了 ${thresholdMax}% + 日本市场在当前投资中的占比(${valueRatio}%)超过了 ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html 229 @@ -9286,7 +9286,7 @@ The Japan market contribution of the current investment (${valueRatio}%) is below ${thresholdMin}% - 日本市场对您的当前投资 (${valueRatio}%) 的贡献低于 ${thresholdMin}% + 日本市场在当前投资中的占比(${valueRatio}%)低于 ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html 233 @@ -9294,7 +9294,7 @@ The Japan market contribution of the current investment (${valueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% - 日本市场对您的当前投资 (${valueRatio}%) 的贡献在 ${thresholdMin}% 和 ${thresholdMax}% 之间 + 日本市场在当前投资中的占比(${valueRatio}%)介于 ${thresholdMin}% 到 ${thresholdMax}% 之间 apps/client/src/app/pages/i18n/i18n-page.html 237 @@ -9310,7 +9310,7 @@ The North America market contribution of the current investment (${valueRatio}%) exceeds ${thresholdMax}% - 北美市场对您的当前投资 (${valueRatio}%) 的贡献超过了 ${thresholdMax}% + 北美市场在当前投资中的占比(${valueRatio}%)超过了 ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html 243 @@ -9318,7 +9318,7 @@ The North America market contribution of the current investment (${valueRatio}%) is below ${thresholdMin}% - 北美市场对您的当前投资 (${valueRatio}%) 的贡献低于 ${thresholdMin}% + 北美市场在当前投资中的占比(${valueRatio}%)低于 ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html 247 @@ -9326,7 +9326,7 @@ The North America market contribution of the current investment (${valueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% - 北美市场对您的当前投资 (${valueRatio}%) 的贡献在 ${thresholdMin}% 和 ${thresholdMax}% 之间 + 北美市场在当前投资中的占比(${valueRatio}%)介于 ${thresholdMin}% 到 ${thresholdMax}% 之间 apps/client/src/app/pages/i18n/i18n-page.html 251 @@ -9386,7 +9386,7 @@ Oops! Could not revoke the granted access. - Oops! Could not revoke the granted access. + 哎呀!无法撤销授予的访问权限。 apps/client/src/app/components/user-account-access/user-account-access.component.ts 135 From e3e0199d36c9487d0dec5c50d0444e070ec8213b Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Mon, 14 Sep 2026 10:15:22 +0200 Subject: [PATCH 45/50] Task/refactor params of getValues() in current rate service (#7829) Refactoring --- .../calculator/portfolio-calculator.factory.ts | 7 +++++++ .../portfolio/calculator/portfolio-calculator.ts | 8 +++++++- .../portfolio-calculator-baln-buy-and-buy.spec.ts | 2 +- ...or-baln-buy-and-sell-in-two-activities.spec.ts | 2 +- ...portfolio-calculator-baln-buy-and-sell.spec.ts | 2 +- .../roai/portfolio-calculator-baln-buy.spec.ts | 2 +- ...calculator-btceur-in-base-currency-eur.spec.ts | 2 +- .../roai/portfolio-calculator-btceur.spec.ts | 2 +- ...lculator-btcusd-buy-and-sell-partially.spec.ts | 2 +- ...r-btcusd-buy-before-first-market-price.spec.ts | 2 +- .../portfolio-calculator-btcusd-short.spec.ts | 2 +- .../roai/portfolio-calculator-btcusd.spec.ts | 2 +- .../roai/portfolio-calculator-cash.spec.ts | 1 - .../roai/portfolio-calculator-fee.spec.ts | 2 +- .../roai/portfolio-calculator-googl-buy.spec.ts | 2 +- ...tor-jnug-buy-and-sell-and-buy-and-sell.spec.ts | 2 +- .../roai/portfolio-calculator-liability.spec.ts | 2 +- ...r-manual-buy-before-first-market-price.spec.ts | 2 +- ...portfolio-calculator-msft-buy-and-sell.spec.ts | 3 ++- ...culator-msft-buy-from-two-data-sources.spec.ts | 2 +- ...olio-calculator-msft-buy-with-dividend.spec.ts | 2 +- .../portfolio-calculator-no-activities.spec.ts | 2 +- ...calculator-novn-buy-and-sell-partially.spec.ts | 2 +- ...portfolio-calculator-novn-buy-and-sell.spec.ts | 2 +- .../roai/portfolio-calculator-stock-split.spec.ts | 3 ++- .../roai/portfolio-calculator-valuable.spec.ts | 2 +- .../app/portfolio/current-rate.service.spec.ts | 3 +-- .../api/src/app/portfolio/current-rate.service.ts | 15 ++++++--------- .../interfaces/get-values-params.interface.ts | 2 ++ apps/api/src/app/portfolio/portfolio.service.ts | 12 ++++++++---- .../data-provider/data-provider.service.ts | 8 ++++---- 31 files changed, 60 insertions(+), 44 deletions(-) diff --git a/apps/api/src/app/portfolio/calculator/portfolio-calculator.factory.ts b/apps/api/src/app/portfolio/calculator/portfolio-calculator.factory.ts index 7d95988c1f..48ab8f3218 100644 --- a/apps/api/src/app/portfolio/calculator/portfolio-calculator.factory.ts +++ b/apps/api/src/app/portfolio/calculator/portfolio-calculator.factory.ts @@ -3,6 +3,7 @@ import { RedisCacheService } from '@ghostfolio/api/app/redis-cache/redis-cache.s import { ConfigurationService } from '@ghostfolio/api/services/configuration/configuration.service'; import { ExchangeRateDataService } from '@ghostfolio/api/services/exchange-rate-data/exchange-rate-data.service'; import { PortfolioSnapshotService } from '@ghostfolio/api/services/queues/portfolio-snapshot/portfolio-snapshot.service'; +import { SubscriptionType } from '@ghostfolio/common/enums'; import { Activity, Filter, @@ -35,6 +36,7 @@ export class PortfolioCalculatorFactory { currency, filters = [], usePortfolioSnapshotCache = true, + subscriptionType, userId }: { accountBalanceItems?: HistoricalDataItem[]; @@ -43,6 +45,7 @@ export class PortfolioCalculatorFactory { currency: string; filters?: Filter[]; usePortfolioSnapshotCache?: boolean; + subscriptionType?: SubscriptionType; userId: string; }): PortfolioCalculator { switch (calculationType) { @@ -53,6 +56,7 @@ export class PortfolioCalculatorFactory { currency, filters, usePortfolioSnapshotCache, + subscriptionType, userId, configurationService: this.configurationService, currentRateService: this.currentRateService, @@ -68,6 +72,7 @@ export class PortfolioCalculatorFactory { currency, filters, usePortfolioSnapshotCache, + subscriptionType, userId, configurationService: this.configurationService, currentRateService: this.currentRateService, @@ -83,6 +88,7 @@ export class PortfolioCalculatorFactory { currency, filters, usePortfolioSnapshotCache, + subscriptionType, userId, configurationService: this.configurationService, currentRateService: this.currentRateService, @@ -98,6 +104,7 @@ export class PortfolioCalculatorFactory { currency, filters, usePortfolioSnapshotCache, + subscriptionType, userId, configurationService: this.configurationService, currentRateService: this.currentRateService, diff --git a/apps/api/src/app/portfolio/calculator/portfolio-calculator.ts b/apps/api/src/app/portfolio/calculator/portfolio-calculator.ts index eb3d05a6ba..dfbe99c8de 100644 --- a/apps/api/src/app/portfolio/calculator/portfolio-calculator.ts +++ b/apps/api/src/app/portfolio/calculator/portfolio-calculator.ts @@ -20,6 +20,7 @@ import { PORTFOLIO_SNAPSHOT_COMPUTATION_QUEUE_PRIORITY_HIGH, PORTFOLIO_SNAPSHOT_COMPUTATION_QUEUE_PRIORITY_LOW } from '@ghostfolio/common/config'; +import { SubscriptionType } from '@ghostfolio/common/enums'; import { DATE_FORMAT, getAssetProfileIdentifier, @@ -89,6 +90,7 @@ export abstract class PortfolioCalculator { private snapshot: PortfolioSnapshot; private snapshotPromise: Promise; private startDate: Date; + private subscriptionType?: SubscriptionType; private transactionPoints: TransactionPoint[]; private usePortfolioSnapshotCache: boolean; private userId: string; @@ -104,6 +106,7 @@ export abstract class PortfolioCalculator { portfolioSnapshotService, redisCacheService, usePortfolioSnapshotCache = true, + subscriptionType, userId }: { accountBalanceItems: HistoricalDataItem[]; @@ -116,6 +119,7 @@ export abstract class PortfolioCalculator { portfolioSnapshotService: PortfolioSnapshotService; redisCacheService: RedisCacheService; usePortfolioSnapshotCache?: boolean; + subscriptionType?: SubscriptionType; userId: string; }) { this.accountBalanceItems = accountBalanceItems; @@ -179,6 +183,7 @@ export abstract class PortfolioCalculator { this.portfolioSnapshotService = portfolioSnapshotService; this.redisCacheService = redisCacheService; this.usePortfolioSnapshotCache = usePortfolioSnapshotCache; + this.subscriptionType = subscriptionType; this.userId = userId; const { endDate, startDate } = getIntervalFromDateRange({ @@ -286,7 +291,8 @@ export abstract class PortfolioCalculator { dateQuery: { gte: this.startDate, lt: this.endDate - } + }, + subscriptionType: this.subscriptionType }); this.dataProviderInfos = dataProviderInfos; diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy-and-buy.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy-and-buy.spec.ts index a6bedc55d1..932a50c7e2 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy-and-buy.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy-and-buy.spec.ts @@ -59,7 +59,7 @@ describe('PortfolioCalculator', () => { configurationService = new ConfigurationService(); - currentRateService = new CurrentRateService(null, null, null, null); + currentRateService = new CurrentRateService(null, null, null); exchangeRateDataService = new ExchangeRateDataService( null, diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy-and-sell-in-two-activities.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy-and-sell-in-two-activities.spec.ts index dc22cdbab5..4687fe4df0 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy-and-sell-in-two-activities.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy-and-sell-in-two-activities.spec.ts @@ -59,7 +59,7 @@ describe('PortfolioCalculator', () => { configurationService = new ConfigurationService(); - currentRateService = new CurrentRateService(null, null, null, null); + currentRateService = new CurrentRateService(null, null, null); exchangeRateDataService = new ExchangeRateDataService( null, diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy-and-sell.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy-and-sell.spec.ts index 9d55a79ddb..f054410ae3 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy-and-sell.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy-and-sell.spec.ts @@ -59,7 +59,7 @@ describe('PortfolioCalculator', () => { configurationService = new ConfigurationService(); - currentRateService = new CurrentRateService(null, null, null, null); + currentRateService = new CurrentRateService(null, null, null); exchangeRateDataService = new ExchangeRateDataService( null, diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy.spec.ts index 9479352962..eeed8e957e 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy.spec.ts @@ -59,7 +59,7 @@ describe('PortfolioCalculator', () => { configurationService = new ConfigurationService(); - currentRateService = new CurrentRateService(null, null, null, null); + currentRateService = new CurrentRateService(null, null, null); exchangeRateDataService = new ExchangeRateDataService( null, diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btceur-in-base-currency-eur.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btceur-in-base-currency-eur.spec.ts index 1143e3bd27..5c78f8a42b 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btceur-in-base-currency-eur.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btceur-in-base-currency-eur.spec.ts @@ -81,7 +81,7 @@ describe('PortfolioCalculator', () => { configurationService = new ConfigurationService(); - currentRateService = new CurrentRateService(null, null, null, null); + currentRateService = new CurrentRateService(null, null, null); exchangeRateDataService = new ExchangeRateDataService( null, diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btceur.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btceur.spec.ts index e5b0d69d64..0e62bd0a38 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btceur.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btceur.spec.ts @@ -69,7 +69,7 @@ describe('PortfolioCalculator', () => { configurationService = new ConfigurationService(); - currentRateService = new CurrentRateService(null, null, null, null); + currentRateService = new CurrentRateService(null, null, null); exchangeRateDataService = new ExchangeRateDataService( null, diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btcusd-buy-and-sell-partially.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btcusd-buy-and-sell-partially.spec.ts index 50168468ac..c775e81be7 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btcusd-buy-and-sell-partially.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btcusd-buy-and-sell-partially.spec.ts @@ -71,7 +71,7 @@ describe('PortfolioCalculator', () => { configurationService = new ConfigurationService(); - currentRateService = new CurrentRateService(null, null, null, null); + currentRateService = new CurrentRateService(null, null, null); exchangeRateDataService = new ExchangeRateDataService( null, diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btcusd-buy-before-first-market-price.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btcusd-buy-before-first-market-price.spec.ts index cebb3de944..6b3d9ce6d4 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btcusd-buy-before-first-market-price.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btcusd-buy-before-first-market-price.spec.ts @@ -57,7 +57,7 @@ describe('PortfolioCalculator', () => { configurationService = new ConfigurationService(); - currentRateService = new CurrentRateService(null, null, null, null); + currentRateService = new CurrentRateService(null, null, null); exchangeRateDataService = new ExchangeRateDataService( null, diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btcusd-short.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btcusd-short.spec.ts index 93d91c500e..58dc545e49 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btcusd-short.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btcusd-short.spec.ts @@ -69,7 +69,7 @@ describe('PortfolioCalculator', () => { configurationService = new ConfigurationService(); - currentRateService = new CurrentRateService(null, null, null, null); + currentRateService = new CurrentRateService(null, null, null); exchangeRateDataService = new ExchangeRateDataService( null, diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btcusd.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btcusd.spec.ts index 1fa2d12641..4e7f693fc2 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btcusd.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btcusd.spec.ts @@ -69,7 +69,7 @@ describe('PortfolioCalculator', () => { configurationService = new ConfigurationService(); - currentRateService = new CurrentRateService(null, null, null, null); + currentRateService = new CurrentRateService(null, null, null); exchangeRateDataService = new ExchangeRateDataService( null, diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-cash.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-cash.spec.ts index e50b132d24..3a49c91fcd 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-cash.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-cash.spec.ts @@ -118,7 +118,6 @@ describe('PortfolioCalculator', () => { currentRateService = new CurrentRateService( null, dataProviderService, - null, null ); diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-fee.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-fee.spec.ts index 000cc59357..6e9a42e3e8 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-fee.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-fee.spec.ts @@ -59,7 +59,7 @@ describe('PortfolioCalculator', () => { configurationService = new ConfigurationService(); - currentRateService = new CurrentRateService(null, null, null, null); + currentRateService = new CurrentRateService(null, null, null); exchangeRateDataService = new ExchangeRateDataService( null, diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-googl-buy.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-googl-buy.spec.ts index 451973a9ff..8a2b1aec18 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-googl-buy.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-googl-buy.spec.ts @@ -71,7 +71,7 @@ describe('PortfolioCalculator', () => { configurationService = new ConfigurationService(); - currentRateService = new CurrentRateService(null, null, null, null); + currentRateService = new CurrentRateService(null, null, null); exchangeRateDataService = new ExchangeRateDataService( null, diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-jnug-buy-and-sell-and-buy-and-sell.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-jnug-buy-and-sell-and-buy-and-sell.spec.ts index 2cc87934ae..ba2b7d05c6 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-jnug-buy-and-sell-and-buy-and-sell.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-jnug-buy-and-sell-and-buy-and-sell.spec.ts @@ -72,7 +72,7 @@ describe('PortfolioCalculator', () => { configurationService = new ConfigurationService(); - currentRateService = new CurrentRateService(null, null, null, null); + currentRateService = new CurrentRateService(null, null, null); exchangeRateDataService = new ExchangeRateDataService( null, diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-liability.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-liability.spec.ts index 68572c63e1..370205fc98 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-liability.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-liability.spec.ts @@ -59,7 +59,7 @@ describe('PortfolioCalculator', () => { configurationService = new ConfigurationService(); - currentRateService = new CurrentRateService(null, null, null, null); + currentRateService = new CurrentRateService(null, null, null); exchangeRateDataService = new ExchangeRateDataService( null, diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-manual-buy-before-first-market-price.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-manual-buy-before-first-market-price.spec.ts index 70b4016274..135e6f6407 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-manual-buy-before-first-market-price.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-manual-buy-before-first-market-price.spec.ts @@ -57,7 +57,7 @@ describe('PortfolioCalculator', () => { configurationService = new ConfigurationService(); - currentRateService = new CurrentRateService(null, null, null, null); + currentRateService = new CurrentRateService(null, null, null); exchangeRateDataService = new ExchangeRateDataService( null, diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-msft-buy-and-sell.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-msft-buy-and-sell.spec.ts index 53236f007f..228fdd542a 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-msft-buy-and-sell.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-msft-buy-and-sell.spec.ts @@ -56,7 +56,8 @@ describe('PortfolioCalculator', () => { RedisCacheServiceMock.reset(); configurationService = new ConfigurationService(); - currentRateService = new CurrentRateService(null, null, null, null); + currentRateService = new CurrentRateService(null, null, null); + exchangeRateDataService = new ExchangeRateDataService( null, null, diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-msft-buy-from-two-data-sources.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-msft-buy-from-two-data-sources.spec.ts index 0aa3a4be3e..00b3ce4af1 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-msft-buy-from-two-data-sources.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-msft-buy-from-two-data-sources.spec.ts @@ -71,7 +71,7 @@ describe('PortfolioCalculator', () => { configurationService = new ConfigurationService(); - currentRateService = new CurrentRateService(null, null, null, null); + currentRateService = new CurrentRateService(null, null, null); exchangeRateDataService = new ExchangeRateDataService( null, diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-msft-buy-with-dividend.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-msft-buy-with-dividend.spec.ts index f6598f22b8..39994a8e58 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-msft-buy-with-dividend.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-msft-buy-with-dividend.spec.ts @@ -59,7 +59,7 @@ describe('PortfolioCalculator', () => { configurationService = new ConfigurationService(); - currentRateService = new CurrentRateService(null, null, null, null); + currentRateService = new CurrentRateService(null, null, null); exchangeRateDataService = new ExchangeRateDataService( null, diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-no-activities.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-no-activities.spec.ts index fb7a434771..f248114fe4 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-no-activities.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-no-activities.spec.ts @@ -54,7 +54,7 @@ describe('PortfolioCalculator', () => { configurationService = new ConfigurationService(); - currentRateService = new CurrentRateService(null, null, null, null); + currentRateService = new CurrentRateService(null, null, null); exchangeRateDataService = new ExchangeRateDataService( null, diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-novn-buy-and-sell-partially.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-novn-buy-and-sell-partially.spec.ts index 8c3858dcd6..3f498ae4f1 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-novn-buy-and-sell-partially.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-novn-buy-and-sell-partially.spec.ts @@ -72,7 +72,7 @@ describe('PortfolioCalculator', () => { configurationService = new ConfigurationService(); - currentRateService = new CurrentRateService(null, null, null, null); + currentRateService = new CurrentRateService(null, null, null); exchangeRateDataService = new ExchangeRateDataService( null, diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-novn-buy-and-sell.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-novn-buy-and-sell.spec.ts index f491b5025b..896cb6c991 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-novn-buy-and-sell.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-novn-buy-and-sell.spec.ts @@ -72,7 +72,7 @@ describe('PortfolioCalculator', () => { configurationService = new ConfigurationService(); - currentRateService = new CurrentRateService(null, null, null, null); + currentRateService = new CurrentRateService(null, null, null); exchangeRateDataService = new ExchangeRateDataService( null, diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-stock-split.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-stock-split.spec.ts index c71a3bda11..e7e2371a4d 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-stock-split.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-stock-split.spec.ts @@ -60,7 +60,8 @@ describe('RoaiPortfolioCalculator stock splits', () => { RedisCacheServiceMock.reset(); configurationService = new ConfigurationService(); - currentRateService = new CurrentRateService(null, null, null, null); + currentRateService = new CurrentRateService(null, null, null); + exchangeRateDataService = new ExchangeRateDataService( null, null, diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-valuable.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-valuable.spec.ts index 3681bc7547..7326d551bb 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-valuable.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-valuable.spec.ts @@ -59,7 +59,7 @@ describe('PortfolioCalculator', () => { configurationService = new ConfigurationService(); - currentRateService = new CurrentRateService(null, null, null, null); + currentRateService = new CurrentRateService(null, null, null); exchangeRateDataService = new ExchangeRateDataService( null, diff --git a/apps/api/src/app/portfolio/current-rate.service.spec.ts b/apps/api/src/app/portfolio/current-rate.service.spec.ts index ea93e8b4fe..4bb3a1b8cf 100644 --- a/apps/api/src/app/portfolio/current-rate.service.spec.ts +++ b/apps/api/src/app/portfolio/current-rate.service.spec.ts @@ -119,8 +119,7 @@ describe('CurrentRateService', () => { currentRateService = new CurrentRateService( null, dataProviderService, - marketDataService, - null + marketDataService ); }); diff --git a/apps/api/src/app/portfolio/current-rate.service.ts b/apps/api/src/app/portfolio/current-rate.service.ts index 9cfeda3bdc..66119a3c63 100644 --- a/apps/api/src/app/portfolio/current-rate.service.ts +++ b/apps/api/src/app/portfolio/current-rate.service.ts @@ -11,10 +11,8 @@ import { DataProviderInfo, ResponseError } from '@ghostfolio/common/interfaces'; -import type { RequestWithUser } from '@ghostfolio/common/types'; -import { Inject, Injectable } from '@nestjs/common'; -import { REQUEST } from '@nestjs/core'; +import { Injectable } from '@nestjs/common'; import { isBefore, isToday } from 'date-fns'; import { isEmpty, uniqBy } from 'lodash'; @@ -29,15 +27,14 @@ export class CurrentRateService { public constructor( private readonly activitiesService: ActivitiesService, private readonly dataProviderService: DataProviderService, - private readonly marketDataService: MarketDataService, - @Inject(REQUEST) private readonly request: RequestWithUser + private readonly marketDataService: MarketDataService ) {} @LogPerformance - // TODO: Pass user instead of using this.request.user public async getValues({ dataGatheringItems, - dateQuery + dateQuery, + subscriptionType }: GetValuesParams): Promise { const dataProviderInfos: DataProviderInfo[] = []; @@ -52,8 +49,8 @@ export class CurrentRateService { if (includesToday) { const quotes = await this.dataProviderService.getQuotes({ - items: dataGatheringItems, - user: this.request?.user + subscriptionType, + items: dataGatheringItems }); for (const { dataSource, symbol } of dataGatheringItems) { diff --git a/apps/api/src/app/portfolio/interfaces/get-values-params.interface.ts b/apps/api/src/app/portfolio/interfaces/get-values-params.interface.ts index ffb74ee9b2..e74c501be6 100644 --- a/apps/api/src/app/portfolio/interfaces/get-values-params.interface.ts +++ b/apps/api/src/app/portfolio/interfaces/get-values-params.interface.ts @@ -1,8 +1,10 @@ import { DataGatheringItem } from '@ghostfolio/api/services/interfaces/interfaces'; +import { SubscriptionType } from '@ghostfolio/common/enums'; import { DateQuery } from './date-query.interface'; export interface GetValuesParams { dataGatheringItems: DataGatheringItem[]; dateQuery: DateQuery; + subscriptionType?: SubscriptionType; } diff --git a/apps/api/src/app/portfolio/portfolio.service.ts b/apps/api/src/app/portfolio/portfolio.service.ts index 60dab50329..fd941286c2 100644 --- a/apps/api/src/app/portfolio/portfolio.service.ts +++ b/apps/api/src/app/portfolio/portfolio.service.ts @@ -546,7 +546,8 @@ export class PortfolioService { filters, userId, calculationType: this.getUserPerformanceCalculationType(user), - currency: userCurrency + currency: userCurrency, + subscriptionType: user.subscription?.type }); const { historicalData } = await portfolioCalculator.getSnapshot(); @@ -633,7 +634,8 @@ export class PortfolioService { userId, calculationType: this.getUserPerformanceCalculationType(user), currency: userCurrency, - filters: portfolioSnapshotFilters + filters: portfolioSnapshotFilters, + subscriptionType: user.subscription?.type }); const { createdAt, currentValueInBaseCurrency, hasErrors, positions } = @@ -963,7 +965,8 @@ export class PortfolioService { calculationType: this.getUserPerformanceCalculationType(user), currency: userCurrency, filters: isExcludedHolding ? holdingFilters : undefined, - usePortfolioSnapshotCache: !isExcludedHolding + usePortfolioSnapshotCache: !isExcludedHolding, + subscriptionType: user.subscription?.type }); const transactionPoints = portfolioCalculator.getTransactionPoints(); @@ -1218,7 +1221,8 @@ export class PortfolioService { filters, userId, calculationType: this.getUserPerformanceCalculationType(user), - currency: userCurrency + currency: userCurrency, + subscriptionType: user.subscription?.type }); const { errors, hasErrors, historicalData } = 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 0417315d48..87c1e85c61 100644 --- a/apps/api/src/services/data-provider/data-provider.service.ts +++ b/apps/api/src/services/data-provider/data-provider.service.ts @@ -594,13 +594,13 @@ export class DataProviderService implements OnModuleInit { public async getQuotes({ items, requestTimeout, - useCache = true, - user + subscriptionType, + useCache = true }: { items: AssetProfileIdentifier[]; requestTimeout?: number; + subscriptionType?: SubscriptionType; useCache?: boolean; - user?: UserWithSettings; }): Promise<{ [assetProfileIdentifier: string]: DataProviderResponse; }> { @@ -687,7 +687,7 @@ export class DataProviderService implements OnModuleInit { } else if ( dataProvider.getDataProviderInfo().isPremium && this.configurationService.get('ENABLE_FEATURE_SUBSCRIPTION') && - user?.subscription?.type === SubscriptionType.Basic + subscriptionType === SubscriptionType.Basic ) { // Skip symbols of Premium data providers for users without subscription return false; From da642cd9283c1107886db15b190021806bc88bcf Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Mon, 14 Sep 2026 10:43:24 +0200 Subject: [PATCH 46/50] Task/upgrade bull-board to version 9.8.0 (#7866) * Update bull-board to version 9.8.0 * Update changelog --- CHANGELOG.md | 1 + package-lock.json | 46 +++++++++++++++++++++++----------------------- package.json | 6 +++--- 3 files changed, 27 insertions(+), 26 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8368061f1d..bad7a2b567 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,6 +18,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Improved the style of the selector in the benchmark comparator - Improved the language localization for Chinese (`zh`) - Improved the language localization for German (`de`) +- Upgraded `bull-board` from version `9.5.0` to `9.8.0` - Upgraded `papaparse` from version `5.5.3` to `5.7.0` ## 3.69.0 - 2026-09-07 diff --git a/package-lock.json b/package-lock.json index c1c7831963..882eaf46c1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -21,9 +21,9 @@ "@angular/platform-browser-dynamic": "22.1.2", "@angular/router": "22.1.2", "@angular/service-worker": "22.1.2", - "@bull-board/api": "9.5.0", - "@bull-board/express": "9.5.0", - "@bull-board/nestjs": "9.5.0", + "@bull-board/api": "9.8.0", + "@bull-board/express": "9.8.0", + "@bull-board/nestjs": "9.8.0", "@codewithdan/observable-store": "2.2.15", "@date-fns/utc": "2.1.1", "@internationalized/number": "3.6.7", @@ -6166,15 +6166,15 @@ "license": "(Apache-2.0 AND BSD-3-Clause)" }, "node_modules/@bull-board/api": { - "version": "9.5.0", - "resolved": "https://registry.npmjs.org/@bull-board/api/-/api-9.5.0.tgz", - "integrity": "sha512-fmOyOy1lZiLZFyDJjI2osZrpTMO+JSgmGNhDf3MrmOf3oF084o6w0wpGefs0OqEfyUT1F5/1arE5AwmEUuxZ+A==", + "version": "9.8.0", + "resolved": "https://registry.npmjs.org/@bull-board/api/-/api-9.8.0.tgz", + "integrity": "sha512-+qmJ19pBrOSZCPLbN93IijoPEpx5DZBWkwqUBk/FgQObvSyHB2OJvuwvvi/TaujTCbRH1eiYPc4USp9dTlNEug==", "license": "MIT", "dependencies": { "redis-info": "^3.1.0" }, "peerDependencies": { - "@bull-board/ui": "9.5.0", + "@bull-board/ui": "9.8.0", "bull": "^4.16.5", "bullmq": "^5.56.0 || ^6.0.0" }, @@ -6188,13 +6188,13 @@ } }, "node_modules/@bull-board/express": { - "version": "9.5.0", - "resolved": "https://registry.npmjs.org/@bull-board/express/-/express-9.5.0.tgz", - "integrity": "sha512-EKeXQzeb1zF9ra0hfYfPArU1JlWKl2vyL4Rb3gQW0XzU7SkEFgYm3727gDrQZdU8dvc5g/FLEqc0dr6UkDUHhg==", + "version": "9.8.0", + "resolved": "https://registry.npmjs.org/@bull-board/express/-/express-9.8.0.tgz", + "integrity": "sha512-nYywx44PHHq7ybgQZySrDiM9B2Yc1NSywWm+zdjP8UyVGrvgooZ0UsT+F58ZF4wQ2QGqYRCTNb+YbPvBAWWjBg==", "license": "MIT", "dependencies": { - "@bull-board/api": "9.5.0", - "@bull-board/ui": "9.5.0", + "@bull-board/api": "9.8.0", + "@bull-board/ui": "9.8.0", "ejs": "^6.0.1", "express": "^5.2.1" } @@ -6212,26 +6212,26 @@ } }, "node_modules/@bull-board/nestjs": { - "version": "9.5.0", - "resolved": "https://registry.npmjs.org/@bull-board/nestjs/-/nestjs-9.5.0.tgz", - "integrity": "sha512-0P/Ru3cbOnf6GwnDGv4iPJ/NEjbcaicdpYMISpp6K7JZ24RVkCnmoUIKt8KbQdjZGqfH2EWmyIRC2WhiUE3T+g==", + "version": "9.8.0", + "resolved": "https://registry.npmjs.org/@bull-board/nestjs/-/nestjs-9.8.0.tgz", + "integrity": "sha512-Ooht3SBI6/3kiqrQ8HXQf9cXNH7C7NQoCupA9F0FGGnozdMUfS4+c8IXCwpcTuOp6x1+o1ZAqY6bckPiYdngAg==", "license": "MIT", "peerDependencies": { - "@bull-board/api": "^9.5.0", - "@nestjs/bull-shared": "^10.0.0 || ^11.0.0", - "@nestjs/common": "^9.0.0 || ^10.0.0 || ^11.0.0", - "@nestjs/core": "^9.0.0 || ^10.0.0 || ^11.0.0", + "@bull-board/api": "^9.8.0", + "@nestjs/bull-shared": "^10.0.0 || ^11.0.0 || ^12.0.0", + "@nestjs/common": "^9.0.0 || ^10.0.0 || ^11.0.0 || ^12.0.0", + "@nestjs/core": "^9.0.0 || ^10.0.0 || ^11.0.0 || ^12.0.0", "reflect-metadata": "^0.1.13 || ^0.2.0", "rxjs": "^7.8.1" } }, "node_modules/@bull-board/ui": { - "version": "9.5.0", - "resolved": "https://registry.npmjs.org/@bull-board/ui/-/ui-9.5.0.tgz", - "integrity": "sha512-qrq0e906M8Ps/mV3bQXmj7EXJWLaFs5mNz+oBoLR/7EShBi5YooROzQ/SEFFedg/L9h6QWDWJ9Ph0AH7NrG9uw==", + "version": "9.8.0", + "resolved": "https://registry.npmjs.org/@bull-board/ui/-/ui-9.8.0.tgz", + "integrity": "sha512-WE6imvISwGDI/E1i7H1M4mQ/NI99sj9u/XIUT5QgbQlWAbys1N4/YdfPktwK6eyKynPMPHJqcAqwRDJDzlceOA==", "license": "MIT", "dependencies": { - "@bull-board/api": "9.5.0" + "@bull-board/api": "9.8.0" } }, "node_modules/@cacheable/utils": { diff --git a/package.json b/package.json index 63547ef0d8..d29fedff50 100644 --- a/package.json +++ b/package.json @@ -65,9 +65,9 @@ "@angular/platform-browser-dynamic": "22.1.2", "@angular/router": "22.1.2", "@angular/service-worker": "22.1.2", - "@bull-board/api": "9.5.0", - "@bull-board/express": "9.5.0", - "@bull-board/nestjs": "9.5.0", + "@bull-board/api": "9.8.0", + "@bull-board/express": "9.8.0", + "@bull-board/nestjs": "9.8.0", "@codewithdan/observable-store": "2.2.15", "@date-fns/utc": "2.1.1", "@internationalized/number": "3.6.7", From c93865bfae67bb1b1a78f19b8ec16d00f32d8559 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Mon, 14 Sep 2026 10:43:50 +0200 Subject: [PATCH 47/50] Task/upgrade zone.js to version 0.16.3 (#7862) * Update zone.js to version 0.16.3 * Update changelog --- CHANGELOG.md | 1 + package-lock.json | 8 ++++---- package.json | 2 +- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index bad7a2b567..aeedad30ee 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 - Improved the language localization for German (`de`) - Upgraded `bull-board` from version `9.5.0` to `9.8.0` - Upgraded `papaparse` from version `5.5.3` to `5.7.0` +- Upgraded `zone.js` from version `0.16.2` to `0.16.3` ## 3.69.0 - 2026-09-07 diff --git a/package-lock.json b/package-lock.json index 882eaf46c1..5ae5879f2e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -106,7 +106,7 @@ "uuid": "14.0.2", "yahoo-finance2": "4.0.2", "zod": "4.5.4", - "zone.js": "0.16.2" + "zone.js": "0.16.3" }, "devDependencies": { "@angular-devkit/build-angular": "22.1.4", @@ -37253,9 +37253,9 @@ } }, "node_modules/zone.js": { - "version": "0.16.2", - "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.16.2.tgz", - "integrity": "sha512-Eky7p2Z1Ig3NnbfodSPoARCjKBSTFMnE/ACsP1L/XJEfY4SdOFce19BsUCWVwL6K5ABZFy5J3bjcMWffX+YM3Q==", + "version": "0.16.3", + "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.16.3.tgz", + "integrity": "sha512-ihXL9+vhYyEhXz4TDNpHeAOZN9FVrbog0Il64OIEI28UP/n5AaI6gsccRuOHBfx+206agzyoK527bYIO0Foy6A==", "license": "MIT" } } diff --git a/package.json b/package.json index d29fedff50..67046616bb 100644 --- a/package.json +++ b/package.json @@ -150,7 +150,7 @@ "uuid": "14.0.2", "yahoo-finance2": "4.0.2", "zod": "4.5.4", - "zone.js": "0.16.2" + "zone.js": "0.16.3" }, "devDependencies": { "@angular-devkit/build-angular": "22.1.4", From 5c6b2958a37baa0df3d215821333d8c0b2f3da54 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Mon, 14 Sep 2026 13:40:55 +0200 Subject: [PATCH 48/50] Task/upgrade @codewithdan/observable-store to version 3 (#7872) * Update @codewithdan/observable-store to version 3.0.0 * Update changelog --- CHANGELOG.md | 1 + package-lock.json | 8 ++++---- package.json | 2 +- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index aeedad30ee..a3bb71d9a5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,6 +18,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Improved the style of the selector in the benchmark comparator - Improved the language localization for Chinese (`zh`) - Improved the language localization for German (`de`) +- Upgraded `@codewithdan/observable-store` from version `2.2.15` to `3.0.0` - Upgraded `bull-board` from version `9.5.0` to `9.8.0` - Upgraded `papaparse` from version `5.5.3` to `5.7.0` - Upgraded `zone.js` from version `0.16.2` to `0.16.3` diff --git a/package-lock.json b/package-lock.json index 5ae5879f2e..d574c46674 100644 --- a/package-lock.json +++ b/package-lock.json @@ -24,7 +24,7 @@ "@bull-board/api": "9.8.0", "@bull-board/express": "9.8.0", "@bull-board/nestjs": "9.8.0", - "@codewithdan/observable-store": "2.2.15", + "@codewithdan/observable-store": "3.0.0", "@date-fns/utc": "2.1.1", "@internationalized/number": "3.6.7", "@ionic/angular": "8.8.12", @@ -6246,9 +6246,9 @@ } }, "node_modules/@codewithdan/observable-store": { - "version": "2.2.15", - "resolved": "https://registry.npmjs.org/@codewithdan/observable-store/-/observable-store-2.2.15.tgz", - "integrity": "sha512-LVCSMZzTCvoDo5n7YDmtIIEhTmvJ8O21k36Vwu/A4kumdXQ1YVs4sKoSK3vlINZPL4AYY2MRsBVtvre4QIETFw==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@codewithdan/observable-store/-/observable-store-3.0.0.tgz", + "integrity": "sha512-OyHzU29/nszIs0+340uQYjA2Ftx0eGmU3TyLYK8/j1IW7pv1Qx/W68dWcfC26hV67SVschPpp5v/qKudx9Marg==", "license": "MIT", "peerDependencies": { "rxjs": ">=6.4.0 <8" diff --git a/package.json b/package.json index 67046616bb..59ce5ea569 100644 --- a/package.json +++ b/package.json @@ -68,7 +68,7 @@ "@bull-board/api": "9.8.0", "@bull-board/express": "9.8.0", "@bull-board/nestjs": "9.8.0", - "@codewithdan/observable-store": "2.2.15", + "@codewithdan/observable-store": "3.0.0", "@date-fns/utc": "2.1.1", "@internationalized/number": "3.6.7", "@ionic/angular": "8.8.12", From 0e1b77bcf7e6ab139ed225a5f32cafd52ffd434f Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Mon, 14 Sep 2026 14:28:05 +0200 Subject: [PATCH 49/50] Feature/add holdings to overview (#7861) * Add holdings * Update changelog --- CHANGELOG.md | 1 + .../home-overview/home-overview.component.ts | 50 +++++++++++++++-- .../home-overview/home-overview.html | 53 +++++++++++++------ .../home-overview/home-overview.scss | 14 +++++ .../holdings-table.component.html | 3 +- 5 files changed, 100 insertions(+), 21 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a3bb71d9a5..3de6f69de8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added +- Added the holdings table to the overview tab of the home page on desktop (experimental) - Added a tool to search for asset profiles to the server of the Model Context Protocol (MCP) (experimental) ### Changed diff --git a/apps/client/src/app/components/home-overview/home-overview.component.ts b/apps/client/src/app/components/home-overview/home-overview.component.ts index de83a3228d..7715ef5719 100644 --- a/apps/client/src/app/components/home-overview/home-overview.component.ts +++ b/apps/client/src/app/components/home-overview/home-overview.component.ts @@ -5,17 +5,20 @@ import { UserService } from '@ghostfolio/client/services/user/user.service'; import { DEFAULT_CURRENCY, DEFAULT_DATE_RANGE, + DEFAULT_LOCALE, NUMERICAL_PRECISION_THRESHOLD_6_FIGURES } from '@ghostfolio/common/config'; import { AssetProfileIdentifier, LineChartItem, PortfolioPerformance, + PortfolioPosition, User } from '@ghostfolio/common/interfaces'; import { hasPermission, permissions } from '@ghostfolio/common/permissions'; import { internalRoutes } from '@ghostfolio/common/routes/routes'; import { hasScope, scopes } from '@ghostfolio/common/scopes'; +import { GfHoldingsTableComponent } from '@ghostfolio/ui/holdings-table'; import { GfLineChartComponent } from '@ghostfolio/ui/line-chart'; import { DataService } from '@ghostfolio/ui/services'; @@ -30,15 +33,18 @@ import { } from '@angular/core'; import { takeUntilDestroyed } from '@angular/core/rxjs-interop'; import { MatButtonModule } from '@angular/material/button'; -import { RouterModule } from '@angular/router'; +import { MatCardModule } from '@angular/material/card'; +import { Router, RouterModule } from '@angular/router'; import { DeviceDetectorService } from 'ngx-device-detector'; @Component({ changeDetection: ChangeDetectionStrategy.OnPush, imports: [ + GfHoldingsTableComponent, GfLineChartComponent, GfPortfolioPerformanceComponent, MatButtonModule, + MatCardModule, RouterModule ], selector: 'gf-home-overview', @@ -46,9 +52,13 @@ import { DeviceDetectorService } from 'ngx-device-detector'; templateUrl: './home-overview.html' }) export class GfHomeOverviewComponent implements OnInit { + protected readonly DEFAULT_LOCALE = DEFAULT_LOCALE; protected readonly errors = signal([]); protected readonly hasImpersonationId = signal(false); protected readonly historicalDataItems = signal(null); + protected readonly holdings = signal( + undefined + ); protected readonly isLoadingPerformance = signal(true); protected readonly performance = signal(null); protected readonly performanceLabel = $localize`Performance`; @@ -77,13 +87,24 @@ export class GfHomeOverviewComponent implements OnInit { const user = this.user(); return user - ? !user.settings.isRestrictedView && user.settings.viewMode !== 'ZEN' + ? !user?.settings?.isRestrictedView && user?.settings?.viewMode !== 'ZEN' : false; }); + protected readonly showExperimentalHoldings = computed(() => { + const user = this.user(); + + return ( + user?.settings?.isExperimentalFeatures === true && + user?.settings?.viewMode !== 'ZEN' + ); + }); + protected readonly unit = computed(() => { + const user = this.user(); + return this.showDetails() - ? (this.user()?.settings?.baseCurrency ?? DEFAULT_CURRENCY) + ? (user?.settings?.baseCurrency ?? DEFAULT_CURRENCY) : '%'; }); @@ -94,6 +115,7 @@ export class GfHomeOverviewComponent implements OnInit { ImpersonationStorageService ); private readonly layoutService = inject(LayoutService); + private readonly router = inject(Router); private readonly userService = inject(UserService); public constructor() { @@ -122,10 +144,32 @@ export class GfHomeOverviewComponent implements OnInit { }); } + protected onHoldingClicked({ dataSource, symbol }: AssetProfileIdentifier) { + if (dataSource && symbol) { + this.router.navigate([], { + queryParams: { dataSource, symbol, holdingDetailDialog: true } + }); + } + } + private update() { this.historicalDataItems.set(null); this.isLoadingPerformance.set(true); + if (this.showExperimentalHoldings()) { + this.holdings.set(undefined); + + this.dataService + .fetchPortfolioHoldings({ + filters: [{ id: 'ACTIVE', type: 'HOLDING_TYPE' }], + range: this.user()?.settings?.dateRange + }) + .pipe(takeUntilDestroyed(this.destroyRef)) + .subscribe(({ holdings }) => { + this.holdings.set(holdings); + }); + } + this.dataService .fetchPortfolioPerformance({ range: this.user()?.settings?.dateRange ?? DEFAULT_DATE_RANGE diff --git a/apps/client/src/app/components/home-overview/home-overview.html b/apps/client/src/app/components/home-overview/home-overview.html index 90a628a170..7648777463 100644 --- a/apps/client/src/app/components/home-overview/home-overview.html +++ b/apps/client/src/app/components/home-overview/home-overview.html @@ -1,5 +1,5 @@
@if ( !hasImpersonationId() && @@ -61,8 +61,8 @@
} @else { -
-
+
+
+
+
+ +
+
-
-
-
- -
+ @if (showExperimentalHoldings()) { +
+ + + Holdings + + + + + +
+ }
}
diff --git a/apps/client/src/app/components/home-overview/home-overview.scss b/apps/client/src/app/components/home-overview/home-overview.scss index 3a692b28d6..6d0484296f 100644 --- a/apps/client/src/app/components/home-overview/home-overview.scss +++ b/apps/client/src/app/components/home-overview/home-overview.scss @@ -30,6 +30,20 @@ } } + mat-card { + &.holdings { + --mat-card-title-text-size: var(--mat-sys-title-medium-size); + + mat-card-content { + scrollbar-width: none; + + &::-webkit-scrollbar { + display: none; + } + } + } + } + .introduction { max-width: 50rem; } diff --git a/libs/ui/src/lib/holdings-table/holdings-table.component.html b/libs/ui/src/lib/holdings-table/holdings-table.component.html index 2ed9484780..5bc76f646e 100644 --- a/libs/ui/src/lib/holdings-table/holdings-table.component.html +++ b/libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -208,7 +208,8 @@ @if (isLoading()) {