From 5188544c9b52bb170e5cd91c5aac6abf72916e41 Mon Sep 17 00:00:00 2001 From: H_S <81474463+HarjobandeepSingh@users.noreply.github.com> Date: Fri, 17 Oct 2025 23:27:41 +0530 Subject: [PATCH 01/92] Task/migrate blog page component to standalone (#5742) * Migrate blog page component to standalone * Update changelog --- CHANGELOG.md | 1 + apps/client/src/app/app-routing.module.ts | 2 +- .../src/app/pages/blog/blog-page.component.ts | 13 +++++++++---- .../client/src/app/pages/blog/blog-page.module.ts | 14 -------------- ...page-routing.module.ts => blog-page.routes.ts} | 15 ++++----------- 5 files changed, 15 insertions(+), 30 deletions(-) delete mode 100644 apps/client/src/app/pages/blog/blog-page.module.ts rename apps/client/src/app/pages/blog/{blog-page-routing.module.ts => blog-page.routes.ts} (95%) diff --git a/CHANGELOG.md b/CHANGELOG.md index 758898cee..b97b37ae2 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 currency validation in the search functionality of the data provider service - Optimized the get quotes functionality by utilizing the asset profile resolutions in the _Financial Modeling Prep_ service - Extracted the footer to a component +- Refactored the blog page component to standalone - Improved the portfolio calculator unit tests to load the user currency from the exported file ### Fixed diff --git a/apps/client/src/app/app-routing.module.ts b/apps/client/src/app/app-routing.module.ts index 0ceee3725..fb045a174 100644 --- a/apps/client/src/app/app-routing.module.ts +++ b/apps/client/src/app/app-routing.module.ts @@ -48,7 +48,7 @@ const routes: Routes = [ { path: publicRoutes.blog.path, loadChildren: () => - import('./pages/blog/blog-page.module').then((m) => m.BlogPageModule) + import('./pages/blog/blog-page.routes').then((m) => m.routes) }, { canActivate: [AuthGuard], diff --git a/apps/client/src/app/pages/blog/blog-page.component.ts b/apps/client/src/app/pages/blog/blog-page.component.ts index 65a867f65..7599a3358 100644 --- a/apps/client/src/app/pages/blog/blog-page.component.ts +++ b/apps/client/src/app/pages/blog/blog-page.component.ts @@ -1,19 +1,24 @@ import { DataService } from '@ghostfolio/client/services/data.service'; import { hasPermission, permissions } from '@ghostfolio/common/permissions'; -import { Component, OnDestroy } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { Component, CUSTOM_ELEMENTS_SCHEMA, OnDestroy } from '@angular/core'; +import { MatCardModule } from '@angular/material/card'; +import { RouterModule } from '@angular/router'; +import { IonIcon } from '@ionic/angular/standalone'; import { addIcons } from 'ionicons'; import { chevronForwardOutline } from 'ionicons/icons'; import { Subject } from 'rxjs'; @Component({ host: { class: 'page' }, + imports: [CommonModule, IonIcon, MatCardModule, RouterModule], + schemas: [CUSTOM_ELEMENTS_SCHEMA], selector: 'gf-blog-page', styleUrls: ['./blog-page.scss'], - templateUrl: './blog-page.html', - standalone: false + templateUrl: './blog-page.html' }) -export class BlogPageComponent implements OnDestroy { +export class GfBlogPageComponent implements OnDestroy { public hasPermissionForSubscription: boolean; private unsubscribeSubject = new Subject(); diff --git a/apps/client/src/app/pages/blog/blog-page.module.ts b/apps/client/src/app/pages/blog/blog-page.module.ts deleted file mode 100644 index 37925e494..000000000 --- a/apps/client/src/app/pages/blog/blog-page.module.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { CommonModule } from '@angular/common'; -import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core'; -import { MatCardModule } from '@angular/material/card'; -import { IonIcon } from '@ionic/angular/standalone'; - -import { BlogPageRoutingModule } from './blog-page-routing.module'; -import { BlogPageComponent } from './blog-page.component'; - -@NgModule({ - declarations: [BlogPageComponent], - imports: [BlogPageRoutingModule, CommonModule, IonIcon, MatCardModule], - schemas: [CUSTOM_ELEMENTS_SCHEMA] -}) -export class BlogPageModule {} diff --git a/apps/client/src/app/pages/blog/blog-page-routing.module.ts b/apps/client/src/app/pages/blog/blog-page.routes.ts similarity index 95% rename from apps/client/src/app/pages/blog/blog-page-routing.module.ts rename to apps/client/src/app/pages/blog/blog-page.routes.ts index 9b352b7a8..2b5a4be64 100644 --- a/apps/client/src/app/pages/blog/blog-page-routing.module.ts +++ b/apps/client/src/app/pages/blog/blog-page.routes.ts @@ -1,15 +1,14 @@ import { AuthGuard } from '@ghostfolio/client/core/auth.guard'; import { publicRoutes } from '@ghostfolio/common/routes/routes'; -import { NgModule } from '@angular/core'; -import { RouterModule, Routes } from '@angular/router'; +import { Routes } from '@angular/router'; -import { BlogPageComponent } from './blog-page.component'; +import { GfBlogPageComponent } from './blog-page.component'; -const routes: Routes = [ +export const routes: Routes = [ { canActivate: [AuthGuard], - component: BlogPageComponent, + component: GfBlogPageComponent, path: '', title: publicRoutes.blog.title }, @@ -212,9 +211,3 @@ const routes: Routes = [ title: 'Hacktoberfest 2025' } ]; - -@NgModule({ - imports: [RouterModule.forChild(routes)], - exports: [RouterModule] -}) -export class BlogPageRoutingModule {} From 5bcc2e9648c86109cac7b5a35e0625971e263b6a Mon Sep 17 00:00:00 2001 From: Umesh Pal <127204670+72umesh@users.noreply.github.com> Date: Fri, 17 Oct 2025 23:33:08 +0530 Subject: [PATCH 02/92] Task/refactor PortfolioDividends interface to PortfolioDividendsResponse interface (#5773) * Refactor PortfolioDividends to PortfolioDividendsResponse --- apps/api/src/app/portfolio/portfolio.controller.ts | 4 ++-- apps/client/src/app/services/data.service.ts | 11 +++++++---- libs/common/src/lib/interfaces/index.ts | 4 ++-- .../lib/interfaces/portfolio-dividends.interface.ts | 5 ----- .../portfolio-dividends-response.interface.ts | 5 +++++ 5 files changed, 16 insertions(+), 13 deletions(-) delete mode 100644 libs/common/src/lib/interfaces/portfolio-dividends.interface.ts create mode 100644 libs/common/src/lib/interfaces/responses/portfolio-dividends-response.interface.ts diff --git a/apps/api/src/app/portfolio/portfolio.controller.ts b/apps/api/src/app/portfolio/portfolio.controller.ts index f6f8e3d80..7d8ceecda 100644 --- a/apps/api/src/app/portfolio/portfolio.controller.ts +++ b/apps/api/src/app/portfolio/portfolio.controller.ts @@ -19,7 +19,7 @@ import { } from '@ghostfolio/common/config'; import { PortfolioDetails, - PortfolioDividends, + PortfolioDividendsResponse, PortfolioHoldingResponse, PortfolioHoldingsResponse, PortfolioInvestments, @@ -305,7 +305,7 @@ export class PortfolioController { @Query('range') dateRange: DateRange = 'max', @Query('symbol') filterBySymbol?: string, @Query('tags') filterByTags?: string - ): Promise { + ): Promise { const filters = this.apiService.buildFiltersFromQueryParams({ filterByAccounts, filterByAssetClasses, diff --git a/apps/client/src/app/services/data.service.ts b/apps/client/src/app/services/data.service.ts index c2678924b..0b5c4b253 100644 --- a/apps/client/src/app/services/data.service.ts +++ b/apps/client/src/app/services/data.service.ts @@ -42,7 +42,7 @@ import { MarketDataOfMarketsResponse, OAuthResponse, PortfolioDetails, - PortfolioDividends, + PortfolioDividendsResponse, PortfolioHoldingResponse, PortfolioHoldingsResponse, PortfolioInvestments, @@ -270,9 +270,12 @@ export class DataService { params = params.append('groupBy', groupBy); params = params.append('range', range); - return this.http.get('/api/v1/portfolio/dividends', { - params - }); + return this.http.get( + '/api/v1/portfolio/dividends', + { + params + } + ); } public fetchDividendsImport({ dataSource, symbol }: AssetProfileIdentifier) { diff --git a/libs/common/src/lib/interfaces/index.ts b/libs/common/src/lib/interfaces/index.ts index 1da2236e8..d38502945 100644 --- a/libs/common/src/lib/interfaces/index.ts +++ b/libs/common/src/lib/interfaces/index.ts @@ -30,7 +30,6 @@ import type { LookupItem } from './lookup-item.interface'; import type { MarketData } from './market-data.interface'; import type { PortfolioChart } from './portfolio-chart.interface'; import type { PortfolioDetails } from './portfolio-details.interface'; -import type { PortfolioDividends } from './portfolio-dividends.interface'; import type { PortfolioInvestments } from './portfolio-investments.interface'; import type { PortfolioPerformance } from './portfolio-performance.interface'; import type { PortfolioPosition } from './portfolio-position.interface'; @@ -56,6 +55,7 @@ import type { LookupResponse } from './responses/lookup-response.interface'; import type { MarketDataDetailsResponse } from './responses/market-data-details-response.interface'; import type { MarketDataOfMarketsResponse } from './responses/market-data-of-markets-response.interface'; import type { OAuthResponse } from './responses/oauth-response.interface'; +import type { PortfolioDividendsResponse } from './responses/portfolio-dividends-response.interface'; import { PortfolioHoldingResponse } from './responses/portfolio-holding-response.interface'; import type { PortfolioHoldingsResponse } from './responses/portfolio-holdings-response.interface'; import type { PortfolioPerformanceResponse } from './responses/portfolio-performance-response.interface'; @@ -122,7 +122,7 @@ export { OAuthResponse, PortfolioChart, PortfolioDetails, - PortfolioDividends, + PortfolioDividendsResponse, PortfolioHoldingResponse, PortfolioHoldingsResponse, PortfolioInvestments, diff --git a/libs/common/src/lib/interfaces/portfolio-dividends.interface.ts b/libs/common/src/lib/interfaces/portfolio-dividends.interface.ts deleted file mode 100644 index 585c46bb7..000000000 --- a/libs/common/src/lib/interfaces/portfolio-dividends.interface.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { InvestmentItem } from './investment-item.interface'; - -export interface PortfolioDividends { - dividends: InvestmentItem[]; -} diff --git a/libs/common/src/lib/interfaces/responses/portfolio-dividends-response.interface.ts b/libs/common/src/lib/interfaces/responses/portfolio-dividends-response.interface.ts new file mode 100644 index 000000000..bd33dbccb --- /dev/null +++ b/libs/common/src/lib/interfaces/responses/portfolio-dividends-response.interface.ts @@ -0,0 +1,5 @@ +import { InvestmentItem } from '../investment-item.interface'; + +export interface PortfolioDividendsResponse { + dividends: InvestmentItem[]; +} From 04d6d9cfa93ca20b527799e15cb272d684479ef5 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Fri, 17 Oct 2025 20:04:27 +0200 Subject: [PATCH 03/92] Bugfix/total buy and sell calculation in summary (#5759) * Fix total buy and sell calculation related to activities in custom currency * Update changelog --- CHANGELOG.md | 1 + apps/api/src/app/portfolio/portfolio.service.ts | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b97b37ae2..c0f6bd0e1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -25,6 +25,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Fixed +- Fixed an issue with the total buy and sell calculation in the summary related to activities in a custom currency - Respected the include indices flag in the search functionality of the _Financial Modeling Prep_ service - Fixed an issue where the scroll position was not restored when changing pages - Fixed the word wrap in the menus of the activities table component diff --git a/apps/api/src/app/portfolio/portfolio.service.ts b/apps/api/src/app/portfolio/portfolio.service.ts index bbfb31b79..cb6eba5be 100644 --- a/apps/api/src/app/portfolio/portfolio.service.ts +++ b/apps/api/src/app/portfolio/portfolio.service.ts @@ -2126,11 +2126,11 @@ export class PortfolioService { .filter(({ isDraft, type }) => { return isDraft === false && type === activityType; }) - .map(({ quantity, SymbolProfile, unitPrice }) => { + .map(({ currency, quantity, SymbolProfile, unitPrice }) => { return new Big( this.exchangeRateDataService.toCurrency( new Big(quantity).mul(unitPrice).toNumber(), - SymbolProfile.currency, + currency ?? SymbolProfile.currency, userCurrency ) ); From 1daa980824a7771da7f96115395fe05943c85e6e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sven=20G=C3=BCnther?= Date: Fri, 17 Oct 2025 22:12:21 +0200 Subject: [PATCH 04/92] Bugfix/import of activity with MANUAL data source (CSV file) (#5749) * Fix import of activity with MANUAL data source * Update changelog --------- Co-authored-by: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> --- CHANGELOG.md | 1 + apps/api/src/app/import/import.service.ts | 29 ++++++---- .../import-activities-dialog.component.ts | 20 ++++--- .../app/services/import-activities.service.ts | 53 +++++++++++++++++-- test/import/ok/penthouse-apartment.csv | 2 + 5 files changed, 82 insertions(+), 23 deletions(-) create mode 100644 test/import/ok/penthouse-apartment.csv diff --git a/CHANGELOG.md b/CHANGELOG.md index c0f6bd0e1..8f72750ca 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -25,6 +25,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Fixed +- Fixed an issue in the `csv` file import where custom asset profiles failed due to validation errors - Fixed an issue with the total buy and sell calculation in the summary related to activities in a custom currency - Respected the include indices flag in the search functionality of the _Financial Modeling Prep_ service - Fixed an issue where the scroll position was not restored when changing pages diff --git a/apps/api/src/app/import/import.service.ts b/apps/api/src/app/import/import.service.ts index 69ec781c3..2725747aa 100644 --- a/apps/api/src/app/import/import.service.ts +++ b/apps/api/src/app/import/import.service.ts @@ -743,14 +743,27 @@ export class ImportService { } if (!assetProfiles[getAssetProfileIdentifier({ dataSource, symbol })]) { - const assetProfile = { - currency, - ...( + if (['FEE', 'INTEREST', 'LIABILITY'].includes(type)) { + // Skip asset profile validation for FEE, INTEREST, and LIABILITY + // as these activity types don't require asset profiles + assetProfiles[getAssetProfileIdentifier({ dataSource, symbol })] = { + currency, + dataSource, + symbol + }; + + continue; + } + + let assetProfile: Partial = { currency }; + + try { + assetProfile = ( await this.dataProviderService.getAssetProfiles([ { dataSource, symbol } ]) - )?.[symbol] - }; + )?.[symbol]; + } catch {} if (!assetProfile?.name) { const assetProfileInImport = assetProfilesWithMarketDataDto?.find( @@ -787,11 +800,7 @@ export class ImportService { } } - if ( - (dataSource !== 'MANUAL' && type === 'BUY') || - type === 'DIVIDEND' || - type === 'SELL' - ) { + if (!['FEE', 'INTEREST', 'LIABILITY'].includes(type)) { if (!assetProfile?.name) { throw new Error( `activities.${index}.symbol ("${symbol}") is not valid for the specified data source ("${dataSource}")` 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 2439a4b65..0c0054e9b 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 @@ -346,6 +346,7 @@ export class GfImportActivitiesDialogComponent implements OnDestroy { isDryRun: true, tags: content.tags }); + this.activities = activities; this.dataSource = new MatTableDataSource(activities.reverse()); this.pageIndex = 0; @@ -360,15 +361,18 @@ export class GfImportActivitiesDialogComponent implements OnDestroy { const content = fileContent.split('\n').slice(1); try { - const data = await this.importActivitiesService.importCsv({ - fileContent, - isDryRun: true, - userAccounts: this.data.user.accounts - }); - this.activities = data.activities; - this.dataSource = new MatTableDataSource(data.activities.reverse()); + const { activities, assetProfiles } = + await this.importActivitiesService.importCsv({ + fileContent, + isDryRun: true, + userAccounts: this.data.user.accounts + }); + + this.activities = activities; + this.assetProfiles = assetProfiles; + this.dataSource = new MatTableDataSource(activities.reverse()); this.pageIndex = 0; - this.totalItems = data.activities.length; + this.totalItems = activities.length; } catch (error) { console.error(error); this.handleImportError({ diff --git a/apps/client/src/app/services/import-activities.service.ts b/apps/client/src/app/services/import-activities.service.ts index 27a34652b..323f07a5b 100644 --- a/apps/client/src/app/services/import-activities.service.ts +++ b/apps/client/src/app/services/import-activities.service.ts @@ -45,6 +45,7 @@ export class ImportActivitiesService { userAccounts: Account[]; }): Promise<{ activities: Activity[]; + assetProfiles: CreateAssetProfileWithMarketDataDto[]; }> { const content = csvToJson(fileContent, { dynamicTyping: true, @@ -53,23 +54,65 @@ export class ImportActivitiesService { }).data; const activities: CreateOrderDto[] = []; + const assetProfiles: CreateAssetProfileWithMarketDataDto[] = []; + for (const [index, item] of content.entries()) { + const currency = this.parseCurrency({ content, index, item }); + const dataSource = this.parseDataSource({ item }); + const symbol = this.parseSymbol({ content, index, item }); + const type = this.parseType({ content, index, item }); + activities.push({ + currency, + dataSource, + symbol, + type, accountId: this.parseAccount({ item, userAccounts }), comment: this.parseComment({ item }), - currency: this.parseCurrency({ content, index, item }), - dataSource: this.parseDataSource({ item }), date: this.parseDate({ content, index, item }), fee: this.parseFee({ content, index, item }), quantity: this.parseQuantity({ content, index, item }), - symbol: this.parseSymbol({ content, index, item }), - type: this.parseType({ content, index, item }), unitPrice: this.parseUnitPrice({ content, index, item }), updateAccountBalance: false }); + + if ( + dataSource === DataSource.MANUAL && + !['FEE', 'INTEREST', 'LIABILITY'].includes(type) + ) { + // Create synthetic asset profile for MANUAL data source + // (except for FEE, INTEREST, and LIABILITY which don't require asset profiles) + assetProfiles.push({ + currency, + symbol, + assetClass: null, + assetSubClass: null, + comment: null, + countries: [], + cusip: null, + dataSource: DataSource.MANUAL, + figi: null, + figiComposite: null, + figiShareClass: null, + holdings: [], + isActive: true, + isin: null, + marketData: [], + name: symbol, + scraperConfiguration: null, + sectors: [], + symbolMapping: {}, + url: null + }); + } } - return await this.importJson({ activities, isDryRun }); + const result = await this.importJson({ + activities, + assetProfiles, + isDryRun + }); + return { ...result, assetProfiles }; } public importJson({ diff --git a/test/import/ok/penthouse-apartment.csv b/test/import/ok/penthouse-apartment.csv new file mode 100644 index 000000000..27eb5bf1c --- /dev/null +++ b/test/import/ok/penthouse-apartment.csv @@ -0,0 +1,2 @@ +Date,Code,DataSource,Currency,Price,Quantity,Action,Fee,Note +01.01.2022,Penthouse Apartment,MANUAL,USD,500000.0,1,buy,0.00, From 46296aad85f4ee9d661e54b3e5de78e4e7bdd6cb Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Fri, 17 Oct 2025 22:13:22 +0200 Subject: [PATCH 05/92] Bugfix/fix penthouse-apartment.json (#5775) * Fix penthouse-apartment.json --- test/import/ok/penthouse-apartment.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/import/ok/penthouse-apartment.json b/test/import/ok/penthouse-apartment.json index 3b230cf76..2bc7f0cf8 100644 --- a/test/import/ok/penthouse-apartment.json +++ b/test/import/ok/penthouse-apartment.json @@ -42,7 +42,7 @@ "symbol": "7e91b7d4-1430-4212-8380-289a06c9bbc1", "tags": [], "type": "BUY", - "unitPrice": 500000, + "unitPrice": 500000 } ], "user": { From a9bcd4ee2eb627e2352c41d3800783e46b6af809 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 17 Oct 2025 22:41:45 +0200 Subject: [PATCH 06/92] Feature/update locales (#5714) * Update locales * Update translations * Update changelog --------- Co-authored-by: github-actions[bot] Co-authored-by: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> --- CHANGELOG.md | 1 + apps/client/src/locales/messages.ca.xlf | 298 ++++++++++++++--------- apps/client/src/locales/messages.de.xlf | 300 +++++++++++++++--------- apps/client/src/locales/messages.es.xlf | 298 ++++++++++++++--------- apps/client/src/locales/messages.fr.xlf | 298 ++++++++++++++--------- apps/client/src/locales/messages.it.xlf | 298 ++++++++++++++--------- apps/client/src/locales/messages.nl.xlf | 298 ++++++++++++++--------- apps/client/src/locales/messages.pl.xlf | 298 ++++++++++++++--------- apps/client/src/locales/messages.pt.xlf | 298 ++++++++++++++--------- apps/client/src/locales/messages.tr.xlf | 298 ++++++++++++++--------- apps/client/src/locales/messages.uk.xlf | 298 ++++++++++++++--------- apps/client/src/locales/messages.xlf | 290 ++++++++++++++--------- apps/client/src/locales/messages.zh.xlf | 298 ++++++++++++++--------- 13 files changed, 2190 insertions(+), 1381 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8f72750ca..f9478c563 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -22,6 +22,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Extracted the footer to a component - Refactored the blog page component to standalone - Improved the portfolio calculator unit tests to load the user currency from the exported file +- Improved the language localization for German (`de`) ### Fixed diff --git a/apps/client/src/locales/messages.ca.xlf b/apps/client/src/locales/messages.ca.xlf index 20f803e84..989cdb171 100644 --- a/apps/client/src/locales/messages.ca.xlf +++ b/apps/client/src/locales/messages.ca.xlf @@ -5,8 +5,8 @@ Features Característiques - apps/client/src/app/app.component.html - 79 + apps/client/src/app/components/footer/footer.component.html + 29 apps/client/src/app/components/header/header.component.html @@ -101,8 +101,8 @@ The risk of loss in trading can be substantial. It is not advisable to invest money you may need in the short term. El risc d’assumir pèrdues en les inversions és substancial. No és recomanable invertir diners que pugui necessitar a curt termini. - apps/client/src/app/app.component.html - 221 + apps/client/src/app/components/footer/footer.component.html + 171 @@ -290,6 +290,14 @@ 11 + + please + please + + apps/client/src/app/pages/pricing/pricing-page.html + 350 + + Permission Permisos @@ -423,7 +431,7 @@ Nom apps/client/src/app/components/admin-market-data/admin-market-data.html - 89 + 88 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -463,7 +471,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 137 + 135 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -499,7 +507,7 @@ apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html - 47 + 45 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -515,7 +523,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 280 + 278 @@ -551,11 +559,11 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 261 + 259 libs/ui/src/lib/activities-table/activities-table.component.html - 297 + 295 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -579,7 +587,7 @@ apps/client/src/app/components/admin-market-data/admin-market-data.html - 268 + 267 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -595,7 +603,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 434 + 440 @@ -603,7 +611,7 @@ Suprimir apps/client/src/app/components/admin-market-data/admin-market-data.html - 290 + 289 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -631,7 +639,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 461 + 467 libs/ui/src/lib/benchmark/benchmark.component.html @@ -663,7 +671,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 160 + 158 @@ -695,7 +703,7 @@ apps/client/src/app/components/admin-market-data/admin-market-data.html - 106 + 105 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -823,7 +831,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 169 + 167 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html @@ -835,7 +843,7 @@ Preu de Mercat apps/client/src/app/components/admin-market-data/admin-market-data.html - 133 + 132 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -895,7 +903,7 @@ Primera Activitat apps/client/src/app/components/admin-market-data/admin-market-data.html - 148 + 147 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -915,7 +923,7 @@ Nombre d’Activitats apps/client/src/app/components/admin-market-data/admin-market-data.html - 157 + 156 @@ -923,7 +931,7 @@ Dades Històriques apps/client/src/app/components/admin-market-data/admin-market-data.html - 166 + 165 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor.component.html @@ -935,7 +943,7 @@ Nombre de Sectors apps/client/src/app/components/admin-market-data/admin-market-data.html - 175 + 174 @@ -943,7 +951,7 @@ Nombre de Països apps/client/src/app/components/admin-market-data/admin-market-data.html - 184 + 183 @@ -951,7 +959,7 @@ Recopilar Dades del Perfil apps/client/src/app/components/admin-market-data/admin-market-data.html - 235 + 234 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -963,7 +971,7 @@ Eliminar Perfils apps/client/src/app/components/admin-market-data/admin-market-data.html - 243 + 242 @@ -1183,7 +1191,7 @@ Afegir manualment apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html - 19 + 18 @@ -1195,7 +1203,7 @@ apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html - 29 + 27 apps/client/src/app/components/home-watchlist/create-watchlist-item-dialog/create-watchlist-item-dialog.html @@ -1275,7 +1283,7 @@ Afegir Divisa apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html - 22 + 20 @@ -1675,7 +1683,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 190 + 188 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -1723,7 +1731,7 @@ Informar d’un Problema amb les Dades apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 451 + 452 @@ -1963,7 +1971,7 @@ apps/client/src/app/pages/landing/landing-page.html - 451 + 350 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html @@ -1973,6 +1981,10 @@ apps/client/src/app/pages/portfolio/fire/fire-page.html 81 + + apps/client/src/app/pages/pricing/pricing-page.html + 343 + apps/client/src/app/pages/register/register-page.html 31 @@ -2111,7 +2123,7 @@ Valor net apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 261 + 264 @@ -2119,7 +2131,7 @@ Rendiment anualitzat apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 274 + 277 @@ -2706,8 +2718,8 @@ About Sobre - apps/client/src/app/app.component.html - 70 + apps/client/src/app/components/footer/footer.component.html + 20 apps/client/src/app/components/header/header.component.html @@ -2730,8 +2742,8 @@ Changelog Registre de canvis - apps/client/src/app/app.component.html - 77 + apps/client/src/app/components/footer/footer.component.html + 27 apps/client/src/app/pages/about/changelog/changelog-page.html @@ -2746,8 +2758,8 @@ License llicència - apps/client/src/app/app.component.html - 89 + apps/client/src/app/components/footer/footer.component.html + 39 apps/client/src/app/pages/about/license/license-page.html @@ -2762,8 +2774,8 @@ Privacy Policy Política de privadesa - apps/client/src/app/app.component.html - 105 + apps/client/src/app/components/footer/footer.component.html + 55 apps/client/src/app/pages/about/privacy-policy/privacy-policy-page.html @@ -2994,8 +3006,8 @@ Blog Bloc - apps/client/src/app/app.component.html - 74 + apps/client/src/app/components/footer/footer.component.html + 24 apps/client/src/app/pages/blog/2021/07/hallo-ghostfolio/hallo-ghostfolio-page.html @@ -3114,8 +3126,8 @@ Frequently Asked Questions (FAQ) Preguntes freqüents (FAQ) - apps/client/src/app/app.component.html - 83 + apps/client/src/app/components/footer/footer.component.html + 33 apps/client/src/app/pages/about/overview/about-overview-page.html @@ -3331,8 +3343,8 @@ Markets Mercats - apps/client/src/app/app.component.html - 61 + apps/client/src/app/components/footer/footer.component.html + 11 apps/client/src/app/components/header/header.component.html @@ -3436,11 +3448,11 @@ apps/client/src/app/pages/landing/landing-page.html - 447 + 346 apps/client/src/app/pages/pricing/pricing-page.html - 351 + 378 apps/client/src/app/pages/resources/personal-finance-tools/product-page.html @@ -3492,7 +3504,7 @@ Protegeix els teus actius. Refina la teva estratègia d’inversió personal. apps/client/src/app/pages/landing/landing-page.html - 226 + 125 @@ -3500,7 +3512,7 @@ Ghostfolio permet a la gent ocupada fer un seguiment d’accions, ETF o criptomonedes sense ser rastrejada. apps/client/src/app/pages/landing/landing-page.html - 230 + 129 @@ -3508,7 +3520,7 @@ Vista de 360° apps/client/src/app/pages/landing/landing-page.html - 240 + 139 @@ -3516,7 +3528,7 @@ Obtingueu la imatge completa de les vostres finances personals en múltiples plataformes. apps/client/src/app/pages/landing/landing-page.html - 243 + 142 @@ -3524,7 +3536,7 @@ Web3 llest apps/client/src/app/pages/landing/landing-page.html - 251 + 150 @@ -3532,7 +3544,7 @@ Utilitza Ghostfolio de manera anònima i sigues propietari de les teves dades financeres. apps/client/src/app/pages/landing/landing-page.html - 254 + 153 @@ -3540,7 +3552,7 @@ Beneficia’t de millores contínues gràcies a una comunitat forta. apps/client/src/app/pages/landing/landing-page.html - 264 + 163 @@ -3556,7 +3568,7 @@ Per què Ghostfolio? apps/client/src/app/pages/landing/landing-page.html - 272 + 171 @@ -3564,7 +3576,7 @@ Ghostfolio és per a tu si ets... apps/client/src/app/pages/landing/landing-page.html - 274 + 173 @@ -3572,7 +3584,7 @@ negociar accions, ETF o criptomonedes en múltiples plataformes apps/client/src/app/pages/landing/landing-page.html - 280 + 179 @@ -3580,7 +3592,7 @@ perseguint una compra & mantenir l’estratègia apps/client/src/app/pages/landing/landing-page.html - 286 + 185 @@ -3588,7 +3600,7 @@ interessat a obtenir informació sobre la composició de la vostra cartera apps/client/src/app/pages/landing/landing-page.html - 291 + 190 @@ -3596,7 +3608,7 @@ valorant la privadesa i la propietat de les dades apps/client/src/app/pages/landing/landing-page.html - 296 + 195 @@ -3604,7 +3616,7 @@ al minimalisme apps/client/src/app/pages/landing/landing-page.html - 299 + 198 @@ -3612,7 +3624,7 @@ preocupant-se per diversificar els seus recursos econòmics apps/client/src/app/pages/landing/landing-page.html - 303 + 202 @@ -3620,7 +3632,7 @@ interessada en la independència financera apps/client/src/app/pages/landing/landing-page.html - 307 + 206 @@ -3628,7 +3640,7 @@ dir no als fulls de càlcul apps/client/src/app/pages/landing/landing-page.html - 311 + 210 @@ -3636,7 +3648,7 @@ encara llegint aquesta llista apps/client/src/app/pages/landing/landing-page.html - 314 + 213 @@ -3644,7 +3656,7 @@ Més informació sobre Ghostfolio apps/client/src/app/pages/landing/landing-page.html - 319 + 218 @@ -3652,7 +3664,7 @@ Que nostre usuaris estan dient apps/client/src/app/pages/landing/landing-page.html - 328 + 227 @@ -3660,7 +3672,7 @@ Membres de tot el món estan utilitzant Ghostfolio Premium apps/client/src/app/pages/landing/landing-page.html - 367 + 266 @@ -3668,7 +3680,7 @@ Com ho fa Ghostfolio treballar? apps/client/src/app/pages/landing/landing-page.html - 384 + 283 @@ -3676,7 +3688,7 @@ Comença en només 3 passos apps/client/src/app/pages/landing/landing-page.html - 386 + 285 @@ -3692,7 +3704,7 @@ Registra’t de manera anònima* apps/client/src/app/pages/landing/landing-page.html - 392 + 291 @@ -3700,7 +3712,7 @@ * no es requereix cap adreça de correu electrònic ni targeta de crèdit apps/client/src/app/pages/landing/landing-page.html - 394 + 293 @@ -3708,7 +3720,7 @@ Afegiu qualsevol de les vostres transaccions històriques apps/client/src/app/pages/landing/landing-page.html - 406 + 305 @@ -3716,7 +3728,7 @@ Obteniu informació valuosa sobre la composició de la vostra cartera apps/client/src/app/pages/landing/landing-page.html - 418 + 317 @@ -3724,7 +3736,7 @@ Són tu llest? apps/client/src/app/pages/landing/landing-page.html - 432 + 331 @@ -3732,7 +3744,7 @@ Uneix-te ara o consulteu el compte d’exemple apps/client/src/app/pages/landing/landing-page.html - 435 + 334 @@ -3759,6 +3771,14 @@ 62 + + with your university e-mail address + with your university e-mail address + + apps/client/src/app/pages/pricing/pricing-page.html + 365 + + Active Users Usuaris actius @@ -3960,7 +3980,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 214 + 212 @@ -3976,7 +3996,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 375 + 377 @@ -3992,7 +4012,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 387 + 389 @@ -4307,6 +4327,14 @@ 138 + + Looking for a student discount? + Looking for a student discount? + + apps/client/src/app/pages/pricing/pricing-page.html + 359 + + Dividend Dividend @@ -4320,7 +4348,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 307 + 310 apps/client/src/app/pages/features/features-page.html @@ -4363,6 +4391,14 @@ 88 + + here + here + + apps/client/src/app/pages/pricing/pricing-page.html + 364 + + Monthly Mensualment @@ -4503,8 +4539,8 @@ Pricing Preus - apps/client/src/app/app.component.html - 99 + apps/client/src/app/components/footer/footer.component.html + 49 apps/client/src/app/components/header/header.component.html @@ -4704,7 +4740,7 @@ És gratuït. apps/client/src/app/pages/pricing/pricing-page.html - 353 + 380 @@ -5096,8 +5132,8 @@ Resources Recursos - apps/client/src/app/app.component.html - 64 + apps/client/src/app/components/footer/footer.component.html + 14 apps/client/src/app/components/header/header.component.html @@ -5128,6 +5164,14 @@ 37 + + Request it + Request it + + apps/client/src/app/pages/pricing/pricing-page.html + 361 + + Access Access @@ -5189,7 +5233,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 400 + 402 @@ -5201,7 +5245,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 413 + 415 @@ -5217,7 +5261,7 @@ Esborrany libs/ui/src/lib/activities-table/activities-table.component.html - 144 + 142 @@ -5225,7 +5269,7 @@ Clonar libs/ui/src/lib/activities-table/activities-table.component.html - 440 + 446 @@ -5233,7 +5277,7 @@ Exporta l’esborrany com a ICS libs/ui/src/lib/activities-table/activities-table.component.html - 450 + 456 @@ -5388,6 +5432,14 @@ 117 + + contact us + contact us + + apps/client/src/app/pages/pricing/pricing-page.html + 353 + + from ATH de l’ATH @@ -5433,7 +5485,7 @@ Import total previst libs/ui/src/lib/fire-calculator/fire-calculator.component.html - 60 + 59 @@ -5453,7 +5505,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 295 + 298 libs/ui/src/lib/fire-calculator/fire-calculator.component.ts @@ -5509,7 +5561,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 312 + 310 libs/ui/src/lib/assistant/assistant.html @@ -5533,7 +5585,7 @@ Classe d’actius apps/client/src/app/components/admin-market-data/admin-market-data.html - 115 + 114 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -5565,7 +5617,7 @@ Subclasse d’actiu apps/client/src/app/components/admin-market-data/admin-market-data.html - 124 + 123 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -5745,7 +5797,7 @@ apps/client/src/app/components/admin-market-data/admin-market-data.html - 75 + 74 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -5753,7 +5805,7 @@ apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html - 39 + 37 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -5813,7 +5865,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 238 + 236 libs/ui/src/lib/i18n.ts @@ -6124,8 +6176,8 @@ Community Comunitat - apps/client/src/app/app.component.html - 130 + apps/client/src/app/components/footer/footer.component.html + 80 apps/client/src/app/components/user-account-settings/user-account-settings.html @@ -6197,7 +6249,7 @@ Open Source apps/client/src/app/pages/landing/landing-page.html - 261 + 160 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts @@ -6208,8 +6260,8 @@ Personal Finance Personal Finance - apps/client/src/app/app.component.html - 57 + apps/client/src/app/components/footer/footer.component.html + 7 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts @@ -6469,7 +6521,7 @@ apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html - 59 + 57 apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html @@ -6521,7 +6573,7 @@ apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html - 61 + 59 apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html @@ -6596,6 +6648,14 @@ 63 + + If you plan to open an account at + If you plan to open an account at + + apps/client/src/app/pages/pricing/pricing-page.html + 329 + + Performance with currency effect Performance Performance with currency effect Performance @@ -6665,7 +6725,7 @@ Oops! Invalid currency. apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html - 50 + 48 @@ -6700,6 +6760,14 @@ 163 + + to use our referral link and get a Ghostfolio Premium membership for one year + to use our referral link and get a Ghostfolio Premium membership for one year + + apps/client/src/app/pages/pricing/pricing-page.html + 357 + + can be self-hosted can be self-hosted @@ -7023,7 +7091,7 @@ apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html - 70 + 68 apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html @@ -7387,8 +7455,8 @@ Terms of Service Terms of Service - apps/client/src/app/app.component.html - 112 + apps/client/src/app/components/footer/footer.component.html + 62 libs/common/src/lib/routes/routes.ts @@ -7440,7 +7508,7 @@ Gather Recent Historical Market Data apps/client/src/app/components/admin-market-data/admin-market-data.html - 226 + 225 @@ -7448,7 +7516,7 @@ Gather All Historical Market Data apps/client/src/app/components/admin-market-data/admin-market-data.html - 231 + 230 @@ -7645,7 +7713,7 @@ apps/client/src/app/pages/landing/landing-page.html - 452 + 351 libs/common/src/lib/routes/routes.ts @@ -8016,7 +8084,7 @@ Average Unit Price apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts - 110 + 111 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html diff --git a/apps/client/src/locales/messages.de.xlf b/apps/client/src/locales/messages.de.xlf index 9211617f0..977b67439 100644 --- a/apps/client/src/locales/messages.de.xlf +++ b/apps/client/src/locales/messages.de.xlf @@ -25,8 +25,8 @@ The risk of loss in trading can be substantial. It is not advisable to invest money you may need in the short term. Das Ausfallrisiko beim Börsenhandel kann erheblich sein. Es ist nicht ratsam, Geld zu investieren, welches du kurzfristig benötigst. - apps/client/src/app/app.component.html - 221 + apps/client/src/app/components/footer/footer.component.html + 171 @@ -37,6 +37,14 @@ 11 + + please + bitte + + apps/client/src/app/pages/pricing/pricing-page.html + 350 + + Type Typ @@ -54,7 +62,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 160 + 158 @@ -94,7 +102,7 @@ Name apps/client/src/app/components/admin-market-data/admin-market-data.html - 89 + 88 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -134,7 +142,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 137 + 135 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -190,11 +198,11 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 261 + 259 libs/ui/src/lib/activities-table/activities-table.component.html - 297 + 295 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -218,7 +226,7 @@ apps/client/src/app/components/admin-market-data/admin-market-data.html - 268 + 267 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -234,7 +242,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 434 + 440 @@ -242,7 +250,7 @@ Löschen apps/client/src/app/components/admin-market-data/admin-market-data.html - 290 + 289 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -270,7 +278,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 461 + 467 libs/ui/src/lib/benchmark/benchmark.component.html @@ -302,7 +310,7 @@ apps/client/src/app/components/admin-market-data/admin-market-data.html - 106 + 105 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -426,7 +434,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 169 + 167 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html @@ -438,7 +446,7 @@ Marktpreis apps/client/src/app/components/admin-market-data/admin-market-data.html - 133 + 132 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -454,7 +462,7 @@ Erste Aktivität apps/client/src/app/components/admin-market-data/admin-market-data.html - 148 + 147 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -482,7 +490,7 @@ Historische Daten apps/client/src/app/components/admin-market-data/admin-market-data.html - 166 + 165 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor.component.html @@ -534,7 +542,7 @@ Letzte historische Marktdaten synchronisieren apps/client/src/app/components/admin-market-data/admin-market-data.html - 226 + 225 @@ -542,7 +550,7 @@ Alle historischen Marktdaten synchronisieren apps/client/src/app/components/admin-market-data/admin-market-data.html - 231 + 230 @@ -550,7 +558,7 @@ Profildaten synchronisieren apps/client/src/app/components/admin-market-data/admin-market-data.html - 235 + 234 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -562,7 +570,7 @@ Währung hinzufügen apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html - 22 + 20 @@ -798,7 +806,7 @@ apps/client/src/app/pages/landing/landing-page.html - 451 + 350 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html @@ -808,6 +816,10 @@ apps/client/src/app/pages/portfolio/fire/fire-page.html 81 + + apps/client/src/app/pages/pricing/pricing-page.html + 343 + apps/client/src/app/pages/register/register-page.html 31 @@ -894,7 +906,7 @@ Gesamtvermögen apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 261 + 264 @@ -902,7 +914,7 @@ Performance pro Jahr apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 274 + 277 @@ -970,7 +982,7 @@ Datenfehler melden apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 451 + 452 @@ -1065,8 +1077,8 @@ About Über Ghostfolio - apps/client/src/app/app.component.html - 70 + apps/client/src/app/components/footer/footer.component.html + 20 apps/client/src/app/components/header/header.component.html @@ -1089,8 +1101,8 @@ Privacy Policy Datenschutzbestimmungen - apps/client/src/app/app.component.html - 105 + apps/client/src/app/components/footer/footer.component.html + 55 apps/client/src/app/pages/about/privacy-policy/privacy-policy-page.html @@ -1338,7 +1350,7 @@ apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html - 47 + 45 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -1354,7 +1366,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 280 + 278 @@ -1417,8 +1429,8 @@ Blog Blog - apps/client/src/app/app.component.html - 74 + apps/client/src/app/components/footer/footer.component.html + 24 apps/client/src/app/pages/blog/2021/07/hallo-ghostfolio/hallo-ghostfolio-page.html @@ -1529,8 +1541,8 @@ Frequently Asked Questions (FAQ) Häufig gestellte Fragen (FAQ) - apps/client/src/app/app.component.html - 83 + apps/client/src/app/components/footer/footer.component.html + 33 apps/client/src/app/pages/about/overview/about-overview-page.html @@ -1549,8 +1561,8 @@ Features Features - apps/client/src/app/app.component.html - 79 + apps/client/src/app/components/footer/footer.component.html + 29 apps/client/src/app/components/header/header.component.html @@ -1605,8 +1617,8 @@ Markets Märkte - apps/client/src/app/app.component.html - 61 + apps/client/src/app/components/footer/footer.component.html + 11 apps/client/src/app/components/header/header.component.html @@ -1854,7 +1866,7 @@ apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html - 29 + 27 apps/client/src/app/components/home-watchlist/create-watchlist-item-dialog/create-watchlist-item-dialog.html @@ -1878,7 +1890,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 190 + 188 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -1894,7 +1906,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 214 + 212 @@ -1985,8 +1997,8 @@ Pricing Preise - apps/client/src/app/app.component.html - 99 + apps/client/src/app/components/footer/footer.component.html + 49 apps/client/src/app/components/header/header.component.html @@ -2101,8 +2113,8 @@ Resources Ressourcen - apps/client/src/app/app.component.html - 64 + apps/client/src/app/components/footer/footer.component.html + 14 apps/client/src/app/components/header/header.component.html @@ -2150,7 +2162,7 @@ Geplant libs/ui/src/lib/activities-table/activities-table.component.html - 144 + 142 @@ -2166,7 +2178,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 375 + 377 @@ -2178,7 +2190,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 400 + 402 @@ -2190,7 +2202,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 413 + 415 @@ -2198,7 +2210,7 @@ Kopieren libs/ui/src/lib/activities-table/activities-table.component.html - 440 + 446 @@ -2206,7 +2218,7 @@ Geplante Aktivität als ICS exportieren libs/ui/src/lib/activities-table/activities-table.component.html - 450 + 456 @@ -2225,6 +2237,14 @@ 117 + + contact us + kontaktiere uns + + apps/client/src/app/pages/pricing/pricing-page.html + 353 + + from ATH vom AZH @@ -2406,7 +2426,7 @@ Projizierter Gesamtbetrag libs/ui/src/lib/fire-calculator/fire-calculator.component.html - 60 + 59 @@ -2434,7 +2454,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 295 + 298 libs/ui/src/lib/fire-calculator/fire-calculator.component.ts @@ -2458,7 +2478,7 @@ Anzahl Länder apps/client/src/app/components/admin-market-data/admin-market-data.html - 184 + 183 @@ -2466,7 +2486,7 @@ Anzahl Sektoren apps/client/src/app/components/admin-market-data/admin-market-data.html - 175 + 174 @@ -2642,7 +2662,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 312 + 310 libs/ui/src/lib/assistant/assistant.html @@ -2658,7 +2678,7 @@ Anlageklasse apps/client/src/app/components/admin-market-data/admin-market-data.html - 115 + 114 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -2694,7 +2714,7 @@ apps/client/src/app/components/admin-market-data/admin-market-data.html - 75 + 74 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -2702,7 +2722,7 @@ apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html - 39 + 37 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -2966,7 +2986,7 @@ Anzahl Aktivitäten apps/client/src/app/components/admin-market-data/admin-market-data.html - 157 + 156 @@ -2993,6 +3013,14 @@ 425 + + Looking for a student discount? + Suchst du nach einem Studentenrabatt? + + apps/client/src/app/pages/pricing/pricing-page.html + 359 + + Dividend Dividenden @@ -3006,7 +3034,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 307 + 310 apps/client/src/app/pages/features/features-page.html @@ -3030,7 +3058,7 @@ Anlageunterklasse apps/client/src/app/components/admin-market-data/admin-market-data.html - 124 + 123 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -3158,7 +3186,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 387 + 389 @@ -3486,11 +3514,11 @@ apps/client/src/app/pages/landing/landing-page.html - 447 + 346 apps/client/src/app/pages/pricing/pricing-page.html - 351 + 378 apps/client/src/app/pages/resources/personal-finance-tools/product-page.html @@ -3502,7 +3530,7 @@ Es ist kostenlos. apps/client/src/app/pages/pricing/pricing-page.html - 353 + 380 @@ -3937,8 +3965,8 @@ Changelog Changelog - apps/client/src/app/app.component.html - 77 + apps/client/src/app/components/footer/footer.component.html + 27 apps/client/src/app/pages/about/changelog/changelog-page.html @@ -3953,8 +3981,8 @@ License Lizenz - apps/client/src/app/app.component.html - 89 + apps/client/src/app/components/footer/footer.component.html + 39 apps/client/src/app/pages/about/license/license-page.html @@ -4662,7 +4690,7 @@ Schütze dein Vermögen. Optimiere deine persönliche Anlagestrategie. apps/client/src/app/pages/landing/landing-page.html - 226 + 125 @@ -4670,7 +4698,7 @@ Ghostfolio ermöglicht es geschäftigen Leuten, den Überblick über Aktien, ETFs oder Kryptowährungen zu behalten, ohne überwacht zu werden. apps/client/src/app/pages/landing/landing-page.html - 230 + 129 @@ -4678,7 +4706,7 @@ 360° Ansicht apps/client/src/app/pages/landing/landing-page.html - 240 + 139 @@ -4686,7 +4714,7 @@ Web3 ready apps/client/src/app/pages/landing/landing-page.html - 251 + 150 @@ -4694,7 +4722,7 @@ Nutze Ghostfolio ganz anonym und behalte deine Finanzdaten. apps/client/src/app/pages/landing/landing-page.html - 254 + 153 @@ -4702,7 +4730,7 @@ Profitiere von kontinuierlichen Verbesserungen durch eine aktive Community. apps/client/src/app/pages/landing/landing-page.html - 264 + 163 @@ -4718,7 +4746,7 @@ Warum Ghostfolio? apps/client/src/app/pages/landing/landing-page.html - 272 + 171 @@ -4726,7 +4754,7 @@ Ghostfolio ist für dich geeignet, wenn du... apps/client/src/app/pages/landing/landing-page.html - 274 + 173 @@ -4734,7 +4762,7 @@ Aktien, ETFs oder Kryptowährungen auf unterschiedlichen Plattformen handelst apps/client/src/app/pages/landing/landing-page.html - 280 + 179 @@ -4742,7 +4770,7 @@ eine Buy & Hold Strategie verfolgst apps/client/src/app/pages/landing/landing-page.html - 286 + 185 @@ -4750,7 +4778,7 @@ dich für die Zusammensetzung deines Portfolios interessierst apps/client/src/app/pages/landing/landing-page.html - 291 + 190 @@ -4758,7 +4786,7 @@ Privatsphäre und Datenhoheit wertschätzt apps/client/src/app/pages/landing/landing-page.html - 296 + 195 @@ -4766,7 +4794,7 @@ zum Frugalismus oder Minimalismus neigst apps/client/src/app/pages/landing/landing-page.html - 299 + 198 @@ -4774,7 +4802,7 @@ dich um die Diversifizierung deiner finanziellen Mittel kümmerst apps/client/src/app/pages/landing/landing-page.html - 303 + 202 @@ -4782,7 +4810,7 @@ Interesse an finanzieller Freiheit hast apps/client/src/app/pages/landing/landing-page.html - 307 + 206 @@ -4790,7 +4818,7 @@ Nein sagst zu Excel-Tabellen im Jahr apps/client/src/app/pages/landing/landing-page.html - 311 + 210 @@ -4798,7 +4826,7 @@ diese Liste bis zum Ende liest apps/client/src/app/pages/landing/landing-page.html - 314 + 213 @@ -4806,7 +4834,7 @@ Erfahre mehr über Ghostfolio apps/client/src/app/pages/landing/landing-page.html - 319 + 218 @@ -4814,7 +4842,7 @@ Was unsere Nutzer sagen apps/client/src/app/pages/landing/landing-page.html - 328 + 227 @@ -4822,7 +4850,7 @@ Nutzer aus aller Welt verwenden Ghostfolio Premium apps/client/src/app/pages/landing/landing-page.html - 367 + 266 @@ -4830,7 +4858,7 @@ Wie funktioniert Ghostfolio ? apps/client/src/app/pages/landing/landing-page.html - 384 + 283 @@ -4838,7 +4866,7 @@ Registriere dich anonym* apps/client/src/app/pages/landing/landing-page.html - 392 + 291 @@ -4846,7 +4874,7 @@ * Keine E-Mail-Adresse oder Kreditkarte erforderlich apps/client/src/app/pages/landing/landing-page.html - 394 + 293 @@ -4854,7 +4882,7 @@ Füge historische Transaktionen hinzu apps/client/src/app/pages/landing/landing-page.html - 406 + 305 @@ -4862,7 +4890,7 @@ Erhalte nützliche Erkenntnisse über die Zusammensetzung deines Portfolios apps/client/src/app/pages/landing/landing-page.html - 418 + 317 @@ -4870,7 +4898,7 @@ Bist du bereit? apps/client/src/app/pages/landing/landing-page.html - 432 + 331 @@ -4878,7 +4906,7 @@ Verschaffe dir einen vollständigen Überblick deiner persönlichen Finanzen über mehrere Plattformen hinweg. apps/client/src/app/pages/landing/landing-page.html - 243 + 142 @@ -4886,7 +4914,7 @@ Beginne mit nur 3 Schritten apps/client/src/app/pages/landing/landing-page.html - 386 + 285 @@ -5187,6 +5215,14 @@ 62 + + with your university e-mail address + mit deiner Universitäts-E-Mail-Adresse + + apps/client/src/app/pages/pricing/pricing-page.html + 365 + + (Last 30 days) (Letzte 30 Tage) @@ -5256,7 +5292,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 238 + 236 libs/ui/src/lib/i18n.ts @@ -5359,6 +5395,14 @@ 37 + + Request it + Fordere ihn an + + apps/client/src/app/pages/pricing/pricing-page.html + 361 + + Access Zugang @@ -5396,7 +5440,7 @@ Manuell hinzufügen apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html - 19 + 18 @@ -5409,7 +5453,7 @@ , -  entnehmen, + entnehmen, apps/client/src/app/pages/portfolio/fire/fire-page.html 93 @@ -5675,6 +5719,14 @@ 88 + + here + hier + + apps/client/src/app/pages/pricing/pricing-page.html + 364 + + Absolute Asset Performance Absolute Anlage Performance @@ -6045,7 +6097,7 @@ Melde dich jetzt an oder probiere die Live Demo aus apps/client/src/app/pages/landing/landing-page.html - 435 + 334 @@ -6077,7 +6129,7 @@ Profile löschen apps/client/src/app/components/admin-market-data/admin-market-data.html - 243 + 242 @@ -6148,8 +6200,8 @@ Community Community - apps/client/src/app/app.component.html - 130 + apps/client/src/app/components/footer/footer.component.html + 80 apps/client/src/app/components/user-account-settings/user-account-settings.html @@ -6221,7 +6273,7 @@ Open Source apps/client/src/app/pages/landing/landing-page.html - 261 + 160 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts @@ -6232,8 +6284,8 @@ Personal Finance Persönliche Finanzen - apps/client/src/app/app.component.html - 57 + apps/client/src/app/components/footer/footer.component.html + 7 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts @@ -6493,7 +6545,7 @@ apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html - 59 + 57 apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html @@ -6545,7 +6597,7 @@ apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html - 61 + 59 apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html @@ -6620,6 +6672,14 @@ 63 + + If you plan to open an account at + Wenn du die Eröffnung eines Kontos planst bei + + apps/client/src/app/pages/pricing/pricing-page.html + 329 + + Performance with currency effect Performance Performance mit Währungseffekt Performance @@ -6689,7 +6749,7 @@ Ups! Ungültige Währung. apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html - 50 + 48 @@ -6724,6 +6784,14 @@ 163 + + to use our referral link and get a Ghostfolio Premium membership for one year + um unseren Empfehlungslink zu verwenden und ein Ghostfolio Premium-Abonnement für ein Jahr zu erhalten + + apps/client/src/app/pages/pricing/pricing-page.html + 357 + + can be self-hosted kann selbst gehostet werden @@ -7047,7 +7115,7 @@ apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html - 70 + 68 apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html @@ -7411,8 +7479,8 @@ Terms of Service Allgemeine Geschäftsbedingungen - apps/client/src/app/app.component.html - 112 + apps/client/src/app/components/footer/footer.component.html + 62 libs/common/src/lib/routes/routes.ts @@ -7645,7 +7713,7 @@ apps/client/src/app/pages/landing/landing-page.html - 452 + 351 libs/common/src/lib/routes/routes.ts @@ -8016,7 +8084,7 @@ Ø Preis pro Einheit apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts - 110 + 111 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html diff --git a/apps/client/src/locales/messages.es.xlf b/apps/client/src/locales/messages.es.xlf index 543adfd20..8bbbc31e9 100644 --- a/apps/client/src/locales/messages.es.xlf +++ b/apps/client/src/locales/messages.es.xlf @@ -26,8 +26,8 @@ The risk of loss in trading can be substantial. It is not advisable to invest money you may need in the short term. El riesgo de pérdida en trading puede ser sustancial. No es aconsejable invertir dinero que puedas necesitar a corto plazo. - apps/client/src/app/app.component.html - 221 + apps/client/src/app/components/footer/footer.component.html + 171 @@ -38,6 +38,14 @@ 11 + + please + please + + apps/client/src/app/pages/pricing/pricing-page.html + 350 + + Type Tipo @@ -55,7 +63,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 160 + 158 @@ -95,7 +103,7 @@ Nombre apps/client/src/app/components/admin-market-data/admin-market-data.html - 89 + 88 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -135,7 +143,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 137 + 135 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -191,11 +199,11 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 261 + 259 libs/ui/src/lib/activities-table/activities-table.component.html - 297 + 295 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -219,7 +227,7 @@ apps/client/src/app/components/admin-market-data/admin-market-data.html - 268 + 267 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -235,7 +243,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 434 + 440 @@ -243,7 +251,7 @@ Elimina apps/client/src/app/components/admin-market-data/admin-market-data.html - 290 + 289 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -271,7 +279,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 461 + 467 libs/ui/src/lib/benchmark/benchmark.component.html @@ -303,7 +311,7 @@ apps/client/src/app/components/admin-market-data/admin-market-data.html - 106 + 105 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -427,7 +435,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 169 + 167 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html @@ -439,7 +447,7 @@ Precio de mercado apps/client/src/app/components/admin-market-data/admin-market-data.html - 133 + 132 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -455,7 +463,7 @@ Primera actividad apps/client/src/app/components/admin-market-data/admin-market-data.html - 148 + 147 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -483,7 +491,7 @@ Datos históricos apps/client/src/app/components/admin-market-data/admin-market-data.html - 166 + 165 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor.component.html @@ -535,7 +543,7 @@ Recoger los datos del perfil apps/client/src/app/components/admin-market-data/admin-market-data.html - 235 + 234 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -547,7 +555,7 @@ Añadir divisa apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html - 22 + 20 @@ -783,7 +791,7 @@ apps/client/src/app/pages/landing/landing-page.html - 451 + 350 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html @@ -793,6 +801,10 @@ apps/client/src/app/pages/portfolio/fire/fire-page.html 81 + + apps/client/src/app/pages/pricing/pricing-page.html + 343 + apps/client/src/app/pages/register/register-page.html 31 @@ -879,7 +891,7 @@ Patrimonio neto apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 261 + 264 @@ -887,7 +899,7 @@ Rendimiento anualizado apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 274 + 277 @@ -955,7 +967,7 @@ Reporta un anomalía de los datos apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 451 + 452 @@ -1050,8 +1062,8 @@ About Sobre - apps/client/src/app/app.component.html - 70 + apps/client/src/app/components/footer/footer.component.html + 20 apps/client/src/app/components/header/header.component.html @@ -1074,8 +1086,8 @@ Privacy Policy Política de privacidad - apps/client/src/app/app.component.html - 105 + apps/client/src/app/components/footer/footer.component.html + 55 apps/client/src/app/pages/about/privacy-policy/privacy-policy-page.html @@ -1323,7 +1335,7 @@ apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html - 47 + 45 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -1339,7 +1351,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 280 + 278 @@ -1402,8 +1414,8 @@ Blog Blog - apps/client/src/app/app.component.html - 74 + apps/client/src/app/components/footer/footer.component.html + 24 apps/client/src/app/pages/blog/2021/07/hallo-ghostfolio/hallo-ghostfolio-page.html @@ -1514,8 +1526,8 @@ Frequently Asked Questions (FAQ) Preguntas más frecuentes (FAQ) - apps/client/src/app/app.component.html - 83 + apps/client/src/app/components/footer/footer.component.html + 33 apps/client/src/app/pages/about/overview/about-overview-page.html @@ -1534,8 +1546,8 @@ Features Funcionalidades - apps/client/src/app/app.component.html - 79 + apps/client/src/app/components/footer/footer.component.html + 29 apps/client/src/app/components/header/header.component.html @@ -1590,8 +1602,8 @@ Markets Mercados - apps/client/src/app/app.component.html - 61 + apps/client/src/app/components/footer/footer.component.html + 11 apps/client/src/app/components/header/header.component.html @@ -1839,7 +1851,7 @@ apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html - 29 + 27 apps/client/src/app/components/home-watchlist/create-watchlist-item-dialog/create-watchlist-item-dialog.html @@ -1863,7 +1875,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 190 + 188 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -1879,7 +1891,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 214 + 212 @@ -1970,8 +1982,8 @@ Pricing Precios - apps/client/src/app/app.component.html - 99 + apps/client/src/app/components/footer/footer.component.html + 49 apps/client/src/app/components/header/header.component.html @@ -2086,8 +2098,8 @@ Resources Recursos - apps/client/src/app/app.component.html - 64 + apps/client/src/app/components/footer/footer.component.html + 14 apps/client/src/app/components/header/header.component.html @@ -2135,7 +2147,7 @@ Borrador libs/ui/src/lib/activities-table/activities-table.component.html - 144 + 142 @@ -2151,7 +2163,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 375 + 377 @@ -2163,7 +2175,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 400 + 402 @@ -2175,7 +2187,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 413 + 415 @@ -2183,7 +2195,7 @@ Clonar libs/ui/src/lib/activities-table/activities-table.component.html - 440 + 446 @@ -2191,7 +2203,7 @@ Exportar borrador como ICS libs/ui/src/lib/activities-table/activities-table.component.html - 450 + 456 @@ -2210,6 +2222,14 @@ 117 + + contact us + contact us + + apps/client/src/app/pages/pricing/pricing-page.html + 353 + + from ATH desde el máximo histórico (ATH) @@ -2391,7 +2411,7 @@ Importe total previsto libs/ui/src/lib/fire-calculator/fire-calculator.component.html - 60 + 59 @@ -2411,7 +2431,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 295 + 298 libs/ui/src/lib/fire-calculator/fire-calculator.component.ts @@ -2443,7 +2463,7 @@ Número de sectores apps/client/src/app/components/admin-market-data/admin-market-data.html - 175 + 174 @@ -2451,7 +2471,7 @@ Número de países apps/client/src/app/components/admin-market-data/admin-market-data.html - 184 + 183 @@ -2627,7 +2647,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 312 + 310 libs/ui/src/lib/assistant/assistant.html @@ -2643,7 +2663,7 @@ Tipo de activo apps/client/src/app/components/admin-market-data/admin-market-data.html - 115 + 114 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -2679,7 +2699,7 @@ apps/client/src/app/components/admin-market-data/admin-market-data.html - 75 + 74 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -2687,7 +2707,7 @@ apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html - 39 + 37 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -2951,7 +2971,7 @@ Recuento de actividades apps/client/src/app/components/admin-market-data/admin-market-data.html - 157 + 156 @@ -2970,6 +2990,14 @@ 357 + + Looking for a student discount? + Looking for a student discount? + + apps/client/src/app/pages/pricing/pricing-page.html + 359 + + Dividend Dividendo @@ -2983,7 +3011,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 307 + 310 apps/client/src/app/pages/features/features-page.html @@ -3015,7 +3043,7 @@ Subtipo de activo apps/client/src/app/components/admin-market-data/admin-market-data.html - 124 + 123 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -3143,7 +3171,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 387 + 389 @@ -3471,11 +3499,11 @@ apps/client/src/app/pages/landing/landing-page.html - 447 + 346 apps/client/src/app/pages/pricing/pricing-page.html - 351 + 378 apps/client/src/app/pages/resources/personal-finance-tools/product-page.html @@ -3487,7 +3515,7 @@ Es gratis. apps/client/src/app/pages/pricing/pricing-page.html - 353 + 380 @@ -3914,8 +3942,8 @@ Changelog Registro de cambios - apps/client/src/app/app.component.html - 77 + apps/client/src/app/components/footer/footer.component.html + 27 apps/client/src/app/pages/about/changelog/changelog-page.html @@ -3930,8 +3958,8 @@ License Licencia - apps/client/src/app/app.component.html - 89 + apps/client/src/app/components/footer/footer.component.html + 39 apps/client/src/app/pages/about/license/license-page.html @@ -4639,7 +4667,7 @@ Protege tus assets. Mejora tu estrategia de inversión personal. apps/client/src/app/pages/landing/landing-page.html - 226 + 125 @@ -4647,7 +4675,7 @@ Ghostfolio permite a las personas ocupadas hacer un seguimiento de acciones, ETFs o criptomonedas sin ser rastreadas. apps/client/src/app/pages/landing/landing-page.html - 230 + 129 @@ -4655,7 +4683,7 @@ Vista 360° apps/client/src/app/pages/landing/landing-page.html - 240 + 139 @@ -4663,7 +4691,7 @@ Preparado para Web3 apps/client/src/app/pages/landing/landing-page.html - 251 + 150 @@ -4671,7 +4699,7 @@ Usa Ghostfolio de forma anónima y sé dueño de tus datos financieros. apps/client/src/app/pages/landing/landing-page.html - 254 + 153 @@ -4679,7 +4707,7 @@ Disfruta de mejoras continuas gracias a una comunidad sólida. apps/client/src/app/pages/landing/landing-page.html - 264 + 163 @@ -4695,7 +4723,7 @@ ¿Por qué Ghostfolio? apps/client/src/app/pages/landing/landing-page.html - 272 + 171 @@ -4703,7 +4731,7 @@ Ghostfolio es para ti si estás... apps/client/src/app/pages/landing/landing-page.html - 274 + 173 @@ -4711,7 +4739,7 @@ operando con acciones, ETFs o criptomonedas en múltiples plataformas apps/client/src/app/pages/landing/landing-page.html - 280 + 179 @@ -4719,7 +4747,7 @@ persiguiendo una compra & mantener estrategia apps/client/src/app/pages/landing/landing-page.html - 286 + 185 @@ -4727,7 +4755,7 @@ interesado en obtener información sobre la composición de tu portafolio apps/client/src/app/pages/landing/landing-page.html - 291 + 190 @@ -4735,7 +4763,7 @@ valorando la privacidad y la propiedad de tus datos apps/client/src/app/pages/landing/landing-page.html - 296 + 195 @@ -4743,7 +4771,7 @@ en el minimalismo apps/client/src/app/pages/landing/landing-page.html - 299 + 198 @@ -4751,7 +4779,7 @@ preocuparse por diversificar tus recursos financieros apps/client/src/app/pages/landing/landing-page.html - 303 + 202 @@ -4759,7 +4787,7 @@ interesado en la independencia financiera apps/client/src/app/pages/landing/landing-page.html - 307 + 206 @@ -4767,7 +4795,7 @@ diciendo no a las hojas de cálculo en apps/client/src/app/pages/landing/landing-page.html - 311 + 210 @@ -4775,7 +4803,7 @@ todavía leyendo esta lista apps/client/src/app/pages/landing/landing-page.html - 314 + 213 @@ -4783,7 +4811,7 @@ Más información sobre Ghostfolio apps/client/src/app/pages/landing/landing-page.html - 319 + 218 @@ -4791,7 +4819,7 @@ Lo que nuestros usuarios están diciendo apps/client/src/app/pages/landing/landing-page.html - 328 + 227 @@ -4799,7 +4827,7 @@ Miembros de todo el mundo están usando Ghostfolio Premium apps/client/src/app/pages/landing/landing-page.html - 367 + 266 @@ -4807,7 +4835,7 @@ ¿Cómo Ghostfolio work? apps/client/src/app/pages/landing/landing-page.html - 384 + 283 @@ -4815,7 +4843,7 @@ Regístrate de forma anónima* apps/client/src/app/pages/landing/landing-page.html - 392 + 291 @@ -4823,7 +4851,7 @@ * no se requiere dirección de correo electrónico ni tarjeta de crédito apps/client/src/app/pages/landing/landing-page.html - 394 + 293 @@ -4831,7 +4859,7 @@ Agrega cualquiera de tus transacciones históricas apps/client/src/app/pages/landing/landing-page.html - 406 + 305 @@ -4839,7 +4867,7 @@ Obtén información valiosa sobre la composición de tu portafolio apps/client/src/app/pages/landing/landing-page.html - 418 + 317 @@ -4847,7 +4875,7 @@ ¿Estás listo? apps/client/src/app/pages/landing/landing-page.html - 432 + 331 @@ -4855,7 +4883,7 @@ Obtén una visión completa de tus finanzas personales en múltiples plataformas. apps/client/src/app/pages/landing/landing-page.html - 243 + 142 @@ -4863,7 +4891,7 @@ Comienza en solo 3 pasos apps/client/src/app/pages/landing/landing-page.html - 386 + 285 @@ -5164,6 +5192,14 @@ 62 + + with your university e-mail address + with your university e-mail address + + apps/client/src/app/pages/pricing/pricing-page.html + 365 + + (Last 30 days) (Últimos 30 días) @@ -5233,7 +5269,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 238 + 236 libs/ui/src/lib/i18n.ts @@ -5336,6 +5372,14 @@ 37 + + Request it + Request it + + apps/client/src/app/pages/pricing/pricing-page.html + 361 + + Access Acceso @@ -5373,7 +5417,7 @@ Añadir manualmente apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html - 19 + 18 @@ -5652,6 +5696,14 @@ 88 + + here + here + + apps/client/src/app/pages/pricing/pricing-page.html + 364 + + Absolute Asset Performance Rendimiento absoluto de los activos @@ -6022,7 +6074,7 @@ Únete ahora o consulta la cuenta de ejemplo apps/client/src/app/pages/landing/landing-page.html - 435 + 334 @@ -6054,7 +6106,7 @@ Borrar Perfiles apps/client/src/app/components/admin-market-data/admin-market-data.html - 243 + 242 @@ -6125,8 +6177,8 @@ Community Comunidad - apps/client/src/app/app.component.html - 130 + apps/client/src/app/components/footer/footer.component.html + 80 apps/client/src/app/components/user-account-settings/user-account-settings.html @@ -6198,7 +6250,7 @@ Código abierto apps/client/src/app/pages/landing/landing-page.html - 261 + 160 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts @@ -6209,8 +6261,8 @@ Personal Finance Finanzas personales - apps/client/src/app/app.component.html - 57 + apps/client/src/app/components/footer/footer.component.html + 7 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts @@ -6470,7 +6522,7 @@ apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html - 59 + 57 apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html @@ -6522,7 +6574,7 @@ apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html - 61 + 59 apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html @@ -6597,6 +6649,14 @@ 63 + + If you plan to open an account at + If you plan to open an account at + + apps/client/src/app/pages/pricing/pricing-page.html + 329 + + Performance with currency effect Performance Performance with currency effect Performance @@ -6666,7 +6726,7 @@ ¡Ups! Moneda inválida. apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html - 50 + 48 @@ -6701,6 +6761,14 @@ 163 + + to use our referral link and get a Ghostfolio Premium membership for one year + to use our referral link and get a Ghostfolio Premium membership for one year + + apps/client/src/app/pages/pricing/pricing-page.html + 357 + + can be self-hosted se puede autoalojar @@ -7024,7 +7092,7 @@ apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html - 70 + 68 apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html @@ -7388,8 +7456,8 @@ Terms of Service Términos de servicio - apps/client/src/app/app.component.html - 112 + apps/client/src/app/components/footer/footer.component.html + 62 libs/common/src/lib/routes/routes.ts @@ -7441,7 +7509,7 @@ Recopilar datos históricos recientes del mercado apps/client/src/app/components/admin-market-data/admin-market-data.html - 226 + 225 @@ -7449,7 +7517,7 @@ Recopilar todos los datos históricos del mercado apps/client/src/app/components/admin-market-data/admin-market-data.html - 231 + 230 @@ -7646,7 +7714,7 @@ apps/client/src/app/pages/landing/landing-page.html - 452 + 351 libs/common/src/lib/routes/routes.ts @@ -8017,7 +8085,7 @@ Precio medio por unidad apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts - 110 + 111 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html diff --git a/apps/client/src/locales/messages.fr.xlf b/apps/client/src/locales/messages.fr.xlf index f80653695..0441ee54e 100644 --- a/apps/client/src/locales/messages.fr.xlf +++ b/apps/client/src/locales/messages.fr.xlf @@ -5,8 +5,8 @@ The risk of loss in trading can be substantial. It is not advisable to invest money you may need in the short term. Le risque de perte en investissant peut être important. Il est déconseillé d’investir de l’argent dont vous pourriez avoir besoin à court terme. - apps/client/src/app/app.component.html - 221 + apps/client/src/app/components/footer/footer.component.html + 171 @@ -29,6 +29,14 @@ 11 + + please + please + + apps/client/src/app/pages/pricing/pricing-page.html + 350 + + Type Type @@ -46,7 +54,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 160 + 158 @@ -102,7 +110,7 @@ Nom apps/client/src/app/components/admin-market-data/admin-market-data.html - 89 + 88 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -142,7 +150,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 137 + 135 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -178,7 +186,7 @@ apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html - 47 + 45 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -194,7 +202,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 280 + 278 @@ -246,11 +254,11 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 261 + 259 libs/ui/src/lib/activities-table/activities-table.component.html - 297 + 295 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -274,7 +282,7 @@ apps/client/src/app/components/admin-market-data/admin-market-data.html - 268 + 267 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -290,7 +298,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 434 + 440 @@ -298,7 +306,7 @@ Supprimer apps/client/src/app/components/admin-market-data/admin-market-data.html - 290 + 289 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -326,7 +334,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 461 + 467 libs/ui/src/lib/benchmark/benchmark.component.html @@ -350,7 +358,7 @@ apps/client/src/app/components/admin-market-data/admin-market-data.html - 106 + 105 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -482,7 +490,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 169 + 167 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html @@ -494,7 +502,7 @@ Prix du marché apps/client/src/app/components/admin-market-data/admin-market-data.html - 133 + 132 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -518,7 +526,7 @@ Première Activité apps/client/src/app/components/admin-market-data/admin-market-data.html - 148 + 147 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -538,7 +546,7 @@ Nombre d’Activités apps/client/src/app/components/admin-market-data/admin-market-data.html - 157 + 156 @@ -546,7 +554,7 @@ Données Historiques apps/client/src/app/components/admin-market-data/admin-market-data.html - 166 + 165 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor.component.html @@ -558,7 +566,7 @@ Nombre de Secteurs apps/client/src/app/components/admin-market-data/admin-market-data.html - 175 + 174 @@ -566,7 +574,7 @@ Nombre de Pays apps/client/src/app/components/admin-market-data/admin-market-data.html - 184 + 183 @@ -574,7 +582,7 @@ Obtenir les Données du Profil apps/client/src/app/components/admin-market-data/admin-market-data.html - 235 + 234 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -730,7 +738,7 @@ Ajouter Devise apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html - 22 + 20 @@ -1078,7 +1086,7 @@ apps/client/src/app/pages/landing/landing-page.html - 451 + 350 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html @@ -1088,6 +1096,10 @@ apps/client/src/app/pages/portfolio/fire/fire-page.html 81 + + apps/client/src/app/pages/pricing/pricing-page.html + 343 + apps/client/src/app/pages/register/register-page.html 31 @@ -1182,7 +1194,7 @@ Fortune apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 261 + 264 @@ -1190,7 +1202,7 @@ Performance annualisée apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 274 + 277 @@ -1230,7 +1242,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 190 + 188 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -1242,7 +1254,7 @@ Signaler une Erreur de Données apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 451 + 452 @@ -1345,8 +1357,8 @@ About À propos - apps/client/src/app/app.component.html - 70 + apps/client/src/app/components/footer/footer.component.html + 20 apps/client/src/app/components/header/header.component.html @@ -1369,8 +1381,8 @@ Privacy Policy Politique de Vie Privée - apps/client/src/app/app.component.html - 105 + apps/client/src/app/components/footer/footer.component.html + 55 apps/client/src/app/pages/about/privacy-policy/privacy-policy-page.html @@ -1705,8 +1717,8 @@ Blog Blog - apps/client/src/app/app.component.html - 74 + apps/client/src/app/components/footer/footer.component.html + 24 apps/client/src/app/pages/blog/2021/07/hallo-ghostfolio/hallo-ghostfolio-page.html @@ -1817,8 +1829,8 @@ Frequently Asked Questions (FAQ) Questions Fréquentes (FAQ) - apps/client/src/app/app.component.html - 83 + apps/client/src/app/components/footer/footer.component.html + 33 apps/client/src/app/pages/about/overview/about-overview-page.html @@ -1837,8 +1849,8 @@ Features Fonctionnalités - apps/client/src/app/app.component.html - 79 + apps/client/src/app/components/footer/footer.component.html + 29 apps/client/src/app/components/header/header.component.html @@ -1893,8 +1905,8 @@ Markets Marchés - apps/client/src/app/app.component.html - 61 + apps/client/src/app/components/footer/footer.component.html + 11 apps/client/src/app/components/header/header.component.html @@ -2018,7 +2030,7 @@ apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html - 29 + 27 apps/client/src/app/components/home-watchlist/create-watchlist-item-dialog/create-watchlist-item-dialog.html @@ -2038,7 +2050,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 214 + 212 @@ -2269,6 +2281,14 @@ 138 + + Looking for a student discount? + Looking for a student discount? + + apps/client/src/app/pages/pricing/pricing-page.html + 359 + + Dividend Dividende @@ -2282,7 +2302,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 307 + 310 apps/client/src/app/pages/features/features-page.html @@ -2385,8 +2405,8 @@ Pricing Prix - apps/client/src/app/app.component.html - 99 + apps/client/src/app/components/footer/footer.component.html + 49 apps/client/src/app/components/header/header.component.html @@ -2517,8 +2537,8 @@ Resources Ressources - apps/client/src/app/app.component.html - 64 + apps/client/src/app/components/footer/footer.component.html + 14 apps/client/src/app/components/header/header.component.html @@ -2602,7 +2622,7 @@ Brouillon libs/ui/src/lib/activities-table/activities-table.component.html - 144 + 142 @@ -2618,7 +2638,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 375 + 377 @@ -2630,7 +2650,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 400 + 402 @@ -2642,7 +2662,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 413 + 415 @@ -2650,7 +2670,7 @@ Dupliquer libs/ui/src/lib/activities-table/activities-table.component.html - 440 + 446 @@ -2658,7 +2678,7 @@ Exporter Brouillon sous ICS libs/ui/src/lib/activities-table/activities-table.component.html - 450 + 456 @@ -2677,6 +2697,14 @@ 117 + + contact us + contact us + + apps/client/src/app/pages/pricing/pricing-page.html + 353 + + from ATH par rapport au record historique @@ -2698,7 +2726,7 @@ Montant Total Prévu libs/ui/src/lib/fire-calculator/fire-calculator.component.html - 60 + 59 @@ -2710,7 +2738,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 295 + 298 libs/ui/src/lib/fire-calculator/fire-calculator.component.ts @@ -2766,7 +2794,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 312 + 310 libs/ui/src/lib/assistant/assistant.html @@ -2782,7 +2810,7 @@ Classe d’Actifs apps/client/src/app/components/admin-market-data/admin-market-data.html - 115 + 114 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -2814,7 +2842,7 @@ Sous-classe d’Actifs apps/client/src/app/components/admin-market-data/admin-market-data.html - 124 + 123 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -2874,7 +2902,7 @@ apps/client/src/app/components/admin-market-data/admin-market-data.html - 75 + 74 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -2882,7 +2910,7 @@ apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html - 39 + 37 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -3142,7 +3170,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 387 + 389 @@ -3470,11 +3498,11 @@ apps/client/src/app/pages/landing/landing-page.html - 447 + 346 apps/client/src/app/pages/pricing/pricing-page.html - 351 + 378 apps/client/src/app/pages/resources/personal-finance-tools/product-page.html @@ -3486,7 +3514,7 @@ C’est gratuit. apps/client/src/app/pages/pricing/pricing-page.html - 353 + 380 @@ -3913,8 +3941,8 @@ Changelog Historique des modifications - apps/client/src/app/app.component.html - 77 + apps/client/src/app/components/footer/footer.component.html + 27 apps/client/src/app/pages/about/changelog/changelog-page.html @@ -3929,8 +3957,8 @@ License Licence - apps/client/src/app/app.component.html - 89 + apps/client/src/app/components/footer/footer.component.html + 39 apps/client/src/app/pages/about/license/license-page.html @@ -4638,7 +4666,7 @@ Protégez vos actifs. Affinez votre stratégie d’investissement personnelle.. apps/client/src/app/pages/landing/landing-page.html - 226 + 125 @@ -4646,7 +4674,7 @@ Ghostfolio permet aux personnes occupées de suivre ses actions, ETF ou cryptomonnaies sans être pistées. apps/client/src/app/pages/landing/landing-page.html - 230 + 129 @@ -4654,7 +4682,7 @@ Vision 360° apps/client/src/app/pages/landing/landing-page.html - 240 + 139 @@ -4662,7 +4690,7 @@ Compatible Web3 apps/client/src/app/pages/landing/landing-page.html - 251 + 150 @@ -4670,7 +4698,7 @@ Utilisez Ghostfolio de manière anonyme et soyez propriétaire de vos données financières. apps/client/src/app/pages/landing/landing-page.html - 254 + 153 @@ -4678,7 +4706,7 @@ Bénéficiez d’améliorations continues grâce à une communauté impliquée. apps/client/src/app/pages/landing/landing-page.html - 264 + 163 @@ -4694,7 +4722,7 @@ Pourquoi Ghostfolio? apps/client/src/app/pages/landing/landing-page.html - 272 + 171 @@ -4702,7 +4730,7 @@ Ghostfolio est pour vous si vous ... apps/client/src/app/pages/landing/landing-page.html - 274 + 173 @@ -4710,7 +4738,7 @@ tradez des actions, ETFs or crypto-monnaies sur plusieurs plateforme. apps/client/src/app/pages/landing/landing-page.html - 280 + 179 @@ -4718,7 +4746,7 @@ adoptez une stratégie Buy & and Hold apps/client/src/app/pages/landing/landing-page.html - 286 + 185 @@ -4726,7 +4754,7 @@ êtes intéressés d’avoir un aperçu de la composition de votre portefeuille apps/client/src/app/pages/landing/landing-page.html - 291 + 190 @@ -4734,7 +4762,7 @@ valorisez la confidentialité et la propriété de vos données apps/client/src/app/pages/landing/landing-page.html - 296 + 195 @@ -4742,7 +4770,7 @@ êtes minimaliste apps/client/src/app/pages/landing/landing-page.html - 299 + 198 @@ -4750,7 +4778,7 @@ vous souciez de diversifier vos ressources financières apps/client/src/app/pages/landing/landing-page.html - 303 + 202 @@ -4758,7 +4786,7 @@ êtes intéressés d’atteindre l’indépendance financière apps/client/src/app/pages/landing/landing-page.html - 307 + 206 @@ -4766,7 +4794,7 @@ dites non aux feuilles de calcul en apps/client/src/app/pages/landing/landing-page.html - 311 + 210 @@ -4774,7 +4802,7 @@ continuez à lire cette liste apps/client/src/app/pages/landing/landing-page.html - 314 + 213 @@ -4782,7 +4810,7 @@ En appendre plus sur Ghostfolio apps/client/src/app/pages/landing/landing-page.html - 319 + 218 @@ -4790,7 +4818,7 @@ Qu’en pensent nos utilisateurs apps/client/src/app/pages/landing/landing-page.html - 328 + 227 @@ -4798,7 +4826,7 @@ Les utilisateurs du monde entier utilisent Ghostfolio Premium apps/client/src/app/pages/landing/landing-page.html - 367 + 266 @@ -4806,7 +4834,7 @@ Comment fonctionne Ghostfolio ? apps/client/src/app/pages/landing/landing-page.html - 384 + 283 @@ -4814,7 +4842,7 @@ Inscrivez-vous de manière anonyme* apps/client/src/app/pages/landing/landing-page.html - 392 + 291 @@ -4822,7 +4850,7 @@ * aucune adresse mail ni carte de crédit requise apps/client/src/app/pages/landing/landing-page.html - 394 + 293 @@ -4830,7 +4858,7 @@ Ajoutez l’une de vos transactions historiques apps/client/src/app/pages/landing/landing-page.html - 406 + 305 @@ -4838,7 +4866,7 @@ Obtenez de précieuses informations sur la composition de votre portefeuille apps/client/src/app/pages/landing/landing-page.html - 418 + 317 @@ -4846,7 +4874,7 @@ Êtes- vous prêts ? apps/client/src/app/pages/landing/landing-page.html - 432 + 331 @@ -4854,7 +4882,7 @@ Obtenez une vue d’ensemble de vos finances personnelles sur plusieurs plateformes. apps/client/src/app/pages/landing/landing-page.html - 243 + 142 @@ -4862,7 +4890,7 @@ Démarrer en seulement 3 étapes apps/client/src/app/pages/landing/landing-page.html - 386 + 285 @@ -5163,6 +5191,14 @@ 62 + + with your university e-mail address + with your university e-mail address + + apps/client/src/app/pages/pricing/pricing-page.html + 365 + + (Last 30 days) (Derniers 30 jours) @@ -5232,7 +5268,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 238 + 236 libs/ui/src/lib/i18n.ts @@ -5335,6 +5371,14 @@ 37 + + Request it + Request it + + apps/client/src/app/pages/pricing/pricing-page.html + 361 + + Access Accès @@ -5372,7 +5416,7 @@ Ajouter manuellement apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html - 19 + 18 @@ -5651,6 +5695,14 @@ 88 + + here + here + + apps/client/src/app/pages/pricing/pricing-page.html + 364 + + Absolute Asset Performance Performance des Actifs en valeur absolue @@ -6021,7 +6073,7 @@ Rejoindre ou voir un compte démo apps/client/src/app/pages/landing/landing-page.html - 435 + 334 @@ -6053,7 +6105,7 @@ Supprimer des Profils apps/client/src/app/components/admin-market-data/admin-market-data.html - 243 + 242 @@ -6124,8 +6176,8 @@ Community Communauté - apps/client/src/app/app.component.html - 130 + apps/client/src/app/components/footer/footer.component.html + 80 apps/client/src/app/components/user-account-settings/user-account-settings.html @@ -6197,7 +6249,7 @@ Open Source apps/client/src/app/pages/landing/landing-page.html - 261 + 160 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts @@ -6208,8 +6260,8 @@ Personal Finance Gestion de Patrimoine - apps/client/src/app/app.component.html - 57 + apps/client/src/app/components/footer/footer.component.html + 7 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts @@ -6469,7 +6521,7 @@ apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html - 59 + 57 apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html @@ -6521,7 +6573,7 @@ apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html - 61 + 59 apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html @@ -6596,6 +6648,14 @@ 63 + + If you plan to open an account at + If you plan to open an account at + + apps/client/src/app/pages/pricing/pricing-page.html + 329 + + Performance with currency effect Performance Performance avec taux de change appliqué Performance @@ -6665,7 +6725,7 @@ Oups! Devise non valide. apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html - 50 + 48 @@ -6700,6 +6760,14 @@ 163 + + to use our referral link and get a Ghostfolio Premium membership for one year + to use our referral link and get a Ghostfolio Premium membership for one year + + apps/client/src/app/pages/pricing/pricing-page.html + 357 + + can be self-hosted peut être auto-hébergé @@ -7023,7 +7091,7 @@ apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html - 70 + 68 apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html @@ -7387,8 +7455,8 @@ Terms of Service Conditions d’utilisation - apps/client/src/app/app.component.html - 112 + apps/client/src/app/components/footer/footer.component.html + 62 libs/common/src/lib/routes/routes.ts @@ -7440,7 +7508,7 @@ Collecter les données récentes du marché historique apps/client/src/app/components/admin-market-data/admin-market-data.html - 226 + 225 @@ -7448,7 +7516,7 @@ Collecter toutes les données du marché historique apps/client/src/app/components/admin-market-data/admin-market-data.html - 231 + 230 @@ -7645,7 +7713,7 @@ apps/client/src/app/pages/landing/landing-page.html - 452 + 351 libs/common/src/lib/routes/routes.ts @@ -8016,7 +8084,7 @@ Average Unit Price apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts - 110 + 111 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html diff --git a/apps/client/src/locales/messages.it.xlf b/apps/client/src/locales/messages.it.xlf index 1c83e0337..22683ad89 100644 --- a/apps/client/src/locales/messages.it.xlf +++ b/apps/client/src/locales/messages.it.xlf @@ -26,8 +26,8 @@ The risk of loss in trading can be substantial. It is not advisable to invest money you may need in the short term. Il rischio di perdita nel trading può essere notevole. Non è consigliabile investire denaro di cui potresti avere bisogno a breve termine. - apps/client/src/app/app.component.html - 221 + apps/client/src/app/components/footer/footer.component.html + 171 @@ -38,6 +38,14 @@ 11 + + please + please + + apps/client/src/app/pages/pricing/pricing-page.html + 350 + + Type Tipo @@ -55,7 +63,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 160 + 158 @@ -95,7 +103,7 @@ Nome apps/client/src/app/components/admin-market-data/admin-market-data.html - 89 + 88 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -135,7 +143,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 137 + 135 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -191,11 +199,11 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 261 + 259 libs/ui/src/lib/activities-table/activities-table.component.html - 297 + 295 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -219,7 +227,7 @@ apps/client/src/app/components/admin-market-data/admin-market-data.html - 268 + 267 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -235,7 +243,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 434 + 440 @@ -243,7 +251,7 @@ Elimina apps/client/src/app/components/admin-market-data/admin-market-data.html - 290 + 289 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -271,7 +279,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 461 + 467 libs/ui/src/lib/benchmark/benchmark.component.html @@ -303,7 +311,7 @@ apps/client/src/app/components/admin-market-data/admin-market-data.html - 106 + 105 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -427,7 +435,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 169 + 167 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html @@ -439,7 +447,7 @@ Prezzo di mercato apps/client/src/app/components/admin-market-data/admin-market-data.html - 133 + 132 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -455,7 +463,7 @@ Prima attività apps/client/src/app/components/admin-market-data/admin-market-data.html - 148 + 147 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -483,7 +491,7 @@ Dati storici apps/client/src/app/components/admin-market-data/admin-market-data.html - 166 + 165 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor.component.html @@ -535,7 +543,7 @@ Raccogli i dati del profilo apps/client/src/app/components/admin-market-data/admin-market-data.html - 235 + 234 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -547,7 +555,7 @@ Aggiungi valuta apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html - 22 + 20 @@ -783,7 +791,7 @@ apps/client/src/app/pages/landing/landing-page.html - 451 + 350 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html @@ -793,6 +801,10 @@ apps/client/src/app/pages/portfolio/fire/fire-page.html 81 + + apps/client/src/app/pages/pricing/pricing-page.html + 343 + apps/client/src/app/pages/register/register-page.html 31 @@ -879,7 +891,7 @@ Patrimonio netto apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 261 + 264 @@ -887,7 +899,7 @@ Prestazioni annualizzate apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 274 + 277 @@ -955,7 +967,7 @@ Segnala un’anomalia dei dati apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 451 + 452 @@ -1050,8 +1062,8 @@ About Informazioni su - apps/client/src/app/app.component.html - 70 + apps/client/src/app/components/footer/footer.component.html + 20 apps/client/src/app/components/header/header.component.html @@ -1074,8 +1086,8 @@ Privacy Policy Informativa sulla privacy - apps/client/src/app/app.component.html - 105 + apps/client/src/app/components/footer/footer.component.html + 55 apps/client/src/app/pages/about/privacy-policy/privacy-policy-page.html @@ -1323,7 +1335,7 @@ apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html - 47 + 45 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -1339,7 +1351,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 280 + 278 @@ -1402,8 +1414,8 @@ Blog Blog - apps/client/src/app/app.component.html - 74 + apps/client/src/app/components/footer/footer.component.html + 24 apps/client/src/app/pages/blog/2021/07/hallo-ghostfolio/hallo-ghostfolio-page.html @@ -1514,8 +1526,8 @@ Frequently Asked Questions (FAQ) Domande più frequenti (FAQ) - apps/client/src/app/app.component.html - 83 + apps/client/src/app/components/footer/footer.component.html + 33 apps/client/src/app/pages/about/overview/about-overview-page.html @@ -1534,8 +1546,8 @@ Features Funzionalità - apps/client/src/app/app.component.html - 79 + apps/client/src/app/components/footer/footer.component.html + 29 apps/client/src/app/components/header/header.component.html @@ -1590,8 +1602,8 @@ Markets Mercati - apps/client/src/app/app.component.html - 61 + apps/client/src/app/components/footer/footer.component.html + 11 apps/client/src/app/components/header/header.component.html @@ -1839,7 +1851,7 @@ apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html - 29 + 27 apps/client/src/app/components/home-watchlist/create-watchlist-item-dialog/create-watchlist-item-dialog.html @@ -1863,7 +1875,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 190 + 188 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -1879,7 +1891,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 214 + 212 @@ -1970,8 +1982,8 @@ Pricing Prezzi - apps/client/src/app/app.component.html - 99 + apps/client/src/app/components/footer/footer.component.html + 49 apps/client/src/app/components/header/header.component.html @@ -2086,8 +2098,8 @@ Resources Risorse - apps/client/src/app/app.component.html - 64 + apps/client/src/app/components/footer/footer.component.html + 14 apps/client/src/app/components/header/header.component.html @@ -2135,7 +2147,7 @@ Bozza libs/ui/src/lib/activities-table/activities-table.component.html - 144 + 142 @@ -2151,7 +2163,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 375 + 377 @@ -2163,7 +2175,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 400 + 402 @@ -2175,7 +2187,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 413 + 415 @@ -2183,7 +2195,7 @@ Clona libs/ui/src/lib/activities-table/activities-table.component.html - 440 + 446 @@ -2191,7 +2203,7 @@ Esporta la bozza come ICS libs/ui/src/lib/activities-table/activities-table.component.html - 450 + 456 @@ -2210,6 +2222,14 @@ 117 + + contact us + contact us + + apps/client/src/app/pages/pricing/pricing-page.html + 353 + + from ATH dal massimo storico (ATH) @@ -2391,7 +2411,7 @@ Importo totale previsto libs/ui/src/lib/fire-calculator/fire-calculator.component.html - 60 + 59 @@ -2411,7 +2431,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 295 + 298 libs/ui/src/lib/fire-calculator/fire-calculator.component.ts @@ -2443,7 +2463,7 @@ Numero di settori apps/client/src/app/components/admin-market-data/admin-market-data.html - 175 + 174 @@ -2451,7 +2471,7 @@ Numero di paesi apps/client/src/app/components/admin-market-data/admin-market-data.html - 184 + 183 @@ -2627,7 +2647,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 312 + 310 libs/ui/src/lib/assistant/assistant.html @@ -2643,7 +2663,7 @@ Classe asset apps/client/src/app/components/admin-market-data/admin-market-data.html - 115 + 114 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -2679,7 +2699,7 @@ apps/client/src/app/components/admin-market-data/admin-market-data.html - 75 + 74 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -2687,7 +2707,7 @@ apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html - 39 + 37 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -2951,7 +2971,7 @@ Conteggio attività apps/client/src/app/components/admin-market-data/admin-market-data.html - 157 + 156 @@ -2970,6 +2990,14 @@ 357 + + Looking for a student discount? + Looking for a student discount? + + apps/client/src/app/pages/pricing/pricing-page.html + 359 + + Dividend Dividendi @@ -2983,7 +3011,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 307 + 310 apps/client/src/app/pages/features/features-page.html @@ -3015,7 +3043,7 @@ Sottoclasse asset apps/client/src/app/components/admin-market-data/admin-market-data.html - 124 + 123 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -3143,7 +3171,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 387 + 389 @@ -3471,11 +3499,11 @@ apps/client/src/app/pages/landing/landing-page.html - 447 + 346 apps/client/src/app/pages/pricing/pricing-page.html - 351 + 378 apps/client/src/app/pages/resources/personal-finance-tools/product-page.html @@ -3487,7 +3515,7 @@ È gratuito. apps/client/src/app/pages/pricing/pricing-page.html - 353 + 380 @@ -3914,8 +3942,8 @@ Changelog Changelog - apps/client/src/app/app.component.html - 77 + apps/client/src/app/components/footer/footer.component.html + 27 apps/client/src/app/pages/about/changelog/changelog-page.html @@ -3930,8 +3958,8 @@ License Licenza - apps/client/src/app/app.component.html - 89 + apps/client/src/app/components/footer/footer.component.html + 39 apps/client/src/app/pages/about/license/license-page.html @@ -4639,7 +4667,7 @@ Proteggi i tuoi asset. Perfeziona la tua strategia di investimento personale. apps/client/src/app/pages/landing/landing-page.html - 226 + 125 @@ -4647,7 +4675,7 @@ Ghostfolio permette alle persone impegnate di tenere traccia di azioni, ETF o criptovalute senza essere tracciate. apps/client/src/app/pages/landing/landing-page.html - 230 + 129 @@ -4655,7 +4683,7 @@ Vista a 360° apps/client/src/app/pages/landing/landing-page.html - 240 + 139 @@ -4663,7 +4691,7 @@ Pronto per il Web3 apps/client/src/app/pages/landing/landing-page.html - 251 + 150 @@ -4671,7 +4699,7 @@ Usa Ghostfolio in modo anonimo e possiedi i tuoi dati finanziari. apps/client/src/app/pages/landing/landing-page.html - 254 + 153 @@ -4679,7 +4707,7 @@ Beneficia dei continui miglioramenti grazie a una forte comunità. apps/client/src/app/pages/landing/landing-page.html - 264 + 163 @@ -4695,7 +4723,7 @@ Perché Ghostfolio? apps/client/src/app/pages/landing/landing-page.html - 272 + 171 @@ -4703,7 +4731,7 @@ Ghostfolio è per te se... apps/client/src/app/pages/landing/landing-page.html - 274 + 173 @@ -4711,7 +4739,7 @@ fai trading di azioni, ETF o criptovalute su più piattaforme apps/client/src/app/pages/landing/landing-page.html - 280 + 179 @@ -4719,7 +4747,7 @@ persegui una strategia buy & hold apps/client/src/app/pages/landing/landing-page.html - 286 + 185 @@ -4727,7 +4755,7 @@ sei interessato a conoscere la composizione del tuo portafoglio apps/client/src/app/pages/landing/landing-page.html - 291 + 190 @@ -4735,7 +4763,7 @@ valorizzi la privacy e la proprietà dei dati apps/client/src/app/pages/landing/landing-page.html - 296 + 195 @@ -4743,7 +4771,7 @@ sei per il minimalismo apps/client/src/app/pages/landing/landing-page.html - 299 + 198 @@ -4751,7 +4779,7 @@ ti interessa diversificare le tue risorse finanziarie apps/client/src/app/pages/landing/landing-page.html - 303 + 202 @@ -4759,7 +4787,7 @@ sei interessato all’indipendenza finanziaria apps/client/src/app/pages/landing/landing-page.html - 307 + 206 @@ -4767,7 +4795,7 @@ non vuoi utilizzare il foglio elettronico nel apps/client/src/app/pages/landing/landing-page.html - 311 + 210 @@ -4775,7 +4803,7 @@ stai ancora leggendo questo elenco apps/client/src/app/pages/landing/landing-page.html - 314 + 213 @@ -4783,7 +4811,7 @@ Ulteriori informazioni su Ghostfolio apps/client/src/app/pages/landing/landing-page.html - 319 + 218 @@ -4791,7 +4819,7 @@ Cosa dicono i nostri utenti apps/client/src/app/pages/landing/landing-page.html - 328 + 227 @@ -4799,7 +4827,7 @@ Membri da tutto il mondo utilizzano Ghostfolio Premium apps/client/src/app/pages/landing/landing-page.html - 367 + 266 @@ -4807,7 +4835,7 @@ Come funziona Ghostfolio? apps/client/src/app/pages/landing/landing-page.html - 384 + 283 @@ -4815,7 +4843,7 @@ Iscriviti in modo anonimo* apps/client/src/app/pages/landing/landing-page.html - 392 + 291 @@ -4823,7 +4851,7 @@ * non è richiesto alcun indirizzo email né la carta di credito apps/client/src/app/pages/landing/landing-page.html - 394 + 293 @@ -4831,7 +4859,7 @@ Aggiungi le tue transazioni storiche apps/client/src/app/pages/landing/landing-page.html - 406 + 305 @@ -4839,7 +4867,7 @@ Ottieni informazioni preziose sulla composizione del tuo portafoglio apps/client/src/app/pages/landing/landing-page.html - 418 + 317 @@ -4847,7 +4875,7 @@ Sei pronto? apps/client/src/app/pages/landing/landing-page.html - 432 + 331 @@ -4855,7 +4883,7 @@ Ottieni un quadro completo delle tue finanze personali su più piattaforme. apps/client/src/app/pages/landing/landing-page.html - 243 + 142 @@ -4863,7 +4891,7 @@ Inizia in soli 3 passi apps/client/src/app/pages/landing/landing-page.html - 386 + 285 @@ -5164,6 +5192,14 @@ 62 + + with your university e-mail address + with your university e-mail address + + apps/client/src/app/pages/pricing/pricing-page.html + 365 + + (Last 30 days) (Ultimi 30 giorni) @@ -5233,7 +5269,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 238 + 236 libs/ui/src/lib/i18n.ts @@ -5336,6 +5372,14 @@ 37 + + Request it + Request it + + apps/client/src/app/pages/pricing/pricing-page.html + 361 + + Access Accesso @@ -5373,7 +5417,7 @@ Aggiungi manualmente apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html - 19 + 18 @@ -5652,6 +5696,14 @@ 88 + + here + here + + apps/client/src/app/pages/pricing/pricing-page.html + 364 + + Absolute Asset Performance Rendimento assoluto dell’Asset @@ -6022,7 +6074,7 @@ Registrati adesso o prova l’account demo apps/client/src/app/pages/landing/landing-page.html - 435 + 334 @@ -6054,7 +6106,7 @@ Elimina i profili apps/client/src/app/components/admin-market-data/admin-market-data.html - 243 + 242 @@ -6125,8 +6177,8 @@ Community Comunità - apps/client/src/app/app.component.html - 130 + apps/client/src/app/components/footer/footer.component.html + 80 apps/client/src/app/components/user-account-settings/user-account-settings.html @@ -6198,7 +6250,7 @@ Open Source apps/client/src/app/pages/landing/landing-page.html - 261 + 160 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts @@ -6209,8 +6261,8 @@ Personal Finance Finanza Personale - apps/client/src/app/app.component.html - 57 + apps/client/src/app/components/footer/footer.component.html + 7 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts @@ -6470,7 +6522,7 @@ apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html - 59 + 57 apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html @@ -6522,7 +6574,7 @@ apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html - 61 + 59 apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html @@ -6597,6 +6649,14 @@ 63 + + If you plan to open an account at + If you plan to open an account at + + apps/client/src/app/pages/pricing/pricing-page.html + 329 + + Performance with currency effect Performance Prestazioni con effetto valuta Prestazioni @@ -6666,7 +6726,7 @@ Oops! Valuta sbagliata. apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html - 50 + 48 @@ -6701,6 +6761,14 @@ 163 + + to use our referral link and get a Ghostfolio Premium membership for one year + to use our referral link and get a Ghostfolio Premium membership for one year + + apps/client/src/app/pages/pricing/pricing-page.html + 357 + + can be self-hosted può essere ospitato in proprio @@ -7024,7 +7092,7 @@ apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html - 70 + 68 apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html @@ -7388,8 +7456,8 @@ Terms of Service Termini e condizioni - apps/client/src/app/app.component.html - 112 + apps/client/src/app/components/footer/footer.component.html + 62 libs/common/src/lib/routes/routes.ts @@ -7441,7 +7509,7 @@ Raccogli dati storici di mercato recenti apps/client/src/app/components/admin-market-data/admin-market-data.html - 226 + 225 @@ -7449,7 +7517,7 @@ Raccogli tutti i dati storici di mercato apps/client/src/app/components/admin-market-data/admin-market-data.html - 231 + 230 @@ -7646,7 +7714,7 @@ apps/client/src/app/pages/landing/landing-page.html - 452 + 351 libs/common/src/lib/routes/routes.ts @@ -8017,7 +8085,7 @@ Average Unit Price apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts - 110 + 111 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html diff --git a/apps/client/src/locales/messages.nl.xlf b/apps/client/src/locales/messages.nl.xlf index 6c1e247c8..5a1e0bc13 100644 --- a/apps/client/src/locales/messages.nl.xlf +++ b/apps/client/src/locales/messages.nl.xlf @@ -25,8 +25,8 @@ The risk of loss in trading can be substantial. It is not advisable to invest money you may need in the short term. Het risico op verlies bij handelen kan aanzienlijk zijn. Het is niet aan te raden om geld te investeren dat je misschien op korte termijn nodig heeft. - apps/client/src/app/app.component.html - 221 + apps/client/src/app/components/footer/footer.component.html + 171 @@ -37,6 +37,14 @@ 11 + + please + please + + apps/client/src/app/pages/pricing/pricing-page.html + 350 + + Type Type @@ -54,7 +62,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 160 + 158 @@ -94,7 +102,7 @@ Naam apps/client/src/app/components/admin-market-data/admin-market-data.html - 89 + 88 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -134,7 +142,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 137 + 135 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -190,11 +198,11 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 261 + 259 libs/ui/src/lib/activities-table/activities-table.component.html - 297 + 295 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -218,7 +226,7 @@ apps/client/src/app/components/admin-market-data/admin-market-data.html - 268 + 267 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -234,7 +242,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 434 + 440 @@ -242,7 +250,7 @@ Verwijderen apps/client/src/app/components/admin-market-data/admin-market-data.html - 290 + 289 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -270,7 +278,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 461 + 467 libs/ui/src/lib/benchmark/benchmark.component.html @@ -302,7 +310,7 @@ apps/client/src/app/components/admin-market-data/admin-market-data.html - 106 + 105 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -426,7 +434,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 169 + 167 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html @@ -438,7 +446,7 @@ Marktprijs apps/client/src/app/components/admin-market-data/admin-market-data.html - 133 + 132 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -454,7 +462,7 @@ Eerste activiteit apps/client/src/app/components/admin-market-data/admin-market-data.html - 148 + 147 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -482,7 +490,7 @@ Historische gegevens apps/client/src/app/components/admin-market-data/admin-market-data.html - 166 + 165 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor.component.html @@ -534,7 +542,7 @@ Verzamel profielgegevens apps/client/src/app/components/admin-market-data/admin-market-data.html - 235 + 234 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -546,7 +554,7 @@ Valuta toevoegen apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html - 22 + 20 @@ -782,7 +790,7 @@ apps/client/src/app/pages/landing/landing-page.html - 451 + 350 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html @@ -792,6 +800,10 @@ apps/client/src/app/pages/portfolio/fire/fire-page.html 81 + + apps/client/src/app/pages/pricing/pricing-page.html + 343 + apps/client/src/app/pages/register/register-page.html 31 @@ -878,7 +890,7 @@ Netto waarde apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 261 + 264 @@ -886,7 +898,7 @@ Rendement per jaar apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 274 + 277 @@ -954,7 +966,7 @@ Gegevensstoring melden apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 451 + 452 @@ -1049,8 +1061,8 @@ About Over - apps/client/src/app/app.component.html - 70 + apps/client/src/app/components/footer/footer.component.html + 20 apps/client/src/app/components/header/header.component.html @@ -1073,8 +1085,8 @@ Privacy Policy Privacybeleid - apps/client/src/app/app.component.html - 105 + apps/client/src/app/components/footer/footer.component.html + 55 apps/client/src/app/pages/about/privacy-policy/privacy-policy-page.html @@ -1322,7 +1334,7 @@ apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html - 47 + 45 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -1338,7 +1350,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 280 + 278 @@ -1401,8 +1413,8 @@ Blog Blog - apps/client/src/app/app.component.html - 74 + apps/client/src/app/components/footer/footer.component.html + 24 apps/client/src/app/pages/blog/2021/07/hallo-ghostfolio/hallo-ghostfolio-page.html @@ -1513,8 +1525,8 @@ Frequently Asked Questions (FAQ) Veelgestelde vragen - apps/client/src/app/app.component.html - 83 + apps/client/src/app/components/footer/footer.component.html + 33 apps/client/src/app/pages/about/overview/about-overview-page.html @@ -1533,8 +1545,8 @@ Features Functionaliteiten - apps/client/src/app/app.component.html - 79 + apps/client/src/app/components/footer/footer.component.html + 29 apps/client/src/app/components/header/header.component.html @@ -1589,8 +1601,8 @@ Markets Markten - apps/client/src/app/app.component.html - 61 + apps/client/src/app/components/footer/footer.component.html + 11 apps/client/src/app/components/header/header.component.html @@ -1838,7 +1850,7 @@ apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html - 29 + 27 apps/client/src/app/components/home-watchlist/create-watchlist-item-dialog/create-watchlist-item-dialog.html @@ -1862,7 +1874,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 190 + 188 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -1878,7 +1890,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 214 + 212 @@ -1969,8 +1981,8 @@ Pricing Prijzen - apps/client/src/app/app.component.html - 99 + apps/client/src/app/components/footer/footer.component.html + 49 apps/client/src/app/components/header/header.component.html @@ -2085,8 +2097,8 @@ Resources Bronnen - apps/client/src/app/app.component.html - 64 + apps/client/src/app/components/footer/footer.component.html + 14 apps/client/src/app/components/header/header.component.html @@ -2134,7 +2146,7 @@ Concept libs/ui/src/lib/activities-table/activities-table.component.html - 144 + 142 @@ -2150,7 +2162,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 375 + 377 @@ -2162,7 +2174,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 400 + 402 @@ -2174,7 +2186,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 413 + 415 @@ -2182,7 +2194,7 @@ Kloon libs/ui/src/lib/activities-table/activities-table.component.html - 440 + 446 @@ -2190,7 +2202,7 @@ Concept exporteren als ICS libs/ui/src/lib/activities-table/activities-table.component.html - 450 + 456 @@ -2209,6 +2221,14 @@ 117 + + contact us + contact us + + apps/client/src/app/pages/pricing/pricing-page.html + 353 + + from ATH van ATH @@ -2390,7 +2410,7 @@ Verwacht totaalbedrag libs/ui/src/lib/fire-calculator/fire-calculator.component.html - 60 + 59 @@ -2410,7 +2430,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 295 + 298 libs/ui/src/lib/fire-calculator/fire-calculator.component.ts @@ -2442,7 +2462,7 @@ Aantal sectoren apps/client/src/app/components/admin-market-data/admin-market-data.html - 175 + 174 @@ -2450,7 +2470,7 @@ Aantal landen apps/client/src/app/components/admin-market-data/admin-market-data.html - 184 + 183 @@ -2626,7 +2646,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 312 + 310 libs/ui/src/lib/assistant/assistant.html @@ -2642,7 +2662,7 @@ Asset klasse apps/client/src/app/components/admin-market-data/admin-market-data.html - 115 + 114 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -2678,7 +2698,7 @@ apps/client/src/app/components/admin-market-data/admin-market-data.html - 75 + 74 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -2686,7 +2706,7 @@ apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html - 39 + 37 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -2950,7 +2970,7 @@ Aantal activiteiten apps/client/src/app/components/admin-market-data/admin-market-data.html - 157 + 156 @@ -2969,6 +2989,14 @@ 357 + + Looking for a student discount? + Looking for a student discount? + + apps/client/src/app/pages/pricing/pricing-page.html + 359 + + Dividend Dividend @@ -2982,7 +3010,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 307 + 310 apps/client/src/app/pages/features/features-page.html @@ -3014,7 +3042,7 @@ Asset subklasse apps/client/src/app/components/admin-market-data/admin-market-data.html - 124 + 123 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -3142,7 +3170,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 387 + 389 @@ -3470,11 +3498,11 @@ apps/client/src/app/pages/landing/landing-page.html - 447 + 346 apps/client/src/app/pages/pricing/pricing-page.html - 351 + 378 apps/client/src/app/pages/resources/personal-finance-tools/product-page.html @@ -3486,7 +3514,7 @@ Het is gratis. apps/client/src/app/pages/pricing/pricing-page.html - 353 + 380 @@ -3913,8 +3941,8 @@ Changelog Changelog - apps/client/src/app/app.component.html - 77 + apps/client/src/app/components/footer/footer.component.html + 27 apps/client/src/app/pages/about/changelog/changelog-page.html @@ -3929,8 +3957,8 @@ License Licentie - apps/client/src/app/app.component.html - 89 + apps/client/src/app/components/footer/footer.component.html + 39 apps/client/src/app/pages/about/license/license-page.html @@ -4638,7 +4666,7 @@ Bescherm je financiële bezittingen. Verfijn je persoonlijke investeringsstrategie. apps/client/src/app/pages/landing/landing-page.html - 226 + 125 @@ -4646,7 +4674,7 @@ Ghostfolio stelt drukbezette mensen in staat om aandelen, ETF’s of cryptocurrencies bij te houden zonder gevolgd te worden. apps/client/src/app/pages/landing/landing-page.html - 230 + 129 @@ -4654,7 +4682,7 @@ 360°-overzicht apps/client/src/app/pages/landing/landing-page.html - 240 + 139 @@ -4662,7 +4690,7 @@ Klaar voor Web3 apps/client/src/app/pages/landing/landing-page.html - 251 + 150 @@ -4670,7 +4698,7 @@ Gebruik Ghostfolio anoniem en bezit je financiële gegevens. apps/client/src/app/pages/landing/landing-page.html - 254 + 153 @@ -4678,7 +4706,7 @@ Profiteer van voortdurende verbeteringen door een sterke gemeenschap. apps/client/src/app/pages/landing/landing-page.html - 264 + 163 @@ -4694,7 +4722,7 @@ Waarom Ghostfolio? apps/client/src/app/pages/landing/landing-page.html - 272 + 171 @@ -4702,7 +4730,7 @@ Ghostfolio is iets voor je als je... apps/client/src/app/pages/landing/landing-page.html - 274 + 173 @@ -4710,7 +4738,7 @@ handelt in aandelen, ETF’s of cryptocurrencies op meerdere platforms apps/client/src/app/pages/landing/landing-page.html - 280 + 179 @@ -4718,7 +4746,7 @@ streeft naar een buy & hold strategie apps/client/src/app/pages/landing/landing-page.html - 286 + 185 @@ -4726,7 +4754,7 @@ geïnteresseerd bent in het krijgen van inzicht in je portefeuillesamenstelling apps/client/src/app/pages/landing/landing-page.html - 291 + 190 @@ -4734,7 +4762,7 @@ privacy en eigendom van gegevens waardeert apps/client/src/app/pages/landing/landing-page.html - 296 + 195 @@ -4742,7 +4770,7 @@ houdt van een minimalistisch ontwerp apps/client/src/app/pages/landing/landing-page.html - 299 + 198 @@ -4750,7 +4778,7 @@ zorgdraagt voor het diversifiëren van je financiële middelen apps/client/src/app/pages/landing/landing-page.html - 303 + 202 @@ -4758,7 +4786,7 @@ geïnteresseerd bent in financiële onafhankelijkheid apps/client/src/app/pages/landing/landing-page.html - 307 + 206 @@ -4766,7 +4794,7 @@ "nee" zegt tegen spreadsheets in apps/client/src/app/pages/landing/landing-page.html - 311 + 210 @@ -4774,7 +4802,7 @@ nog steeds deze lijst aan het lezen bent apps/client/src/app/pages/landing/landing-page.html - 314 + 213 @@ -4782,7 +4810,7 @@ Leer meer over Ghostfolio apps/client/src/app/pages/landing/landing-page.html - 319 + 218 @@ -4790,7 +4818,7 @@ Wat onze gebruikers zeggen apps/client/src/app/pages/landing/landing-page.html - 328 + 227 @@ -4798,7 +4826,7 @@ Leden van over de hele wereld gebruikenGhostfolio Premium apps/client/src/app/pages/landing/landing-page.html - 367 + 266 @@ -4806,7 +4834,7 @@ Hoe Ghostfolio werkt? apps/client/src/app/pages/landing/landing-page.html - 384 + 283 @@ -4814,7 +4842,7 @@ Anoniem aanmelden* apps/client/src/app/pages/landing/landing-page.html - 392 + 291 @@ -4822,7 +4850,7 @@ * geen e-mailadres of creditcard nodig apps/client/src/app/pages/landing/landing-page.html - 394 + 293 @@ -4830,7 +4858,7 @@ Voeg al je historische transacties toe apps/client/src/app/pages/landing/landing-page.html - 406 + 305 @@ -4838,7 +4866,7 @@ Krijg waardevolle inzichten in de samenstelling van je portefeuille apps/client/src/app/pages/landing/landing-page.html - 418 + 317 @@ -4846,7 +4874,7 @@ Ben jij er klaar voor? apps/client/src/app/pages/landing/landing-page.html - 432 + 331 @@ -4854,7 +4882,7 @@ Krijg een volledig beeld van je persoonlijke financiën op meerdere platforms. apps/client/src/app/pages/landing/landing-page.html - 243 + 142 @@ -4862,7 +4890,7 @@ Aan de slag in slechts 3 stappen apps/client/src/app/pages/landing/landing-page.html - 386 + 285 @@ -5163,6 +5191,14 @@ 62 + + with your university e-mail address + with your university e-mail address + + apps/client/src/app/pages/pricing/pricing-page.html + 365 + + (Last 30 days) (Laatste 30 dagen) @@ -5232,7 +5268,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 238 + 236 libs/ui/src/lib/i18n.ts @@ -5335,6 +5371,14 @@ 37 + + Request it + Request it + + apps/client/src/app/pages/pricing/pricing-page.html + 361 + + Access Toegang @@ -5372,7 +5416,7 @@ Voeg Handmatig Toe apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html - 19 + 18 @@ -5651,6 +5695,14 @@ 88 + + here + here + + apps/client/src/app/pages/pricing/pricing-page.html + 364 + + Absolute Asset Performance Absolute Activaprestaties @@ -6021,7 +6073,7 @@ Word nu lid of bekijk het voorbeeldaccount apps/client/src/app/pages/landing/landing-page.html - 435 + 334 @@ -6053,7 +6105,7 @@ Verwijder Profielen apps/client/src/app/components/admin-market-data/admin-market-data.html - 243 + 242 @@ -6124,8 +6176,8 @@ Community Gemeenschap - apps/client/src/app/app.component.html - 130 + apps/client/src/app/components/footer/footer.component.html + 80 apps/client/src/app/components/user-account-settings/user-account-settings.html @@ -6197,7 +6249,7 @@ Open Source apps/client/src/app/pages/landing/landing-page.html - 261 + 160 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts @@ -6208,8 +6260,8 @@ Personal Finance Persoonlijke Financiën - apps/client/src/app/app.component.html - 57 + apps/client/src/app/components/footer/footer.component.html + 7 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts @@ -6469,7 +6521,7 @@ apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html - 59 + 57 apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html @@ -6521,7 +6573,7 @@ apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html - 61 + 59 apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html @@ -6596,6 +6648,14 @@ 63 + + If you plan to open an account at + If you plan to open an account at + + apps/client/src/app/pages/pricing/pricing-page.html + 329 + + Performance with currency effect Performance Prestatie met valuta effect Prestatie @@ -6665,7 +6725,7 @@ Oeps! Ongeldige valuta. apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html - 50 + 48 @@ -6700,6 +6760,14 @@ 163 + + to use our referral link and get a Ghostfolio Premium membership for one year + to use our referral link and get a Ghostfolio Premium membership for one year + + apps/client/src/app/pages/pricing/pricing-page.html + 357 + + can be self-hosted kan zelf gehost worden @@ -7023,7 +7091,7 @@ apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html - 70 + 68 apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html @@ -7387,8 +7455,8 @@ Terms of Service Servicevoorwaarden - apps/client/src/app/app.component.html - 112 + apps/client/src/app/components/footer/footer.component.html + 62 libs/common/src/lib/routes/routes.ts @@ -7440,7 +7508,7 @@ Verzamel Recente Marktgegevens apps/client/src/app/components/admin-market-data/admin-market-data.html - 226 + 225 @@ -7448,7 +7516,7 @@ Verzamel Alle Marktgegevens apps/client/src/app/components/admin-market-data/admin-market-data.html - 231 + 230 @@ -7645,7 +7713,7 @@ apps/client/src/app/pages/landing/landing-page.html - 452 + 351 libs/common/src/lib/routes/routes.ts @@ -8016,7 +8084,7 @@ Gemiddelde eenheidsprijs apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts - 110 + 111 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html diff --git a/apps/client/src/locales/messages.pl.xlf b/apps/client/src/locales/messages.pl.xlf index 860e0742f..91b0ee581 100644 --- a/apps/client/src/locales/messages.pl.xlf +++ b/apps/client/src/locales/messages.pl.xlf @@ -214,8 +214,8 @@ The risk of loss in trading can be substantial. It is not advisable to invest money you may need in the short term. Ryzyko strat na rynku może być znaczne. Nie jest zalecane inwestowanie pieniędzy, które mogą być potrzebne w krótkim okresie. - apps/client/src/app/app.component.html - 221 + apps/client/src/app/components/footer/footer.component.html + 171 @@ -238,6 +238,14 @@ 11 + + please + please + + apps/client/src/app/pages/pricing/pricing-page.html + 350 + + Type Typ @@ -255,7 +263,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 160 + 158 @@ -339,7 +347,7 @@ Nazwa apps/client/src/app/components/admin-market-data/admin-market-data.html - 89 + 88 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -379,7 +387,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 137 + 135 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -415,7 +423,7 @@ apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html - 47 + 45 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -431,7 +439,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 280 + 278 @@ -467,11 +475,11 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 261 + 259 libs/ui/src/lib/activities-table/activities-table.component.html - 297 + 295 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -495,7 +503,7 @@ apps/client/src/app/components/admin-market-data/admin-market-data.html - 268 + 267 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -511,7 +519,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 434 + 440 @@ -519,7 +527,7 @@ Usuń apps/client/src/app/components/admin-market-data/admin-market-data.html - 290 + 289 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -547,7 +555,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 461 + 467 libs/ui/src/lib/benchmark/benchmark.component.html @@ -591,7 +599,7 @@ apps/client/src/app/components/admin-market-data/admin-market-data.html - 106 + 105 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -703,7 +711,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 169 + 167 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html @@ -715,7 +723,7 @@ Cena Rynkowa apps/client/src/app/components/admin-market-data/admin-market-data.html - 133 + 132 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -775,7 +783,7 @@ Pierwsza Aktywność apps/client/src/app/components/admin-market-data/admin-market-data.html - 148 + 147 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -795,7 +803,7 @@ Liczba Aktywności apps/client/src/app/components/admin-market-data/admin-market-data.html - 157 + 156 @@ -803,7 +811,7 @@ Dane Historyczne apps/client/src/app/components/admin-market-data/admin-market-data.html - 166 + 165 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor.component.html @@ -815,7 +823,7 @@ Liczba Sektorów apps/client/src/app/components/admin-market-data/admin-market-data.html - 175 + 174 @@ -823,7 +831,7 @@ Liczba Krajów apps/client/src/app/components/admin-market-data/admin-market-data.html - 184 + 183 @@ -831,7 +839,7 @@ Zbierz Dane Profilu apps/client/src/app/components/admin-market-data/admin-market-data.html - 235 + 234 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -995,7 +1003,7 @@ Dodaj Ręcznie apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html - 19 + 18 @@ -1007,7 +1015,7 @@ apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html - 29 + 27 apps/client/src/app/components/home-watchlist/create-watchlist-item-dialog/create-watchlist-item-dialog.html @@ -1087,7 +1095,7 @@ Dodaj Walutę apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html - 22 + 20 @@ -1651,7 +1659,7 @@ apps/client/src/app/pages/landing/landing-page.html - 451 + 350 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html @@ -1661,6 +1669,10 @@ apps/client/src/app/pages/portfolio/fire/fire-page.html 81 + + apps/client/src/app/pages/pricing/pricing-page.html + 343 + apps/client/src/app/pages/register/register-page.html 31 @@ -1787,7 +1799,7 @@ Wartość Netto apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 261 + 264 @@ -1795,7 +1807,7 @@ Osiągi w Ujęciu Rocznym apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 274 + 277 @@ -1835,7 +1847,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 190 + 188 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -1847,7 +1859,7 @@ Zgłoś Błąd Danych apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 451 + 452 @@ -2374,8 +2386,8 @@ About O Ghostfolio - apps/client/src/app/app.component.html - 70 + apps/client/src/app/components/footer/footer.component.html + 20 apps/client/src/app/components/header/header.component.html @@ -2398,8 +2410,8 @@ Changelog Changelog - apps/client/src/app/app.component.html - 77 + apps/client/src/app/components/footer/footer.component.html + 27 apps/client/src/app/pages/about/changelog/changelog-page.html @@ -2414,8 +2426,8 @@ License Licencja - apps/client/src/app/app.component.html - 89 + apps/client/src/app/components/footer/footer.component.html + 39 apps/client/src/app/pages/about/license/license-page.html @@ -2430,8 +2442,8 @@ Privacy Policy Polityka Prywatności - apps/client/src/app/app.component.html - 105 + apps/client/src/app/components/footer/footer.component.html + 55 apps/client/src/app/pages/about/privacy-policy/privacy-policy-page.html @@ -2654,8 +2666,8 @@ Blog Blog - apps/client/src/app/app.component.html - 74 + apps/client/src/app/components/footer/footer.component.html + 24 apps/client/src/app/pages/blog/2021/07/hallo-ghostfolio/hallo-ghostfolio-page.html @@ -2774,8 +2786,8 @@ Frequently Asked Questions (FAQ) Często zadawane pytania (FAQ) - apps/client/src/app/app.component.html - 83 + apps/client/src/app/components/footer/footer.component.html + 33 apps/client/src/app/pages/about/overview/about-overview-page.html @@ -2794,8 +2806,8 @@ Features Funkcje - apps/client/src/app/app.component.html - 79 + apps/client/src/app/components/footer/footer.component.html + 29 apps/client/src/app/components/header/header.component.html @@ -2966,8 +2978,8 @@ Markets Rynki - apps/client/src/app/app.component.html - 61 + apps/client/src/app/components/footer/footer.component.html + 11 apps/client/src/app/components/header/header.component.html @@ -3063,11 +3075,11 @@ apps/client/src/app/pages/landing/landing-page.html - 447 + 346 apps/client/src/app/pages/pricing/pricing-page.html - 351 + 378 apps/client/src/app/pages/resources/personal-finance-tools/product-page.html @@ -3119,7 +3131,7 @@ Chroń swoje zasoby. Udoskonal swoją osobistą strategię inwestycyjną. apps/client/src/app/pages/landing/landing-page.html - 226 + 125 @@ -3127,7 +3139,7 @@ Ghostfolio umożliwia zapracowanym osobom śledzenie akcji, funduszy ETF lub kryptowalut, jednocześnie zachowując prywatność. apps/client/src/app/pages/landing/landing-page.html - 230 + 129 @@ -3135,7 +3147,7 @@ Widok 360° apps/client/src/app/pages/landing/landing-page.html - 240 + 139 @@ -3143,7 +3155,7 @@ Uzyskaj pełny obraz swoich finansów osobistych na wielu różnych platformach. apps/client/src/app/pages/landing/landing-page.html - 243 + 142 @@ -3151,7 +3163,7 @@ Gotowy na Web3 apps/client/src/app/pages/landing/landing-page.html - 251 + 150 @@ -3159,7 +3171,7 @@ Korzystaj z Ghostfolio anonimowo i zachowaj pełną kontrolę nad swoimi danymi finansowymi. apps/client/src/app/pages/landing/landing-page.html - 254 + 153 @@ -3167,7 +3179,7 @@ Czerp korzyści z nieustannych ulepszeń dzięki silnej społeczności. apps/client/src/app/pages/landing/landing-page.html - 264 + 163 @@ -3183,7 +3195,7 @@ Dlaczego Ghostfolio? apps/client/src/app/pages/landing/landing-page.html - 272 + 171 @@ -3191,7 +3203,7 @@ Ghostfolio jest dla Ciebie, jeśli... apps/client/src/app/pages/landing/landing-page.html - 274 + 173 @@ -3199,7 +3211,7 @@ handlujesz akcjami, funduszami ETF lub kryptowalutami na wielu platformach apps/client/src/app/pages/landing/landing-page.html - 280 + 179 @@ -3207,7 +3219,7 @@ realizujesz strategię buy & hold apps/client/src/app/pages/landing/landing-page.html - 286 + 185 @@ -3215,7 +3227,7 @@ chcesz uzyskać wgląd w strukturę swojego portfolio apps/client/src/app/pages/landing/landing-page.html - 291 + 190 @@ -3223,7 +3235,7 @@ cenisz sobie prywatność i własność swoich danych apps/client/src/app/pages/landing/landing-page.html - 296 + 195 @@ -3231,7 +3243,7 @@ lubisz minimalizm apps/client/src/app/pages/landing/landing-page.html - 299 + 198 @@ -3239,7 +3251,7 @@ zależy Ci na dywersyfikacji swoich zasobów finansowych apps/client/src/app/pages/landing/landing-page.html - 303 + 202 @@ -3247,7 +3259,7 @@ jesteś zainteresowany niezależnością finansową apps/client/src/app/pages/landing/landing-page.html - 307 + 206 @@ -3255,7 +3267,7 @@ mówisz „nie” arkuszom kalkulacyjnym w roku apps/client/src/app/pages/landing/landing-page.html - 311 + 210 @@ -3263,7 +3275,7 @@ nadal czytasz tę listę apps/client/src/app/pages/landing/landing-page.html - 314 + 213 @@ -3271,7 +3283,7 @@ Dowiedz się więcej o Ghostfolio apps/client/src/app/pages/landing/landing-page.html - 319 + 218 @@ -3279,7 +3291,7 @@ Co mówią nasi użytkownicy apps/client/src/app/pages/landing/landing-page.html - 328 + 227 @@ -3287,7 +3299,7 @@ Użytkownicy z całego świata korzystają z Ghostfolio Premium apps/client/src/app/pages/landing/landing-page.html - 367 + 266 @@ -3295,7 +3307,7 @@ Jak działa Ghostfolio ? apps/client/src/app/pages/landing/landing-page.html - 384 + 283 @@ -3303,7 +3315,7 @@ Rozpocznij w zaledwie 3 krokach apps/client/src/app/pages/landing/landing-page.html - 386 + 285 @@ -3319,7 +3331,7 @@ Zarejestruj się anonimowo* apps/client/src/app/pages/landing/landing-page.html - 392 + 291 @@ -3327,7 +3339,7 @@ * nie jest wymagany ani adres e-mail, ani karta kredytowa apps/client/src/app/pages/landing/landing-page.html - 394 + 293 @@ -3335,7 +3347,7 @@ Dodaj dowolne z Twoich historycznych transakcji apps/client/src/app/pages/landing/landing-page.html - 406 + 305 @@ -3343,7 +3355,7 @@ Zyskaj cenny wgląd w strukturę swojego portfolio apps/client/src/app/pages/landing/landing-page.html - 418 + 317 @@ -3351,7 +3363,7 @@ Czy jesteś gotów? apps/client/src/app/pages/landing/landing-page.html - 432 + 331 @@ -3378,6 +3390,14 @@ 62 + + with your university e-mail address + with your university e-mail address + + apps/client/src/app/pages/pricing/pricing-page.html + 365 + + Active Users Aktywni Użytkownicy @@ -3587,7 +3607,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 214 + 212 @@ -3603,7 +3623,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 375 + 377 @@ -3619,7 +3639,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 387 + 389 @@ -3918,6 +3938,14 @@ 138 + + Looking for a student discount? + Looking for a student discount? + + apps/client/src/app/pages/pricing/pricing-page.html + 359 + + Dividend Dywidenda @@ -3931,7 +3959,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 307 + 310 apps/client/src/app/pages/features/features-page.html @@ -4058,8 +4086,8 @@ Pricing Cennik - apps/client/src/app/app.component.html - 99 + apps/client/src/app/components/footer/footer.component.html + 49 apps/client/src/app/components/header/header.component.html @@ -4275,7 +4303,7 @@ Jest bezpłatny. apps/client/src/app/pages/pricing/pricing-page.html - 353 + 380 @@ -4647,8 +4675,8 @@ Resources Zasoby - apps/client/src/app/app.component.html - 64 + apps/client/src/app/components/footer/footer.component.html + 14 apps/client/src/app/components/header/header.component.html @@ -4679,6 +4707,14 @@ 37 + + Request it + Request it + + apps/client/src/app/pages/pricing/pricing-page.html + 361 + + Access Dostęp @@ -4732,7 +4768,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 400 + 402 @@ -4744,7 +4780,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 413 + 415 @@ -4752,7 +4788,7 @@ Przygotuj Wstępną Wersję libs/ui/src/lib/activities-table/activities-table.component.html - 144 + 142 @@ -4760,7 +4796,7 @@ Sklonuj libs/ui/src/lib/activities-table/activities-table.component.html - 440 + 446 @@ -4768,7 +4804,7 @@ Eksportuj Wersję Roboczą jako ICS libs/ui/src/lib/activities-table/activities-table.component.html - 450 + 456 @@ -4811,6 +4847,14 @@ 117 + + contact us + contact us + + apps/client/src/app/pages/pricing/pricing-page.html + 353 + + from ATH od ATH @@ -4856,7 +4900,7 @@ Przewidywana Łączna Kwota libs/ui/src/lib/fire-calculator/fire-calculator.component.html - 60 + 59 @@ -4868,7 +4912,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 295 + 298 libs/ui/src/lib/fire-calculator/fire-calculator.component.ts @@ -4924,7 +4968,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 312 + 310 libs/ui/src/lib/assistant/assistant.html @@ -4948,7 +4992,7 @@ Rodzaj Aktywów apps/client/src/app/components/admin-market-data/admin-market-data.html - 115 + 114 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -4980,7 +5024,7 @@ Podklasa Aktywów apps/client/src/app/components/admin-market-data/admin-market-data.html - 124 + 123 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -5152,7 +5196,7 @@ apps/client/src/app/components/admin-market-data/admin-market-data.html - 75 + 74 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -5160,7 +5204,7 @@ apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html - 39 + 37 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -5220,7 +5264,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 238 + 236 libs/ui/src/lib/i18n.ts @@ -5651,6 +5695,14 @@ 88 + + here + here + + apps/client/src/app/pages/pricing/pricing-page.html + 364 + + Absolute Asset Performance Łączny wynik aktywów @@ -6021,7 +6073,7 @@ Dołącz teraz lub sprawdź przykładowe konto apps/client/src/app/pages/landing/landing-page.html - 435 + 334 @@ -6053,7 +6105,7 @@ Usuń Profile apps/client/src/app/components/admin-market-data/admin-market-data.html - 243 + 242 @@ -6124,8 +6176,8 @@ Community Społeczność - apps/client/src/app/app.component.html - 130 + apps/client/src/app/components/footer/footer.component.html + 80 apps/client/src/app/components/user-account-settings/user-account-settings.html @@ -6197,7 +6249,7 @@ Otwarty Kod Źródłowy apps/client/src/app/pages/landing/landing-page.html - 261 + 160 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts @@ -6208,8 +6260,8 @@ Personal Finance Finanse Osobiste - apps/client/src/app/app.component.html - 57 + apps/client/src/app/components/footer/footer.component.html + 7 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts @@ -6469,7 +6521,7 @@ apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html - 59 + 57 apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html @@ -6521,7 +6573,7 @@ apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html - 61 + 59 apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html @@ -6596,6 +6648,14 @@ 63 + + If you plan to open an account at + If you plan to open an account at + + apps/client/src/app/pages/pricing/pricing-page.html + 329 + + Performance with currency effect Performance Wydajność z efektem walutowym Wydajność @@ -6665,7 +6725,7 @@ Ups! Błędna waluta. apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html - 50 + 48 @@ -6700,6 +6760,14 @@ 163 + + to use our referral link and get a Ghostfolio Premium membership for one year + to use our referral link and get a Ghostfolio Premium membership for one year + + apps/client/src/app/pages/pricing/pricing-page.html + 357 + + can be self-hosted może być hostowany samodzielnie @@ -7023,7 +7091,7 @@ apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html - 70 + 68 apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html @@ -7387,8 +7455,8 @@ Terms of Service Warunki świadczenia usług - apps/client/src/app/app.component.html - 112 + apps/client/src/app/components/footer/footer.component.html + 62 libs/common/src/lib/routes/routes.ts @@ -7440,7 +7508,7 @@ Zbierz najnowsze historyczne dane rynkowe apps/client/src/app/components/admin-market-data/admin-market-data.html - 226 + 225 @@ -7448,7 +7516,7 @@ Zbierz wszystkie historyczne dane rynkowe apps/client/src/app/components/admin-market-data/admin-market-data.html - 231 + 230 @@ -7645,7 +7713,7 @@ apps/client/src/app/pages/landing/landing-page.html - 452 + 351 libs/common/src/lib/routes/routes.ts @@ -8016,7 +8084,7 @@ Średnia cena jednostkowa apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts - 110 + 111 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html diff --git a/apps/client/src/locales/messages.pt.xlf b/apps/client/src/locales/messages.pt.xlf index 8d3d2593a..63afd8e3a 100644 --- a/apps/client/src/locales/messages.pt.xlf +++ b/apps/client/src/locales/messages.pt.xlf @@ -5,8 +5,8 @@ The risk of loss in trading can be substantial. It is not advisable to invest money you may need in the short term. O risco de perda em investimentos pode ser substancial. Não é aconselhável investir dinheiro que possa vir a precisar a curto prazo. - apps/client/src/app/app.component.html - 221 + apps/client/src/app/components/footer/footer.component.html + 171 @@ -29,6 +29,14 @@ 11 + + please + please + + apps/client/src/app/pages/pricing/pricing-page.html + 350 + + Type Tipo @@ -46,7 +54,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 160 + 158 @@ -102,7 +110,7 @@ Nome apps/client/src/app/components/admin-market-data/admin-market-data.html - 89 + 88 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -142,7 +150,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 137 + 135 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -178,7 +186,7 @@ apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html - 47 + 45 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -194,7 +202,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 280 + 278 @@ -246,11 +254,11 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 261 + 259 libs/ui/src/lib/activities-table/activities-table.component.html - 297 + 295 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -274,7 +282,7 @@ apps/client/src/app/components/admin-market-data/admin-market-data.html - 268 + 267 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -290,7 +298,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 434 + 440 @@ -298,7 +306,7 @@ Eliminar apps/client/src/app/components/admin-market-data/admin-market-data.html - 290 + 289 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -326,7 +334,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 461 + 467 libs/ui/src/lib/benchmark/benchmark.component.html @@ -350,7 +358,7 @@ apps/client/src/app/components/admin-market-data/admin-market-data.html - 106 + 105 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -482,7 +490,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 169 + 167 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html @@ -494,7 +502,7 @@ Preço de Mercado apps/client/src/app/components/admin-market-data/admin-market-data.html - 133 + 132 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -518,7 +526,7 @@ Primeira Atividade apps/client/src/app/components/admin-market-data/admin-market-data.html - 148 + 147 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -546,7 +554,7 @@ Dados Históricos apps/client/src/app/components/admin-market-data/admin-market-data.html - 166 + 165 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor.component.html @@ -558,7 +566,7 @@ Contagem de Países apps/client/src/app/components/admin-market-data/admin-market-data.html - 184 + 183 @@ -566,7 +574,7 @@ Contagem de Setores apps/client/src/app/components/admin-market-data/admin-market-data.html - 175 + 174 @@ -574,7 +582,7 @@ Recolher Dados de Perfíl apps/client/src/app/components/admin-market-data/admin-market-data.html - 235 + 234 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -626,7 +634,7 @@ Adicionar Moeda apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html - 22 + 20 @@ -958,7 +966,7 @@ apps/client/src/app/pages/landing/landing-page.html - 451 + 350 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html @@ -968,6 +976,10 @@ apps/client/src/app/pages/portfolio/fire/fire-page.html 81 + + apps/client/src/app/pages/pricing/pricing-page.html + 343 + apps/client/src/app/pages/register/register-page.html 31 @@ -1062,7 +1074,7 @@ Valor Líquido apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 261 + 264 @@ -1070,7 +1082,7 @@ Desempenho Anual apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 274 + 277 @@ -1110,7 +1122,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 190 + 188 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -1202,7 +1214,7 @@ Dados do Relatório com Problema apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 451 + 452 @@ -1333,8 +1345,8 @@ About Sobre - apps/client/src/app/app.component.html - 70 + apps/client/src/app/components/footer/footer.component.html + 20 apps/client/src/app/components/header/header.component.html @@ -1357,8 +1369,8 @@ Privacy Policy Política de Privacidade - apps/client/src/app/app.component.html - 105 + apps/client/src/app/components/footer/footer.component.html + 55 apps/client/src/app/pages/about/privacy-policy/privacy-policy-page.html @@ -1681,8 +1693,8 @@ Blog Blog - apps/client/src/app/app.component.html - 74 + apps/client/src/app/components/footer/footer.component.html + 24 apps/client/src/app/pages/blog/2021/07/hallo-ghostfolio/hallo-ghostfolio-page.html @@ -1793,8 +1805,8 @@ Frequently Asked Questions (FAQ) FAQ - apps/client/src/app/app.component.html - 83 + apps/client/src/app/components/footer/footer.component.html + 33 apps/client/src/app/pages/about/overview/about-overview-page.html @@ -1813,8 +1825,8 @@ Features Funcionalidades - apps/client/src/app/app.component.html - 79 + apps/client/src/app/components/footer/footer.component.html + 29 apps/client/src/app/components/header/header.component.html @@ -1869,8 +1881,8 @@ Markets Mercados - apps/client/src/app/app.component.html - 61 + apps/client/src/app/components/footer/footer.component.html + 11 apps/client/src/app/components/header/header.component.html @@ -1994,7 +2006,7 @@ apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html - 29 + 27 apps/client/src/app/components/home-watchlist/create-watchlist-item-dialog/create-watchlist-item-dialog.html @@ -2014,7 +2026,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 214 + 212 @@ -2329,8 +2341,8 @@ Pricing Preços - apps/client/src/app/app.component.html - 99 + apps/client/src/app/components/footer/footer.component.html + 49 apps/client/src/app/components/header/header.component.html @@ -2461,8 +2473,8 @@ Resources Recursos - apps/client/src/app/app.component.html - 64 + apps/client/src/app/components/footer/footer.component.html + 14 apps/client/src/app/components/header/header.component.html @@ -2510,7 +2522,7 @@ Rascunho libs/ui/src/lib/activities-table/activities-table.component.html - 144 + 142 @@ -2526,7 +2538,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 375 + 377 @@ -2538,7 +2550,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 400 + 402 @@ -2550,7 +2562,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 413 + 415 @@ -2558,7 +2570,7 @@ Clonar libs/ui/src/lib/activities-table/activities-table.component.html - 440 + 446 @@ -2566,7 +2578,7 @@ Exportar Rascunho como ICS libs/ui/src/lib/activities-table/activities-table.component.html - 450 + 456 @@ -2585,6 +2597,14 @@ 117 + + contact us + contact us + + apps/client/src/app/pages/pricing/pricing-page.html + 353 + + from ATH a partir do ATH (All Time High) @@ -2606,7 +2626,7 @@ Montante Total Projetado libs/ui/src/lib/fire-calculator/fire-calculator.component.html - 60 + 59 @@ -2618,7 +2638,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 295 + 298 libs/ui/src/lib/fire-calculator/fire-calculator.component.ts @@ -2646,7 +2666,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 312 + 310 libs/ui/src/lib/assistant/assistant.html @@ -2662,7 +2682,7 @@ Classe de Ativo apps/client/src/app/components/admin-market-data/admin-market-data.html - 115 + 114 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -2726,7 +2746,7 @@ apps/client/src/app/components/admin-market-data/admin-market-data.html - 75 + 74 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -2734,7 +2754,7 @@ apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html - 39 + 37 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -2958,7 +2978,7 @@ Nº de Atividades apps/client/src/app/components/admin-market-data/admin-market-data.html - 157 + 156 @@ -3033,6 +3053,14 @@ 71 + + Looking for a student discount? + Looking for a student discount? + + apps/client/src/app/pages/pricing/pricing-page.html + 359 + + Dividend Dividendos @@ -3046,7 +3074,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 307 + 310 apps/client/src/app/pages/features/features-page.html @@ -3078,7 +3106,7 @@ Subclasse de Ativos apps/client/src/app/components/admin-market-data/admin-market-data.html - 124 + 123 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -3142,7 +3170,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 387 + 389 @@ -3470,11 +3498,11 @@ apps/client/src/app/pages/landing/landing-page.html - 447 + 346 apps/client/src/app/pages/pricing/pricing-page.html - 351 + 378 apps/client/src/app/pages/resources/personal-finance-tools/product-page.html @@ -3486,7 +3514,7 @@ É gratuito. apps/client/src/app/pages/pricing/pricing-page.html - 353 + 380 @@ -3913,8 +3941,8 @@ Changelog Registo de alterações - apps/client/src/app/app.component.html - 77 + apps/client/src/app/components/footer/footer.component.html + 27 apps/client/src/app/pages/about/changelog/changelog-page.html @@ -3929,8 +3957,8 @@ License Licença - apps/client/src/app/app.component.html - 89 + apps/client/src/app/components/footer/footer.component.html + 39 apps/client/src/app/pages/about/license/license-page.html @@ -4638,7 +4666,7 @@ Proteja o seu assets. Refine your personal investment strategy. apps/client/src/app/pages/landing/landing-page.html - 226 + 125 @@ -4646,7 +4674,7 @@ O Ghostfolio permite que pessoas ocupadas acompanhem ações, ETFs ou criptomoedas sem serem rastreadas. apps/client/src/app/pages/landing/landing-page.html - 230 + 129 @@ -4654,7 +4682,7 @@ 360° visualizar apps/client/src/app/pages/landing/landing-page.html - 240 + 139 @@ -4662,7 +4690,7 @@ Web3 Preparar apps/client/src/app/pages/landing/landing-page.html - 251 + 150 @@ -4670,7 +4698,7 @@ Use o Ghostfolio anonimamente e possua seus dados financeiros. apps/client/src/app/pages/landing/landing-page.html - 254 + 153 @@ -4678,7 +4706,7 @@ Beneficie-se de melhorias contínuas através de uma comunidade forte. apps/client/src/app/pages/landing/landing-page.html - 264 + 163 @@ -4694,7 +4722,7 @@ Por que Ghostfolio? apps/client/src/app/pages/landing/landing-page.html - 272 + 171 @@ -4702,7 +4730,7 @@ Ghostfolio é para você se você for... apps/client/src/app/pages/landing/landing-page.html - 274 + 173 @@ -4710,7 +4738,7 @@ negociar ações, ETFs ou criptomoedas em múltiplas plataformas apps/client/src/app/pages/landing/landing-page.html - 280 + 179 @@ -4718,7 +4746,7 @@ buscando uma compra & estratégia de retenção apps/client/src/app/pages/landing/landing-page.html - 286 + 185 @@ -4726,7 +4754,7 @@ interessado em obter insights sobre a composição do seu portfólio apps/client/src/app/pages/landing/landing-page.html - 291 + 190 @@ -4734,7 +4762,7 @@ valorizando a privacidade e a propriedade dos dados apps/client/src/app/pages/landing/landing-page.html - 296 + 195 @@ -4742,7 +4770,7 @@ no minimalismo apps/client/src/app/pages/landing/landing-page.html - 299 + 198 @@ -4750,7 +4778,7 @@ preocupando-se em diversificar seus recursos financeiros apps/client/src/app/pages/landing/landing-page.html - 303 + 202 @@ -4758,7 +4786,7 @@ interessado em independência financeira apps/client/src/app/pages/landing/landing-page.html - 307 + 206 @@ -4766,7 +4794,7 @@ dizendo não às planilhas em apps/client/src/app/pages/landing/landing-page.html - 311 + 210 @@ -4774,7 +4802,7 @@ ainda lendo esta lista apps/client/src/app/pages/landing/landing-page.html - 314 + 213 @@ -4782,7 +4810,7 @@ Saiba mais sobre o Ghostfolio apps/client/src/app/pages/landing/landing-page.html - 319 + 218 @@ -4790,7 +4818,7 @@ Qual é o nosso users are saying apps/client/src/app/pages/landing/landing-page.html - 328 + 227 @@ -4798,7 +4826,7 @@ Membros de todo o mundo estão usando Ghostfolio Premium apps/client/src/app/pages/landing/landing-page.html - 367 + 266 @@ -4806,7 +4834,7 @@ Como é que Ghostfolio work? apps/client/src/app/pages/landing/landing-page.html - 384 + 283 @@ -4814,7 +4842,7 @@ Inscreva-se anonimamente* apps/client/src/app/pages/landing/landing-page.html - 392 + 291 @@ -4822,7 +4850,7 @@ * no e-mail address nor credit card required apps/client/src/app/pages/landing/landing-page.html - 394 + 293 @@ -4830,7 +4858,7 @@ Adicione qualquer uma de suas transações históricas apps/client/src/app/pages/landing/landing-page.html - 406 + 305 @@ -4838,7 +4866,7 @@ Obtenha insights valiosos sobre a composição do seu portfólio apps/client/src/app/pages/landing/landing-page.html - 418 + 317 @@ -4846,7 +4874,7 @@ São you preparar? apps/client/src/app/pages/landing/landing-page.html - 432 + 331 @@ -4854,7 +4882,7 @@ Tenha uma visão completa das suas finanças pessoais em diversas plataformas. apps/client/src/app/pages/landing/landing-page.html - 243 + 142 @@ -4862,7 +4890,7 @@ Comece em apenas 3 passos apps/client/src/app/pages/landing/landing-page.html - 386 + 285 @@ -5163,6 +5191,14 @@ 62 + + with your university e-mail address + with your university e-mail address + + apps/client/src/app/pages/pricing/pricing-page.html + 365 + + (Last 30 days) (Últimos 30 dias) @@ -5232,7 +5268,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 238 + 236 libs/ui/src/lib/i18n.ts @@ -5335,6 +5371,14 @@ 37 + + Request it + Request it + + apps/client/src/app/pages/pricing/pricing-page.html + 361 + + Access Acesso @@ -5372,7 +5416,7 @@ Adicionar manualmente apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html - 19 + 18 @@ -5651,6 +5695,14 @@ 88 + + here + here + + apps/client/src/app/pages/pricing/pricing-page.html + 364 + + Absolute Asset Performance Desempenho absoluto de ativos @@ -6021,7 +6073,7 @@ Cadastre-se agora ou confira a conta de exemplo apps/client/src/app/pages/landing/landing-page.html - 435 + 334 @@ -6053,7 +6105,7 @@ Excluir perfis apps/client/src/app/components/admin-market-data/admin-market-data.html - 243 + 242 @@ -6124,8 +6176,8 @@ Community Comunidade - apps/client/src/app/app.component.html - 130 + apps/client/src/app/components/footer/footer.component.html + 80 apps/client/src/app/components/user-account-settings/user-account-settings.html @@ -6197,7 +6249,7 @@ Código aberto apps/client/src/app/pages/landing/landing-page.html - 261 + 160 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts @@ -6208,8 +6260,8 @@ Personal Finance Finanças Pessoais - apps/client/src/app/app.component.html - 57 + apps/client/src/app/components/footer/footer.component.html + 7 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts @@ -6469,7 +6521,7 @@ apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html - 59 + 57 apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html @@ -6521,7 +6573,7 @@ apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html - 61 + 59 apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html @@ -6596,6 +6648,14 @@ 63 + + If you plan to open an account at + If you plan to open an account at + + apps/client/src/app/pages/pricing/pricing-page.html + 329 + + Performance with currency effect Performance Performance with currency effect Performance @@ -6665,7 +6725,7 @@ Ops! Moeda inválida. apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html - 50 + 48 @@ -6700,6 +6760,14 @@ 163 + + to use our referral link and get a Ghostfolio Premium membership for one year + to use our referral link and get a Ghostfolio Premium membership for one year + + apps/client/src/app/pages/pricing/pricing-page.html + 357 + + can be self-hosted pode ser auto-hospedado @@ -7023,7 +7091,7 @@ apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html - 70 + 68 apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html @@ -7387,8 +7455,8 @@ Terms of Service Termos de Serviço - apps/client/src/app/app.component.html - 112 + apps/client/src/app/components/footer/footer.component.html + 62 libs/common/src/lib/routes/routes.ts @@ -7440,7 +7508,7 @@ Gather Recent Historical Market Data apps/client/src/app/components/admin-market-data/admin-market-data.html - 226 + 225 @@ -7448,7 +7516,7 @@ Gather All Historical Market Data apps/client/src/app/components/admin-market-data/admin-market-data.html - 231 + 230 @@ -7645,7 +7713,7 @@ apps/client/src/app/pages/landing/landing-page.html - 452 + 351 libs/common/src/lib/routes/routes.ts @@ -8016,7 +8084,7 @@ Preço médio unitário apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts - 110 + 111 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html diff --git a/apps/client/src/locales/messages.tr.xlf b/apps/client/src/locales/messages.tr.xlf index 5e47e4017..cf7de52c7 100644 --- a/apps/client/src/locales/messages.tr.xlf +++ b/apps/client/src/locales/messages.tr.xlf @@ -186,8 +186,8 @@ The risk of loss in trading can be substantial. It is not advisable to invest money you may need in the short term. Alım satımda kayıp riski büyük boyutta olabilir. Kısa vadede ihtiyaç duyabileceğiniz parayla yatırım yapmak tavsiye edilmez. - apps/client/src/app/app.component.html - 221 + apps/client/src/app/components/footer/footer.component.html + 171 @@ -210,6 +210,14 @@ 11 + + please + please + + apps/client/src/app/pages/pricing/pricing-page.html + 350 + + Type Tip @@ -227,7 +235,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 160 + 158 @@ -299,7 +307,7 @@ Ad apps/client/src/app/components/admin-market-data/admin-market-data.html - 89 + 88 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -339,7 +347,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 137 + 135 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -375,7 +383,7 @@ apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html - 47 + 45 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -391,7 +399,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 280 + 278 @@ -427,11 +435,11 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 261 + 259 libs/ui/src/lib/activities-table/activities-table.component.html - 297 + 295 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -455,7 +463,7 @@ apps/client/src/app/components/admin-market-data/admin-market-data.html - 268 + 267 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -471,7 +479,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 434 + 440 @@ -479,7 +487,7 @@ Sil apps/client/src/app/components/admin-market-data/admin-market-data.html - 290 + 289 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -507,7 +515,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 461 + 467 libs/ui/src/lib/benchmark/benchmark.component.html @@ -531,7 +539,7 @@ apps/client/src/app/components/admin-market-data/admin-market-data.html - 106 + 105 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -663,7 +671,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 169 + 167 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html @@ -675,7 +683,7 @@ Piyasa Fiyatı apps/client/src/app/components/admin-market-data/admin-market-data.html - 133 + 132 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -727,7 +735,7 @@ İlk İşlem apps/client/src/app/components/admin-market-data/admin-market-data.html - 148 + 147 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -747,7 +755,7 @@ İşlem Sayısı apps/client/src/app/components/admin-market-data/admin-market-data.html - 157 + 156 @@ -755,7 +763,7 @@ Tarihsel Veri apps/client/src/app/components/admin-market-data/admin-market-data.html - 166 + 165 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor.component.html @@ -767,7 +775,7 @@ Sektör Sayısı apps/client/src/app/components/admin-market-data/admin-market-data.html - 175 + 174 @@ -775,7 +783,7 @@ Ülke Sayısı apps/client/src/app/components/admin-market-data/admin-market-data.html - 184 + 183 @@ -783,7 +791,7 @@ Profil Verisini Getir apps/client/src/app/components/admin-market-data/admin-market-data.html - 235 + 234 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -919,7 +927,7 @@ apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html - 29 + 27 apps/client/src/app/components/home-watchlist/create-watchlist-item-dialog/create-watchlist-item-dialog.html @@ -983,7 +991,7 @@ Para Birimi Ekle apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html - 22 + 20 @@ -1507,7 +1515,7 @@ apps/client/src/app/pages/landing/landing-page.html - 451 + 350 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html @@ -1517,6 +1525,10 @@ apps/client/src/app/pages/portfolio/fire/fire-page.html 81 + + apps/client/src/app/pages/pricing/pricing-page.html + 343 + apps/client/src/app/pages/register/register-page.html 31 @@ -1631,7 +1643,7 @@ Toplam Varlık apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 261 + 264 @@ -1639,7 +1651,7 @@ Yıllıklandırılmış Performans apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 274 + 277 @@ -1679,7 +1691,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 190 + 188 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -1703,7 +1715,7 @@ Rapor Veri Sorunu apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 451 + 452 @@ -1974,8 +1986,8 @@ About Hakkında - apps/client/src/app/app.component.html - 70 + apps/client/src/app/components/footer/footer.component.html + 20 apps/client/src/app/components/header/header.component.html @@ -1998,8 +2010,8 @@ Changelog Değişiklik Günlüğü - apps/client/src/app/app.component.html - 77 + apps/client/src/app/components/footer/footer.component.html + 27 apps/client/src/app/pages/about/changelog/changelog-page.html @@ -2014,8 +2026,8 @@ License Lisans - apps/client/src/app/app.component.html - 89 + apps/client/src/app/components/footer/footer.component.html + 39 apps/client/src/app/pages/about/license/license-page.html @@ -2030,8 +2042,8 @@ Privacy Policy Gizlilik Politikası - apps/client/src/app/app.component.html - 105 + apps/client/src/app/components/footer/footer.component.html + 55 apps/client/src/app/pages/about/privacy-policy/privacy-policy-page.html @@ -2222,8 +2234,8 @@ Blog Blog - apps/client/src/app/app.component.html - 74 + apps/client/src/app/components/footer/footer.component.html + 24 apps/client/src/app/pages/blog/2021/07/hallo-ghostfolio/hallo-ghostfolio-page.html @@ -2342,8 +2354,8 @@ Frequently Asked Questions (FAQ) Sıkça Sorulan Sorular (SSS) - apps/client/src/app/app.component.html - 83 + apps/client/src/app/components/footer/footer.component.html + 33 apps/client/src/app/pages/about/overview/about-overview-page.html @@ -2362,8 +2374,8 @@ Features Özellikler - apps/client/src/app/app.component.html - 79 + apps/client/src/app/components/footer/footer.component.html + 29 apps/client/src/app/components/header/header.component.html @@ -2546,8 +2558,8 @@ Markets Piyasalar - apps/client/src/app/app.component.html - 61 + apps/client/src/app/components/footer/footer.component.html + 11 apps/client/src/app/components/header/header.component.html @@ -2619,11 +2631,11 @@ apps/client/src/app/pages/landing/landing-page.html - 447 + 346 apps/client/src/app/pages/pricing/pricing-page.html - 351 + 378 apps/client/src/app/pages/resources/personal-finance-tools/product-page.html @@ -2675,7 +2687,7 @@ varlıklarınızı koruyun. Kişisel yatırım stratejinizi geliştirin. apps/client/src/app/pages/landing/landing-page.html - 226 + 125 @@ -2683,7 +2695,7 @@ Ghostfolio, takip edilmeden hisse senetleri, ETF’ler veya kripto paraları izlemek isteyen yoğun insanlara güç verir. apps/client/src/app/pages/landing/landing-page.html - 230 + 129 @@ -2691,7 +2703,7 @@ 360° Görünüm apps/client/src/app/pages/landing/landing-page.html - 240 + 139 @@ -2699,7 +2711,7 @@ Kişisel finansınızın tam resmini birden fazla platformda edinin. apps/client/src/app/pages/landing/landing-page.html - 243 + 142 @@ -2707,7 +2719,7 @@ Web3 Hazır apps/client/src/app/pages/landing/landing-page.html - 251 + 150 @@ -2715,7 +2727,7 @@ Ghostfolio’yu anonim olarak kullanın ve finansal verilerinize sahip çıkın. apps/client/src/app/pages/landing/landing-page.html - 254 + 153 @@ -2723,7 +2735,7 @@ Güçlü bir topluluk aracılığıyla sürekli gelişmelerden faydalanın. apps/client/src/app/pages/landing/landing-page.html - 264 + 163 @@ -2739,7 +2751,7 @@ Neden Ghostfolio? apps/client/src/app/pages/landing/landing-page.html - 272 + 171 @@ -2747,7 +2759,7 @@ Ghostfolio tam size göre, apps/client/src/app/pages/landing/landing-page.html - 274 + 173 @@ -2755,7 +2767,7 @@ Birden fazla platformda hisse senedi, ETF veya kripto para ticareti yapıyorsanız, apps/client/src/app/pages/landing/landing-page.html - 280 + 179 @@ -2763,7 +2775,7 @@ al ve tut stratejisi izliyorsanız, apps/client/src/app/pages/landing/landing-page.html - 286 + 185 @@ -2771,7 +2783,7 @@ Portföy bileşimine dair içgörüleri edinmek istiyorsanız, apps/client/src/app/pages/landing/landing-page.html - 291 + 190 @@ -2779,7 +2791,7 @@ Gizliliğe ve verilerinize sahip çıkmayı önemsiyorsanız apps/client/src/app/pages/landing/landing-page.html - 296 + 195 @@ -2787,7 +2799,7 @@ minimalizme ilgi duyuyorsanız apps/client/src/app/pages/landing/landing-page.html - 299 + 198 @@ -2795,7 +2807,7 @@ finansal kaynaklarınızı çeşitlendirmeye önem veriyorsanız apps/client/src/app/pages/landing/landing-page.html - 303 + 202 @@ -2803,7 +2815,7 @@ finansal özgürlük peşindeyseniz apps/client/src/app/pages/landing/landing-page.html - 307 + 206 @@ -2811,7 +2823,7 @@ elektronik tablo uygulamalarına hayır diyorsanız apps/client/src/app/pages/landing/landing-page.html - 311 + 210 @@ -2819,7 +2831,7 @@ bu listeyi hala okuyorsanız apps/client/src/app/pages/landing/landing-page.html - 314 + 213 @@ -2827,7 +2839,7 @@ Ghostfolio hakkında daha fazla bilgi edinin apps/client/src/app/pages/landing/landing-page.html - 319 + 218 @@ -2835,7 +2847,7 @@ Kullanıcılarımızın görüşleri apps/client/src/app/pages/landing/landing-page.html - 328 + 227 @@ -2843,7 +2855,7 @@ Dünyanın dört bir yanındaki kullanıcılar Ghostfolio Premium kullanıyorlar. apps/client/src/app/pages/landing/landing-page.html - 367 + 266 @@ -2851,7 +2863,7 @@ NasılGhostfolio çalışır? apps/client/src/app/pages/landing/landing-page.html - 384 + 283 @@ -2859,7 +2871,7 @@ Sadece 3 adımda başlayın apps/client/src/app/pages/landing/landing-page.html - 386 + 285 @@ -2875,7 +2887,7 @@ Anonim olarak kaydolun* apps/client/src/app/pages/landing/landing-page.html - 392 + 291 @@ -2883,7 +2895,7 @@ * e-posta adresi veya kredi kartı gerekmez apps/client/src/app/pages/landing/landing-page.html - 394 + 293 @@ -2891,7 +2903,7 @@ Herhangi bir geçmiş işleminizi ekleyin apps/client/src/app/pages/landing/landing-page.html - 406 + 305 @@ -2899,7 +2911,7 @@ Portföy bileşiminizle ilgili değerli bilgiler edinin apps/client/src/app/pages/landing/landing-page.html - 418 + 317 @@ -2907,7 +2919,7 @@ Hazır mısınız? apps/client/src/app/pages/landing/landing-page.html - 432 + 331 @@ -3075,7 +3087,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 214 + 212 @@ -3091,7 +3103,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 375 + 377 @@ -3107,7 +3119,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 387 + 389 @@ -3414,6 +3426,14 @@ 138 + + Looking for a student discount? + Looking for a student discount? + + apps/client/src/app/pages/pricing/pricing-page.html + 359 + + Dividend Temettü @@ -3427,7 +3447,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 307 + 310 apps/client/src/app/pages/features/features-page.html @@ -3554,8 +3574,8 @@ Pricing Fiyatlandırma - apps/client/src/app/app.component.html - 99 + apps/client/src/app/components/footer/footer.component.html + 49 apps/client/src/app/components/header/header.component.html @@ -3771,7 +3791,7 @@ Ücretsiz. apps/client/src/app/pages/pricing/pricing-page.html - 353 + 380 @@ -4147,8 +4167,8 @@ Resources Kaynaklar - apps/client/src/app/app.component.html - 64 + apps/client/src/app/components/footer/footer.component.html + 14 apps/client/src/app/components/header/header.component.html @@ -4468,7 +4488,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 400 + 402 @@ -4480,7 +4500,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 413 + 415 @@ -4488,7 +4508,7 @@ Taslak libs/ui/src/lib/activities-table/activities-table.component.html - 144 + 142 @@ -4496,7 +4516,7 @@ Klonla libs/ui/src/lib/activities-table/activities-table.component.html - 440 + 446 @@ -4504,7 +4524,7 @@ Taslakları ICS Olarak Dışa Aktar libs/ui/src/lib/activities-table/activities-table.component.html - 450 + 456 @@ -4523,6 +4543,14 @@ 117 + + contact us + contact us + + apps/client/src/app/pages/pricing/pricing-page.html + 353 + + from ATH Tüm Zamanların En Yüksek Seviyesinden @@ -4568,7 +4596,7 @@ Hesaplanan Toplam Tutar libs/ui/src/lib/fire-calculator/fire-calculator.component.html - 60 + 59 @@ -4580,7 +4608,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 295 + 298 libs/ui/src/lib/fire-calculator/fire-calculator.component.ts @@ -4636,7 +4664,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 312 + 310 libs/ui/src/lib/assistant/assistant.html @@ -4660,7 +4688,7 @@ Varlık Sınıfı apps/client/src/app/components/admin-market-data/admin-market-data.html - 115 + 114 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -4692,7 +4720,7 @@ AVarlık Alt Sınıfı apps/client/src/app/components/admin-market-data/admin-market-data.html - 124 + 123 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -4864,7 +4892,7 @@ apps/client/src/app/components/admin-market-data/admin-market-data.html - 75 + 74 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -4872,7 +4900,7 @@ apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html - 39 + 37 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -5171,6 +5199,14 @@ 62 + + with your university e-mail address + with your university e-mail address + + apps/client/src/app/pages/pricing/pricing-page.html + 365 + + (Last 30 days) (Son 30 gün) @@ -5240,7 +5276,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 238 + 236 libs/ui/src/lib/i18n.ts @@ -5335,6 +5371,14 @@ 37 + + Request it + Request it + + apps/client/src/app/pages/pricing/pricing-page.html + 361 + + Access Erişim @@ -5372,7 +5416,7 @@ Elle Giriş apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html - 19 + 18 @@ -5651,6 +5695,14 @@ 88 + + here + here + + apps/client/src/app/pages/pricing/pricing-page.html + 364 + + Absolute Asset Performance Mutlak Varlık Performansı @@ -6021,7 +6073,7 @@ Hemen katıl ya da örnek hesabı incele apps/client/src/app/pages/landing/landing-page.html - 435 + 334 @@ -6053,7 +6105,7 @@ Profilleri Sil apps/client/src/app/components/admin-market-data/admin-market-data.html - 243 + 242 @@ -6124,8 +6176,8 @@ Community Topluluk - apps/client/src/app/app.component.html - 130 + apps/client/src/app/components/footer/footer.component.html + 80 apps/client/src/app/components/user-account-settings/user-account-settings.html @@ -6197,7 +6249,7 @@ Açık Kaynak apps/client/src/app/pages/landing/landing-page.html - 261 + 160 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts @@ -6208,8 +6260,8 @@ Personal Finance Kişisel Finans - apps/client/src/app/app.component.html - 57 + apps/client/src/app/components/footer/footer.component.html + 7 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts @@ -6469,7 +6521,7 @@ apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html - 59 + 57 apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html @@ -6521,7 +6573,7 @@ apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html - 61 + 59 apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html @@ -6596,6 +6648,14 @@ 63 + + If you plan to open an account at + If you plan to open an account at + + apps/client/src/app/pages/pricing/pricing-page.html + 329 + + Performance with currency effect Performance Kur farkı etkisiyle performans Performans @@ -6665,7 +6725,7 @@ Hay Allah! Geçersiz para birimi. apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html - 50 + 48 @@ -6700,6 +6760,14 @@ 163 + + to use our referral link and get a Ghostfolio Premium membership for one year + to use our referral link and get a Ghostfolio Premium membership for one year + + apps/client/src/app/pages/pricing/pricing-page.html + 357 + + can be self-hosted kendi sunucunuzda barındırılabilir @@ -7023,7 +7091,7 @@ apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html - 70 + 68 apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html @@ -7387,8 +7455,8 @@ Terms of Service Hizmet Koşulları - apps/client/src/app/app.component.html - 112 + apps/client/src/app/components/footer/footer.component.html + 62 libs/common/src/lib/routes/routes.ts @@ -7440,7 +7508,7 @@ Yakın Geçmiş Piyasa Verilerini Topla apps/client/src/app/components/admin-market-data/admin-market-data.html - 226 + 225 @@ -7448,7 +7516,7 @@ Tüm Geçmiş Piyasa Verilerini Topla apps/client/src/app/components/admin-market-data/admin-market-data.html - 231 + 230 @@ -7645,7 +7713,7 @@ apps/client/src/app/pages/landing/landing-page.html - 452 + 351 libs/common/src/lib/routes/routes.ts @@ -8016,7 +8084,7 @@ Average Unit Price apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts - 110 + 111 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html diff --git a/apps/client/src/locales/messages.uk.xlf b/apps/client/src/locales/messages.uk.xlf index 2a6ac4f5c..953df6a33 100644 --- a/apps/client/src/locales/messages.uk.xlf +++ b/apps/client/src/locales/messages.uk.xlf @@ -5,8 +5,8 @@ Features Функції - apps/client/src/app/app.component.html - 79 + apps/client/src/app/components/footer/footer.component.html + 29 apps/client/src/app/components/header/header.component.html @@ -101,8 +101,8 @@ The risk of loss in trading can be substantial. It is not advisable to invest money you may need in the short term. Ризик втрат у торгівлі може бути суттєвим. Не рекомендується інвестувати гроші, які можуть знадобитися в короткостроковій перспективі. - apps/client/src/app/app.component.html - 221 + apps/client/src/app/components/footer/footer.component.html + 171 @@ -290,6 +290,14 @@ 11 + + please + please + + apps/client/src/app/pages/pricing/pricing-page.html + 350 + + Permission Дозвіл @@ -447,7 +455,7 @@ Назва apps/client/src/app/components/admin-market-data/admin-market-data.html - 89 + 88 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -487,7 +495,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 137 + 135 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -523,7 +531,7 @@ apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html - 47 + 45 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -539,7 +547,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 280 + 278 @@ -575,11 +583,11 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 261 + 259 libs/ui/src/lib/activities-table/activities-table.component.html - 297 + 295 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -603,7 +611,7 @@ apps/client/src/app/components/admin-market-data/admin-market-data.html - 268 + 267 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -619,7 +627,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 434 + 440 @@ -627,7 +635,7 @@ Видалити apps/client/src/app/components/admin-market-data/admin-market-data.html - 290 + 289 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -655,7 +663,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 461 + 467 libs/ui/src/lib/benchmark/benchmark.component.html @@ -687,7 +695,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 160 + 158 @@ -727,7 +735,7 @@ apps/client/src/app/components/admin-market-data/admin-market-data.html - 106 + 105 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -883,7 +891,7 @@ Ринкова ціна apps/client/src/app/components/admin-market-data/admin-market-data.html - 133 + 132 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -899,7 +907,7 @@ Перша активність apps/client/src/app/components/admin-market-data/admin-market-data.html - 148 + 147 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -919,7 +927,7 @@ Кількість активностей apps/client/src/app/components/admin-market-data/admin-market-data.html - 157 + 156 @@ -927,7 +935,7 @@ Історичні дані apps/client/src/app/components/admin-market-data/admin-market-data.html - 166 + 165 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor.component.html @@ -939,7 +947,7 @@ Кількість секторів apps/client/src/app/components/admin-market-data/admin-market-data.html - 175 + 174 @@ -947,7 +955,7 @@ Кількість країн apps/client/src/app/components/admin-market-data/admin-market-data.html - 184 + 183 @@ -955,7 +963,7 @@ Зібрати дані профілю apps/client/src/app/components/admin-market-data/admin-market-data.html - 235 + 234 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -967,7 +975,7 @@ Видалити профілі apps/client/src/app/components/admin-market-data/admin-market-data.html - 243 + 242 @@ -1171,7 +1179,7 @@ Додати вручну apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html - 19 + 18 @@ -1179,7 +1187,7 @@ Додати валюту apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html - 22 + 20 @@ -1191,7 +1199,7 @@ apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html - 29 + 27 apps/client/src/app/components/home-watchlist/create-watchlist-item-dialog/create-watchlist-item-dialog.html @@ -1207,7 +1215,7 @@ Упс! Невірна валюта. apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html - 50 + 48 @@ -1495,7 +1503,7 @@ apps/client/src/app/pages/landing/landing-page.html - 451 + 350 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html @@ -1505,6 +1513,10 @@ apps/client/src/app/pages/portfolio/fire/fire-page.html 81 + + apps/client/src/app/pages/pricing/pricing-page.html + 343 + apps/client/src/app/pages/register/register-page.html 31 @@ -1762,6 +1774,14 @@ 63 + + If you plan to open an account at + If you plan to open an account at + + apps/client/src/app/pages/pricing/pricing-page.html + 329 + + Performance with currency effect Performance Прибутковість з урахуванням валютного ефекту валюти Прибутковість @@ -1799,7 +1819,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 190 + 188 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -1847,7 +1867,7 @@ Повідомити про збій даних apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 451 + 452 @@ -2199,7 +2219,7 @@ Чиста вартість apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 261 + 264 @@ -2207,7 +2227,7 @@ Річна доходність apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 274 + 277 @@ -2219,7 +2239,7 @@ apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html - 70 + 68 apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html @@ -2982,8 +3002,8 @@ About Про нас - apps/client/src/app/app.component.html - 70 + apps/client/src/app/components/footer/footer.component.html + 20 apps/client/src/app/components/header/header.component.html @@ -3006,8 +3026,8 @@ Changelog Журнал змін - apps/client/src/app/app.component.html - 77 + apps/client/src/app/components/footer/footer.component.html + 27 apps/client/src/app/pages/about/changelog/changelog-page.html @@ -3022,8 +3042,8 @@ License Ліцензія - apps/client/src/app/app.component.html - 89 + apps/client/src/app/components/footer/footer.component.html + 39 apps/client/src/app/pages/about/license/license-page.html @@ -3038,8 +3058,8 @@ Privacy Policy Політика конфіденційності - apps/client/src/app/app.component.html - 105 + apps/client/src/app/components/footer/footer.component.html + 55 apps/client/src/app/pages/about/privacy-policy/privacy-policy-page.html @@ -3278,8 +3298,8 @@ Blog Блог - apps/client/src/app/app.component.html - 74 + apps/client/src/app/components/footer/footer.component.html + 24 apps/client/src/app/pages/blog/2021/07/hallo-ghostfolio/hallo-ghostfolio-page.html @@ -3398,8 +3418,8 @@ Frequently Asked Questions (FAQ) Часто задавані питання (FAQ) - apps/client/src/app/app.component.html - 83 + apps/client/src/app/components/footer/footer.component.html + 33 apps/client/src/app/pages/about/overview/about-overview-page.html @@ -3615,8 +3635,8 @@ Markets Ринки - apps/client/src/app/app.component.html - 61 + apps/client/src/app/components/footer/footer.component.html + 11 apps/client/src/app/components/header/header.component.html @@ -3720,11 +3740,11 @@ apps/client/src/app/pages/landing/landing-page.html - 447 + 346 apps/client/src/app/pages/pricing/pricing-page.html - 351 + 378 apps/client/src/app/pages/resources/personal-finance-tools/product-page.html @@ -3776,7 +3796,7 @@ Захищайте свої активи. Вдосконалюйте власну інвестиційну стратегію. apps/client/src/app/pages/landing/landing-page.html - 226 + 125 @@ -3784,7 +3804,7 @@ Ghostfolio допомагає зайнятим людям відстежувати акції, ETF або криптовалюти без ризику бути відстеженими. apps/client/src/app/pages/landing/landing-page.html - 230 + 129 @@ -3792,7 +3812,7 @@ 360° огляд apps/client/src/app/pages/landing/landing-page.html - 240 + 139 @@ -3800,7 +3820,7 @@ Отримайте повну картину ваших особистих фінансів на різних платформах. apps/client/src/app/pages/landing/landing-page.html - 243 + 142 @@ -3808,7 +3828,7 @@ Готовий до Web3 apps/client/src/app/pages/landing/landing-page.html - 251 + 150 @@ -3816,7 +3836,7 @@ Використовуйте Ghostfolio анонімно та володійте своїми фінансовими даними. apps/client/src/app/pages/landing/landing-page.html - 254 + 153 @@ -3824,7 +3844,7 @@ Отримуйте користь від постійних покращень завдяки сильній спільноті. apps/client/src/app/pages/landing/landing-page.html - 264 + 163 @@ -3840,7 +3860,7 @@ Чому Ghostfolio? apps/client/src/app/pages/landing/landing-page.html - 272 + 171 @@ -3848,7 +3868,7 @@ Ghostfolio для вас, якщо ви... apps/client/src/app/pages/landing/landing-page.html - 274 + 173 @@ -3856,7 +3876,7 @@ торгуєте акціями, ETF або криптовалютами на різних платформах apps/client/src/app/pages/landing/landing-page.html - 280 + 179 @@ -3864,7 +3884,7 @@ дотримуєтеся стратегії купівлі та утримання apps/client/src/app/pages/landing/landing-page.html - 286 + 185 @@ -3872,7 +3892,7 @@ вас цікавлять інсайти вашого складу портфеля apps/client/src/app/pages/landing/landing-page.html - 291 + 190 @@ -3880,7 +3900,7 @@ цінуєте конфіденційність і володіння даними apps/client/src/app/pages/landing/landing-page.html - 296 + 195 @@ -3888,7 +3908,7 @@ займаєтесь мінімалізмом apps/client/src/app/pages/landing/landing-page.html - 299 + 198 @@ -3896,7 +3916,7 @@ піклуєтесь про диверсифікацію ваших фінансових ресурсів apps/client/src/app/pages/landing/landing-page.html - 303 + 202 @@ -3904,7 +3924,7 @@ цікавитесь фінансовою незалежністю apps/client/src/app/pages/landing/landing-page.html - 307 + 206 @@ -3912,7 +3932,7 @@ кажете ні таблицям у apps/client/src/app/pages/landing/landing-page.html - 311 + 210 @@ -3920,7 +3940,7 @@ все ще читаєте цей список apps/client/src/app/pages/landing/landing-page.html - 314 + 213 @@ -3928,7 +3948,7 @@ Дізнайтеся більше про Ghostfolio apps/client/src/app/pages/landing/landing-page.html - 319 + 218 @@ -3936,7 +3956,7 @@ Що говорять користувачі apps/client/src/app/pages/landing/landing-page.html - 328 + 227 @@ -3944,7 +3964,7 @@ Члени зі всього світу використовують Ghostfolio Premium apps/client/src/app/pages/landing/landing-page.html - 367 + 266 @@ -3952,7 +3972,7 @@ Як працює Ghostfolio? apps/client/src/app/pages/landing/landing-page.html - 384 + 283 @@ -3960,7 +3980,7 @@ Почніть всього за 3 кроки apps/client/src/app/pages/landing/landing-page.html - 386 + 285 @@ -3976,7 +3996,7 @@ Зареєструйтеся анонімно* apps/client/src/app/pages/landing/landing-page.html - 392 + 291 @@ -3984,7 +4004,7 @@ * не потрібні електронна адреса та кредитна картка apps/client/src/app/pages/landing/landing-page.html - 394 + 293 @@ -3992,7 +4012,7 @@ Додайте будь-які з ваших історичних транзакцій apps/client/src/app/pages/landing/landing-page.html - 406 + 305 @@ -4000,7 +4020,7 @@ Отримуйте цінні інсайти вашого складу портфеля apps/client/src/app/pages/landing/landing-page.html - 418 + 317 @@ -4008,7 +4028,7 @@ Ви готові? apps/client/src/app/pages/landing/landing-page.html - 432 + 331 @@ -4016,7 +4036,7 @@ Приєднуйтесь зараз або перегляньте демонстраційний рахунок apps/client/src/app/pages/landing/landing-page.html - 435 + 334 @@ -4043,6 +4063,14 @@ 62 + + with your university e-mail address + with your university e-mail address + + apps/client/src/app/pages/pricing/pricing-page.html + 365 + + Active Users Активні користувачі @@ -4248,7 +4276,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 169 + 167 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html @@ -4264,7 +4292,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 214 + 212 @@ -4280,7 +4308,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 375 + 377 @@ -4296,7 +4324,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 387 + 389 @@ -4627,6 +4655,14 @@ 138 + + Looking for a student discount? + Looking for a student discount? + + apps/client/src/app/pages/pricing/pricing-page.html + 359 + + Dividend Дивіденди @@ -4640,7 +4676,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 307 + 310 apps/client/src/app/pages/features/features-page.html @@ -4683,6 +4719,14 @@ 88 + + here + here + + apps/client/src/app/pages/pricing/pricing-page.html + 364 + + Monthly Щомісячно @@ -4863,8 +4907,8 @@ Pricing Ціни - apps/client/src/app/app.component.html - 99 + apps/client/src/app/components/footer/footer.component.html + 49 apps/client/src/app/components/header/header.component.html @@ -5064,7 +5108,7 @@ Це безкоштовно. apps/client/src/app/pages/pricing/pricing-page.html - 353 + 380 @@ -5326,8 +5370,8 @@ Community Спільнота - apps/client/src/app/app.component.html - 130 + apps/client/src/app/components/footer/footer.component.html + 80 apps/client/src/app/components/user-account-settings/user-account-settings.html @@ -5399,7 +5443,7 @@ Відкритий код apps/client/src/app/pages/landing/landing-page.html - 261 + 160 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts @@ -5410,8 +5454,8 @@ Personal Finance Особисті фінанси - apps/client/src/app/app.component.html - 57 + apps/client/src/app/components/footer/footer.component.html + 7 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts @@ -5666,6 +5710,14 @@ 171 + + to use our referral link and get a Ghostfolio Premium membership for one year + to use our referral link and get a Ghostfolio Premium membership for one year + + apps/client/src/app/pages/pricing/pricing-page.html + 357 + + can be self-hosted може бути self-hosted @@ -5810,8 +5862,8 @@ Resources Ресурси - apps/client/src/app/app.component.html - 64 + apps/client/src/app/components/footer/footer.component.html + 14 apps/client/src/app/components/header/header.component.html @@ -5842,6 +5894,14 @@ 37 + + Request it + Request it + + apps/client/src/app/pages/pricing/pricing-page.html + 361 + + Access Доступ @@ -5903,7 +5963,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 400 + 402 @@ -5915,7 +5975,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 413 + 415 @@ -5931,7 +5991,7 @@ Чернетка libs/ui/src/lib/activities-table/activities-table.component.html - 144 + 142 @@ -5939,7 +5999,7 @@ Клонувати libs/ui/src/lib/activities-table/activities-table.component.html - 440 + 446 @@ -5947,7 +6007,7 @@ Експортувати чернетку як ICS libs/ui/src/lib/activities-table/activities-table.component.html - 450 + 456 @@ -6102,6 +6162,14 @@ 117 + + contact us + contact us + + apps/client/src/app/pages/pricing/pricing-page.html + 353 + + from ATH від ІМ @@ -6147,7 +6215,7 @@ Прогнозована загальна сума libs/ui/src/lib/fire-calculator/fire-calculator.component.html - 60 + 59 @@ -6167,7 +6235,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 295 + 298 libs/ui/src/lib/fire-calculator/fire-calculator.component.ts @@ -6239,7 +6307,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 312 + 310 libs/ui/src/lib/assistant/assistant.html @@ -6263,7 +6331,7 @@ Клас активів apps/client/src/app/components/admin-market-data/admin-market-data.html - 115 + 114 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -6295,7 +6363,7 @@ Підклас активів apps/client/src/app/components/admin-market-data/admin-market-data.html - 124 + 123 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -6339,7 +6407,7 @@ apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html - 59 + 57 apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html @@ -6399,7 +6467,7 @@ apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html - 61 + 59 apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html @@ -6575,7 +6643,7 @@ apps/client/src/app/components/admin-market-data/admin-market-data.html - 75 + 74 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -6583,7 +6651,7 @@ apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html - 39 + 37 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -6651,7 +6719,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 238 + 236 libs/ui/src/lib/i18n.ts @@ -7387,8 +7455,8 @@ Terms of Service Terms of Service - apps/client/src/app/app.component.html - 112 + apps/client/src/app/components/footer/footer.component.html + 62 libs/common/src/lib/routes/routes.ts @@ -7440,7 +7508,7 @@ Gather Recent Historical Market Data apps/client/src/app/components/admin-market-data/admin-market-data.html - 226 + 225 @@ -7448,7 +7516,7 @@ Gather All Historical Market Data apps/client/src/app/components/admin-market-data/admin-market-data.html - 231 + 230 @@ -7645,7 +7713,7 @@ apps/client/src/app/pages/landing/landing-page.html - 452 + 351 libs/common/src/lib/routes/routes.ts @@ -8016,7 +8084,7 @@ Average Unit Price apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts - 110 + 111 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html diff --git a/apps/client/src/locales/messages.xlf b/apps/client/src/locales/messages.xlf index 9082cd38a..58945bd81 100644 --- a/apps/client/src/locales/messages.xlf +++ b/apps/client/src/locales/messages.xlf @@ -202,8 +202,8 @@ The risk of loss in trading can be substantial. It is not advisable to invest money you may need in the short term. - apps/client/src/app/app.component.html - 221 + apps/client/src/app/components/footer/footer.component.html + 171 @@ -224,6 +224,13 @@ 11 + + please + + apps/client/src/app/pages/pricing/pricing-page.html + 350 + + Type @@ -240,7 +247,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 160 + 158 @@ -323,7 +330,7 @@ Name apps/client/src/app/components/admin-market-data/admin-market-data.html - 89 + 88 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -363,7 +370,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 137 + 135 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -397,7 +404,7 @@ apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html - 47 + 45 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -413,7 +420,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 280 + 278 @@ -448,11 +455,11 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 261 + 259 libs/ui/src/lib/activities-table/activities-table.component.html - 297 + 295 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -475,7 +482,7 @@ apps/client/src/app/components/admin-market-data/admin-market-data.html - 268 + 267 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -491,14 +498,14 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 434 + 440 Delete apps/client/src/app/components/admin-market-data/admin-market-data.html - 290 + 289 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -526,7 +533,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 461 + 467 libs/ui/src/lib/benchmark/benchmark.component.html @@ -566,7 +573,7 @@ apps/client/src/app/components/admin-market-data/admin-market-data.html - 106 + 105 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -667,7 +674,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 169 + 167 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html @@ -678,7 +685,7 @@ Market Price apps/client/src/app/components/admin-market-data/admin-market-data.html - 133 + 132 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -732,7 +739,7 @@ First Activity apps/client/src/app/components/admin-market-data/admin-market-data.html - 148 + 147 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -751,14 +758,14 @@ Activities Count apps/client/src/app/components/admin-market-data/admin-market-data.html - 157 + 156 Historical Data apps/client/src/app/components/admin-market-data/admin-market-data.html - 166 + 165 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor.component.html @@ -769,35 +776,35 @@ Sectors Count apps/client/src/app/components/admin-market-data/admin-market-data.html - 175 + 174 Countries Count apps/client/src/app/components/admin-market-data/admin-market-data.html - 184 + 183 Gather Recent Historical Market Data apps/client/src/app/components/admin-market-data/admin-market-data.html - 226 + 225 Gather All Historical Market Data apps/client/src/app/components/admin-market-data/admin-market-data.html - 231 + 230 Gather Profile Data apps/client/src/app/components/admin-market-data/admin-market-data.html - 235 + 234 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -954,7 +961,7 @@ Add Manually apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html - 19 + 18 @@ -965,7 +972,7 @@ apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html - 29 + 27 apps/client/src/app/components/home-watchlist/create-watchlist-item-dialog/create-watchlist-item-dialog.html @@ -1036,7 +1043,7 @@ Add Currency apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html - 22 + 20 @@ -1546,7 +1553,7 @@ apps/client/src/app/pages/landing/landing-page.html - 451 + 350 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html @@ -1556,6 +1563,10 @@ apps/client/src/app/pages/portfolio/fire/fire-page.html 81 + + apps/client/src/app/pages/pricing/pricing-page.html + 343 + apps/client/src/app/pages/register/register-page.html 31 @@ -1668,14 +1679,14 @@ Net Worth apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 261 + 264 Annualized Performance apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 274 + 277 @@ -1711,7 +1722,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 190 + 188 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -1722,7 +1733,7 @@ Report Data Glitch apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 451 + 452 @@ -2199,8 +2210,8 @@ About - apps/client/src/app/app.component.html - 70 + apps/client/src/app/components/footer/footer.component.html + 20 apps/client/src/app/components/header/header.component.html @@ -2222,8 +2233,8 @@ Changelog - apps/client/src/app/app.component.html - 77 + apps/client/src/app/components/footer/footer.component.html + 27 apps/client/src/app/pages/about/changelog/changelog-page.html @@ -2237,8 +2248,8 @@ License - apps/client/src/app/app.component.html - 89 + apps/client/src/app/components/footer/footer.component.html + 39 apps/client/src/app/pages/about/license/license-page.html @@ -2252,8 +2263,8 @@ Privacy Policy - apps/client/src/app/app.component.html - 105 + apps/client/src/app/components/footer/footer.component.html + 55 apps/client/src/app/pages/about/privacy-policy/privacy-policy-page.html @@ -2458,8 +2469,8 @@ Blog - apps/client/src/app/app.component.html - 74 + apps/client/src/app/components/footer/footer.component.html + 24 apps/client/src/app/pages/blog/2021/07/hallo-ghostfolio/hallo-ghostfolio-page.html @@ -2575,8 +2586,8 @@ Frequently Asked Questions (FAQ) - apps/client/src/app/app.component.html - 83 + apps/client/src/app/components/footer/footer.component.html + 33 apps/client/src/app/pages/about/overview/about-overview-page.html @@ -2594,8 +2605,8 @@ Features - apps/client/src/app/app.component.html - 79 + apps/client/src/app/components/footer/footer.component.html + 29 apps/client/src/app/components/header/header.component.html @@ -2749,8 +2760,8 @@ Markets - apps/client/src/app/app.component.html - 61 + apps/client/src/app/components/footer/footer.component.html + 11 apps/client/src/app/components/header/header.component.html @@ -2839,11 +2850,11 @@ apps/client/src/app/pages/landing/landing-page.html - 447 + 346 apps/client/src/app/pages/pricing/pricing-page.html - 351 + 378 apps/client/src/app/pages/resources/personal-finance-tools/product-page.html @@ -2890,49 +2901,49 @@ Protect your assets. Refine your personal investment strategy. apps/client/src/app/pages/landing/landing-page.html - 226 + 125 Ghostfolio empowers busy people to keep track of stocks, ETFs or cryptocurrencies without being tracked. apps/client/src/app/pages/landing/landing-page.html - 230 + 129 360° View apps/client/src/app/pages/landing/landing-page.html - 240 + 139 Get the full picture of your personal finances across multiple platforms. apps/client/src/app/pages/landing/landing-page.html - 243 + 142 Web3 Ready apps/client/src/app/pages/landing/landing-page.html - 251 + 150 Use Ghostfolio anonymously and own your financial data. apps/client/src/app/pages/landing/landing-page.html - 254 + 153 Benefit from continuous improvements through a strong community. apps/client/src/app/pages/landing/landing-page.html - 264 + 163 @@ -2946,112 +2957,112 @@ Why Ghostfolio? apps/client/src/app/pages/landing/landing-page.html - 272 + 171 Ghostfolio is for you if you are... apps/client/src/app/pages/landing/landing-page.html - 274 + 173 trading stocks, ETFs or cryptocurrencies on multiple platforms apps/client/src/app/pages/landing/landing-page.html - 280 + 179 pursuing a buy & hold strategy apps/client/src/app/pages/landing/landing-page.html - 286 + 185 interested in getting insights of your portfolio composition apps/client/src/app/pages/landing/landing-page.html - 291 + 190 valuing privacy and data ownership apps/client/src/app/pages/landing/landing-page.html - 296 + 195 into minimalism apps/client/src/app/pages/landing/landing-page.html - 299 + 198 caring about diversifying your financial resources apps/client/src/app/pages/landing/landing-page.html - 303 + 202 interested in financial independence apps/client/src/app/pages/landing/landing-page.html - 307 + 206 saying no to spreadsheets in apps/client/src/app/pages/landing/landing-page.html - 311 + 210 still reading this list apps/client/src/app/pages/landing/landing-page.html - 314 + 213 Learn more about Ghostfolio apps/client/src/app/pages/landing/landing-page.html - 319 + 218 What our users are saying apps/client/src/app/pages/landing/landing-page.html - 328 + 227 Members from around the globe are using Ghostfolio Premium apps/client/src/app/pages/landing/landing-page.html - 367 + 266 How does Ghostfolio work? apps/client/src/app/pages/landing/landing-page.html - 384 + 283 Get started in only 3 steps apps/client/src/app/pages/landing/landing-page.html - 386 + 285 @@ -3065,35 +3076,35 @@ Sign up anonymously* apps/client/src/app/pages/landing/landing-page.html - 392 + 291 * no e-mail address nor credit card required apps/client/src/app/pages/landing/landing-page.html - 394 + 293 Add any of your historical transactions apps/client/src/app/pages/landing/landing-page.html - 406 + 305 Get valuable insights of your portfolio composition apps/client/src/app/pages/landing/landing-page.html - 418 + 317 Are you ready? apps/client/src/app/pages/landing/landing-page.html - 432 + 331 @@ -3117,6 +3128,13 @@ 62 + + with your university e-mail address + + apps/client/src/app/pages/pricing/pricing-page.html + 365 + + Active Users @@ -3306,7 +3324,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 214 + 212 @@ -3321,7 +3339,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 375 + 377 @@ -3336,7 +3354,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 387 + 389 @@ -3603,6 +3621,13 @@ 138 + + Looking for a student discount? + + apps/client/src/app/pages/pricing/pricing-page.html + 359 + + Dividend @@ -3615,7 +3640,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 307 + 310 apps/client/src/app/pages/features/features-page.html @@ -3728,8 +3753,8 @@ Pricing - apps/client/src/app/app.component.html - 99 + apps/client/src/app/components/footer/footer.component.html + 49 apps/client/src/app/components/header/header.component.html @@ -3927,7 +3952,7 @@ It’s free. apps/client/src/app/pages/pricing/pricing-page.html - 353 + 380 @@ -4273,8 +4298,8 @@ Resources - apps/client/src/app/app.component.html - 64 + apps/client/src/app/components/footer/footer.component.html + 14 apps/client/src/app/components/header/header.component.html @@ -4304,6 +4329,13 @@ 37 + + Request it + + apps/client/src/app/pages/pricing/pricing-page.html + 361 + + Access @@ -4358,7 +4390,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 400 + 402 @@ -4369,28 +4401,28 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 413 + 415 Draft libs/ui/src/lib/activities-table/activities-table.component.html - 144 + 142 Clone libs/ui/src/lib/activities-table/activities-table.component.html - 440 + 446 Export Draft as ICS libs/ui/src/lib/activities-table/activities-table.component.html - 450 + 456 @@ -4442,6 +4474,13 @@ 117 + + contact us + + apps/client/src/app/pages/pricing/pricing-page.html + 353 + + from ATH @@ -4481,7 +4520,7 @@ Projected Total Amount libs/ui/src/lib/fire-calculator/fire-calculator.component.html - 60 + 59 @@ -4492,7 +4531,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 295 + 298 libs/ui/src/lib/fire-calculator/fire-calculator.component.ts @@ -4544,7 +4583,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 312 + 310 libs/ui/src/lib/assistant/assistant.html @@ -4566,7 +4605,7 @@ Asset Class apps/client/src/app/components/admin-market-data/admin-market-data.html - 115 + 114 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -4597,7 +4636,7 @@ Asset Sub Class apps/client/src/app/components/admin-market-data/admin-market-data.html - 124 + 123 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -4752,7 +4791,7 @@ apps/client/src/app/components/admin-market-data/admin-market-data.html - 75 + 74 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -4760,7 +4799,7 @@ apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html - 39 + 37 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -4815,7 +4854,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 238 + 236 libs/ui/src/lib/i18n.ts @@ -5183,6 +5222,13 @@ 88 + + here + + apps/client/src/app/pages/pricing/pricing-page.html + 364 + + Asset Performance @@ -5489,7 +5535,7 @@ Join now or check out the example account apps/client/src/app/pages/landing/landing-page.html - 435 + 334 @@ -5517,7 +5563,7 @@ Delete Profiles apps/client/src/app/components/admin-market-data/admin-market-data.html - 243 + 242 @@ -5565,8 +5611,8 @@ Community - apps/client/src/app/app.component.html - 130 + apps/client/src/app/components/footer/footer.component.html + 80 apps/client/src/app/components/user-account-settings/user-account-settings.html @@ -5725,8 +5771,8 @@ Personal Finance - apps/client/src/app/app.component.html - 57 + apps/client/src/app/components/footer/footer.component.html + 7 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts @@ -5779,7 +5825,7 @@ Open Source apps/client/src/app/pages/landing/landing-page.html - 261 + 160 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts @@ -5854,7 +5900,7 @@ apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html - 59 + 57 apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html @@ -5926,7 +5972,7 @@ apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html - 61 + 59 apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html @@ -6017,6 +6063,13 @@ 55 + + If you plan to open an account at + + apps/client/src/app/pages/pricing/pricing-page.html + 329 + + Performance with currency effect Performance @@ -6095,6 +6148,13 @@ 10 + + to use our referral link and get a Ghostfolio Premium membership for one year + + apps/client/src/app/pages/pricing/pricing-page.html + 357 + + can be self-hosted @@ -6172,7 +6232,7 @@ Oops! Invalid currency. apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html - 50 + 48 @@ -6391,7 +6451,7 @@ apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html - 70 + 68 apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html @@ -6699,8 +6759,8 @@ Terms of Service - apps/client/src/app/app.component.html - 112 + apps/client/src/app/components/footer/footer.component.html + 62 libs/common/src/lib/routes/routes.ts @@ -6926,7 +6986,7 @@ apps/client/src/app/pages/landing/landing-page.html - 452 + 351 libs/common/src/lib/routes/routes.ts @@ -7255,7 +7315,7 @@ Average Unit Price apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts - 110 + 111 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html diff --git a/apps/client/src/locales/messages.zh.xlf b/apps/client/src/locales/messages.zh.xlf index 1ab9e776e..16866f41b 100644 --- a/apps/client/src/locales/messages.zh.xlf +++ b/apps/client/src/locales/messages.zh.xlf @@ -215,8 +215,8 @@ The risk of loss in trading can be substantial. It is not advisable to invest money you may need in the short term. 交易存在巨大亏损风险,因此不应投入您短期内可能急需的资金。 - apps/client/src/app/app.component.html - 221 + apps/client/src/app/components/footer/footer.component.html + 171 @@ -239,6 +239,14 @@ 11 + + please + please + + apps/client/src/app/pages/pricing/pricing-page.html + 350 + + Type 类型 @@ -256,7 +264,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 160 + 158 @@ -348,7 +356,7 @@ 名称 apps/client/src/app/components/admin-market-data/admin-market-data.html - 89 + 88 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -388,7 +396,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 137 + 135 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -424,7 +432,7 @@ apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html - 47 + 45 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -440,7 +448,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 280 + 278 @@ -476,11 +484,11 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 261 + 259 libs/ui/src/lib/activities-table/activities-table.component.html - 297 + 295 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -504,7 +512,7 @@ apps/client/src/app/components/admin-market-data/admin-market-data.html - 268 + 267 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -520,7 +528,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 434 + 440 @@ -528,7 +536,7 @@ 删除 apps/client/src/app/components/admin-market-data/admin-market-data.html - 290 + 289 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -556,7 +564,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 461 + 467 libs/ui/src/lib/benchmark/benchmark.component.html @@ -600,7 +608,7 @@ apps/client/src/app/components/admin-market-data/admin-market-data.html - 106 + 105 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -712,7 +720,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 169 + 167 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html @@ -724,7 +732,7 @@ 市场价 apps/client/src/app/components/admin-market-data/admin-market-data.html - 133 + 132 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -784,7 +792,7 @@ 首笔交易 apps/client/src/app/components/admin-market-data/admin-market-data.html - 148 + 147 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -804,7 +812,7 @@ 活动计数 apps/client/src/app/components/admin-market-data/admin-market-data.html - 157 + 156 @@ -812,7 +820,7 @@ 历史数据 apps/client/src/app/components/admin-market-data/admin-market-data.html - 166 + 165 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor.component.html @@ -824,7 +832,7 @@ 行业数 apps/client/src/app/components/admin-market-data/admin-market-data.html - 175 + 174 @@ -832,7 +840,7 @@ 国家数 apps/client/src/app/components/admin-market-data/admin-market-data.html - 184 + 183 @@ -840,7 +848,7 @@ 收集个人资料数据 apps/client/src/app/components/admin-market-data/admin-market-data.html - 235 + 234 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -1004,7 +1012,7 @@ 手动添加 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html - 19 + 18 @@ -1016,7 +1024,7 @@ apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html - 29 + 27 apps/client/src/app/components/home-watchlist/create-watchlist-item-dialog/create-watchlist-item-dialog.html @@ -1096,7 +1104,7 @@ 添加货币 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html - 22 + 20 @@ -1660,7 +1668,7 @@ apps/client/src/app/pages/landing/landing-page.html - 451 + 350 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html @@ -1670,6 +1678,10 @@ apps/client/src/app/pages/portfolio/fire/fire-page.html 81 + + apps/client/src/app/pages/pricing/pricing-page.html + 343 + apps/client/src/app/pages/register/register-page.html 31 @@ -1796,7 +1808,7 @@ 净值 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 261 + 264 @@ -1804,7 +1816,7 @@ 年化业绩 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 274 + 277 @@ -1844,7 +1856,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 190 + 188 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -1856,7 +1868,7 @@ 报告数据故障 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 451 + 452 @@ -2383,8 +2395,8 @@ About 关于 - apps/client/src/app/app.component.html - 70 + apps/client/src/app/components/footer/footer.component.html + 20 apps/client/src/app/components/header/header.component.html @@ -2407,8 +2419,8 @@ Changelog 更新日志 - apps/client/src/app/app.component.html - 77 + apps/client/src/app/components/footer/footer.component.html + 27 apps/client/src/app/pages/about/changelog/changelog-page.html @@ -2423,8 +2435,8 @@ License 许可证 - apps/client/src/app/app.component.html - 89 + apps/client/src/app/components/footer/footer.component.html + 39 apps/client/src/app/pages/about/license/license-page.html @@ -2439,8 +2451,8 @@ Privacy Policy 隐私政策 - apps/client/src/app/app.component.html - 105 + apps/client/src/app/components/footer/footer.component.html + 55 apps/client/src/app/pages/about/privacy-policy/privacy-policy-page.html @@ -2663,8 +2675,8 @@ Blog 博客 - apps/client/src/app/app.component.html - 74 + apps/client/src/app/components/footer/footer.component.html + 24 apps/client/src/app/pages/blog/2021/07/hallo-ghostfolio/hallo-ghostfolio-page.html @@ -2783,8 +2795,8 @@ Frequently Asked Questions (FAQ) 常见问题 (FAQ) - apps/client/src/app/app.component.html - 83 + apps/client/src/app/components/footer/footer.component.html + 33 apps/client/src/app/pages/about/overview/about-overview-page.html @@ -2803,8 +2815,8 @@ Features 功能 - apps/client/src/app/app.component.html - 79 + apps/client/src/app/components/footer/footer.component.html + 29 apps/client/src/app/components/header/header.component.html @@ -2975,8 +2987,8 @@ Markets 市场 - apps/client/src/app/app.component.html - 61 + apps/client/src/app/components/footer/footer.component.html + 11 apps/client/src/app/components/header/header.component.html @@ -3072,11 +3084,11 @@ apps/client/src/app/pages/landing/landing-page.html - 447 + 346 apps/client/src/app/pages/pricing/pricing-page.html - 351 + 378 apps/client/src/app/pages/resources/personal-finance-tools/product-page.html @@ -3128,7 +3140,7 @@ 保护你的资产。完善你的个人投资策略 apps/client/src/app/pages/landing/landing-page.html - 226 + 125 @@ -3136,7 +3148,7 @@ Ghostfolio 使忙碌的人们能够在不被追踪的情况下跟踪股票、ETF 或加密货币。 apps/client/src/app/pages/landing/landing-page.html - 230 + 129 @@ -3144,7 +3156,7 @@ 360° 视角 apps/client/src/app/pages/landing/landing-page.html - 240 + 139 @@ -3152,7 +3164,7 @@ 跨多个平台全面了解您的个人财务状况。 apps/client/src/app/pages/landing/landing-page.html - 243 + 142 @@ -3160,7 +3172,7 @@ Web3 就绪 apps/client/src/app/pages/landing/landing-page.html - 251 + 150 @@ -3168,7 +3180,7 @@ 匿名使用 Ghostfolio 并拥有您的财务数据。 apps/client/src/app/pages/landing/landing-page.html - 254 + 153 @@ -3176,7 +3188,7 @@ 通过强大的社区不断改进,从中受益。 apps/client/src/app/pages/landing/landing-page.html - 264 + 163 @@ -3192,7 +3204,7 @@ 为什么使用Ghostfolio apps/client/src/app/pages/landing/landing-page.html - 272 + 171 @@ -3200,7 +3212,7 @@ 如果您符合以下条件,那么 Ghostfolio 适合您... apps/client/src/app/pages/landing/landing-page.html - 274 + 173 @@ -3208,7 +3220,7 @@ 在多个平台上交易股票、ETF 或加密货币 apps/client/src/app/pages/landing/landing-page.html - 280 + 179 @@ -3216,7 +3228,7 @@ 采取买入并持有策略 apps/client/src/app/pages/landing/landing-page.html - 286 + 185 @@ -3224,7 +3236,7 @@ 有兴趣深入了解您的投资组合构成 apps/client/src/app/pages/landing/landing-page.html - 291 + 190 @@ -3232,7 +3244,7 @@ 重视隐私和数据所有权 apps/client/src/app/pages/landing/landing-page.html - 296 + 195 @@ -3240,7 +3252,7 @@ 进入极简主义 apps/client/src/app/pages/landing/landing-page.html - 299 + 198 @@ -3248,7 +3260,7 @@ 关心您的财务资源多元化 apps/client/src/app/pages/landing/landing-page.html - 303 + 202 @@ -3256,7 +3268,7 @@ 对财务独立感兴趣 apps/client/src/app/pages/landing/landing-page.html - 307 + 206 @@ -3264,7 +3276,7 @@ 年对电子表格说不 apps/client/src/app/pages/landing/landing-page.html - 311 + 210 @@ -3272,7 +3284,7 @@ 仍在阅读此列表 apps/client/src/app/pages/landing/landing-page.html - 314 + 213 @@ -3280,7 +3292,7 @@ 了解有关 Ghostfolio 的更多信息 apps/client/src/app/pages/landing/landing-page.html - 319 + 218 @@ -3288,7 +3300,7 @@ 听听我们的用户怎么说 apps/client/src/app/pages/landing/landing-page.html - 328 + 227 @@ -3296,7 +3308,7 @@ 来自世界各地的会员正在使用Ghostfolio 高级版 apps/client/src/app/pages/landing/landing-page.html - 367 + 266 @@ -3304,7 +3316,7 @@ Ghostfolio 如何工作? apps/client/src/app/pages/landing/landing-page.html - 384 + 283 @@ -3312,7 +3324,7 @@ 只需 3 步即可开始 apps/client/src/app/pages/landing/landing-page.html - 386 + 285 @@ -3328,7 +3340,7 @@ 匿名注册* apps/client/src/app/pages/landing/landing-page.html - 392 + 291 @@ -3336,7 +3348,7 @@ * 无需电子邮件地址或信用卡 apps/client/src/app/pages/landing/landing-page.html - 394 + 293 @@ -3344,7 +3356,7 @@ 添加您的任何历史交易 apps/client/src/app/pages/landing/landing-page.html - 406 + 305 @@ -3352,7 +3364,7 @@ 获取有关您的投资组合构成的宝贵见解 apps/client/src/app/pages/landing/landing-page.html - 418 + 317 @@ -3360,7 +3372,7 @@ 准备好了吗? apps/client/src/app/pages/landing/landing-page.html - 432 + 331 @@ -3387,6 +3399,14 @@ 62 + + with your university e-mail address + with your university e-mail address + + apps/client/src/app/pages/pricing/pricing-page.html + 365 + + Active Users 活跃用户 @@ -3596,7 +3616,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 214 + 212 @@ -3612,7 +3632,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 375 + 377 @@ -3628,7 +3648,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 387 + 389 @@ -3927,6 +3947,14 @@ 138 + + Looking for a student discount? + Looking for a student discount? + + apps/client/src/app/pages/pricing/pricing-page.html + 359 + + Dividend 股息 @@ -3940,7 +3968,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 307 + 310 apps/client/src/app/pages/features/features-page.html @@ -4067,8 +4095,8 @@ Pricing 价格 - apps/client/src/app/app.component.html - 99 + apps/client/src/app/components/footer/footer.component.html + 49 apps/client/src/app/components/header/header.component.html @@ -4284,7 +4312,7 @@ 免费。 apps/client/src/app/pages/pricing/pricing-page.html - 353 + 380 @@ -4668,8 +4696,8 @@ Resources 资源 - apps/client/src/app/app.component.html - 64 + apps/client/src/app/components/footer/footer.component.html + 14 apps/client/src/app/components/header/header.component.html @@ -4700,6 +4728,14 @@ 37 + + Request it + Request it + + apps/client/src/app/pages/pricing/pricing-page.html + 361 + + Access 权限 @@ -4761,7 +4797,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 400 + 402 @@ -4773,7 +4809,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 413 + 415 @@ -4781,7 +4817,7 @@ 草稿 libs/ui/src/lib/activities-table/activities-table.component.html - 144 + 142 @@ -4789,7 +4825,7 @@ 克隆 libs/ui/src/lib/activities-table/activities-table.component.html - 440 + 446 @@ -4797,7 +4833,7 @@ 将汇票导出为 ICS libs/ui/src/lib/activities-table/activities-table.component.html - 450 + 456 @@ -4856,6 +4892,14 @@ 117 + + contact us + contact us + + apps/client/src/app/pages/pricing/pricing-page.html + 353 + + from ATH 从 ATH @@ -4901,7 +4945,7 @@ 预计总额 libs/ui/src/lib/fire-calculator/fire-calculator.component.html - 60 + 59 @@ -4913,7 +4957,7 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html - 295 + 298 libs/ui/src/lib/fire-calculator/fire-calculator.component.ts @@ -4969,7 +5013,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 312 + 310 libs/ui/src/lib/assistant/assistant.html @@ -4993,7 +5037,7 @@ 资产类别 apps/client/src/app/components/admin-market-data/admin-market-data.html - 115 + 114 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -5025,7 +5069,7 @@ 资产子类别 apps/client/src/app/components/admin-market-data/admin-market-data.html - 124 + 123 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -5197,7 +5241,7 @@ apps/client/src/app/components/admin-market-data/admin-market-data.html - 75 + 74 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -5205,7 +5249,7 @@ apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html - 39 + 37 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -5265,7 +5309,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 238 + 236 libs/ui/src/lib/i18n.ts @@ -5676,6 +5720,14 @@ 88 + + here + here + + apps/client/src/app/pages/pricing/pricing-page.html + 364 + + Asset Performance 资产回报 @@ -6022,7 +6074,7 @@ 立即加入 或查看示例账户 apps/client/src/app/pages/landing/landing-page.html - 435 + 334 @@ -6054,7 +6106,7 @@ 删除配置文件 apps/client/src/app/components/admin-market-data/admin-market-data.html - 243 + 242 @@ -6125,8 +6177,8 @@ Community 社区 - apps/client/src/app/app.component.html - 130 + apps/client/src/app/components/footer/footer.component.html + 80 apps/client/src/app/components/user-account-settings/user-account-settings.html @@ -6198,7 +6250,7 @@ 开源 apps/client/src/app/pages/landing/landing-page.html - 261 + 160 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts @@ -6209,8 +6261,8 @@ Personal Finance 个人理财 - apps/client/src/app/app.component.html - 57 + apps/client/src/app/components/footer/footer.component.html + 7 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts @@ -6470,7 +6522,7 @@ apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html - 59 + 57 apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html @@ -6522,7 +6574,7 @@ apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html - 61 + 59 apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html @@ -6597,6 +6649,14 @@ 63 + + If you plan to open an account at + If you plan to open an account at + + apps/client/src/app/pages/pricing/pricing-page.html + 329 + + Performance with currency effect Performance 含货币影响的表现 表现 @@ -6666,7 +6726,7 @@ 哎呀!无效的货币。 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html - 50 + 48 @@ -6701,6 +6761,14 @@ 163 + + to use our referral link and get a Ghostfolio Premium membership for one year + to use our referral link and get a Ghostfolio Premium membership for one year + + apps/client/src/app/pages/pricing/pricing-page.html + 357 + + can be self-hosted 可以自托管 @@ -7024,7 +7092,7 @@ apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html - 70 + 68 apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html @@ -7388,8 +7456,8 @@ Terms of Service 服务条款 - apps/client/src/app/app.component.html - 112 + apps/client/src/app/components/footer/footer.component.html + 62 libs/common/src/lib/routes/routes.ts @@ -7441,7 +7509,7 @@ 收集近期历史市场数据 apps/client/src/app/components/admin-market-data/admin-market-data.html - 226 + 225 @@ -7449,7 +7517,7 @@ 收集所有历史市场数据 apps/client/src/app/components/admin-market-data/admin-market-data.html - 231 + 230 @@ -7646,7 +7714,7 @@ apps/client/src/app/pages/landing/landing-page.html - 452 + 351 libs/common/src/lib/routes/routes.ts @@ -8017,7 +8085,7 @@ 平均单位价格 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts - 110 + 111 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html From f940eb67259c572174e0dfc7d6ba1c49b6d346aa Mon Sep 17 00:00:00 2001 From: Aman <142656811+Amanthisside@users.noreply.github.com> Date: Sat, 18 Oct 2025 12:56:39 +0530 Subject: [PATCH 07/92] Task/refactor PortfolioInvestments interface to PortfolioInvestmentsResponse interface (#5774) * Refactor PortfolioInvestments to PortfolioInvestmentsResponse --- apps/api/src/app/portfolio/portfolio.controller.ts | 4 ++-- apps/api/src/app/portfolio/portfolio.service.ts | 6 +++--- .../app/pages/portfolio/analysis/analysis-page.component.ts | 4 ++-- apps/client/src/app/services/data.service.ts | 4 ++-- libs/common/src/lib/interfaces/index.ts | 4 ++-- .../src/lib/interfaces/portfolio-investments.interface.ts | 6 ------ .../interfaces/responses/portfolio-investments.interface.ts | 6 ++++++ 7 files changed, 17 insertions(+), 17 deletions(-) delete mode 100644 libs/common/src/lib/interfaces/portfolio-investments.interface.ts create mode 100644 libs/common/src/lib/interfaces/responses/portfolio-investments.interface.ts diff --git a/apps/api/src/app/portfolio/portfolio.controller.ts b/apps/api/src/app/portfolio/portfolio.controller.ts index 7d8ceecda..03796dad6 100644 --- a/apps/api/src/app/portfolio/portfolio.controller.ts +++ b/apps/api/src/app/portfolio/portfolio.controller.ts @@ -22,7 +22,7 @@ import { PortfolioDividendsResponse, PortfolioHoldingResponse, PortfolioHoldingsResponse, - PortfolioInvestments, + PortfolioInvestmentsResponse, PortfolioPerformanceResponse, PortfolioReportResponse } from '@ghostfolio/common/interfaces'; @@ -439,7 +439,7 @@ export class PortfolioController { @Query('range') dateRange: DateRange = 'max', @Query('symbol') filterBySymbol?: string, @Query('tags') filterByTags?: string - ): Promise { + ): Promise { const filters = this.apiService.buildFiltersFromQueryParams({ filterByAccounts, filterByAssetClasses, diff --git a/apps/api/src/app/portfolio/portfolio.service.ts b/apps/api/src/app/portfolio/portfolio.service.ts index cb6eba5be..b74b779f6 100644 --- a/apps/api/src/app/portfolio/portfolio.service.ts +++ b/apps/api/src/app/portfolio/portfolio.service.ts @@ -46,7 +46,7 @@ import { InvestmentItem, PortfolioDetails, PortfolioHoldingResponse, - PortfolioInvestments, + PortfolioInvestmentsResponse, PortfolioPerformanceResponse, PortfolioPosition, PortfolioReportResponse, @@ -397,7 +397,7 @@ export class PortfolioService { impersonationId: string; savingsRate: number; userId: string; - }): Promise { + }): Promise { userId = await this.getUserId(impersonationId, userId); const user = await this.userService.user({ id: userId }); const userCurrency = this.getUserCurrency(user); @@ -448,7 +448,7 @@ export class PortfolioService { }); } - let streaks: PortfolioInvestments['streaks']; + let streaks: PortfolioInvestmentsResponse['streaks']; if (savingsRate) { streaks = this.getStreaks({ 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 26d474f73..63ed3569c 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 @@ -6,7 +6,7 @@ import { UserService } from '@ghostfolio/client/services/user/user.service'; import { HistoricalDataItem, InvestmentItem, - PortfolioInvestments, + PortfolioInvestmentsResponse, PortfolioPerformance, PortfolioPosition, ToggleOption, @@ -94,7 +94,7 @@ export class GfAnalysisPageComponent implements OnDestroy, OnInit { public performanceDataItems: HistoricalDataItem[]; public performanceDataItemsInPercentage: HistoricalDataItem[]; public portfolioEvolutionDataLabel = $localize`Investment`; - public streaks: PortfolioInvestments['streaks']; + public streaks: PortfolioInvestmentsResponse['streaks']; public top3: PortfolioPosition[]; public unitCurrentStreak: string; public unitLongestStreak: string; diff --git a/apps/client/src/app/services/data.service.ts b/apps/client/src/app/services/data.service.ts index 0b5c4b253..b5f6d9e01 100644 --- a/apps/client/src/app/services/data.service.ts +++ b/apps/client/src/app/services/data.service.ts @@ -45,7 +45,7 @@ import { PortfolioDividendsResponse, PortfolioHoldingResponse, PortfolioHoldingsResponse, - PortfolioInvestments, + PortfolioInvestmentsResponse, PortfolioPerformanceResponse, PortfolioReportResponse, PublicPortfolioResponse, @@ -463,7 +463,7 @@ export class DataService { params = params.append('groupBy', groupBy); params = params.append('range', range); - return this.http.get( + return this.http.get( '/api/v1/portfolio/investments', { params } ); diff --git a/libs/common/src/lib/interfaces/index.ts b/libs/common/src/lib/interfaces/index.ts index d38502945..8a7ef8544 100644 --- a/libs/common/src/lib/interfaces/index.ts +++ b/libs/common/src/lib/interfaces/index.ts @@ -30,7 +30,6 @@ import type { LookupItem } from './lookup-item.interface'; import type { MarketData } from './market-data.interface'; import type { PortfolioChart } from './portfolio-chart.interface'; import type { PortfolioDetails } from './portfolio-details.interface'; -import type { PortfolioInvestments } from './portfolio-investments.interface'; import type { PortfolioPerformance } from './portfolio-performance.interface'; import type { PortfolioPosition } from './portfolio-position.interface'; import type { PortfolioReportRule } from './portfolio-report-rule.interface'; @@ -58,6 +57,7 @@ import type { OAuthResponse } from './responses/oauth-response.interface'; import type { PortfolioDividendsResponse } from './responses/portfolio-dividends-response.interface'; import { PortfolioHoldingResponse } from './responses/portfolio-holding-response.interface'; import type { PortfolioHoldingsResponse } from './responses/portfolio-holdings-response.interface'; +import type { PortfolioInvestmentsResponse } from './responses/portfolio-investments.interface'; import type { PortfolioPerformanceResponse } from './responses/portfolio-performance-response.interface'; import type { PortfolioReportResponse } from './responses/portfolio-report.interface'; import type { PublicPortfolioResponse } from './responses/public-portfolio-response.interface'; @@ -125,7 +125,7 @@ export { PortfolioDividendsResponse, PortfolioHoldingResponse, PortfolioHoldingsResponse, - PortfolioInvestments, + PortfolioInvestmentsResponse, PortfolioPerformance, PortfolioPerformanceResponse, PortfolioPosition, diff --git a/libs/common/src/lib/interfaces/portfolio-investments.interface.ts b/libs/common/src/lib/interfaces/portfolio-investments.interface.ts deleted file mode 100644 index 70de5c7d6..000000000 --- a/libs/common/src/lib/interfaces/portfolio-investments.interface.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { InvestmentItem } from './investment-item.interface'; - -export interface PortfolioInvestments { - investments: InvestmentItem[]; - streaks: { currentStreak: number; longestStreak: number }; -} diff --git a/libs/common/src/lib/interfaces/responses/portfolio-investments.interface.ts b/libs/common/src/lib/interfaces/responses/portfolio-investments.interface.ts new file mode 100644 index 000000000..6d0d60002 --- /dev/null +++ b/libs/common/src/lib/interfaces/responses/portfolio-investments.interface.ts @@ -0,0 +1,6 @@ +import { InvestmentItem } from '../investment-item.interface'; + +export interface PortfolioInvestmentsResponse { + investments: InvestmentItem[]; + streaks: { currentStreak: number; longestStreak: number }; +} From 71b375ea92706bde6fba83bdb9e62d13104041f1 Mon Sep 17 00:00:00 2001 From: Google <53668973+GooglyBlox@users.noreply.github.com> Date: Sat, 18 Oct 2025 01:14:24 -0700 Subject: [PATCH 08/92] Task/refactor BenchmarkMarketDataDetails to BenchmarkMarketDataDetailsResponse (#5771) * Refactor BenchmarkMarketDataDetails to BenchmarkMarketDataDetailsResponse --- .../src/app/endpoints/benchmarks/benchmarks.controller.ts | 4 ++-- apps/api/src/app/endpoints/benchmarks/benchmarks.service.ts | 4 ++-- apps/client/src/app/services/data.service.ts | 6 +++--- libs/common/src/lib/interfaces/index.ts | 4 ++-- .../benchmark-market-data-details-response.interface.ts} | 2 +- 5 files changed, 10 insertions(+), 10 deletions(-) rename libs/common/src/lib/interfaces/{benchmark-market-data-details.interface.ts => responses/benchmark-market-data-details-response.interface.ts} (64%) diff --git a/apps/api/src/app/endpoints/benchmarks/benchmarks.controller.ts b/apps/api/src/app/endpoints/benchmarks/benchmarks.controller.ts index 69383a30d..629d90928 100644 --- a/apps/api/src/app/endpoints/benchmarks/benchmarks.controller.ts +++ b/apps/api/src/app/endpoints/benchmarks/benchmarks.controller.ts @@ -8,7 +8,7 @@ import { getIntervalFromDateRange } from '@ghostfolio/common/calculation-helper' import { HEADER_KEY_IMPERSONATION } from '@ghostfolio/common/config'; import type { AssetProfileIdentifier, - BenchmarkMarketDataDetails, + BenchmarkMarketDataDetailsResponse, BenchmarkResponse } from '@ghostfolio/common/interfaces'; import { permissions } from '@ghostfolio/common/permissions'; @@ -125,7 +125,7 @@ export class BenchmarksController { @Query('symbol') filterBySymbol?: string, @Query('tags') filterByTags?: string, @Query('withExcludedAccounts') withExcludedAccountsParam = 'false' - ): Promise { + ): Promise { const { endDate, startDate } = getIntervalFromDateRange( dateRange, new Date(startDateString) diff --git a/apps/api/src/app/endpoints/benchmarks/benchmarks.service.ts b/apps/api/src/app/endpoints/benchmarks/benchmarks.service.ts index aa53564b7..03ff32c21 100644 --- a/apps/api/src/app/endpoints/benchmarks/benchmarks.service.ts +++ b/apps/api/src/app/endpoints/benchmarks/benchmarks.service.ts @@ -6,7 +6,7 @@ import { MarketDataService } from '@ghostfolio/api/services/market-data/market-d import { DATE_FORMAT, parseDate, resetHours } from '@ghostfolio/common/helper'; import { AssetProfileIdentifier, - BenchmarkMarketDataDetails, + BenchmarkMarketDataDetailsResponse, Filter } from '@ghostfolio/common/interfaces'; import { DateRange, UserWithSettings } from '@ghostfolio/common/types'; @@ -43,7 +43,7 @@ export class BenchmarksService { startDate: Date; user: UserWithSettings; withExcludedAccounts?: boolean; - } & AssetProfileIdentifier): Promise { + } & AssetProfileIdentifier): Promise { const marketData: { date: string; value: number }[] = []; const userCurrency = user.settings.settings.baseCurrency; const userId = user.id; diff --git a/apps/client/src/app/services/data.service.ts b/apps/client/src/app/services/data.service.ts index b5f6d9e01..3cb5a8c75 100644 --- a/apps/client/src/app/services/data.service.ts +++ b/apps/client/src/app/services/data.service.ts @@ -30,7 +30,7 @@ import { AiPromptResponse, ApiKeyResponse, AssetProfileIdentifier, - BenchmarkMarketDataDetails, + BenchmarkMarketDataDetailsResponse, BenchmarkResponse, DataProviderHealthResponse, Export, @@ -368,7 +368,7 @@ export class DataService { range: DateRange; startDate: Date; withExcludedAccounts?: boolean; - } & AssetProfileIdentifier): Observable { + } & AssetProfileIdentifier) { let params = this.buildFiltersAsQueryParams({ filters }); params = params.append('range', range); @@ -377,7 +377,7 @@ export class DataService { params = params.append('withExcludedAccounts', withExcludedAccounts); } - return this.http.get( + return this.http.get( `/api/v1/benchmarks/${dataSource}/${symbol}/${format(startDate, DATE_FORMAT, { in: utc })}`, { params } ); diff --git a/libs/common/src/lib/interfaces/index.ts b/libs/common/src/lib/interfaces/index.ts index 8a7ef8544..578d9cec8 100644 --- a/libs/common/src/lib/interfaces/index.ts +++ b/libs/common/src/lib/interfaces/index.ts @@ -10,7 +10,6 @@ import type { import type { AdminUsers } from './admin-users.interface'; import type { AssetClassSelectorOption } from './asset-class-selector-option.interface'; import type { AssetProfileIdentifier } from './asset-profile-identifier.interface'; -import type { BenchmarkMarketDataDetails } from './benchmark-market-data-details.interface'; import type { BenchmarkProperty } from './benchmark-property.interface'; import type { Benchmark } from './benchmark.interface'; import type { Coupon } from './coupon.interface'; @@ -41,6 +40,7 @@ import type { AccountBalancesResponse } from './responses/account-balances-respo import type { AccountsResponse } from './responses/accounts-response.interface'; import type { AiPromptResponse } from './responses/ai-prompt-response.interface'; import type { ApiKeyResponse } from './responses/api-key-response.interface'; +import type { BenchmarkMarketDataDetailsResponse } from './responses/benchmark-market-data-details-response.interface'; import type { BenchmarkResponse } from './responses/benchmark-response.interface'; import type { DataEnhancerHealthResponse } from './responses/data-enhancer-health-response.interface'; import type { DataProviderGhostfolioAssetProfileResponse } from './responses/data-provider-ghostfolio-asset-profile-response.interface'; @@ -91,7 +91,7 @@ export { AssetClassSelectorOption, AssetProfileIdentifier, Benchmark, - BenchmarkMarketDataDetails, + BenchmarkMarketDataDetailsResponse, BenchmarkProperty, BenchmarkResponse, Coupon, diff --git a/libs/common/src/lib/interfaces/benchmark-market-data-details.interface.ts b/libs/common/src/lib/interfaces/responses/benchmark-market-data-details-response.interface.ts similarity index 64% rename from libs/common/src/lib/interfaces/benchmark-market-data-details.interface.ts rename to libs/common/src/lib/interfaces/responses/benchmark-market-data-details-response.interface.ts index ed693b9af..cdd63ff79 100644 --- a/libs/common/src/lib/interfaces/benchmark-market-data-details.interface.ts +++ b/libs/common/src/lib/interfaces/responses/benchmark-market-data-details-response.interface.ts @@ -1,5 +1,5 @@ import { LineChartItem } from '@ghostfolio/common/interfaces'; -export interface BenchmarkMarketDataDetails { +export interface BenchmarkMarketDataDetailsResponse { marketData: LineChartItem[]; } From 18d46cfa1eeeb8d9f6bacfade8fe21f1d6186a07 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Sat, 18 Oct 2025 11:28:47 +0200 Subject: [PATCH 09/92] Release 2.209.0 (#5780) --- 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 f9478c563..48d622193 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,7 +5,7 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## Unreleased +## 2.209.0 - 2025-10-18 ### Added diff --git a/package-lock.json b/package-lock.json index e65c23ac7..bcd6300e5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "ghostfolio", - "version": "2.208.0", + "version": "2.209.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "ghostfolio", - "version": "2.208.0", + "version": "2.209.0", "hasInstallScript": true, "license": "AGPL-3.0", "dependencies": { diff --git a/package.json b/package.json index cb0ba6731..a7fc8728b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ghostfolio", - "version": "2.208.0", + "version": "2.209.0", "homepage": "https://ghostfol.io", "license": "AGPL-3.0", "repository": "https://github.com/ghostfolio/ghostfolio", From a65523fd043a1efb9f5990dc95c8946a99c45d98 Mon Sep 17 00:00:00 2001 From: s-vamshi <62489114+s-vamshi@users.noreply.github.com> Date: Sat, 18 Oct 2025 23:35:28 +0530 Subject: [PATCH 10/92] Feature/allow data gathering by date range (#5762) * Allow data gathering by date range * Update changelog --- CHANGELOG.md | 6 +++ apps/api/src/app/admin/admin.controller.ts | 2 +- .../asset-profile-dialog.component.ts | 37 ++++++++++++++++++- .../asset-profile-dialog.html | 18 +++++++++ apps/client/src/app/services/admin.service.ts | 18 ++++++++- 5 files changed, 76 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 48d622193..66b47fc1a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,12 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## Unreleased + +### Added + +- Added support for data gathering by date range in the asset profile details dialog of the admin control panel + ## 2.209.0 - 2025-10-18 ### Added diff --git a/apps/api/src/app/admin/admin.controller.ts b/apps/api/src/app/admin/admin.controller.ts index 66f8483b4..d7c4c5d3d 100644 --- a/apps/api/src/app/admin/admin.controller.ts +++ b/apps/api/src/app/admin/admin.controller.ts @@ -169,7 +169,7 @@ export class AdminController { let date: Date; if (dateRange) { - const { startDate } = getIntervalFromDateRange(dateRange, new Date()); + const { startDate } = getIntervalFromDateRange(dateRange); date = startDate; } diff --git a/apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts b/apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts index 3fd9e506f..a56f6dec5 100644 --- a/apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts +++ b/apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts @@ -18,6 +18,7 @@ import { ScraperConfiguration, User } from '@ghostfolio/common/interfaces'; +import { DateRange } from '@ghostfolio/common/types'; import { GfCurrencySelectorComponent } from '@ghostfolio/ui/currency-selector'; import { GfEntityLogoComponent } from '@ghostfolio/ui/entity-logo'; import { GfHistoricalMarketDataEditorComponent } from '@ghostfolio/ui/historical-market-data-editor'; @@ -190,6 +191,32 @@ export class GfAssetProfileDialogComponent implements OnDestroy, OnInit { }; public currencies: string[] = []; + public dateRangeOptions = [ + { + label: $localize`Current week` + ' (' + $localize`WTD` + ')', + value: 'wtd' + }, + { + label: $localize`Current month` + ' (' + $localize`MTD` + ')', + value: 'mtd' + }, + { + label: $localize`Current year` + ' (' + $localize`YTD` + ')', + value: 'ytd' + }, + { + label: '1 ' + $localize`year` + ' (' + $localize`1Y` + ')', + value: '1y' + }, + { + label: '5 ' + $localize`years` + ' (' + $localize`5Y` + ')', + value: '5y' + }, + { + label: $localize`Max`, + value: 'max' + } + ]; public historicalDataItems: LineChartItem[]; public isBenchmark = false; public isDataGatheringEnabled: boolean; @@ -405,9 +432,15 @@ export class GfAssetProfileDialogComponent implements OnDestroy, OnInit { .subscribe(); } - public onGatherSymbol({ dataSource, symbol }: AssetProfileIdentifier) { + public onGatherSymbol({ + dataSource, + range, + symbol + }: { + range?: DateRange; + } & AssetProfileIdentifier) { this.adminService - .gatherSymbol({ dataSource, symbol }) + .gatherSymbol({ dataSource, range, symbol }) .pipe(takeUntil(this.unsubscribeSubject)) .subscribe(); } diff --git a/apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html b/apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html index 301287cf5..b2c063684 100644 --- a/apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html +++ b/apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -26,12 +26,30 @@ [disabled]=" assetProfileForm.dirty || !assetProfileForm.controls.isActive.value " + [matMenuTriggerFor]="gatherHistoricalMarketDataMenu" (click)=" onGatherSymbol({ dataSource: data.dataSource, symbol: data.symbol }) " > Gather Historical Market Data + + @for (dateRange of dateRangeOptions; track dateRange.value) { + + } + - - - + @if (!searchFormControl.value) { +
+ + Date Range + + @for ( + dateRangeOption of dateRangeOptions; + track dateRangeOption.value + ) { + {{ + dateRangeOption.label + }} + } + + +
+
+ +
+ + +
- } - +
+ } diff --git a/libs/ui/src/lib/portfolio-filter-form/index.ts b/libs/ui/src/lib/portfolio-filter-form/index.ts new file mode 100644 index 000000000..51d22c034 --- /dev/null +++ b/libs/ui/src/lib/portfolio-filter-form/index.ts @@ -0,0 +1,2 @@ +export * from './interfaces'; +export * from './portfolio-filter-form.component'; diff --git a/libs/ui/src/lib/portfolio-filter-form/interfaces/index.ts b/libs/ui/src/lib/portfolio-filter-form/interfaces/index.ts new file mode 100644 index 000000000..62feaa56a --- /dev/null +++ b/libs/ui/src/lib/portfolio-filter-form/interfaces/index.ts @@ -0,0 +1 @@ +export * from './portfolio-filter-form-value.interface'; diff --git a/libs/ui/src/lib/portfolio-filter-form/interfaces/portfolio-filter-form-value.interface.ts b/libs/ui/src/lib/portfolio-filter-form/interfaces/portfolio-filter-form-value.interface.ts new file mode 100644 index 000000000..21ff0ae3b --- /dev/null +++ b/libs/ui/src/lib/portfolio-filter-form/interfaces/portfolio-filter-form-value.interface.ts @@ -0,0 +1,8 @@ +import { PortfolioPosition } from '@ghostfolio/common/interfaces'; + +export interface PortfolioFilterFormValue { + account: string; + assetClass: string; + holding: PortfolioPosition; + tag: string; +} diff --git a/libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html b/libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html new file mode 100644 index 000000000..e017d33d6 --- /dev/null +++ b/libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html @@ -0,0 +1,75 @@ +
+
+ + Account + + + @for (account of accounts; track account.id) { + +
+ @if (account.platform?.url) { + + } + {{ account.name }} +
+
+ } +
+
+
+
+ + Holding + + {{ + filterForm.get('holding')?.value?.name + }} + + @for (holding of holdings; track holding.name) { + +
+ {{ holding.name }} +
+ {{ holding.symbol | gfSymbol }} · {{ holding.currency }} +
+
+ } +
+
+
+
+ + Tag + + + @for (tag of tags; track tag.id) { + {{ tag.label }} + } + + +
+
+ + Asset Class + + + @for (assetClass of assetClasses; track assetClass.id) { + {{ + assetClass.label + }} + } + + +
+
diff --git a/libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.scss b/libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.scss new file mode 100644 index 000000000..5d4e87f30 --- /dev/null +++ b/libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.scss @@ -0,0 +1,3 @@ +:host { + display: block; +} diff --git a/libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.stories.ts b/libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.stories.ts new file mode 100644 index 000000000..710a4e9c5 --- /dev/null +++ b/libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.stories.ts @@ -0,0 +1,79 @@ +import '@angular/localize/init'; +import { Meta, moduleMetadata, StoryObj } from '@storybook/angular'; + +import { GfPortfolioFilterFormComponent } from './portfolio-filter-form.component'; + +const meta: Meta = { + title: 'Portfolio Filter Form', + component: GfPortfolioFilterFormComponent, + decorators: [ + moduleMetadata({ + imports: [GfPortfolioFilterFormComponent] + }) + ] +}; + +export default meta; +type Story = StoryObj; + +export const Default: Story = { + args: { + accounts: [ + { + id: '733110b6-7c55-44eb-8cc5-c4c3e9d48a79', + name: 'Trading Account', + platform: { + name: 'Interactive Brokers', + url: 'https://interactivebrokers.com' + } + }, + { + id: '24ba27d6-e04b-4fb4-b856-b24c2ef0422a', + name: 'Investment Account', + platform: { + name: 'Fidelity', + url: 'https://fidelity.com' + } + } + ] as any, + assetClasses: [ + { id: 'COMMODITY', label: 'Commodity', type: 'ASSET_CLASS' }, + { id: 'EQUITY', label: 'Equity', type: 'ASSET_CLASS' }, + { id: 'FIXED_INCOME', label: 'Fixed Income', type: 'ASSET_CLASS' } + ] as any, + holdings: [ + { + currency: 'USD', + dataSource: 'YAHOO', + name: 'Apple Inc.', + symbol: 'AAPL' + }, + { + currency: 'USD', + dataSource: 'YAHOO', + name: 'Microsoft Corporation', + symbol: 'MSFT' + } + ] as any, + tags: [ + { + id: 'EMERGENCY_FUND', + label: 'Emergency Fund', + type: 'TAG' + }, + { + id: 'RETIREMENT_FUND', + label: 'Retirement Fund', + type: 'TAG' + } + ] as any, + disabled: false + } +}; + +export const Disabled: Story = { + args: { + ...Default.args, + disabled: true + } +}; diff --git a/libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.ts b/libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.ts new file mode 100644 index 000000000..794f43d4d --- /dev/null +++ b/libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.ts @@ -0,0 +1,177 @@ +import { GfSymbolPipe } from '@ghostfolio/client/pipes/symbol/symbol.pipe'; +import { getAssetProfileIdentifier } from '@ghostfolio/common/helper'; +import { Filter, PortfolioPosition } from '@ghostfolio/common/interfaces'; +import { AccountWithPlatform } from '@ghostfolio/common/types'; + +import { + CUSTOM_ELEMENTS_SCHEMA, + ChangeDetectionStrategy, + ChangeDetectorRef, + Component, + Input, + OnChanges, + OnDestroy, + OnInit, + forwardRef +} from '@angular/core'; +import { + ControlValueAccessor, + FormBuilder, + FormControl, + FormGroup, + FormsModule, + NG_VALUE_ACCESSOR, + ReactiveFormsModule +} from '@angular/forms'; +import { MatFormFieldModule } from '@angular/material/form-field'; +import { MatSelectModule } from '@angular/material/select'; +import { Subject, takeUntil } from 'rxjs'; + +import { GfEntityLogoComponent } from '../entity-logo/entity-logo.component'; +import { PortfolioFilterFormValue } from './interfaces'; + +@Component({ + changeDetection: ChangeDetectionStrategy.OnPush, + imports: [ + FormsModule, + GfEntityLogoComponent, + GfSymbolPipe, + MatFormFieldModule, + MatSelectModule, + ReactiveFormsModule + ], + providers: [ + { + multi: true, + provide: NG_VALUE_ACCESSOR, + useExisting: forwardRef(() => GfPortfolioFilterFormComponent) + } + ], + schemas: [CUSTOM_ELEMENTS_SCHEMA], + selector: 'gf-portfolio-filter-form', + styleUrls: ['./portfolio-filter-form.component.scss'], + templateUrl: './portfolio-filter-form.component.html' +}) +export class GfPortfolioFilterFormComponent + implements ControlValueAccessor, OnInit, OnChanges, OnDestroy +{ + @Input() accounts: AccountWithPlatform[] = []; + @Input() assetClasses: Filter[] = []; + @Input() holdings: PortfolioPosition[] = []; + @Input() tags: Filter[] = []; + @Input() disabled = false; + + public filterForm: FormGroup; + + private unsubscribeSubject = new Subject(); + + public constructor( + private changeDetectorRef: ChangeDetectorRef, + private formBuilder: FormBuilder + ) { + this.filterForm = this.formBuilder.group({ + account: new FormControl(null), + assetClass: new FormControl(null), + holding: new FormControl(null), + tag: new FormControl(null) + }); + } + + public ngOnInit() { + this.filterForm.valueChanges + .pipe(takeUntil(this.unsubscribeSubject)) + .subscribe((value) => { + this.onChange(value as PortfolioFilterFormValue); + this.onTouched(); + }); + } + + public hasFilters() { + const formValue = this.filterForm.value; + + return Object.values(formValue).some((value) => { + return !!value; + }); + } + + public holdingComparisonFunction( + option: PortfolioPosition, + value: PortfolioPosition + ) { + if (value === null) { + return false; + } + + return ( + getAssetProfileIdentifier(option) === getAssetProfileIdentifier(value) + ); + } + + public ngOnChanges() { + if (this.disabled) { + this.filterForm.disable({ emitEvent: false }); + } else { + this.filterForm.enable({ emitEvent: false }); + } + + const tagControl = this.filterForm.get('tag'); + + if (this.tags.length === 0) { + tagControl?.disable({ emitEvent: false }); + } else if (!this.disabled) { + tagControl?.enable({ emitEvent: false }); + } + + this.changeDetectorRef.markForCheck(); + } + + public registerOnChange(fn: (value: PortfolioFilterFormValue) => void) { + this.onChange = fn; + } + + public registerOnTouched(fn: () => void) { + this.onTouched = fn; + } + + public setDisabledState(isDisabled: boolean) { + this.disabled = isDisabled; + + if (this.disabled) { + this.filterForm.disable({ emitEvent: false }); + } else { + this.filterForm.enable({ emitEvent: false }); + } + + this.changeDetectorRef.markForCheck(); + } + + public writeValue(value: PortfolioFilterFormValue | null) { + if (value) { + this.filterForm.setValue( + { + account: value.account ?? null, + assetClass: value.assetClass ?? null, + holding: value.holding ?? null, + tag: value.tag ?? null + }, + { emitEvent: false } + ); + } else { + this.filterForm.reset({}, { emitEvent: false }); + } + } + + public ngOnDestroy() { + this.unsubscribeSubject.next(); + this.unsubscribeSubject.complete(); + } + + // eslint-disable-next-line @typescript-eslint/no-unused-vars + private onChange = (_value: PortfolioFilterFormValue): void => { + // ControlValueAccessor onChange callback + }; + + private onTouched = (): void => { + // ControlValueAccessor onTouched callback + }; +} From b915c9554e6bec9ee2cb690a8ffaf4a8fd857e6f Mon Sep 17 00:00:00 2001 From: Dibyendu Sahoo Date: Tue, 21 Oct 2025 00:07:35 +0530 Subject: [PATCH 19/92] Task/extend rule settings interface by locale (#5802) * Extend rule settings interface by locale --- apps/api/src/models/interfaces/rule-settings.interface.ts | 1 + .../rules/account-cluster-risk/current-investment.ts | 7 ++++++- .../models/rules/account-cluster-risk/single-account.ts | 3 ++- .../src/models/rules/asset-class-cluster-risk/equity.ts | 7 ++++++- .../models/rules/asset-class-cluster-risk/fixed-income.ts | 7 ++++++- .../base-currency-current-investment.ts | 7 ++++++- .../rules/currency-cluster-risk/current-investment.ts | 7 ++++++- .../economic-market-cluster-risk/developed-markets.ts | 7 ++++++- .../rules/economic-market-cluster-risk/emerging-markets.ts | 7 ++++++- .../models/rules/emergency-fund/emergency-fund-setup.ts | 7 ++++++- .../src/models/rules/fees/fee-ratio-initial-investment.ts | 7 ++++++- apps/api/src/models/rules/liquidity/buying-power.ts | 7 ++++++- .../rules/regional-market-cluster-risk/asia-pacific.ts | 7 ++++++- .../rules/regional-market-cluster-risk/emerging-markets.ts | 7 ++++++- .../models/rules/regional-market-cluster-risk/europe.ts | 7 ++++++- .../src/models/rules/regional-market-cluster-risk/japan.ts | 7 ++++++- .../rules/regional-market-cluster-risk/north-america.ts | 7 ++++++- 17 files changed, 93 insertions(+), 16 deletions(-) diff --git a/apps/api/src/models/interfaces/rule-settings.interface.ts b/apps/api/src/models/interfaces/rule-settings.interface.ts index 377bab52b..ff22650ca 100644 --- a/apps/api/src/models/interfaces/rule-settings.interface.ts +++ b/apps/api/src/models/interfaces/rule-settings.interface.ts @@ -1,3 +1,4 @@ export interface RuleSettings { isActive: boolean; + locale: string; } diff --git a/apps/api/src/models/rules/account-cluster-risk/current-investment.ts b/apps/api/src/models/rules/account-cluster-risk/current-investment.ts index 0601eea9a..51c808b25 100644 --- a/apps/api/src/models/rules/account-cluster-risk/current-investment.ts +++ b/apps/api/src/models/rules/account-cluster-risk/current-investment.ts @@ -121,9 +121,14 @@ export class AccountClusterRiskCurrentInvestment extends Rule { }); } - public getSettings({ baseCurrency, xRayRules }: UserSettings): Settings { + public getSettings({ + baseCurrency, + locale, + xRayRules + }: UserSettings): Settings { return { baseCurrency, + locale, isActive: xRayRules?.[this.getKey()]?.isActive ?? true, thresholdMax: xRayRules?.[this.getKey()]?.thresholdMax ?? 0.5 }; diff --git a/apps/api/src/models/rules/account-cluster-risk/single-account.ts b/apps/api/src/models/rules/account-cluster-risk/single-account.ts index 8890bb767..0e07a9dc6 100644 --- a/apps/api/src/models/rules/account-cluster-risk/single-account.ts +++ b/apps/api/src/models/rules/account-cluster-risk/single-account.ts @@ -72,8 +72,9 @@ export class AccountClusterRiskSingleAccount extends Rule { }); } - public getSettings({ xRayRules }: UserSettings): RuleSettings { + public getSettings({ locale, xRayRules }: UserSettings): RuleSettings { return { + locale, isActive: xRayRules?.[this.getKey()]?.isActive ?? true }; } diff --git a/apps/api/src/models/rules/asset-class-cluster-risk/equity.ts b/apps/api/src/models/rules/asset-class-cluster-risk/equity.ts index dab55413e..9a6f9dacb 100644 --- a/apps/api/src/models/rules/asset-class-cluster-risk/equity.ts +++ b/apps/api/src/models/rules/asset-class-cluster-risk/equity.ts @@ -109,9 +109,14 @@ export class AssetClassClusterRiskEquity extends Rule { }); } - public getSettings({ baseCurrency, xRayRules }: UserSettings): Settings { + public getSettings({ + baseCurrency, + locale, + xRayRules + }: UserSettings): Settings { return { baseCurrency, + locale, isActive: xRayRules?.[this.getKey()]?.isActive ?? true, thresholdMax: xRayRules?.[this.getKey()]?.thresholdMax ?? 0.82, thresholdMin: xRayRules?.[this.getKey()]?.thresholdMin ?? 0.78 diff --git a/apps/api/src/models/rules/asset-class-cluster-risk/fixed-income.ts b/apps/api/src/models/rules/asset-class-cluster-risk/fixed-income.ts index f793ec16f..70cdb63c8 100644 --- a/apps/api/src/models/rules/asset-class-cluster-risk/fixed-income.ts +++ b/apps/api/src/models/rules/asset-class-cluster-risk/fixed-income.ts @@ -109,9 +109,14 @@ export class AssetClassClusterRiskFixedIncome extends Rule { }); } - public getSettings({ baseCurrency, xRayRules }: UserSettings): Settings { + public getSettings({ + baseCurrency, + locale, + xRayRules + }: UserSettings): Settings { return { baseCurrency, + locale, isActive: xRayRules?.[this.getKey()]?.isActive ?? true, thresholdMax: xRayRules?.[this.getKey()]?.thresholdMax ?? 0.22, thresholdMin: xRayRules?.[this.getKey()]?.thresholdMin ?? 0.18 diff --git a/apps/api/src/models/rules/currency-cluster-risk/base-currency-current-investment.ts b/apps/api/src/models/rules/currency-cluster-risk/base-currency-current-investment.ts index 2c2b6c4d6..273c98e35 100644 --- a/apps/api/src/models/rules/currency-cluster-risk/base-currency-current-investment.ts +++ b/apps/api/src/models/rules/currency-cluster-risk/base-currency-current-investment.ts @@ -97,9 +97,14 @@ export class CurrencyClusterRiskBaseCurrencyCurrentInvestment extends Rule { }); } - public getSettings({ baseCurrency, xRayRules }: UserSettings): Settings { + public getSettings({ + baseCurrency, + locale, + xRayRules + }: UserSettings): Settings { return { baseCurrency, + locale, isActive: xRayRules?.[this.getKey()]?.isActive ?? true, thresholdMax: xRayRules?.[this.getKey()]?.thresholdMax ?? 0.5 }; diff --git a/apps/api/src/models/rules/economic-market-cluster-risk/developed-markets.ts b/apps/api/src/models/rules/economic-market-cluster-risk/developed-markets.ts index 7ca7a2d76..fa4f80d40 100644 --- a/apps/api/src/models/rules/economic-market-cluster-risk/developed-markets.ts +++ b/apps/api/src/models/rules/economic-market-cluster-risk/developed-markets.ts @@ -104,9 +104,14 @@ export class EconomicMarketClusterRiskDevelopedMarkets extends Rule { }); } - public getSettings({ baseCurrency, xRayRules }: UserSettings): Settings { + public getSettings({ + baseCurrency, + locale, + xRayRules + }: UserSettings): Settings { return { baseCurrency, + locale, isActive: xRayRules?.[this.getKey()]?.isActive ?? true, thresholdMax: xRayRules?.[this.getKey()]?.thresholdMax ?? 0.72, thresholdMin: xRayRules?.[this.getKey()]?.thresholdMin ?? 0.68 diff --git a/apps/api/src/models/rules/economic-market-cluster-risk/emerging-markets.ts b/apps/api/src/models/rules/economic-market-cluster-risk/emerging-markets.ts index cbf9f98b7..1414b53ed 100644 --- a/apps/api/src/models/rules/economic-market-cluster-risk/emerging-markets.ts +++ b/apps/api/src/models/rules/economic-market-cluster-risk/emerging-markets.ts @@ -104,9 +104,14 @@ export class EconomicMarketClusterRiskEmergingMarkets extends Rule { }); } - public getSettings({ baseCurrency, xRayRules }: UserSettings): Settings { + public getSettings({ + baseCurrency, + locale, + xRayRules + }: UserSettings): Settings { return { baseCurrency, + locale, isActive: xRayRules?.[this.getKey()]?.isActive ?? true, thresholdMax: xRayRules?.[this.getKey()]?.thresholdMax ?? 0.32, thresholdMin: xRayRules?.[this.getKey()]?.thresholdMin ?? 0.28 diff --git a/apps/api/src/models/rules/emergency-fund/emergency-fund-setup.ts b/apps/api/src/models/rules/emergency-fund/emergency-fund-setup.ts index d97805fa6..2129f438b 100644 --- a/apps/api/src/models/rules/emergency-fund/emergency-fund-setup.ts +++ b/apps/api/src/models/rules/emergency-fund/emergency-fund-setup.ts @@ -59,9 +59,14 @@ export class EmergencyFundSetup extends Rule { }); } - public getSettings({ baseCurrency, xRayRules }: UserSettings): Settings { + public getSettings({ + baseCurrency, + locale, + xRayRules + }: UserSettings): Settings { return { baseCurrency, + locale, isActive: xRayRules?.[this.getKey()]?.isActive ?? true }; } diff --git a/apps/api/src/models/rules/fees/fee-ratio-initial-investment.ts b/apps/api/src/models/rules/fees/fee-ratio-initial-investment.ts index 93c9aafd3..c5448a277 100644 --- a/apps/api/src/models/rules/fees/fee-ratio-initial-investment.ts +++ b/apps/api/src/models/rules/fees/fee-ratio-initial-investment.ts @@ -82,9 +82,14 @@ export class FeeRatioInitialInvestment extends Rule { }); } - public getSettings({ baseCurrency, xRayRules }: UserSettings): Settings { + public getSettings({ + baseCurrency, + locale, + xRayRules + }: UserSettings): Settings { return { baseCurrency, + locale, isActive: xRayRules?.[this.getKey()]?.isActive ?? true, thresholdMax: xRayRules?.[this.getKey()]?.thresholdMax ?? 0.01 }; diff --git a/apps/api/src/models/rules/liquidity/buying-power.ts b/apps/api/src/models/rules/liquidity/buying-power.ts index 539d0a728..70393278d 100644 --- a/apps/api/src/models/rules/liquidity/buying-power.ts +++ b/apps/api/src/models/rules/liquidity/buying-power.ts @@ -86,9 +86,14 @@ export class BuyingPower extends Rule { }); } - public getSettings({ baseCurrency, xRayRules }: UserSettings): Settings { + public getSettings({ + baseCurrency, + locale, + xRayRules + }: UserSettings): Settings { return { baseCurrency, + locale, isActive: xRayRules?.[this.getKey()]?.isActive ?? true, thresholdMin: xRayRules?.[this.getKey()]?.thresholdMin ?? 0 }; diff --git a/apps/api/src/models/rules/regional-market-cluster-risk/asia-pacific.ts b/apps/api/src/models/rules/regional-market-cluster-risk/asia-pacific.ts index 5d6cc999a..1242df759 100644 --- a/apps/api/src/models/rules/regional-market-cluster-risk/asia-pacific.ts +++ b/apps/api/src/models/rules/regional-market-cluster-risk/asia-pacific.ts @@ -94,9 +94,14 @@ export class RegionalMarketClusterRiskAsiaPacific extends Rule { }); } - public getSettings({ baseCurrency, xRayRules }: UserSettings): Settings { + public getSettings({ + baseCurrency, + locale, + xRayRules + }: UserSettings): Settings { return { baseCurrency, + locale, isActive: xRayRules?.[this.getKey()]?.isActive ?? true, thresholdMax: xRayRules?.[this.getKey()]?.thresholdMax ?? 0.03, thresholdMin: xRayRules?.[this.getKey()]?.thresholdMin ?? 0.02 diff --git a/apps/api/src/models/rules/regional-market-cluster-risk/emerging-markets.ts b/apps/api/src/models/rules/regional-market-cluster-risk/emerging-markets.ts index fa13a9e57..8486d843b 100644 --- a/apps/api/src/models/rules/regional-market-cluster-risk/emerging-markets.ts +++ b/apps/api/src/models/rules/regional-market-cluster-risk/emerging-markets.ts @@ -96,9 +96,14 @@ export class RegionalMarketClusterRiskEmergingMarkets extends Rule { }); } - public getSettings({ baseCurrency, xRayRules }: UserSettings): Settings { + public getSettings({ + baseCurrency, + locale, + xRayRules + }: UserSettings): Settings { return { baseCurrency, + locale, isActive: xRayRules?.[this.getKey()]?.isActive ?? true, thresholdMax: xRayRules?.[this.getKey()]?.thresholdMax ?? 0.12, thresholdMin: xRayRules?.[this.getKey()]?.thresholdMin ?? 0.08 diff --git a/apps/api/src/models/rules/regional-market-cluster-risk/europe.ts b/apps/api/src/models/rules/regional-market-cluster-risk/europe.ts index 3bbe7af84..459848db4 100644 --- a/apps/api/src/models/rules/regional-market-cluster-risk/europe.ts +++ b/apps/api/src/models/rules/regional-market-cluster-risk/europe.ts @@ -94,9 +94,14 @@ export class RegionalMarketClusterRiskEurope extends Rule { }); } - public getSettings({ baseCurrency, xRayRules }: UserSettings): Settings { + public getSettings({ + baseCurrency, + locale, + xRayRules + }: UserSettings): Settings { return { baseCurrency, + locale, isActive: xRayRules?.[this.getKey()]?.isActive ?? true, thresholdMax: xRayRules?.[this.getKey()]?.thresholdMax ?? 0.15, thresholdMin: xRayRules?.[this.getKey()]?.thresholdMin ?? 0.11 diff --git a/apps/api/src/models/rules/regional-market-cluster-risk/japan.ts b/apps/api/src/models/rules/regional-market-cluster-risk/japan.ts index 952e14795..d9c1cff6b 100644 --- a/apps/api/src/models/rules/regional-market-cluster-risk/japan.ts +++ b/apps/api/src/models/rules/regional-market-cluster-risk/japan.ts @@ -94,9 +94,14 @@ export class RegionalMarketClusterRiskJapan extends Rule { }); } - public getSettings({ baseCurrency, xRayRules }: UserSettings): Settings { + public getSettings({ + baseCurrency, + locale, + xRayRules + }: UserSettings): Settings { return { baseCurrency, + locale, isActive: xRayRules?.[this.getKey()]?.isActive ?? true, thresholdMax: xRayRules?.[this.getKey()]?.thresholdMax ?? 0.06, thresholdMin: xRayRules?.[this.getKey()]?.thresholdMin ?? 0.04 diff --git a/apps/api/src/models/rules/regional-market-cluster-risk/north-america.ts b/apps/api/src/models/rules/regional-market-cluster-risk/north-america.ts index f022ecff9..6180a2cc5 100644 --- a/apps/api/src/models/rules/regional-market-cluster-risk/north-america.ts +++ b/apps/api/src/models/rules/regional-market-cluster-risk/north-america.ts @@ -94,9 +94,14 @@ export class RegionalMarketClusterRiskNorthAmerica extends Rule { }); } - public getSettings({ baseCurrency, xRayRules }: UserSettings): Settings { + public getSettings({ + baseCurrency, + locale, + xRayRules + }: UserSettings): Settings { return { baseCurrency, + locale, isActive: xRayRules?.[this.getKey()]?.isActive ?? true, thresholdMax: xRayRules?.[this.getKey()]?.thresholdMax ?? 0.69, thresholdMin: xRayRules?.[this.getKey()]?.thresholdMin ?? 0.65 From 7ee38d0067e79aef81d14facf4e810875a78d28e Mon Sep 17 00:00:00 2001 From: Ani07-05 <86768646+Ani07-05@users.noreply.github.com> Date: Tue, 21 Oct 2025 19:10:55 +0530 Subject: [PATCH 20/92] Task/refactor Export interface to ExportResponse interface (#5805) * Refactor Export interface to ExportResponse interface --- apps/api/src/app/export/export.controller.ts | 4 ++-- apps/api/src/app/export/export.service.ts | 4 ++-- .../portfolio/calculator/portfolio-calculator-test-utils.ts | 4 ++-- .../calculator/roai/portfolio-calculator-btceur.spec.ts | 4 ++-- .../roai/portfolio-calculator-btcusd-short.spec.ts | 4 ++-- .../calculator/roai/portfolio-calculator-btcusd.spec.ts | 4 ++-- ...portfolio-calculator-novn-buy-and-sell-partially.spec.ts | 4 ++-- .../roai/portfolio-calculator-novn-buy-and-sell.spec.ts | 4 ++-- apps/client/src/app/services/data.service.ts | 4 ++-- apps/client/src/app/services/ics/ics.service.ts | 4 ++-- libs/common/src/lib/interfaces/index.ts | 4 ++-- .../export-response.interface.ts} | 6 +++--- 12 files changed, 25 insertions(+), 25 deletions(-) rename libs/common/src/lib/interfaces/{export.interface.ts => responses/export-response.interface.ts} (82%) diff --git a/apps/api/src/app/export/export.controller.ts b/apps/api/src/app/export/export.controller.ts index 8fa2baa43..0b4a2c6e0 100644 --- a/apps/api/src/app/export/export.controller.ts +++ b/apps/api/src/app/export/export.controller.ts @@ -1,7 +1,7 @@ import { HasPermissionGuard } from '@ghostfolio/api/guards/has-permission.guard'; import { TransformDataSourceInRequestInterceptor } from '@ghostfolio/api/interceptors/transform-data-source-in-request/transform-data-source-in-request.interceptor'; import { ApiService } from '@ghostfolio/api/services/api/api.service'; -import { Export } from '@ghostfolio/common/interfaces'; +import { ExportResponse } from '@ghostfolio/common/interfaces'; import type { RequestWithUser } from '@ghostfolio/common/types'; import { @@ -35,7 +35,7 @@ export class ExportController { @Query('dataSource') filterByDataSource?: string, @Query('symbol') filterBySymbol?: string, @Query('tags') filterByTags?: string - ): Promise { + ): Promise { const activityIds = filterByActivityIds?.split(',') ?? []; const filters = this.apiService.buildFiltersFromQueryParams({ filterByAccounts, diff --git a/apps/api/src/app/export/export.service.ts b/apps/api/src/app/export/export.service.ts index 7d78bdf22..2001fd3e2 100644 --- a/apps/api/src/app/export/export.service.ts +++ b/apps/api/src/app/export/export.service.ts @@ -3,7 +3,7 @@ import { OrderService } from '@ghostfolio/api/app/order/order.service'; import { environment } from '@ghostfolio/api/environments/environment'; import { MarketDataService } from '@ghostfolio/api/services/market-data/market-data.service'; import { TagService } from '@ghostfolio/api/services/tag/tag.service'; -import { Filter, Export } from '@ghostfolio/common/interfaces'; +import { ExportResponse, Filter } from '@ghostfolio/common/interfaces'; import { Injectable } from '@nestjs/common'; import { Platform, Prisma } from '@prisma/client'; @@ -28,7 +28,7 @@ export class ExportService { filters?: Filter[]; userCurrency: string; userId: string; - }): Promise { + }): Promise { const { ACCOUNT: filtersByAccount } = groupBy(filters, ({ type }) => { return type; }); diff --git a/apps/api/src/app/portfolio/calculator/portfolio-calculator-test-utils.ts b/apps/api/src/app/portfolio/calculator/portfolio-calculator-test-utils.ts index ccdbafac8..f4c99916f 100644 --- a/apps/api/src/app/portfolio/calculator/portfolio-calculator-test-utils.ts +++ b/apps/api/src/app/portfolio/calculator/portfolio-calculator-test-utils.ts @@ -1,4 +1,4 @@ -import { Export } from '@ghostfolio/common/interfaces'; +import { ExportResponse } from '@ghostfolio/common/interfaces'; import { readFileSync } from 'node:fs'; @@ -39,6 +39,6 @@ export const userDummyData = { id: 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx' }; -export function loadExportFile(filePath: string): Export { +export function loadExportFile(filePath: string): ExportResponse { return JSON.parse(readFileSync(filePath, 'utf8')); } 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 1ac0dcd16..ca9e5b0d5 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 @@ -15,7 +15,7 @@ import { ExchangeRateDataService } from '@ghostfolio/api/services/exchange-rate- import { PortfolioSnapshotService } from '@ghostfolio/api/services/queues/portfolio-snapshot/portfolio-snapshot.service'; import { PortfolioSnapshotServiceMock } from '@ghostfolio/api/services/queues/portfolio-snapshot/portfolio-snapshot.service.mock'; import { parseDate } from '@ghostfolio/common/helper'; -import { Export } from '@ghostfolio/common/interfaces'; +import { ExportResponse } from '@ghostfolio/common/interfaces'; import { PerformanceCalculationType } from '@ghostfolio/common/types/performance-calculation-type.type'; import { Big } from 'big.js'; @@ -52,7 +52,7 @@ jest.mock('@ghostfolio/api/app/redis-cache/redis-cache.service', () => { }); describe('PortfolioCalculator', () => { - let exportResponse: Export; + let exportResponse: ExportResponse; let configurationService: ConfigurationService; let currentRateService: CurrentRateService; 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 29413c6ad..3e67389dd 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 @@ -15,7 +15,7 @@ import { ExchangeRateDataService } from '@ghostfolio/api/services/exchange-rate- import { PortfolioSnapshotService } from '@ghostfolio/api/services/queues/portfolio-snapshot/portfolio-snapshot.service'; import { PortfolioSnapshotServiceMock } from '@ghostfolio/api/services/queues/portfolio-snapshot/portfolio-snapshot.service.mock'; import { parseDate } from '@ghostfolio/common/helper'; -import { Export } from '@ghostfolio/common/interfaces'; +import { ExportResponse } from '@ghostfolio/common/interfaces'; import { PerformanceCalculationType } from '@ghostfolio/common/types/performance-calculation-type.type'; import { Big } from 'big.js'; @@ -52,7 +52,7 @@ jest.mock('@ghostfolio/api/app/redis-cache/redis-cache.service', () => { }); describe('PortfolioCalculator', () => { - let exportResponse: Export; + let exportResponse: ExportResponse; let configurationService: ConfigurationService; let currentRateService: CurrentRateService; 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 26b3325c2..f08083554 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 @@ -15,7 +15,7 @@ import { ExchangeRateDataService } from '@ghostfolio/api/services/exchange-rate- import { PortfolioSnapshotService } from '@ghostfolio/api/services/queues/portfolio-snapshot/portfolio-snapshot.service'; import { PortfolioSnapshotServiceMock } from '@ghostfolio/api/services/queues/portfolio-snapshot/portfolio-snapshot.service.mock'; import { parseDate } from '@ghostfolio/common/helper'; -import { Export } from '@ghostfolio/common/interfaces'; +import { ExportResponse } from '@ghostfolio/common/interfaces'; import { PerformanceCalculationType } from '@ghostfolio/common/types/performance-calculation-type.type'; import { Big } from 'big.js'; @@ -52,7 +52,7 @@ jest.mock('@ghostfolio/api/app/redis-cache/redis-cache.service', () => { }); describe('PortfolioCalculator', () => { - let exportResponse: Export; + let exportResponse: ExportResponse; let configurationService: ConfigurationService; let currentRateService: CurrentRateService; 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 0f1cdfff7..4678dbd5e 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 @@ -15,7 +15,7 @@ import { ExchangeRateDataService } from '@ghostfolio/api/services/exchange-rate- import { PortfolioSnapshotService } from '@ghostfolio/api/services/queues/portfolio-snapshot/portfolio-snapshot.service'; import { PortfolioSnapshotServiceMock } from '@ghostfolio/api/services/queues/portfolio-snapshot/portfolio-snapshot.service.mock'; import { parseDate } from '@ghostfolio/common/helper'; -import { Export } from '@ghostfolio/common/interfaces'; +import { ExportResponse } from '@ghostfolio/common/interfaces'; import { PerformanceCalculationType } from '@ghostfolio/common/types/performance-calculation-type.type'; import { Big } from 'big.js'; @@ -52,7 +52,7 @@ jest.mock('@ghostfolio/api/app/redis-cache/redis-cache.service', () => { }); describe('PortfolioCalculator', () => { - let exportResponse: Export; + let exportResponse: ExportResponse; let configurationService: ConfigurationService; let currentRateService: CurrentRateService; 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 e426a68fa..c4ccab7ad 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 @@ -15,7 +15,7 @@ import { ExchangeRateDataService } from '@ghostfolio/api/services/exchange-rate- import { PortfolioSnapshotService } from '@ghostfolio/api/services/queues/portfolio-snapshot/portfolio-snapshot.service'; import { PortfolioSnapshotServiceMock } from '@ghostfolio/api/services/queues/portfolio-snapshot/portfolio-snapshot.service.mock'; import { parseDate } from '@ghostfolio/common/helper'; -import { Export } from '@ghostfolio/common/interfaces'; +import { ExportResponse } from '@ghostfolio/common/interfaces'; import { PerformanceCalculationType } from '@ghostfolio/common/types/performance-calculation-type.type'; import { Big } from 'big.js'; @@ -52,7 +52,7 @@ jest.mock('@ghostfolio/api/app/redis-cache/redis-cache.service', () => { }); describe('PortfolioCalculator', () => { - let exportResponse: Export; + let exportResponse: ExportResponse; let configurationService: ConfigurationService; let currentRateService: CurrentRateService; diff --git a/apps/client/src/app/services/data.service.ts b/apps/client/src/app/services/data.service.ts index 66d84c09d..d6d582c56 100644 --- a/apps/client/src/app/services/data.service.ts +++ b/apps/client/src/app/services/data.service.ts @@ -34,7 +34,7 @@ import { BenchmarkMarketDataDetailsResponse, BenchmarkResponse, DataProviderHealthResponse, - Export, + ExportResponse, Filter, ImportResponse, InfoItem, @@ -407,7 +407,7 @@ export class DataService { params = params.append('activityIds', activityIds.join(',')); } - return this.http.get('/api/v1/export', { + return this.http.get('/api/v1/export', { params }); } diff --git a/apps/client/src/app/services/ics/ics.service.ts b/apps/client/src/app/services/ics/ics.service.ts index b94b2dee3..a3235380e 100644 --- a/apps/client/src/app/services/ics/ics.service.ts +++ b/apps/client/src/app/services/ics/ics.service.ts @@ -1,5 +1,5 @@ import { capitalize } from '@ghostfolio/common/helper'; -import { Export } from '@ghostfolio/common/interfaces'; +import { ExportResponse } from '@ghostfolio/common/interfaces'; import { Injectable } from '@angular/core'; import { Type } from '@prisma/client'; @@ -13,7 +13,7 @@ export class IcsService { private readonly ICS_LINE_BREAK = '\r\n'; public transformActivitiesToIcsContent( - aActivities: Export['activities'] + aActivities: ExportResponse['activities'] ): string { const header = [ 'BEGIN:VCALENDAR', diff --git a/libs/common/src/lib/interfaces/index.ts b/libs/common/src/lib/interfaces/index.ts index 854c53df0..6c8754ea9 100644 --- a/libs/common/src/lib/interfaces/index.ts +++ b/libs/common/src/lib/interfaces/index.ts @@ -15,7 +15,6 @@ import type { Benchmark } from './benchmark.interface'; import type { Coupon } from './coupon.interface'; import type { DataProviderInfo } from './data-provider-info.interface'; import type { EnhancedSymbolProfile } from './enhanced-symbol-profile.interface'; -import type { Export } from './export.interface'; import type { FilterGroup } from './filter-group.interface'; import type { Filter } from './filter.interface'; import type { FireWealth } from './fire-wealth.interface'; @@ -49,6 +48,7 @@ import type { DataProviderGhostfolioStatusResponse } from './responses/data-prov import type { DataProviderHealthResponse } from './responses/data-provider-health-response.interface'; import type { DividendsResponse } from './responses/dividends-response.interface'; import type { ResponseError } from './responses/errors.interface'; +import type { ExportResponse } from './responses/export-response.interface'; import type { HistoricalResponse } from './responses/historical-response.interface'; import type { ImportResponse } from './responses/import-response.interface'; import type { InfoResponse } from './responses/info-response.interface'; @@ -105,7 +105,7 @@ export { DataProviderInfo, DividendsResponse, EnhancedSymbolProfile, - Export, + ExportResponse, Filter, FilterGroup, FireWealth, diff --git a/libs/common/src/lib/interfaces/export.interface.ts b/libs/common/src/lib/interfaces/responses/export-response.interface.ts similarity index 82% rename from libs/common/src/lib/interfaces/export.interface.ts rename to libs/common/src/lib/interfaces/responses/export-response.interface.ts index 16a49b0ef..a5416e886 100644 --- a/libs/common/src/lib/interfaces/export.interface.ts +++ b/libs/common/src/lib/interfaces/responses/export-response.interface.ts @@ -7,10 +7,10 @@ import { Tag } from '@prisma/client'; -import { AccountBalance } from './account-balance.interface'; -import { MarketData } from './market-data.interface'; +import { AccountBalance } from '../account-balance.interface'; +import { MarketData } from '../market-data.interface'; -export interface Export { +export interface ExportResponse { accounts: (Omit & { balances: AccountBalance[]; })[]; From 9b51c2da5d7c0ee9986aef6e2e3296a7ec4fafe7 Mon Sep 17 00:00:00 2001 From: Harsh Santwani <96873014+HydrallHarsh@users.noreply.github.com> Date: Tue, 21 Oct 2025 19:12:30 +0530 Subject: [PATCH 21/92] Task/improve typings of getOrderById() functionality (#5810) * Improve typings of getOrderById() functionality --- apps/api/src/app/order/order.controller.ts | 5 +++-- apps/client/src/app/services/data.service.ts | 8 +++----- libs/common/src/lib/interfaces/index.ts | 2 ++ .../interfaces/responses/activity-response.interface.ts | 3 +++ 4 files changed, 11 insertions(+), 7 deletions(-) create mode 100644 libs/common/src/lib/interfaces/responses/activity-response.interface.ts diff --git a/apps/api/src/app/order/order.controller.ts b/apps/api/src/app/order/order.controller.ts index ffed8ac2e..86228cf2e 100644 --- a/apps/api/src/app/order/order.controller.ts +++ b/apps/api/src/app/order/order.controller.ts @@ -11,6 +11,7 @@ import { DATA_GATHERING_QUEUE_PRIORITY_HIGH, HEADER_KEY_IMPERSONATION } from '@ghostfolio/common/config'; +import { ActivityResponse } from '@ghostfolio/common/interfaces'; import { permissions } from '@ghostfolio/common/permissions'; import type { DateRange, RequestWithUser } from '@ghostfolio/common/types'; @@ -36,7 +37,7 @@ import { parseISO } from 'date-fns'; import { StatusCodes, getReasonPhrase } from 'http-status-codes'; import { CreateOrderDto } from './create-order.dto'; -import { Activities, Activity } from './interfaces/activities.interface'; +import { Activities } from './interfaces/activities.interface'; import { OrderService } from './order.service'; import { UpdateOrderDto } from './update-order.dto'; @@ -157,7 +158,7 @@ export class OrderController { public async getOrderById( @Headers(HEADER_KEY_IMPERSONATION.toLowerCase()) impersonationId: string, @Param('id') id: string - ): Promise { + ): Promise { const impersonationUserId = await this.impersonationService.validateImpersonationId(impersonationId); const userCurrency = this.request.user.settings.settings.baseCurrency; diff --git a/apps/client/src/app/services/data.service.ts b/apps/client/src/app/services/data.service.ts index d6d582c56..549675f7f 100644 --- a/apps/client/src/app/services/data.service.ts +++ b/apps/client/src/app/services/data.service.ts @@ -9,10 +9,7 @@ import { CreateTagDto } from '@ghostfolio/api/app/endpoints/tags/create-tag.dto' import { UpdateTagDto } from '@ghostfolio/api/app/endpoints/tags/update-tag.dto'; import { CreateWatchlistItemDto } from '@ghostfolio/api/app/endpoints/watchlist/create-watchlist-item.dto'; import { CreateOrderDto } from '@ghostfolio/api/app/order/create-order.dto'; -import { - Activities, - Activity -} from '@ghostfolio/api/app/order/interfaces/activities.interface'; +import { Activities } from '@ghostfolio/api/app/order/interfaces/activities.interface'; import { UpdateOrderDto } from '@ghostfolio/api/app/order/update-order.dto'; import { SymbolItem } from '@ghostfolio/api/app/symbol/interfaces/symbol-item.interface'; import { DeleteOwnUserDto } from '@ghostfolio/api/app/user/delete-own-user.dto'; @@ -27,6 +24,7 @@ import { AccessTokenResponse, AccountBalancesResponse, AccountsResponse, + ActivityResponse, AiPromptResponse, ApiKeyResponse, AssetProfileIdentifier, @@ -248,7 +246,7 @@ export class DataService { } public fetchActivity(aActivityId: string) { - return this.http.get(`/api/v1/order/${aActivityId}`).pipe( + return this.http.get(`/api/v1/order/${aActivityId}`).pipe( map((activity) => { activity.createdAt = parseISO(activity.createdAt as unknown as string); activity.date = parseISO(activity.date as unknown as string); diff --git a/libs/common/src/lib/interfaces/index.ts b/libs/common/src/lib/interfaces/index.ts index 6c8754ea9..e3c2c2038 100644 --- a/libs/common/src/lib/interfaces/index.ts +++ b/libs/common/src/lib/interfaces/index.ts @@ -37,6 +37,7 @@ import type { Product } from './product'; import type { AccessTokenResponse } from './responses/access-token-response.interface'; import type { AccountBalancesResponse } from './responses/account-balances-response.interface'; import type { AccountsResponse } from './responses/accounts-response.interface'; +import type { ActivityResponse } from './responses/activity-response.interface'; import type { AiPromptResponse } from './responses/ai-prompt-response.interface'; import type { ApiKeyResponse } from './responses/api-key-response.interface'; import type { AssetResponse } from './responses/asset-response.interface'; @@ -82,6 +83,7 @@ export { AccountBalance, AccountBalancesResponse, AccountsResponse, + ActivityResponse, AdminData, AdminJobs, AdminMarketData, diff --git a/libs/common/src/lib/interfaces/responses/activity-response.interface.ts b/libs/common/src/lib/interfaces/responses/activity-response.interface.ts new file mode 100644 index 000000000..5dd338627 --- /dev/null +++ b/libs/common/src/lib/interfaces/responses/activity-response.interface.ts @@ -0,0 +1,3 @@ +import { Activity } from '@ghostfolio/api/app/order/interfaces/activities.interface'; + +export interface ActivityResponse extends Activity {} From ed364fc25f1973d1c7b5e361a41728cb12c63c6b Mon Sep 17 00:00:00 2001 From: Arshad Jamal Date: Tue, 21 Oct 2025 22:26:47 +0530 Subject: [PATCH 22/92] Bugfix/database seed (#5792) * Fix database seed * Update changelog --------- Co-authored-by: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> --- CHANGELOG.md | 4 +++ package-lock.json | 66 ++++++++++++++++++++++++++++++++++++++++++----- package.json | 2 ++ prisma.config.ts | 5 +++- 4 files changed, 70 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 08201a175..7690d90ed 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,6 +18,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Formatted the holdings table in the _Copy portfolio data to clipboard for AI prompt_ action on the analysis page (experimental) - Improved the language localization for German (`de`) +### Fixed + +- Fixed an issue in the database seeding process caused by unresolved environment variables in `DATABASE_URL` + ## 2.209.0 - 2025-10-18 ### Added diff --git a/package-lock.json b/package-lock.json index 74b9936a9..16a8381b4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -65,6 +65,8 @@ "countries-list": "3.1.1", "countup.js": "2.9.0", "date-fns": "4.1.0", + "dotenv": "17.2.3", + "dotenv-expand": "12.0.3", "envalid": "8.1.0", "fuse.js": "7.1.0", "google-spreadsheet": "3.2.0", @@ -9081,6 +9083,33 @@ "rxjs": "^7.1.0" } }, + "node_modules/@nestjs/config/node_modules/dotenv": { + "version": "16.4.7", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.7.tgz", + "integrity": "sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "node_modules/@nestjs/config/node_modules/dotenv-expand": { + "version": "12.0.1", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-12.0.1.tgz", + "integrity": "sha512-LaKRbou8gt0RNID/9RoI+J2rvXsBRPMV7p+ElHlPhcSARbCPDYcYG2s1TIzAfWv4YSgyY5taidWzzs31lNV3yQ==", + "license": "BSD-2-Clause", + "dependencies": { + "dotenv": "^16.4.5" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, "node_modules/@nestjs/core": { "version": "11.1.3", "resolved": "https://registry.npmjs.org/@nestjs/core/-/core-11.1.3.tgz", @@ -21037,9 +21066,9 @@ } }, "node_modules/dotenv": { - "version": "16.4.7", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.7.tgz", - "integrity": "sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==", + "version": "17.2.3", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.2.3.tgz", + "integrity": "sha512-JVUnt+DUIzu87TABbhPmNfVdBDt18BLOWjMUFJMSi/Qqg7NTYtabbvSNJGOJ7afbRuv9D/lngizHtP7QyLQ+9w==", "license": "BSD-2-Clause", "engines": { "node": ">=12" @@ -21049,9 +21078,9 @@ } }, "node_modules/dotenv-expand": { - "version": "12.0.1", - "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-12.0.1.tgz", - "integrity": "sha512-LaKRbou8gt0RNID/9RoI+J2rvXsBRPMV7p+ElHlPhcSARbCPDYcYG2s1TIzAfWv4YSgyY5taidWzzs31lNV3yQ==", + "version": "12.0.3", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-12.0.3.tgz", + "integrity": "sha512-uc47g4b+4k/M/SeaW1y4OApx+mtLWl92l5LMPP0GNXctZqELk+YGgOPIIC5elYmUH4OuoK3JLhuRUYegeySiFA==", "license": "BSD-2-Clause", "dependencies": { "dotenv": "^16.4.5" @@ -21063,6 +21092,18 @@ "url": "https://dotenvx.com" } }, + "node_modules/dotenv-expand/node_modules/dotenv": { + "version": "16.6.1", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.6.1.tgz", + "integrity": "sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, "node_modules/dunder-proto": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", @@ -33459,6 +33500,19 @@ "node": ">=8" } }, + "node_modules/nx/node_modules/dotenv": { + "version": "16.4.7", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.7.tgz", + "integrity": "sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, "node_modules/nx/node_modules/dotenv-expand": { "version": "11.0.7", "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-11.0.7.tgz", diff --git a/package.json b/package.json index ff8adc51f..403ce7f7b 100644 --- a/package.json +++ b/package.json @@ -111,6 +111,8 @@ "countries-list": "3.1.1", "countup.js": "2.9.0", "date-fns": "4.1.0", + "dotenv": "17.2.3", + "dotenv-expand": "12.0.3", "envalid": "8.1.0", "fuse.js": "7.1.0", "google-spreadsheet": "3.2.0", diff --git a/prisma.config.ts b/prisma.config.ts index 24da6d886..60597cbf1 100644 --- a/prisma.config.ts +++ b/prisma.config.ts @@ -1,7 +1,10 @@ -import 'dotenv/config'; +import { config } from 'dotenv'; +import { expand } from 'dotenv-expand'; import { join } from 'node:path'; import { defineConfig } from 'prisma/config'; +expand(config({ quiet: true })); + export default defineConfig({ migrations: { path: join('prisma', 'migrations'), From ceace870a875f1e69c4e11e9b0db482ff84e82c9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Szymon=20=C5=81=C4=85giewka?= Date: Tue, 21 Oct 2025 20:46:27 +0200 Subject: [PATCH 23/92] Task/upgrade ioredis to forfeit overriding defaults (#5813) * Upgrade ioredis to forfeit overriding defaults * Update changelog --- CHANGELOG.md | 2 ++ apps/api/src/app/app.module.ts | 1 - package-lock.json | 14 +++++++------- 3 files changed, 9 insertions(+), 8 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7690d90ed..cbd306f9c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,7 +16,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Extracted the portfolio filter form of the assistant to a reusable component - Formatted the holdings table in the _Copy AI prompt to clipboard for analysis_ action on the analysis page (experimental) - Formatted the holdings table in the _Copy portfolio data to clipboard for AI prompt_ action on the analysis page (experimental) +- Reverted the explicit configuration of the _Redis_ address family in the job queue module - Improved the language localization for German (`de`) +- Upgraded `ioredis` from version `5.6.1` to `5.8.2` ### Fixed diff --git a/apps/api/src/app/app.module.ts b/apps/api/src/app/app.module.ts index 86ceede28..5ec148558 100644 --- a/apps/api/src/app/app.module.ts +++ b/apps/api/src/app/app.module.ts @@ -71,7 +71,6 @@ import { UserModule } from './user/user.module'; BullModule.forRoot({ redis: { db: parseInt(process.env.REDIS_DB ?? '0', 10), - family: 0, host: process.env.REDIS_HOST, password: process.env.REDIS_PASSWORD, port: parseInt(process.env.REDIS_PORT ?? '6379', 10) diff --git a/package-lock.json b/package-lock.json index 16a8381b4..cc58d01ca 100644 --- a/package-lock.json +++ b/package-lock.json @@ -6115,9 +6115,9 @@ } }, "node_modules/@ioredis/commands": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@ioredis/commands/-/commands-1.3.0.tgz", - "integrity": "sha512-M/T6Zewn7sDaBQEqIZ8Rb+i9y8qfGmq+5SDFSf9sA2lUZTmdDLVdOiQaeDp+Q4wElZ9HG1GAX5KhDaidp6LQsQ==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@ioredis/commands/-/commands-1.4.0.tgz", + "integrity": "sha512-aFT2yemJJo+TZCmieA7qnYGQooOS7QfNmYrzGtsYd3g9j5iDP8AimYYAesf79ohjbLG12XxC4nG5DyEnC88AsQ==", "license": "MIT" }, "node_modules/@isaacs/balanced-match": { @@ -25108,12 +25108,12 @@ } }, "node_modules/ioredis": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/ioredis/-/ioredis-5.6.1.tgz", - "integrity": "sha512-UxC0Yv1Y4WRJiGQxQkP0hfdL0/5/6YvdfOOClRgJ0qppSarkhneSa6UvkMkms0AkdGimSH3Ikqm+6mkMmX7vGA==", + "version": "5.8.2", + "resolved": "https://registry.npmjs.org/ioredis/-/ioredis-5.8.2.tgz", + "integrity": "sha512-C6uC+kleiIMmjViJINWk80sOQw5lEzse1ZmvD+S/s8p8CWapftSaC+kocGTx6xrbrJ4WmYQGC08ffHLr6ToR6Q==", "license": "MIT", "dependencies": { - "@ioredis/commands": "^1.1.1", + "@ioredis/commands": "1.4.0", "cluster-key-slot": "^1.1.0", "debug": "^4.3.4", "denque": "^2.1.0", From 167cbcd5c7201106638970d57e75b286ce947c23 Mon Sep 17 00:00:00 2001 From: jjs2099 <140512982+jjs2099@users.noreply.github.com> Date: Wed, 22 Oct 2025 00:29:12 +0530 Subject: [PATCH 24/92] Bugfix/submit form of login with access token dialog with enter key press (#5751) * Fix form submit with enter key press * Update changelog --- CHANGELOG.md | 1 + .../login-with-access-token-dialog.html | 57 ++++++++++--------- 2 files changed, 31 insertions(+), 27 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index cbd306f9c..63cbf5898 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -22,6 +22,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Fixed +- Fixed the enter key press to submit the form of the login with access token dialog - Fixed an issue in the database seeding process caused by unresolved environment variables in `DATABASE_URL` ## 2.209.0 - 2025-10-18 diff --git a/apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html b/apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html index e19d190c4..b51802caf 100644 --- a/apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html +++ b/apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html @@ -2,13 +2,14 @@
+
Date: Wed, 22 Oct 2025 07:36:40 +0200 Subject: [PATCH 25/92] Task/introduce interface for create Stripe checkout session response (#5791) * Introduce interface --- .../subscription/subscription.controller.ts | 11 ++-- .../app/subscription/subscription.service.ts | 62 ++++++++++--------- .../user-account-membership.component.ts | 7 ++- .../pages/pricing/pricing-page.component.ts | 7 ++- apps/client/src/app/services/data.service.ts | 14 +++-- libs/common/src/lib/interfaces/index.ts | 2 + ...ipe-checkout-session-response.interface.ts | 3 + 7 files changed, 64 insertions(+), 42 deletions(-) create mode 100644 libs/common/src/lib/interfaces/responses/create-stripe-checkout-session-response.interface.ts diff --git a/apps/api/src/app/subscription/subscription.controller.ts b/apps/api/src/app/subscription/subscription.controller.ts index 244a6b806..e1c705fdd 100644 --- a/apps/api/src/app/subscription/subscription.controller.ts +++ b/apps/api/src/app/subscription/subscription.controller.ts @@ -5,7 +5,10 @@ import { DEFAULT_LANGUAGE_CODE, PROPERTY_COUPONS } from '@ghostfolio/common/config'; -import { Coupon } from '@ghostfolio/common/interfaces'; +import { + Coupon, + CreateStripeCheckoutSessionResponse +} from '@ghostfolio/common/interfaces'; import type { RequestWithUser } from '@ghostfolio/common/types'; import { @@ -111,11 +114,11 @@ export class SubscriptionController { @Post('stripe/checkout-session') @UseGuards(AuthGuard('jwt'), HasPermissionGuard) - public async createCheckoutSession( + public createStripeCheckoutSession( @Body() { couponId, priceId }: { couponId?: string; priceId: string } - ) { + ): Promise { try { - return this.subscriptionService.createCheckoutSession({ + return this.subscriptionService.createStripeCheckoutSession({ couponId, priceId, user: this.request.user diff --git a/apps/api/src/app/subscription/subscription.service.ts b/apps/api/src/app/subscription/subscription.service.ts index 9574d17e9..37ab1c0f6 100644 --- a/apps/api/src/app/subscription/subscription.service.ts +++ b/apps/api/src/app/subscription/subscription.service.ts @@ -6,7 +6,10 @@ import { PROPERTY_STRIPE_CONFIG } from '@ghostfolio/common/config'; import { parseDate } from '@ghostfolio/common/helper'; -import { SubscriptionOffer } from '@ghostfolio/common/interfaces'; +import { + CreateStripeCheckoutSessionResponse, + SubscriptionOffer +} from '@ghostfolio/common/interfaces'; import { SubscriptionOfferKey, UserWithSettings @@ -38,7 +41,7 @@ export class SubscriptionService { } } - public async createCheckoutSession({ + public async createStripeCheckoutSession({ couponId, priceId, user @@ -46,7 +49,7 @@ export class SubscriptionService { couponId?: string; priceId: string; user: UserWithSettings; - }) { + }): Promise { const subscriptionOffers: { [offer in SubscriptionOfferKey]: SubscriptionOffer; } = @@ -58,33 +61,34 @@ export class SubscriptionService { } ); - const checkoutSessionCreateParams: Stripe.Checkout.SessionCreateParams = { - cancel_url: `${this.configurationService.get('ROOT_URL')}/${ - user.settings.settings.language - }/account`, - client_reference_id: user.id, - line_items: [ - { - price: priceId, - quantity: 1 - } - ], - locale: - (user.settings?.settings - ?.language as Stripe.Checkout.SessionCreateParams.Locale) ?? - DEFAULT_LANGUAGE_CODE, - metadata: subscriptionOffer - ? { subscriptionOffer: JSON.stringify(subscriptionOffer) } - : {}, - mode: 'payment', - payment_method_types: ['card'], - success_url: `${this.configurationService.get( - 'ROOT_URL' - )}/api/v1/subscription/stripe/callback?checkoutSessionId={CHECKOUT_SESSION_ID}` - }; + const stripeCheckoutSessionCreateParams: Stripe.Checkout.SessionCreateParams = + { + cancel_url: `${this.configurationService.get('ROOT_URL')}/${ + user.settings.settings.language + }/account`, + client_reference_id: user.id, + line_items: [ + { + price: priceId, + quantity: 1 + } + ], + locale: + (user.settings?.settings + ?.language as Stripe.Checkout.SessionCreateParams.Locale) ?? + DEFAULT_LANGUAGE_CODE, + metadata: subscriptionOffer + ? { subscriptionOffer: JSON.stringify(subscriptionOffer) } + : {}, + mode: 'payment', + payment_method_types: ['card'], + success_url: `${this.configurationService.get( + 'ROOT_URL' + )}/api/v1/subscription/stripe/callback?checkoutSessionId={CHECKOUT_SESSION_ID}` + }; if (couponId) { - checkoutSessionCreateParams.discounts = [ + stripeCheckoutSessionCreateParams.discounts = [ { coupon: couponId } @@ -92,7 +96,7 @@ export class SubscriptionService { } const session = await this.stripe.checkout.sessions.create( - checkoutSessionCreateParams + stripeCheckoutSessionCreateParams ); return { diff --git a/apps/client/src/app/components/user-account-membership/user-account-membership.component.ts b/apps/client/src/app/components/user-account-membership/user-account-membership.component.ts index f2f63b32b..025ec0f7a 100644 --- a/apps/client/src/app/components/user-account-membership/user-account-membership.component.ts +++ b/apps/client/src/app/components/user-account-membership/user-account-membership.component.ts @@ -108,7 +108,10 @@ export class GfUserAccountMembershipComponent implements OnDestroy { public onCheckout() { this.dataService - .createCheckoutSession({ couponId: this.couponId, priceId: this.priceId }) + .createStripeCheckoutSession({ + couponId: this.couponId, + priceId: this.priceId + }) .pipe( catchError((error) => { this.notificationService.alert({ @@ -117,7 +120,7 @@ export class GfUserAccountMembershipComponent implements OnDestroy { throw error; }), - switchMap(({ sessionId }: { sessionId: string }) => { + switchMap(({ sessionId }) => { return this.stripeService.redirectToCheckout({ sessionId }); }) ) diff --git a/apps/client/src/app/pages/pricing/pricing-page.component.ts b/apps/client/src/app/pages/pricing/pricing-page.component.ts index 8bc3e3a67..82560246f 100644 --- a/apps/client/src/app/pages/pricing/pricing-page.component.ts +++ b/apps/client/src/app/pages/pricing/pricing-page.component.ts @@ -134,9 +134,12 @@ export class GfPricingPageComponent implements OnDestroy, OnInit { public onCheckout() { this.dataService - .createCheckoutSession({ couponId: this.couponId, priceId: this.priceId }) + .createStripeCheckoutSession({ + couponId: this.couponId, + priceId: this.priceId + }) .pipe( - switchMap(({ sessionId }: { sessionId: string }) => { + switchMap(({ sessionId }) => { return this.stripeService.redirectToCheckout({ sessionId }); }), catchError((error) => { diff --git a/apps/client/src/app/services/data.service.ts b/apps/client/src/app/services/data.service.ts index 549675f7f..a32bc6d3e 100644 --- a/apps/client/src/app/services/data.service.ts +++ b/apps/client/src/app/services/data.service.ts @@ -31,6 +31,7 @@ import { AssetResponse, BenchmarkMarketDataDetailsResponse, BenchmarkResponse, + CreateStripeCheckoutSessionResponse, DataProviderHealthResponse, ExportResponse, Filter, @@ -168,17 +169,20 @@ export class DataService { return params; } - public createCheckoutSession({ + public createStripeCheckoutSession({ couponId, priceId }: { couponId?: string; priceId: string; }) { - return this.http.post('/api/v1/subscription/stripe/checkout-session', { - couponId, - priceId - }); + return this.http.post( + '/api/v1/subscription/stripe/checkout-session', + { + couponId, + priceId + } + ); } public fetchAccount(aAccountId: string) { diff --git a/libs/common/src/lib/interfaces/index.ts b/libs/common/src/lib/interfaces/index.ts index e3c2c2038..828a65974 100644 --- a/libs/common/src/lib/interfaces/index.ts +++ b/libs/common/src/lib/interfaces/index.ts @@ -43,6 +43,7 @@ import type { ApiKeyResponse } from './responses/api-key-response.interface'; import type { AssetResponse } from './responses/asset-response.interface'; import type { BenchmarkMarketDataDetailsResponse } from './responses/benchmark-market-data-details-response.interface'; import type { BenchmarkResponse } from './responses/benchmark-response.interface'; +import type { CreateStripeCheckoutSessionResponse } from './responses/create-stripe-checkout-session-response.interface'; import type { DataEnhancerHealthResponse } from './responses/data-enhancer-health-response.interface'; import type { DataProviderGhostfolioAssetProfileResponse } from './responses/data-provider-ghostfolio-asset-profile-response.interface'; import type { DataProviderGhostfolioStatusResponse } from './responses/data-provider-ghostfolio-status-response.interface'; @@ -100,6 +101,7 @@ export { BenchmarkProperty, BenchmarkResponse, Coupon, + CreateStripeCheckoutSessionResponse, DataEnhancerHealthResponse, DataProviderGhostfolioAssetProfileResponse, DataProviderGhostfolioStatusResponse, diff --git a/libs/common/src/lib/interfaces/responses/create-stripe-checkout-session-response.interface.ts b/libs/common/src/lib/interfaces/responses/create-stripe-checkout-session-response.interface.ts new file mode 100644 index 000000000..18c9e4400 --- /dev/null +++ b/libs/common/src/lib/interfaces/responses/create-stripe-checkout-session-response.interface.ts @@ -0,0 +1,3 @@ +export interface CreateStripeCheckoutSessionResponse { + sessionId: string; +} From f19d9c78aa8e96a1e3320ed7f751ef5f35c07b0d Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Wed, 22 Oct 2025 07:37:15 +0200 Subject: [PATCH 26/92] Task/clean up unused eslint-disable-next-line directives (#5782) * Clean up unused eslint-disable-next-line directives --- .../roai/portfolio-calculator-baln-buy-and-buy.spec.ts | 3 --- ...lio-calculator-baln-buy-and-sell-in-two-activities.spec.ts | 3 --- .../roai/portfolio-calculator-baln-buy-and-sell.spec.ts | 3 --- .../calculator/roai/portfolio-calculator-baln-buy.spec.ts | 3 --- .../calculator/roai/portfolio-calculator-btceur.spec.ts | 3 --- ...portfolio-calculator-btcusd-buy-and-sell-partially.spec.ts | 4 ---- .../calculator/roai/portfolio-calculator-btcusd-short.spec.ts | 3 --- .../calculator/roai/portfolio-calculator-btcusd.spec.ts | 3 --- .../calculator/roai/portfolio-calculator-fee.spec.ts | 3 --- .../calculator/roai/portfolio-calculator-googl-buy.spec.ts | 4 ---- .../calculator/roai/portfolio-calculator-liability.spec.ts | 3 --- .../roai/portfolio-calculator-msft-buy-and-sell.spec.ts | 2 -- .../roai/portfolio-calculator-msft-buy-with-dividend.spec.ts | 3 --- .../calculator/roai/portfolio-calculator-no-orders.spec.ts | 3 --- .../portfolio-calculator-novn-buy-and-sell-partially.spec.ts | 3 --- .../roai/portfolio-calculator-novn-buy-and-sell.spec.ts | 3 --- .../calculator/roai/portfolio-calculator-valuable.spec.ts | 3 --- 17 files changed, 52 deletions(-) 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 9ffa1b409..aa174f319 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 @@ -20,7 +20,6 @@ import { Big } from 'big.js'; jest.mock('@ghostfolio/api/app/portfolio/current-rate.service', () => { return { - // eslint-disable-next-line @typescript-eslint/naming-convention CurrentRateService: jest.fn().mockImplementation(() => { return CurrentRateServiceMock; }) @@ -31,7 +30,6 @@ jest.mock( '@ghostfolio/api/services/queues/portfolio-snapshot/portfolio-snapshot.service', () => { return { - // eslint-disable-next-line @typescript-eslint/naming-convention PortfolioSnapshotService: jest.fn().mockImplementation(() => { return PortfolioSnapshotServiceMock; }) @@ -41,7 +39,6 @@ jest.mock( jest.mock('@ghostfolio/api/app/redis-cache/redis-cache.service', () => { return { - // eslint-disable-next-line @typescript-eslint/naming-convention RedisCacheService: jest.fn().mockImplementation(() => { return RedisCacheServiceMock; }) 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 ab8000702..69b6c3dfc 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 @@ -20,7 +20,6 @@ import { Big } from 'big.js'; jest.mock('@ghostfolio/api/app/portfolio/current-rate.service', () => { return { - // eslint-disable-next-line @typescript-eslint/naming-convention CurrentRateService: jest.fn().mockImplementation(() => { return CurrentRateServiceMock; }) @@ -31,7 +30,6 @@ jest.mock( '@ghostfolio/api/services/queues/portfolio-snapshot/portfolio-snapshot.service', () => { return { - // eslint-disable-next-line @typescript-eslint/naming-convention PortfolioSnapshotService: jest.fn().mockImplementation(() => { return PortfolioSnapshotServiceMock; }) @@ -41,7 +39,6 @@ jest.mock( jest.mock('@ghostfolio/api/app/redis-cache/redis-cache.service', () => { return { - // eslint-disable-next-line @typescript-eslint/naming-convention RedisCacheService: jest.fn().mockImplementation(() => { return RedisCacheServiceMock; }) 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 cc65fa8a2..a3cb8716e 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 @@ -20,7 +20,6 @@ import { Big } from 'big.js'; jest.mock('@ghostfolio/api/app/portfolio/current-rate.service', () => { return { - // eslint-disable-next-line @typescript-eslint/naming-convention CurrentRateService: jest.fn().mockImplementation(() => { return CurrentRateServiceMock; }) @@ -31,7 +30,6 @@ jest.mock( '@ghostfolio/api/services/queues/portfolio-snapshot/portfolio-snapshot.service', () => { return { - // eslint-disable-next-line @typescript-eslint/naming-convention PortfolioSnapshotService: jest.fn().mockImplementation(() => { return PortfolioSnapshotServiceMock; }) @@ -41,7 +39,6 @@ jest.mock( jest.mock('@ghostfolio/api/app/redis-cache/redis-cache.service', () => { return { - // eslint-disable-next-line @typescript-eslint/naming-convention RedisCacheService: jest.fn().mockImplementation(() => { return RedisCacheServiceMock; }) 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 7d9544666..ae083a7db 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 @@ -20,7 +20,6 @@ import { Big } from 'big.js'; jest.mock('@ghostfolio/api/app/portfolio/current-rate.service', () => { return { - // eslint-disable-next-line @typescript-eslint/naming-convention CurrentRateService: jest.fn().mockImplementation(() => { return CurrentRateServiceMock; }) @@ -31,7 +30,6 @@ jest.mock( '@ghostfolio/api/services/queues/portfolio-snapshot/portfolio-snapshot.service', () => { return { - // eslint-disable-next-line @typescript-eslint/naming-convention PortfolioSnapshotService: jest.fn().mockImplementation(() => { return PortfolioSnapshotServiceMock; }) @@ -41,7 +39,6 @@ jest.mock( jest.mock('@ghostfolio/api/app/redis-cache/redis-cache.service', () => { return { - // eslint-disable-next-line @typescript-eslint/naming-convention RedisCacheService: jest.fn().mockImplementation(() => { return RedisCacheServiceMock; }) 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 ca9e5b0d5..cef8938c2 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 @@ -23,7 +23,6 @@ import { join } from 'node:path'; jest.mock('@ghostfolio/api/app/portfolio/current-rate.service', () => { return { - // eslint-disable-next-line @typescript-eslint/naming-convention CurrentRateService: jest.fn().mockImplementation(() => { return CurrentRateServiceMock; }) @@ -34,7 +33,6 @@ jest.mock( '@ghostfolio/api/services/queues/portfolio-snapshot/portfolio-snapshot.service', () => { return { - // eslint-disable-next-line @typescript-eslint/naming-convention PortfolioSnapshotService: jest.fn().mockImplementation(() => { return PortfolioSnapshotServiceMock; }) @@ -44,7 +42,6 @@ jest.mock( jest.mock('@ghostfolio/api/app/redis-cache/redis-cache.service', () => { return { - // eslint-disable-next-line @typescript-eslint/naming-convention RedisCacheService: jest.fn().mockImplementation(() => { return RedisCacheServiceMock; }) 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 de3f5d3cd..36e6fa900 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 @@ -21,7 +21,6 @@ import { Big } from 'big.js'; jest.mock('@ghostfolio/api/app/portfolio/current-rate.service', () => { return { - // eslint-disable-next-line @typescript-eslint/naming-convention CurrentRateService: jest.fn().mockImplementation(() => { return CurrentRateServiceMock; }) @@ -32,7 +31,6 @@ jest.mock( '@ghostfolio/api/services/queues/portfolio-snapshot/portfolio-snapshot.service', () => { return { - // eslint-disable-next-line @typescript-eslint/naming-convention PortfolioSnapshotService: jest.fn().mockImplementation(() => { return PortfolioSnapshotServiceMock; }) @@ -42,7 +40,6 @@ jest.mock( jest.mock('@ghostfolio/api/app/redis-cache/redis-cache.service', () => { return { - // eslint-disable-next-line @typescript-eslint/naming-convention RedisCacheService: jest.fn().mockImplementation(() => { return RedisCacheServiceMock; }) @@ -53,7 +50,6 @@ jest.mock( '@ghostfolio/api/services/exchange-rate-data/exchange-rate-data.service', () => { return { - // eslint-disable-next-line @typescript-eslint/naming-convention ExchangeRateDataService: jest.fn().mockImplementation(() => { return ExchangeRateDataServiceMock; }) 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 3e67389dd..5a4dfdc07 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 @@ -23,7 +23,6 @@ import { join } from 'node:path'; jest.mock('@ghostfolio/api/app/portfolio/current-rate.service', () => { return { - // eslint-disable-next-line @typescript-eslint/naming-convention CurrentRateService: jest.fn().mockImplementation(() => { return CurrentRateServiceMock; }) @@ -34,7 +33,6 @@ jest.mock( '@ghostfolio/api/services/queues/portfolio-snapshot/portfolio-snapshot.service', () => { return { - // eslint-disable-next-line @typescript-eslint/naming-convention PortfolioSnapshotService: jest.fn().mockImplementation(() => { return PortfolioSnapshotServiceMock; }) @@ -44,7 +42,6 @@ jest.mock( jest.mock('@ghostfolio/api/app/redis-cache/redis-cache.service', () => { return { - // eslint-disable-next-line @typescript-eslint/naming-convention RedisCacheService: jest.fn().mockImplementation(() => { return RedisCacheServiceMock; }) 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 f08083554..2ee367530 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 @@ -23,7 +23,6 @@ import { join } from 'node:path'; jest.mock('@ghostfolio/api/app/portfolio/current-rate.service', () => { return { - // eslint-disable-next-line @typescript-eslint/naming-convention CurrentRateService: jest.fn().mockImplementation(() => { return CurrentRateServiceMock; }) @@ -34,7 +33,6 @@ jest.mock( '@ghostfolio/api/services/queues/portfolio-snapshot/portfolio-snapshot.service', () => { return { - // eslint-disable-next-line @typescript-eslint/naming-convention PortfolioSnapshotService: jest.fn().mockImplementation(() => { return PortfolioSnapshotServiceMock; }) @@ -44,7 +42,6 @@ jest.mock( jest.mock('@ghostfolio/api/app/redis-cache/redis-cache.service', () => { return { - // eslint-disable-next-line @typescript-eslint/naming-convention RedisCacheService: jest.fn().mockImplementation(() => { return RedisCacheServiceMock; }) 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 aaf2c4302..002be9154 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 @@ -20,7 +20,6 @@ import { Big } from 'big.js'; jest.mock('@ghostfolio/api/app/portfolio/current-rate.service', () => { return { - // eslint-disable-next-line @typescript-eslint/naming-convention CurrentRateService: jest.fn().mockImplementation(() => { return CurrentRateServiceMock; }) @@ -31,7 +30,6 @@ jest.mock( '@ghostfolio/api/services/queues/portfolio-snapshot/portfolio-snapshot.service', () => { return { - // eslint-disable-next-line @typescript-eslint/naming-convention PortfolioSnapshotService: jest.fn().mockImplementation(() => { return PortfolioSnapshotServiceMock; }) @@ -41,7 +39,6 @@ jest.mock( jest.mock('@ghostfolio/api/app/redis-cache/redis-cache.service', () => { return { - // eslint-disable-next-line @typescript-eslint/naming-convention RedisCacheService: jest.fn().mockImplementation(() => { return RedisCacheServiceMock; }) 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 f7d0e9e6d..bf0b15020 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 @@ -21,7 +21,6 @@ import { Big } from 'big.js'; jest.mock('@ghostfolio/api/app/portfolio/current-rate.service', () => { return { - // eslint-disable-next-line @typescript-eslint/naming-convention CurrentRateService: jest.fn().mockImplementation(() => { return CurrentRateServiceMock; }) @@ -32,7 +31,6 @@ jest.mock( '@ghostfolio/api/services/queues/portfolio-snapshot/portfolio-snapshot.service', () => { return { - // eslint-disable-next-line @typescript-eslint/naming-convention PortfolioSnapshotService: jest.fn().mockImplementation(() => { return PortfolioSnapshotServiceMock; }) @@ -42,7 +40,6 @@ jest.mock( jest.mock('@ghostfolio/api/app/redis-cache/redis-cache.service', () => { return { - // eslint-disable-next-line @typescript-eslint/naming-convention RedisCacheService: jest.fn().mockImplementation(() => { return RedisCacheServiceMock; }) @@ -53,7 +50,6 @@ jest.mock( '@ghostfolio/api/services/exchange-rate-data/exchange-rate-data.service', () => { return { - // eslint-disable-next-line @typescript-eslint/naming-convention ExchangeRateDataService: jest.fn().mockImplementation(() => { return ExchangeRateDataServiceMock; }) 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 2cb3899e9..32822014c 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 @@ -20,7 +20,6 @@ import { Big } from 'big.js'; jest.mock('@ghostfolio/api/app/portfolio/current-rate.service', () => { return { - // eslint-disable-next-line @typescript-eslint/naming-convention CurrentRateService: jest.fn().mockImplementation(() => { return CurrentRateServiceMock; }) @@ -31,7 +30,6 @@ jest.mock( '@ghostfolio/api/services/queues/portfolio-snapshot/portfolio-snapshot.service', () => { return { - // eslint-disable-next-line @typescript-eslint/naming-convention PortfolioSnapshotService: jest.fn().mockImplementation(() => { return PortfolioSnapshotServiceMock; }) @@ -41,7 +39,6 @@ jest.mock( jest.mock('@ghostfolio/api/app/redis-cache/redis-cache.service', () => { return { - // eslint-disable-next-line @typescript-eslint/naming-convention RedisCacheService: jest.fn().mockImplementation(() => { return RedisCacheServiceMock; }) 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 bb976564a..08015da5b 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 @@ -28,7 +28,6 @@ jest.mock( '@ghostfolio/api/services/queues/portfolio-snapshot/portfolio-snapshot.service', () => { return { - // eslint-disable-next-line @typescript-eslint/naming-convention PortfolioSnapshotService: jest.fn().mockImplementation(() => { return PortfolioSnapshotServiceMock; }) @@ -38,7 +37,6 @@ jest.mock( jest.mock('@ghostfolio/api/app/redis-cache/redis-cache.service', () => { return { - // eslint-disable-next-line @typescript-eslint/naming-convention RedisCacheService: jest.fn().mockImplementation(() => { return RedisCacheServiceMock; }) 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 36b6e8be9..e5b128085 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 @@ -20,7 +20,6 @@ import { Big } from 'big.js'; jest.mock('@ghostfolio/api/app/portfolio/current-rate.service', () => { return { - // eslint-disable-next-line @typescript-eslint/naming-convention CurrentRateService: jest.fn().mockImplementation(() => { return CurrentRateServiceMock; }) @@ -31,7 +30,6 @@ jest.mock( '@ghostfolio/api/services/queues/portfolio-snapshot/portfolio-snapshot.service', () => { return { - // eslint-disable-next-line @typescript-eslint/naming-convention PortfolioSnapshotService: jest.fn().mockImplementation(() => { return PortfolioSnapshotServiceMock; }) @@ -41,7 +39,6 @@ jest.mock( jest.mock('@ghostfolio/api/app/redis-cache/redis-cache.service', () => { return { - // eslint-disable-next-line @typescript-eslint/naming-convention RedisCacheService: jest.fn().mockImplementation(() => { return RedisCacheServiceMock; }) diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-no-orders.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-no-orders.spec.ts index f64328d39..fdd9e4718 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-no-orders.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-no-orders.spec.ts @@ -15,7 +15,6 @@ import { Big } from 'big.js'; jest.mock('@ghostfolio/api/app/portfolio/current-rate.service', () => { return { - // eslint-disable-next-line @typescript-eslint/naming-convention CurrentRateService: jest.fn().mockImplementation(() => { return CurrentRateServiceMock; }) @@ -26,7 +25,6 @@ jest.mock( '@ghostfolio/api/services/queues/portfolio-snapshot/portfolio-snapshot.service', () => { return { - // eslint-disable-next-line @typescript-eslint/naming-convention PortfolioSnapshotService: jest.fn().mockImplementation(() => { return PortfolioSnapshotServiceMock; }) @@ -36,7 +34,6 @@ jest.mock( jest.mock('@ghostfolio/api/app/redis-cache/redis-cache.service', () => { return { - // eslint-disable-next-line @typescript-eslint/naming-convention RedisCacheService: jest.fn().mockImplementation(() => { return RedisCacheServiceMock; }) 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 4678dbd5e..cf330d136 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 @@ -23,7 +23,6 @@ import { join } from 'node:path'; jest.mock('@ghostfolio/api/app/portfolio/current-rate.service', () => { return { - // eslint-disable-next-line @typescript-eslint/naming-convention CurrentRateService: jest.fn().mockImplementation(() => { return CurrentRateServiceMock; }) @@ -34,7 +33,6 @@ jest.mock( '@ghostfolio/api/services/queues/portfolio-snapshot/portfolio-snapshot.service', () => { return { - // eslint-disable-next-line @typescript-eslint/naming-convention PortfolioSnapshotService: jest.fn().mockImplementation(() => { return PortfolioSnapshotServiceMock; }) @@ -44,7 +42,6 @@ jest.mock( jest.mock('@ghostfolio/api/app/redis-cache/redis-cache.service', () => { return { - // eslint-disable-next-line @typescript-eslint/naming-convention RedisCacheService: jest.fn().mockImplementation(() => { return RedisCacheServiceMock; }) 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 c4ccab7ad..681169062 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 @@ -23,7 +23,6 @@ import { join } from 'node:path'; jest.mock('@ghostfolio/api/app/portfolio/current-rate.service', () => { return { - // eslint-disable-next-line @typescript-eslint/naming-convention CurrentRateService: jest.fn().mockImplementation(() => { return CurrentRateServiceMock; }) @@ -34,7 +33,6 @@ jest.mock( '@ghostfolio/api/services/queues/portfolio-snapshot/portfolio-snapshot.service', () => { return { - // eslint-disable-next-line @typescript-eslint/naming-convention PortfolioSnapshotService: jest.fn().mockImplementation(() => { return PortfolioSnapshotServiceMock; }) @@ -44,7 +42,6 @@ jest.mock( jest.mock('@ghostfolio/api/app/redis-cache/redis-cache.service', () => { return { - // eslint-disable-next-line @typescript-eslint/naming-convention RedisCacheService: jest.fn().mockImplementation(() => { return RedisCacheServiceMock; }) 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 5e9949dd2..fc1d477a6 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 @@ -20,7 +20,6 @@ import { Big } from 'big.js'; jest.mock('@ghostfolio/api/app/portfolio/current-rate.service', () => { return { - // eslint-disable-next-line @typescript-eslint/naming-convention CurrentRateService: jest.fn().mockImplementation(() => { return CurrentRateServiceMock; }) @@ -31,7 +30,6 @@ jest.mock( '@ghostfolio/api/services/queues/portfolio-snapshot/portfolio-snapshot.service', () => { return { - // eslint-disable-next-line @typescript-eslint/naming-convention PortfolioSnapshotService: jest.fn().mockImplementation(() => { return PortfolioSnapshotServiceMock; }) @@ -41,7 +39,6 @@ jest.mock( jest.mock('@ghostfolio/api/app/redis-cache/redis-cache.service', () => { return { - // eslint-disable-next-line @typescript-eslint/naming-convention RedisCacheService: jest.fn().mockImplementation(() => { return RedisCacheServiceMock; }) From 946edd5c5a2278957f75ba16dbf764894132b600 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Wed, 22 Oct 2025 07:40:21 +0200 Subject: [PATCH 27/92] Release 2.210.0 (#5814) --- 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 63cbf5898..a5738a998 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,7 +5,7 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## Unreleased +## 2.210.0 - 2025-10-22 ### Added diff --git a/package-lock.json b/package-lock.json index cc58d01ca..aa32ab721 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "ghostfolio", - "version": "2.209.0", + "version": "2.210.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "ghostfolio", - "version": "2.209.0", + "version": "2.210.0", "hasInstallScript": true, "license": "AGPL-3.0", "dependencies": { diff --git a/package.json b/package.json index 403ce7f7b..397002df2 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ghostfolio", - "version": "2.209.0", + "version": "2.210.0", "homepage": "https://ghostfol.io", "license": "AGPL-3.0", "repository": "https://github.com/ghostfolio/ghostfolio", From 2b727f867fafbcb8dc366f8fd5e342bab36d6b9f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Szymon=20=C5=81=C4=85giewka?= Date: Wed, 22 Oct 2025 14:01:36 +0200 Subject: [PATCH 28/92] Bugfix/include missing dotenv packages (#5817) * Include missing dotenv packages --- apps/api/src/dependencies.ts | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 apps/api/src/dependencies.ts diff --git a/apps/api/src/dependencies.ts b/apps/api/src/dependencies.ts new file mode 100644 index 000000000..cd5409fd4 --- /dev/null +++ b/apps/api/src/dependencies.ts @@ -0,0 +1,3 @@ +// Dependencies required by prisma.config.ts in Docker container +import 'dotenv'; +import 'dotenv-expand'; From e096f5cc774496b7a1ca9fabfa124c1a8b36c77e Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Wed, 22 Oct 2025 14:03:47 +0200 Subject: [PATCH 29/92] Release 2.210.1 (#5818) --- 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 a5738a998..6831e9060 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). -## 2.210.0 - 2025-10-22 +## 2.210.1 - 2025-10-22 ### Added diff --git a/package-lock.json b/package-lock.json index aa32ab721..24c0da20b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "ghostfolio", - "version": "2.210.0", + "version": "2.210.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "ghostfolio", - "version": "2.210.0", + "version": "2.210.1", "hasInstallScript": true, "license": "AGPL-3.0", "dependencies": { diff --git a/package.json b/package.json index 397002df2..90d8252d1 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ghostfolio", - "version": "2.210.0", + "version": "2.210.1", "homepage": "https://ghostfol.io", "license": "AGPL-3.0", "repository": "https://github.com/ghostfolio/ghostfolio", From 3cb0ca130e0f50c0f026475bf37e68be268c8b32 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Wed, 22 Oct 2025 19:32:45 +0200 Subject: [PATCH 30/92] Task/upgrade prisma to version 6.18.0 (#5823) * Upgrade prisma to version 6.18.0 * Update changelog --- CHANGELOG.md | 8 ++++- package-lock.json | 80 +++++++++++++++++++++++------------------------ package.json | 4 +-- 3 files changed, 49 insertions(+), 43 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6831e9060..285e8917a 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 `prisma` from version `6.17.1` to `6.18.0` + ## 2.210.1 - 2025-10-22 ### Added @@ -67,7 +73,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Removed the deprecated endpoint `GET api/v1/portfolio/position/:dataSource/:symbol` - Removed the deprecated endpoint `PUT api/v1/portfolio/position/:dataSource/:symbol/tags` - Improved the language localization for German (`de`) -- Upgraded `prisma` from version `6.16.1` to `6.16.3` +- Upgraded `prisma` from version `6.16.1` to `6.17.1` ### Fixed diff --git a/package-lock.json b/package-lock.json index 24c0da20b..7889faa15 100644 --- a/package-lock.json +++ b/package-lock.json @@ -43,7 +43,7 @@ "@nestjs/schedule": "6.0.0", "@nestjs/serve-static": "5.0.3", "@openrouter/ai-sdk-provider": "0.7.2", - "@prisma/client": "6.17.1", + "@prisma/client": "6.18.0", "@simplewebauthn/browser": "13.1.0", "@simplewebauthn/server": "13.1.1", "@stripe/stripe-js": "7.9.0", @@ -151,7 +151,7 @@ "nx": "21.5.1", "prettier": "3.6.2", "prettier-plugin-organize-attributes": "1.0.0", - "prisma": "6.17.1", + "prisma": "6.18.0", "react": "18.2.0", "react-dom": "18.2.0", "replace-in-file": "8.3.0", @@ -11983,9 +11983,9 @@ "license": "MIT" }, "node_modules/@prisma/client": { - "version": "6.17.1", - "resolved": "https://registry.npmjs.org/@prisma/client/-/client-6.17.1.tgz", - "integrity": "sha512-zL58jbLzYamjnNnmNA51IOZdbk5ci03KviXCuB0Tydc9btH2kDWsi1pQm2VecviRTM7jGia0OPPkgpGnT3nKvw==", + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/@prisma/client/-/client-6.18.0.tgz", + "integrity": "sha512-jnL2I9gDnPnw4A+4h5SuNn8Gc+1mL1Z79U/3I9eE2gbxJG1oSA+62ByPW4xkeDgwE0fqMzzpAZ7IHxYnLZ4iQA==", "hasInstallScript": true, "license": "Apache-2.0", "engines": { @@ -12005,66 +12005,66 @@ } }, "node_modules/@prisma/config": { - "version": "6.17.1", - "resolved": "https://registry.npmjs.org/@prisma/config/-/config-6.17.1.tgz", - "integrity": "sha512-fs8wY6DsvOCzuiyWVckrVs1LOcbY4LZNz8ki4uUIQ28jCCzojTGqdLhN2Jl5lDnC1yI8/gNIKpsWDM8pLhOdwA==", + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/@prisma/config/-/config-6.18.0.tgz", + "integrity": "sha512-rgFzspCpwsE+q3OF/xkp0fI2SJ3PfNe9LLMmuSVbAZ4nN66WfBiKqJKo/hLz3ysxiPQZf8h1SMf2ilqPMeWATQ==", "devOptional": true, "license": "Apache-2.0", "dependencies": { "c12": "3.1.0", "deepmerge-ts": "7.1.5", - "effect": "3.16.12", + "effect": "3.18.4", "empathic": "2.0.0" } }, "node_modules/@prisma/debug": { - "version": "6.17.1", - "resolved": "https://registry.npmjs.org/@prisma/debug/-/debug-6.17.1.tgz", - "integrity": "sha512-Vf7Tt5Wh9XcndpbmeotuqOMLWPTjEKCsgojxXP2oxE1/xYe7PtnP76hsouG9vis6fctX+TxgmwxTuYi/+xc7dQ==", + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/@prisma/debug/-/debug-6.18.0.tgz", + "integrity": "sha512-PMVPMmxPj0ps1VY75DIrT430MoOyQx9hmm174k6cmLZpcI95rAPXOQ+pp8ANQkJtNyLVDxnxVJ0QLbrm/ViBcg==", "devOptional": true, "license": "Apache-2.0" }, "node_modules/@prisma/engines": { - "version": "6.17.1", - "resolved": "https://registry.npmjs.org/@prisma/engines/-/engines-6.17.1.tgz", - "integrity": "sha512-D95Ik3GYZkqZ8lSR4EyFOJ/tR33FcYRP8kK61o+WMsyD10UfJwd7+YielflHfKwiGodcqKqoraWw8ElAgMDbPw==", + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/@prisma/engines/-/engines-6.18.0.tgz", + "integrity": "sha512-i5RzjGF/ex6AFgqEe2o1IW8iIxJGYVQJVRau13kHPYEL1Ck8Zvwuzamqed/1iIljs5C7L+Opiz5TzSsUebkriA==", "devOptional": true, "hasInstallScript": true, "license": "Apache-2.0", "dependencies": { - "@prisma/debug": "6.17.1", - "@prisma/engines-version": "6.17.1-1.272a37d34178c2894197e17273bf937f25acdeac", - "@prisma/fetch-engine": "6.17.1", - "@prisma/get-platform": "6.17.1" + "@prisma/debug": "6.18.0", + "@prisma/engines-version": "6.18.0-8.34b5a692b7bd79939a9a2c3ef97d816e749cda2f", + "@prisma/fetch-engine": "6.18.0", + "@prisma/get-platform": "6.18.0" } }, "node_modules/@prisma/engines-version": { - "version": "6.17.1-1.272a37d34178c2894197e17273bf937f25acdeac", - "resolved": "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-6.17.1-1.272a37d34178c2894197e17273bf937f25acdeac.tgz", - "integrity": "sha512-17140E3huOuD9lMdJ9+SF/juOf3WR3sTJMVyyenzqUPbuH+89nPhSWcrY+Mf7tmSs6HvaO+7S+HkELinn6bhdg==", + "version": "6.18.0-8.34b5a692b7bd79939a9a2c3ef97d816e749cda2f", + "resolved": "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-6.18.0-8.34b5a692b7bd79939a9a2c3ef97d816e749cda2f.tgz", + "integrity": "sha512-T7Af4QsJQnSgWN1zBbX+Cha5t4qjHRxoeoWpK4JugJzG/ipmmDMY5S+O0N1ET6sCBNVkf6lz+Y+ZNO9+wFU8pQ==", "devOptional": true, "license": "Apache-2.0" }, "node_modules/@prisma/fetch-engine": { - "version": "6.17.1", - "resolved": "https://registry.npmjs.org/@prisma/fetch-engine/-/fetch-engine-6.17.1.tgz", - "integrity": "sha512-AYZiHOs184qkDMiTeshyJCtyL4yERkjfTkJiSJdYuSfc24m94lTNL5+GFinZ6vVz+ktX4NJzHKn1zIFzGTWrWg==", + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/@prisma/fetch-engine/-/fetch-engine-6.18.0.tgz", + "integrity": "sha512-TdaBvTtBwP3IoqVYoGIYpD4mWlk0pJpjTJjir/xLeNWlwog7Sl3bD2J0jJ8+5+q/6RBg+acb9drsv5W6lqae7A==", "devOptional": true, "license": "Apache-2.0", "dependencies": { - "@prisma/debug": "6.17.1", - "@prisma/engines-version": "6.17.1-1.272a37d34178c2894197e17273bf937f25acdeac", - "@prisma/get-platform": "6.17.1" + "@prisma/debug": "6.18.0", + "@prisma/engines-version": "6.18.0-8.34b5a692b7bd79939a9a2c3ef97d816e749cda2f", + "@prisma/get-platform": "6.18.0" } }, "node_modules/@prisma/get-platform": { - "version": "6.17.1", - "resolved": "https://registry.npmjs.org/@prisma/get-platform/-/get-platform-6.17.1.tgz", - "integrity": "sha512-AKEn6fsfz0r482S5KRDFlIGEaq9wLNcgalD1adL+fPcFFblIKs1sD81kY/utrHdqKuVC6E1XSRpegDK3ZLL4Qg==", + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/@prisma/get-platform/-/get-platform-6.18.0.tgz", + "integrity": "sha512-uXNJCJGhxTCXo2B25Ta91Rk1/Nmlqg9p7G9GKh8TPhxvAyXCvMNQoogj4JLEUy+3ku8g59cpyQIKFhqY2xO2bg==", "devOptional": true, "license": "Apache-2.0", "dependencies": { - "@prisma/debug": "6.17.1" + "@prisma/debug": "6.18.0" } }, "node_modules/@redis/client": { @@ -21166,9 +21166,9 @@ "license": "MIT" }, "node_modules/effect": { - "version": "3.16.12", - "resolved": "https://registry.npmjs.org/effect/-/effect-3.16.12.tgz", - "integrity": "sha512-N39iBk0K71F9nb442TLbTkjl24FLUzuvx2i1I2RsEAQsdAdUTuUoW0vlfUXgkMTUOnYqKnWcFfqw4hK4Pw27hg==", + "version": "3.18.4", + "resolved": "https://registry.npmjs.org/effect/-/effect-3.18.4.tgz", + "integrity": "sha512-b1LXQJLe9D11wfnOKAk3PKxuqYshQ0Heez+y5pnkd3jLj1yx9QhM72zZ9uUrOQyNvrs2GZZd/3maL0ZV18YuDA==", "devOptional": true, "license": "MIT", "dependencies": { @@ -35802,15 +35802,15 @@ } }, "node_modules/prisma": { - "version": "6.17.1", - "resolved": "https://registry.npmjs.org/prisma/-/prisma-6.17.1.tgz", - "integrity": "sha512-ac6h0sM1Tg3zu8NInY+qhP/S9KhENVaw9n1BrGKQVFu05JT5yT5Qqqmb8tMRIE3ZXvVj4xcRA5yfrsy4X7Yy5g==", + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/prisma/-/prisma-6.18.0.tgz", + "integrity": "sha512-bXWy3vTk8mnRmT+SLyZBQoC2vtV9Z8u7OHvEu+aULYxwiop/CPiFZ+F56KsNRNf35jw+8wcu8pmLsjxpBxAO9g==", "devOptional": true, "hasInstallScript": true, "license": "Apache-2.0", "dependencies": { - "@prisma/config": "6.17.1", - "@prisma/engines": "6.17.1" + "@prisma/config": "6.18.0", + "@prisma/engines": "6.18.0" }, "bin": { "prisma": "build/index.js" diff --git a/package.json b/package.json index 90d8252d1..7cedd68bf 100644 --- a/package.json +++ b/package.json @@ -89,7 +89,7 @@ "@nestjs/schedule": "6.0.0", "@nestjs/serve-static": "5.0.3", "@openrouter/ai-sdk-provider": "0.7.2", - "@prisma/client": "6.17.1", + "@prisma/client": "6.18.0", "@simplewebauthn/browser": "13.1.0", "@simplewebauthn/server": "13.1.1", "@stripe/stripe-js": "7.9.0", @@ -197,7 +197,7 @@ "nx": "21.5.1", "prettier": "3.6.2", "prettier-plugin-organize-attributes": "1.0.0", - "prisma": "6.17.1", + "prisma": "6.18.0", "react": "18.2.0", "react-dom": "18.2.0", "replace-in-file": "8.3.0", From 37ab31ea722624f0e55c3df417424f3dc9981054 Mon Sep 17 00:00:00 2001 From: danielochinasa Date: Thu, 23 Oct 2025 16:58:14 +0100 Subject: [PATCH 31/92] Task/format value in Buying Power rule (#5824) * Format value in Buying Power rule * Update changelog --- CHANGELOG.md | 1 + apps/api/src/models/rules/liquidity/buying-power.ts | 8 ++++++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 285e8917a..70dc9ae17 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 +- Localized the number formatting in the static portfolio analysis rule: _Liquidity_ (Buying Power) - Upgraded `prisma` from version `6.17.1` to `6.18.0` ## 2.210.1 - 2025-10-22 diff --git a/apps/api/src/models/rules/liquidity/buying-power.ts b/apps/api/src/models/rules/liquidity/buying-power.ts index 70393278d..2cd4d6fee 100644 --- a/apps/api/src/models/rules/liquidity/buying-power.ts +++ b/apps/api/src/models/rules/liquidity/buying-power.ts @@ -40,7 +40,9 @@ export class BuyingPower extends Rule { languageCode: this.getLanguageCode(), placeholders: { baseCurrency: ruleSettings.baseCurrency, - thresholdMin: ruleSettings.thresholdMin + thresholdMin: ruleSettings.thresholdMin.toLocaleString( + ruleSettings.locale + ) } }), value: false @@ -53,7 +55,9 @@ export class BuyingPower extends Rule { languageCode: this.getLanguageCode(), placeholders: { baseCurrency: ruleSettings.baseCurrency, - thresholdMin: ruleSettings.thresholdMin + thresholdMin: ruleSettings.thresholdMin.toLocaleString( + ruleSettings.locale + ) } }), value: true From 852ed98d0fbd5e13541dd75e5afbf155f8d893ad Mon Sep 17 00:00:00 2001 From: Harsh Santwani <96873014+HydrallHarsh@users.noreply.github.com> Date: Thu, 23 Oct 2025 23:32:59 +0530 Subject: [PATCH 32/92] Task/move prisma.config.ts to .config/prisma.ts (#5821) * Move prisma.config.ts to .config/prisma.ts * Update changelog --- .config/prisma.ts | 14 ++++++++++++++ CHANGELOG.md | 1 + Dockerfile | 4 ++-- apps/api/src/dependencies.ts | 2 +- prisma.config.ts | 14 -------------- 5 files changed, 18 insertions(+), 17 deletions(-) create mode 100644 .config/prisma.ts delete mode 100644 prisma.config.ts diff --git a/.config/prisma.ts b/.config/prisma.ts new file mode 100644 index 000000000..64691136c --- /dev/null +++ b/.config/prisma.ts @@ -0,0 +1,14 @@ +import { defineConfig } from '@prisma/config'; +import { config } from 'dotenv'; +import { expand } from 'dotenv-expand'; +import { join } from 'node:path'; + +expand(config({ quiet: true })); + +export default defineConfig({ + migrations: { + path: join(__dirname, '..', 'prisma', 'migrations'), + seed: `node ${join(__dirname, '..', 'prisma', 'seed.mts')}` + }, + schema: join(__dirname, '..', 'prisma', 'schema.prisma') +}); diff --git a/CHANGELOG.md b/CHANGELOG.md index 70dc9ae17..d46c1d3c1 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 - Localized the number formatting in the static portfolio analysis rule: _Liquidity_ (Buying Power) +- Moved the _Prisma Configuration File_ from `prisma.config.ts` to `.config/prisma.ts` - Upgraded `prisma` from version `6.17.1` to `6.18.0` ## 2.210.1 - 2025-10-22 diff --git a/Dockerfile b/Dockerfile index be1bb53ea..5beaf6e03 100644 --- a/Dockerfile +++ b/Dockerfile @@ -13,11 +13,11 @@ RUN apt-get update && apt-get install -y --no-install-suggests \ # Only add basic files without the application itself to avoid rebuilding # layers when files (package.json etc.) have not changed +COPY ./.config .config/ COPY ./CHANGELOG.md CHANGELOG.md COPY ./LICENSE LICENSE COPY ./package.json package.json COPY ./package-lock.json package-lock.json -COPY ./prisma.config.ts prisma.config.ts COPY ./prisma/schema.prisma prisma/ RUN npm install @@ -44,7 +44,7 @@ WORKDIR /ghostfolio/dist/apps/api COPY ./package-lock.json /ghostfolio/dist/apps/api/ RUN npm install -COPY prisma.config.ts /ghostfolio/dist/apps/api/ +COPY .config /ghostfolio/dist/apps/api/.config/ COPY prisma /ghostfolio/dist/apps/api/prisma/ # Overwrite the generated package.json with the original one to ensure having diff --git a/apps/api/src/dependencies.ts b/apps/api/src/dependencies.ts index cd5409fd4..acb7af382 100644 --- a/apps/api/src/dependencies.ts +++ b/apps/api/src/dependencies.ts @@ -1,3 +1,3 @@ -// Dependencies required by prisma.config.ts in Docker container +// Dependencies required by .config/prisma.ts in Docker container import 'dotenv'; import 'dotenv-expand'; diff --git a/prisma.config.ts b/prisma.config.ts deleted file mode 100644 index 60597cbf1..000000000 --- a/prisma.config.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { config } from 'dotenv'; -import { expand } from 'dotenv-expand'; -import { join } from 'node:path'; -import { defineConfig } from 'prisma/config'; - -expand(config({ quiet: true })); - -export default defineConfig({ - migrations: { - path: join('prisma', 'migrations'), - seed: `node ${join('prisma', 'seed.mts')}` - }, - schema: join('prisma', 'schema.prisma') -}); From 0b28da879b234bc8bb4c360857fc340e67e9339b Mon Sep 17 00:00:00 2001 From: Vansh <140736931+Vansh-Parate@users.noreply.github.com> Date: Thu, 23 Oct 2025 23:49:59 +0530 Subject: [PATCH 33/92] Task/extend export response by performanceCalculationType (#5816) * Extend export response by performanceCalculationType * Update changelog --- CHANGELOG.md | 4 ++++ apps/api/src/app/export/export.controller.ts | 4 ++-- apps/api/src/app/export/export.service.ts | 19 +++++++++++++------ .../responses/export-response.interface.ts | 8 +++++++- 4 files changed, 26 insertions(+), 9 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d46c1d3c1..c249cd7d1 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 + +- Extended the export functionality by the user account’s performance calculation type + ### Changed - Localized the number formatting in the static portfolio analysis rule: _Liquidity_ (Buying Power) diff --git a/apps/api/src/app/export/export.controller.ts b/apps/api/src/app/export/export.controller.ts index 0b4a2c6e0..5446f8789 100644 --- a/apps/api/src/app/export/export.controller.ts +++ b/apps/api/src/app/export/export.controller.ts @@ -48,8 +48,8 @@ export class ExportController { return this.exportService.export({ activityIds, filters, - userCurrency: this.request.user.settings.settings.baseCurrency, - userId: this.request.user.id + userId: this.request.user.id, + userSettings: this.request.user.settings.settings }); } } diff --git a/apps/api/src/app/export/export.service.ts b/apps/api/src/app/export/export.service.ts index 2001fd3e2..d07b199be 100644 --- a/apps/api/src/app/export/export.service.ts +++ b/apps/api/src/app/export/export.service.ts @@ -3,7 +3,11 @@ import { OrderService } from '@ghostfolio/api/app/order/order.service'; import { environment } from '@ghostfolio/api/environments/environment'; import { MarketDataService } from '@ghostfolio/api/services/market-data/market-data.service'; import { TagService } from '@ghostfolio/api/services/tag/tag.service'; -import { ExportResponse, Filter } from '@ghostfolio/common/interfaces'; +import { + ExportResponse, + Filter, + UserSettings +} from '@ghostfolio/common/interfaces'; import { Injectable } from '@nestjs/common'; import { Platform, Prisma } from '@prisma/client'; @@ -21,13 +25,13 @@ export class ExportService { public async export({ activityIds, filters, - userCurrency, - userId + userId, + userSettings }: { activityIds?: string[]; filters?: Filter[]; - userCurrency: string; userId: string; + userSettings: UserSettings; }): Promise { const { ACCOUNT: filtersByAccount } = groupBy(filters, ({ type }) => { return type; @@ -36,11 +40,11 @@ export class ExportService { let { activities } = await this.orderService.getOrders({ filters, - userCurrency, userId, includeDrafts: true, sortColumn: 'date', sortDirection: 'asc', + userCurrency: userSettings?.baseCurrency, withExcludedAccountsAndActivities: true }); @@ -244,7 +248,10 @@ export class ExportService { } ), user: { - settings: { currency: userCurrency } + settings: { + currency: userSettings?.baseCurrency, + performanceCalculationType: userSettings?.performanceCalculationType + } } }; } diff --git a/libs/common/src/lib/interfaces/responses/export-response.interface.ts b/libs/common/src/lib/interfaces/responses/export-response.interface.ts index a5416e886..8b1697ca4 100644 --- a/libs/common/src/lib/interfaces/responses/export-response.interface.ts +++ b/libs/common/src/lib/interfaces/responses/export-response.interface.ts @@ -9,6 +9,7 @@ import { import { AccountBalance } from '../account-balance.interface'; import { MarketData } from '../market-data.interface'; +import { UserSettings } from '../user-settings.interface'; export interface ExportResponse { accounts: (Omit & { @@ -36,5 +37,10 @@ export interface ExportResponse { }; platforms: Platform[]; tags: Omit[]; - user: { settings: { currency: string } }; + user: { + settings: { + currency: UserSettings['baseCurrency']; + performanceCalculationType: UserSettings['performanceCalculationType']; + }; + }; } From a872770b7c6de31acc9fadefd988c035a76ebaf2 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Fri, 24 Oct 2025 18:54:17 +0200 Subject: [PATCH 34/92] Bugfix/footer row style of accounts table component (#5826) * Fix style of footer row * Update changelog --- CHANGELOG.md | 4 ++++ .../ui/src/lib/accounts-table/accounts-table.component.html | 6 +----- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c249cd7d1..0418331ea 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,6 +17,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Moved the _Prisma Configuration File_ from `prisma.config.ts` to `.config/prisma.ts` - Upgraded `prisma` from version `6.17.1` to `6.18.0` +### Fixed + +- Fixed the style in the footer row of the accounts table + ## 2.210.1 - 2025-10-22 ### Added 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 609c76ee1..e9e0337c9 100644 --- a/libs/ui/src/lib/accounts-table/accounts-table.component.html +++ b/libs/ui/src/lib/accounts-table/accounts-table.component.html @@ -320,11 +320,7 @@ - + From 1f6b061ab006fbf4ee74aa84cac1a6257093afb8 Mon Sep 17 00:00:00 2001 From: David Requeno <108202767+DavidReque@users.noreply.github.com> Date: Fri, 24 Oct 2025 11:13:34 -0600 Subject: [PATCH 35/92] Task/migrate tablemark to v4 (#5809) * Migrate tablemark to v4 * Update changelog --- CHANGELOG.md | 1 + apps/api/src/app/endpoints/ai/ai.service.ts | 9 +- package-lock.json | 171 ++++++++++++++------ package.json | 2 +- 4 files changed, 132 insertions(+), 51 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0418331ea..09d836e9a 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 - Localized the number formatting in the static portfolio analysis rule: _Liquidity_ (Buying Power) - Moved the _Prisma Configuration File_ from `prisma.config.ts` to `.config/prisma.ts` - Upgraded `prisma` from version `6.17.1` to `6.18.0` +- Upgraded `tablemark` from version `3.1.0` to `4.1.0` ### Fixed diff --git a/apps/api/src/app/endpoints/ai/ai.service.ts b/apps/api/src/app/endpoints/ai/ai.service.ts index d1e1b413f..4cc4fde65 100644 --- a/apps/api/src/app/endpoints/ai/ai.service.ts +++ b/apps/api/src/app/endpoints/ai/ai.service.ts @@ -10,7 +10,7 @@ import type { AiPromptMode } from '@ghostfolio/common/types'; import { Injectable } from '@nestjs/common'; import { createOpenRouter } from '@openrouter/ai-sdk-provider'; import { generateText } from 'ai'; -import tablemark, { ColumnDescriptor } from 'tablemark'; +import type { ColumnDescriptor } from 'tablemark'; @Injectable() export class AiService { @@ -92,6 +92,13 @@ export class AiService { } ); + // Dynamic import to load ESM module from CommonJS context + // eslint-disable-next-line @typescript-eslint/no-implied-eval + const dynamicImport = new Function('s', 'return import(s)') as ( + s: string + ) => Promise; + const { tablemark } = await dynamicImport('tablemark'); + const holdingsTableString = tablemark(holdingsTableRows, { columns: holdingsTableColumns }); diff --git a/package-lock.json b/package-lock.json index 7889faa15..d46062433 100644 --- a/package-lock.json +++ b/package-lock.json @@ -92,7 +92,7 @@ "rxjs": "7.8.1", "stripe": "18.5.0", "svgmap": "2.12.2", - "tablemark": "3.1.0", + "tablemark": "4.1.0", "twitter-api-v2": "1.23.0", "uuid": "11.1.0", "yahoo-finance2": "3.10.0", @@ -17595,6 +17595,12 @@ "node": ">=8" } }, + "node_modules/change-case": { + "version": "5.4.4", + "resolved": "https://registry.npmjs.org/change-case/-/change-case-5.4.4.tgz", + "integrity": "sha512-HRQyTk2/YPEkt9TnUPbOpr64Uw3KOicFWPVBb+xiHvd6eBx/qPr9xqfBFDT8P2vWsvvz4jbEkfDe71W3VyNu2w==", + "license": "MIT" + }, "node_modules/char-regex": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", @@ -23695,15 +23701,6 @@ "node": ">= 0.4" } }, - "node_modules/get-stdin": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-5.0.1.tgz", - "integrity": "sha512-jZV7n6jGE3Gt7fgSTJoz91Ak5MuTLwMwkoYdjxuJ/AmjIsE1UC03y/IWkZCQGEvVNS9qoRNwy5BCqxImv0FVeA==", - "license": "MIT", - "engines": { - "node": ">=0.12.0" - } - }, "node_modules/get-stream": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", @@ -32021,6 +32018,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "dev": true, "license": "MIT", "dependencies": { "tslib": "^2.0.3" @@ -32924,6 +32922,7 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", + "dev": true, "license": "MIT", "dependencies": { "lower-case": "^2.0.2", @@ -37691,17 +37690,6 @@ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "license": "MIT" }, - "node_modules/sentence-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/sentence-case/-/sentence-case-3.0.4.tgz", - "integrity": "sha512-8LS0JInaQMCRoQ7YUytAo/xUu5W2XnQxV2HI/6uM6U7CITS1RqPElr30V6uIqyMKM9lJGRVFy5/4CuzcixNYSg==", - "license": "MIT", - "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3", - "upper-case-first": "^2.0.2" - } - }, "node_modules/serialize-javascript": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", @@ -38351,19 +38339,6 @@ "wbuf": "^1.7.3" } }, - "node_modules/split-text-to-chunks": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/split-text-to-chunks/-/split-text-to-chunks-1.0.0.tgz", - "integrity": "sha512-HLtEwXK/T4l7QZSJ/kOSsZC0o5e2Xg3GzKKFxm0ZexJXw0Bo4CaEl39l7MCSRHk9EOOL5jT8JIDjmhTtcoe6lQ==", - "license": "MIT", - "dependencies": { - "get-stdin": "^5.0.1", - "minimist": "^1.2.0" - }, - "bin": { - "wordwrap": "cli.js" - } - }, "node_modules/sprintf-js": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", @@ -39133,16 +39108,114 @@ } }, "node_modules/tablemark": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/tablemark/-/tablemark-3.1.0.tgz", - "integrity": "sha512-IwO6f0SEzp1Z+zqz/7ANUmeEac4gaNlknWyj/S9aSg11wZmWYnLeyI/xXvEOU88BYUIf8y30y0wxB58xIKrVlQ==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/tablemark/-/tablemark-4.1.0.tgz", + "integrity": "sha512-B3LDjbDo+ac+D5RwkBOPZZ6ua8716KdT+6NO3DKOCHJq0ezE6vV2r92rjrC1ci2H+ocuysl5ytf1T0QqV65yoA==", "license": "MIT", "dependencies": { - "sentence-case": "^3.0.4", - "split-text-to-chunks": "^1.0.0" + "ansi-regex": "^6.2.2", + "change-case": "^5.4.4", + "string-width": "^8.1.0", + "wordwrapjs": "^5.1.0", + "wrap-ansi": "^9.0.2" }, "engines": { - "node": ">=14.16" + "node": ">=20" + } + }, + "node_modules/tablemark/node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/tablemark/node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/tablemark/node_modules/emoji-regex": { + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", + "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", + "license": "MIT" + }, + "node_modules/tablemark/node_modules/string-width": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-8.1.0.tgz", + "integrity": "sha512-Kxl3KJGb/gxkaUMOjRsQ8IrXiGW75O4E3RPjFIINOVH8AMl2SQ/yWdTzWwF3FevIX9LcMAjJW+GRwAlAbTSXdg==", + "license": "MIT", + "dependencies": { + "get-east-asian-width": "^1.3.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/tablemark/node_modules/strip-ansi": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", + "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/tablemark/node_modules/wrap-ansi": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.2.tgz", + "integrity": "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.2.1", + "string-width": "^7.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/tablemark/node_modules/wrap-ansi/node_modules/string-width": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/tapable": { @@ -40624,15 +40697,6 @@ "browserslist": ">= 4.21.0" } }, - "node_modules/upper-case-first": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/upper-case-first/-/upper-case-first-2.0.2.tgz", - "integrity": "sha512-514ppYHBaKwfJRK/pNC6c/OxfGa0obSnAl106u97Ed0I625Nin96KAjttZF6ZL3e1XLtphxnqrOi9iWgm+u+bg==", - "license": "MIT", - "dependencies": { - "tslib": "^2.0.3" - } - }, "node_modules/uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", @@ -42036,6 +42100,15 @@ "node": ">=0.10.0" } }, + "node_modules/wordwrapjs": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-5.1.1.tgz", + "integrity": "sha512-0yweIbkINJodk27gX9LBGMzyQdBDan3s/dEAiwBOj+Mf0PPyWL6/rikalkv8EeD0E8jm4o5RXEOrFTP3NXbhJg==", + "license": "MIT", + "engines": { + "node": ">=12.17" + } + }, "node_modules/wrap-ansi": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", diff --git a/package.json b/package.json index 7cedd68bf..dd31075cc 100644 --- a/package.json +++ b/package.json @@ -138,7 +138,7 @@ "rxjs": "7.8.1", "stripe": "18.5.0", "svgmap": "2.12.2", - "tablemark": "3.1.0", + "tablemark": "4.1.0", "twitter-api-v2": "1.23.0", "uuid": "11.1.0", "yahoo-finance2": "3.10.0", From 0ec9c1dd934f34b2153aef536e492b1024537565 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sven=20G=C3=BCnther?= Date: Fri, 24 Oct 2025 19:51:14 +0200 Subject: [PATCH 36/92] Bugfix/custom asset name rendering in import activities dialog (#5787) * Fix custom asset name rendering in import activities dialog * Update changelog --- CHANGELOG.md | 1 + apps/api/src/app/import/import.service.ts | 12 +++++++++++- apps/api/src/app/order/create-order.dto.ts | 3 ++- apps/api/src/app/order/order.service.ts | 4 ++-- .../src/app/services/import-activities.service.ts | 6 +----- .../activities-table/activities-table.component.html | 5 ++++- 6 files changed, 21 insertions(+), 10 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 09d836e9a..f1abea2e3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -21,6 +21,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Fixed - Fixed the style in the footer row of the accounts table +- Fixed the rendering of names and symbols for custom assets in the import activities dialog ## 2.210.1 - 2025-10-22 diff --git a/apps/api/src/app/import/import.service.ts b/apps/api/src/app/import/import.service.ts index 2725747aa..2ec28365e 100644 --- a/apps/api/src/app/import/import.service.ts +++ b/apps/api/src/app/import/import.service.ts @@ -539,6 +539,7 @@ export class ImportService { connectOrCreate: { create: { dataSource, + name, symbol, currency: assetProfile.currency, userId: dataSource === 'MANUAL' ? user.id : undefined @@ -746,10 +747,19 @@ export class ImportService { if (['FEE', 'INTEREST', 'LIABILITY'].includes(type)) { // Skip asset profile validation for FEE, INTEREST, and LIABILITY // as these activity types don't require asset profiles + const assetProfileInImport = assetProfilesWithMarketDataDto?.find( + (profile) => { + return ( + profile.dataSource === dataSource && profile.symbol === symbol + ); + } + ); + assetProfiles[getAssetProfileIdentifier({ dataSource, symbol })] = { currency, dataSource, - symbol + symbol, + name: assetProfileInImport?.name }; continue; diff --git a/apps/api/src/app/order/create-order.dto.ts b/apps/api/src/app/order/create-order.dto.ts index ba7a1d868..fb4ac32dd 100644 --- a/apps/api/src/app/order/create-order.dto.ts +++ b/apps/api/src/app/order/create-order.dto.ts @@ -44,7 +44,8 @@ export class CreateOrderDto { customCurrency?: string; @IsEnum(DataSource) - dataSource: DataSource; + @IsOptional() // Optional for type FEE, INTEREST, and LIABILITY (default data source is resolved in the backend) + dataSource?: DataSource; @IsISO8601() @Validate(IsAfter1970Constraint) diff --git a/apps/api/src/app/order/order.service.ts b/apps/api/src/app/order/order.service.ts index 11579bbf1..2b5d14150 100644 --- a/apps/api/src/app/order/order.service.ts +++ b/apps/api/src/app/order/order.service.ts @@ -129,7 +129,7 @@ export class OrderService { const assetSubClass = data.assetSubClass; const dataSource: DataSource = 'MANUAL'; - let name: string; + let name = data.SymbolProfile.connectOrCreate.create.name; let symbol: string; if ( @@ -142,7 +142,7 @@ export class OrderService { symbol = data.SymbolProfile.connectOrCreate.create.symbol; } else { // Create custom asset profile - name = data.SymbolProfile.connectOrCreate.create.symbol; + name = name ?? data.SymbolProfile.connectOrCreate.create.symbol; symbol = uuidv4(); } diff --git a/apps/client/src/app/services/import-activities.service.ts b/apps/client/src/app/services/import-activities.service.ts index 323f07a5b..0f2715e47 100644 --- a/apps/client/src/app/services/import-activities.service.ts +++ b/apps/client/src/app/services/import-activities.service.ts @@ -76,12 +76,8 @@ export class ImportActivitiesService { updateAccountBalance: false }); - if ( - dataSource === DataSource.MANUAL && - !['FEE', 'INTEREST', 'LIABILITY'].includes(type) - ) { + if (dataSource === DataSource.MANUAL) { // Create synthetic asset profile for MANUAL data source - // (except for FEE, INTEREST, and LIABILITY which don't require asset profiles) assetProfiles.push({ currency, symbol, 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 8079a6258..843832e1a 100644 --- a/libs/ui/src/lib/activities-table/activities-table.component.html +++ b/libs/ui/src/lib/activities-table/activities-table.component.html @@ -143,7 +143,10 @@ }
- @if (!isUUID(element.SymbolProfile?.symbol)) { + @if ( + element.SymbolProfile?.dataSource !== 'MANUAL' && + !isUUID(element.SymbolProfile?.symbol) + ) {
{{ element.SymbolProfile?.symbol | gfSymbol From 4ca65b88f9f92075de84a8896ed27af2607599ab Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Fri, 24 Oct 2025 19:55:01 +0200 Subject: [PATCH 37/92] Release 2.211.0-beta.0 (#5829) --- 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 f1abea2e3..8dff9d6c3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,7 +5,7 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## Unreleased +## 2.211.0-beta.0 - 2025-10-24 ### Added diff --git a/package-lock.json b/package-lock.json index d46062433..de1be8c3c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "ghostfolio", - "version": "2.210.1", + "version": "2.211.0-beta.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "ghostfolio", - "version": "2.210.1", + "version": "2.211.0-beta.0", "hasInstallScript": true, "license": "AGPL-3.0", "dependencies": { diff --git a/package.json b/package.json index dd31075cc..6abe23cf4 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ghostfolio", - "version": "2.210.1", + "version": "2.211.0-beta.0", "homepage": "https://ghostfol.io", "license": "AGPL-3.0", "repository": "https://github.com/ghostfolio/ghostfolio", From 482b97ba9b8e83f16f3e8acc76c693d4f39cfa7f Mon Sep 17 00:00:00 2001 From: Harsh Santwani <96873014+HydrallHarsh@users.noreply.github.com> Date: Sat, 25 Oct 2025 00:28:44 +0530 Subject: [PATCH 38/92] Feature/set up user detail dialog in admin control panel (#5819) * Set up user detail dialog * Update changelog --- CHANGELOG.md | 1 + .../admin-users/admin-users.component.ts | 70 +++++++++++++++++-- .../components/admin-users/admin-users.html | 12 +++- .../interfaces/interfaces.ts | 7 ++ .../user-detail-dialog.component.scss | 7 ++ .../user-detail-dialog.component.ts | 52 ++++++++++++++ .../user-detail-dialog.html | 32 +++++++++ 7 files changed, 176 insertions(+), 5 deletions(-) create mode 100644 apps/client/src/app/components/user-detail-dialog/interfaces/interfaces.ts create mode 100644 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.scss create mode 100644 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts create mode 100644 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html diff --git a/CHANGELOG.md b/CHANGELOG.md index 8dff9d6c3..d48751572 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 ### Added - Extended the export functionality by the user account’s performance calculation type +- Added a user detail dialog to the users section of the admin control panel ### Changed diff --git a/apps/client/src/app/components/admin-users/admin-users.component.ts b/apps/client/src/app/components/admin-users/admin-users.component.ts index 84b82d111..fce97877b 100644 --- a/apps/client/src/app/components/admin-users/admin-users.component.ts +++ b/apps/client/src/app/components/admin-users/admin-users.component.ts @@ -19,6 +19,7 @@ import { ViewChild } from '@angular/core'; import { MatButtonModule } from '@angular/material/button'; +import { MatDialog } from '@angular/material/dialog'; import { MatMenuModule } from '@angular/material/menu'; import { MatPaginator, @@ -26,6 +27,7 @@ import { PageEvent } from '@angular/material/paginator'; import { MatTableDataSource, MatTableModule } from '@angular/material/table'; +import { ActivatedRoute, Router } from '@angular/router'; import { IonIcon } from '@ionic/angular/standalone'; import { differenceInSeconds, @@ -37,8 +39,10 @@ import { contractOutline, ellipsisHorizontal, keyOutline, + personOutline, trashOutline } from 'ionicons/icons'; +import { DeviceDetectorService } from 'ngx-device-detector'; import { NgxSkeletonLoaderModule } from 'ngx-skeleton-loader'; import { Subject } from 'rxjs'; import { takeUntil } from 'rxjs/operators'; @@ -49,6 +53,8 @@ import { AdminService } from '../../services/admin.service'; import { DataService } from '../../services/data.service'; import { ImpersonationStorageService } from '../../services/impersonation-storage.service'; import { UserService } from '../../services/user/user.service'; +import { UserDetailDialogParams } from '../user-detail-dialog/interfaces/interfaces'; +import { GfUserDetailDialogComponent } from '../user-detail-dialog/user-detail-dialog.component'; @Component({ imports: [ @@ -71,6 +77,7 @@ export class GfAdminUsersComponent implements OnDestroy, OnInit { public dataSource = new MatTableDataSource(); public defaultDateFormat: string; + public deviceType: string; public displayedColumns: string[] = []; public getEmojiFlag = getEmojiFlag; public hasPermissionForSubscription: boolean; @@ -87,11 +94,16 @@ export class GfAdminUsersComponent implements OnDestroy, OnInit { private adminService: AdminService, private changeDetectorRef: ChangeDetectorRef, private dataService: DataService, + private deviceService: DeviceDetectorService, + private dialog: MatDialog, private impersonationStorageService: ImpersonationStorageService, private notificationService: NotificationService, + private route: ActivatedRoute, + private router: Router, private tokenStorageService: TokenStorageService, private userService: UserService ) { + this.deviceType = this.deviceService.getDeviceInfo().deviceType; this.info = this.dataService.fetchInfo(); this.hasPermissionForSubscription = hasPermission( @@ -121,6 +133,14 @@ export class GfAdminUsersComponent implements OnDestroy, OnInit { ]; } + this.route.queryParams + .pipe(takeUntil(this.unsubscribeSubject)) + .subscribe((params) => { + if (params['userDetailDialog'] && params['userId']) { + this.openUserDetailDialog(params['userId']); + } + }); + this.userService.stateChanged .pipe(takeUntil(this.unsubscribeSubject)) .subscribe((state) => { @@ -138,7 +158,13 @@ export class GfAdminUsersComponent implements OnDestroy, OnInit { } }); - addIcons({ contractOutline, ellipsisHorizontal, keyOutline, trashOutline }); + addIcons({ + contractOutline, + ellipsisHorizontal, + keyOutline, + personOutline, + trashOutline + }); } public ngOnInit() { @@ -161,6 +187,12 @@ export class GfAdminUsersComponent implements OnDestroy, OnInit { return ''; } + public onChangePage(page: PageEvent) { + this.fetchUsers({ + pageIndex: page.pageIndex + }); + } + public onDeleteUser(aId: string) { this.notificationService.confirm({ confirmFn: () => { @@ -212,9 +244,9 @@ export class GfAdminUsersComponent implements OnDestroy, OnInit { window.location.reload(); } - public onChangePage(page: PageEvent) { - this.fetchUsers({ - pageIndex: page.pageIndex + public onOpenUserDetailDialog(userId: string) { + this.router.navigate([], { + queryParams: { userId, userDetailDialog: true } }); } @@ -245,4 +277,34 @@ export class GfAdminUsersComponent implements OnDestroy, OnInit { this.changeDetectorRef.markForCheck(); }); } + + private openUserDetailDialog(userId: string) { + const userData = this.dataSource.data.find(({ id }) => { + return id === userId; + }); + + if (!userData) { + this.router.navigate(['.'], { relativeTo: this.route }); + return; + } + + const dialogRef = this.dialog.open(GfUserDetailDialogComponent, { + autoFocus: false, + data: { + userData, + deviceType: this.deviceType, + locale: this.user?.settings?.locale + } as UserDetailDialogParams, + height: this.deviceType === 'mobile' ? '98vh' : '60vh', + width: this.deviceType === 'mobile' ? '100vw' : '50rem' + }); + + dialogRef + .afterClosed() + .pipe(takeUntil(this.unsubscribeSubject)) + .subscribe(() => { + this.fetchUsers(); + this.router.navigate(['.'], { relativeTo: this.route }); + }); + } } diff --git a/apps/client/src/app/components/admin-users/admin-users.html b/apps/client/src/app/components/admin-users/admin-users.html index 4e58abf08..e802e3272 100644 --- a/apps/client/src/app/components/admin-users/admin-users.html +++ b/apps/client/src/app/components/admin-users/admin-users.html @@ -216,6 +216,15 @@ + @if (hasPermissionToImpersonateAllUsers) {
diff --git a/apps/client/src/app/components/user-detail-dialog/interfaces/interfaces.ts b/apps/client/src/app/components/user-detail-dialog/interfaces/interfaces.ts new file mode 100644 index 000000000..81cf84d12 --- /dev/null +++ b/apps/client/src/app/components/user-detail-dialog/interfaces/interfaces.ts @@ -0,0 +1,7 @@ +import { AdminUsers } from '@ghostfolio/common/interfaces'; + +export interface UserDetailDialogParams { + deviceType: string; + locale: string; + userData: AdminUsers['users'][0]; +} diff --git a/apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.scss b/apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.scss new file mode 100644 index 000000000..b63df0134 --- /dev/null +++ b/apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.scss @@ -0,0 +1,7 @@ +:host { + display: block; + + .mat-mdc-dialog-content { + max-height: unset; + } +} diff --git a/apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts b/apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts new file mode 100644 index 000000000..bd336c4f8 --- /dev/null +++ b/apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts @@ -0,0 +1,52 @@ +import { GfDialogFooterComponent } from '@ghostfolio/client/components/dialog-footer/dialog-footer.component'; +import { GfDialogHeaderComponent } from '@ghostfolio/client/components/dialog-header/dialog-header.component'; +import { GfValueComponent } from '@ghostfolio/ui/value'; + +import { CommonModule } from '@angular/common'; +import { + ChangeDetectionStrategy, + Component, + CUSTOM_ELEMENTS_SCHEMA, + Inject, + OnDestroy +} from '@angular/core'; +import { MatButtonModule } from '@angular/material/button'; +import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog'; +import { MatDialogModule } from '@angular/material/dialog'; +import { Subject } from 'rxjs'; + +import { UserDetailDialogParams } from './interfaces/interfaces'; + +@Component({ + changeDetection: ChangeDetectionStrategy.OnPush, + host: { class: 'd-flex flex-column h-100' }, + imports: [ + CommonModule, + GfDialogFooterComponent, + GfDialogHeaderComponent, + GfValueComponent, + MatButtonModule, + MatDialogModule + ], + schemas: [CUSTOM_ELEMENTS_SCHEMA], + selector: 'gf-user-detail-dialog', + styleUrls: ['./user-detail-dialog.component.scss'], + templateUrl: './user-detail-dialog.html' +}) +export class GfUserDetailDialogComponent implements OnDestroy { + private unsubscribeSubject = new Subject(); + + public constructor( + @Inject(MAT_DIALOG_DATA) public data: UserDetailDialogParams, + public dialogRef: MatDialogRef + ) {} + + public onClose() { + this.dialogRef.close(); + } + + public ngOnDestroy() { + this.unsubscribeSubject.next(); + this.unsubscribeSubject.complete(); + } +} diff --git a/apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html b/apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html new file mode 100644 index 000000000..d90a6abf6 --- /dev/null +++ b/apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -0,0 +1,32 @@ + + +
+
+
+
+ User ID +
+
+ Registration Date +
+
+
+
+ + From d1a151bd60d6306906f1c909cd899353fefc0a2f Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sat, 25 Oct 2025 09:42:24 +0200 Subject: [PATCH 39/92] Feature/update locales (#5807) * Update locales * Update translations * Update changelog --------- Co-authored-by: github-actions[bot] Co-authored-by: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> --- CHANGELOG.md | 1 + apps/client/src/locales/messages.ca.xlf | 152 ++++++++++++++---------- apps/client/src/locales/messages.de.xlf | 152 ++++++++++++++---------- apps/client/src/locales/messages.es.xlf | 152 ++++++++++++++---------- apps/client/src/locales/messages.fr.xlf | 152 ++++++++++++++---------- apps/client/src/locales/messages.it.xlf | 152 ++++++++++++++---------- apps/client/src/locales/messages.nl.xlf | 152 ++++++++++++++---------- apps/client/src/locales/messages.pl.xlf | 152 ++++++++++++++---------- apps/client/src/locales/messages.pt.xlf | 152 ++++++++++++++---------- apps/client/src/locales/messages.tr.xlf | 152 ++++++++++++++---------- apps/client/src/locales/messages.uk.xlf | 152 ++++++++++++++---------- apps/client/src/locales/messages.xlf | 150 +++++++++++++---------- apps/client/src/locales/messages.zh.xlf | 152 ++++++++++++++---------- 13 files changed, 1031 insertions(+), 792 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d48751572..a0beadc0f 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 - Localized the number formatting in the static portfolio analysis rule: _Liquidity_ (Buying Power) - Moved the _Prisma Configuration File_ from `prisma.config.ts` to `.config/prisma.ts` +- Improved the language localization for German (`de`) - Upgraded `prisma` from version `6.17.1` to `6.18.0` - Upgraded `tablemark` from version `3.1.0` to `4.1.0` diff --git a/apps/client/src/locales/messages.ca.xlf b/apps/client/src/locales/messages.ca.xlf index 3cc3c65ff..c68b369d4 100644 --- a/apps/client/src/locales/messages.ca.xlf +++ b/apps/client/src/locales/messages.ca.xlf @@ -42,7 +42,7 @@
apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 68 + 71 libs/common/src/lib/routes/routes.ts @@ -523,7 +523,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 278 + 281
@@ -559,11 +559,11 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 259 + 262 libs/ui/src/lib/activities-table/activities-table.component.html - 295 + 298 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -603,7 +603,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 440 + 443 @@ -639,7 +639,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 467 + 470 libs/ui/src/lib/benchmark/benchmark.component.html @@ -671,7 +671,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 158 + 161 @@ -831,7 +831,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 167 + 170 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html @@ -1467,7 +1467,7 @@ Està segur que vol eliminar aquest usuari? apps/client/src/app/components/admin-users/admin-users.component.ts - 175 + 207 @@ -1503,7 +1503,7 @@ Actuar com un altre Usuari apps/client/src/app/components/admin-users/admin-users.html - 223 + 232 @@ -1511,7 +1511,7 @@ Eliminar Usuari apps/client/src/app/components/admin-users/admin-users.html - 244 + 253 @@ -1691,7 +1691,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 188 + 191 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -1979,7 +1979,7 @@ apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 27 + 28 apps/client/src/app/pages/landing/landing-page.html @@ -2015,7 +2015,7 @@ Inicieu la sessió amb la identitat d’Internet apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 37 + 38 @@ -2023,7 +2023,7 @@ Inicieu la sessió amb Google apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 47 + 48 @@ -2031,7 +2031,7 @@ Manteniu la sessió iniciada apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 56 + 59 @@ -2307,7 +2307,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 383 + 364 @@ -2319,7 +2319,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 395 + 376 @@ -2331,7 +2331,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 405 + 386 @@ -2343,7 +2343,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 430 + 411 @@ -2355,7 +2355,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 436 + 417 @@ -2409,6 +2409,10 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html 252 + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 12 + Granted Access @@ -2423,7 +2427,7 @@ Introduïu el vostre codi de cupó. apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 215 + 218 @@ -2431,7 +2435,7 @@ No s’ha pogut bescanviar el codi de cupó apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 179 + 182 @@ -2439,7 +2443,7 @@ El codi del cupó s’ha bescanviat apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 192 + 195 @@ -2447,7 +2451,7 @@ Torna a carregar apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 193 + 196 @@ -2727,7 +2731,7 @@ D’acord apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 154 + 157 apps/client/src/app/core/http-response.interceptor.ts @@ -4012,7 +4016,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 212 + 215 @@ -4028,7 +4032,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 377 + 380 @@ -4044,7 +4048,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 389 + 392 @@ -4103,8 +4107,8 @@ 32 - libs/ui/src/lib/assistant/assistant.html - 207 + libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html + 26 @@ -5265,7 +5269,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 402 + 405 @@ -5277,7 +5281,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 415 + 418 @@ -5301,7 +5305,7 @@ Clonar libs/ui/src/lib/activities-table/activities-table.component.html - 446 + 449 @@ -5309,7 +5313,7 @@ Exporta l’esborrany com a ICS libs/ui/src/lib/activities-table/activities-table.component.html - 456 + 459 @@ -5333,7 +5337,7 @@ Setmana fins avui libs/ui/src/lib/assistant/assistant.component.ts - 387 + 368 @@ -5345,7 +5349,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 387 + 368 @@ -5353,7 +5357,7 @@ Mes fins a la data libs/ui/src/lib/assistant/assistant.component.ts - 391 + 372 @@ -5365,7 +5369,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 391 + 372 @@ -5373,7 +5377,7 @@ Any fins a la data libs/ui/src/lib/assistant/assistant.component.ts - 395 + 376 @@ -5393,7 +5397,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 405 + 386 @@ -5405,7 +5409,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 430 + 411 @@ -5421,7 +5425,7 @@ Interval de dates libs/ui/src/lib/assistant/assistant.html - 171 + 170 @@ -5429,7 +5433,7 @@ Restableix els filtres libs/ui/src/lib/assistant/assistant.html - 266 + 205 @@ -5437,7 +5441,7 @@ Aplicar filtres libs/ui/src/lib/assistant/assistant.html - 276 + 219 @@ -5609,14 +5613,14 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 310 + 313 - libs/ui/src/lib/assistant/assistant.html - 185 + libs/ui/src/lib/i18n.ts + 4 - libs/ui/src/lib/i18n.ts + libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html 4 @@ -5651,14 +5655,14 @@ apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html 290 - - libs/ui/src/lib/assistant/assistant.html - 246 - libs/ui/src/lib/i18n.ts 6 + + libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html + 64 +
Asset Sub Class @@ -5867,14 +5871,14 @@ Tag Etiqueta - - libs/ui/src/lib/assistant/assistant.html - 235 - libs/ui/src/lib/i18n.ts 31 + + libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html + 53 + Year @@ -5884,6 +5888,14 @@ 32 + + View Details + View Details + + apps/client/src/app/components/admin-users/admin-users.html + 225 + + Years Anys @@ -5913,7 +5925,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 236 + 239 libs/ui/src/lib/i18n.ts @@ -7071,7 +7083,7 @@ Could not generate an API key apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 141 + 144 @@ -7079,7 +7091,7 @@ Set this API key in your self-hosted environment: apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 156 + 159 @@ -7087,7 +7099,7 @@ Ghostfolio Premium Data Provider API Key apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 159 + 162 @@ -7095,7 +7107,7 @@ Do you really want to generate a new API key? apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 164 + 167 @@ -7439,7 +7451,7 @@ Security token apps/client/src/app/components/admin-users/admin-users.component.ts - 196 + 228 apps/client/src/app/components/user-account-access/user-account-access.component.ts @@ -7451,7 +7463,7 @@ Do you really want to generate a new security token for this user? apps/client/src/app/components/admin-users/admin-users.component.ts - 201 + 233 @@ -7459,7 +7471,7 @@ Find account, holding or page... libs/ui/src/lib/assistant/assistant.component.ts - 162 + 152 @@ -7467,7 +7479,7 @@ Generate Security Token apps/client/src/app/components/admin-users/admin-users.html - 233 + 242 @@ -8531,6 +8543,14 @@ 128 + + Registration Date + Registration Date + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 22 + + Follow Ghostfolio on LinkedIn Follow Ghostfolio on LinkedIn diff --git a/apps/client/src/locales/messages.de.xlf b/apps/client/src/locales/messages.de.xlf index 29ec1d9b7..2db1d100f 100644 --- a/apps/client/src/locales/messages.de.xlf +++ b/apps/client/src/locales/messages.de.xlf @@ -62,7 +62,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 158 + 161 @@ -198,11 +198,11 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 259 + 262 libs/ui/src/lib/activities-table/activities-table.component.html - 295 + 298 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -242,7 +242,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 440 + 443 @@ -278,7 +278,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 467 + 470 libs/ui/src/lib/benchmark/benchmark.component.html @@ -434,7 +434,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 167 + 170 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html @@ -638,7 +638,7 @@ Möchtest du diesen Benutzer wirklich löschen? apps/client/src/app/components/admin-users/admin-users.component.ts - 175 + 207 @@ -714,7 +714,7 @@ apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 68 + 71 libs/common/src/lib/routes/routes.ts @@ -798,7 +798,7 @@ apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 27 + 28 apps/client/src/app/pages/landing/landing-page.html @@ -834,7 +834,7 @@ Einloggen mit Internet Identity apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 37 + 38 @@ -842,7 +842,7 @@ Einloggen mit Google apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 47 + 48 @@ -850,7 +850,7 @@ Eingeloggt bleiben apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 56 + 59 @@ -1022,7 +1022,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 383 + 364 @@ -1034,7 +1034,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 395 + 376 @@ -1046,7 +1046,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 405 + 386 @@ -1058,7 +1058,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 430 + 411 @@ -1070,7 +1070,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 436 + 417 @@ -1078,7 +1078,7 @@ Okay apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 154 + 157 apps/client/src/app/core/http-response.interceptor.ts @@ -1146,7 +1146,7 @@ Bitte gebe deinen Gutscheincode ein. apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 215 + 218 @@ -1154,7 +1154,7 @@ Gutscheincode konnte nicht eingelöst werden apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 179 + 182 @@ -1162,7 +1162,7 @@ Gutscheincode wurde eingelöst apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 192 + 195 @@ -1170,7 +1170,7 @@ Neu laden apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 193 + 196 @@ -1280,6 +1280,10 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html 252 + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 12 + Granted Access @@ -1382,7 +1386,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 278 + 281 @@ -1914,7 +1918,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 188 + 191 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -1930,7 +1934,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 212 + 215 @@ -2202,7 +2206,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 377 + 380 @@ -2214,7 +2218,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 402 + 405 @@ -2226,7 +2230,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 415 + 418 @@ -2234,7 +2238,7 @@ Kopieren libs/ui/src/lib/activities-table/activities-table.component.html - 446 + 449 @@ -2242,7 +2246,7 @@ Geplante Aktivität als ICS exportieren libs/ui/src/lib/activities-table/activities-table.component.html - 456 + 459 @@ -2686,14 +2690,14 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 310 + 313 - libs/ui/src/lib/assistant/assistant.html - 185 + libs/ui/src/lib/i18n.ts + 4 - libs/ui/src/lib/i18n.ts + libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html 4 @@ -2720,14 +2724,14 @@ apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html 290 - - libs/ui/src/lib/assistant/assistant.html - 246 - libs/ui/src/lib/i18n.ts 6 + + libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html + 64 + Symbol @@ -2760,14 +2764,14 @@ Tag Tag - - libs/ui/src/lib/assistant/assistant.html - 235 - libs/ui/src/lib/i18n.ts 31 + + libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html + 53 + Cash @@ -3177,8 +3181,8 @@ 32 - libs/ui/src/lib/assistant/assistant.html - 207 + libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html + 26 @@ -3210,7 +3214,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 389 + 392 @@ -3726,7 +3730,7 @@ Benutzer verwenden apps/client/src/app/components/admin-users/admin-users.html - 223 + 232 @@ -3734,7 +3738,7 @@ Benutzer löschen apps/client/src/app/components/admin-users/admin-users.html - 244 + 253 @@ -3981,6 +3985,14 @@ 32 + + View Details + Details anzeigen + + apps/client/src/app/components/admin-users/admin-users.html + 225 + + Liabilities Verbindlichkeiten @@ -5324,7 +5336,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 236 + 239 libs/ui/src/lib/i18n.ts @@ -5660,7 +5672,7 @@ Zeitraum libs/ui/src/lib/assistant/assistant.html - 171 + 170 @@ -5812,7 +5824,7 @@ Seit Wochenbeginn libs/ui/src/lib/assistant/assistant.component.ts - 387 + 368 @@ -5824,7 +5836,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 387 + 368 @@ -5832,7 +5844,7 @@ Seit Monatsbeginn libs/ui/src/lib/assistant/assistant.component.ts - 391 + 372 @@ -5844,7 +5856,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 391 + 372 @@ -5852,7 +5864,7 @@ Seit Jahresbeginn libs/ui/src/lib/assistant/assistant.component.ts - 395 + 376 @@ -5880,7 +5892,7 @@ Filter zurücksetzen libs/ui/src/lib/assistant/assistant.html - 266 + 205 @@ -5900,7 +5912,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 405 + 386 @@ -5912,7 +5924,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 430 + 411 @@ -5920,7 +5932,7 @@ Filter anwenden libs/ui/src/lib/assistant/assistant.html - 276 + 219 @@ -7095,7 +7107,7 @@ API-Schlüssel konnte nicht erstellt werden apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 141 + 144 @@ -7103,7 +7115,7 @@ Setze diesen API-Schlüssel in deiner selbst gehosteten Umgebung: apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 156 + 159 @@ -7111,7 +7123,7 @@ API-Schlüssel für den Ghostfolio Premium Datenanbieter apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 159 + 162 @@ -7119,7 +7131,7 @@ Möchtest du wirklich einen neuen API-Schlüssel erstellen? apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 164 + 167 @@ -7463,7 +7475,7 @@ Sicherheits-Token apps/client/src/app/components/admin-users/admin-users.component.ts - 196 + 228 apps/client/src/app/components/user-account-access/user-account-access.component.ts @@ -7475,7 +7487,7 @@ Möchtest du für diesen Benutzer wirklich ein neues Sicherheits-Token generieren? apps/client/src/app/components/admin-users/admin-users.component.ts - 201 + 233 @@ -7483,7 +7495,7 @@ Konto, Position oder Seite finden... libs/ui/src/lib/assistant/assistant.component.ts - 162 + 152 @@ -7491,7 +7503,7 @@ Sicherheits-Token generieren apps/client/src/app/components/admin-users/admin-users.html - 233 + 242 @@ -8531,6 +8543,14 @@ 128 + + Registration Date + Registrierungsdatum + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 22 + + Follow Ghostfolio on LinkedIn Folge Ghostfolio auf LinkedIn diff --git a/apps/client/src/locales/messages.es.xlf b/apps/client/src/locales/messages.es.xlf index 7d8cbd117..29746f597 100644 --- a/apps/client/src/locales/messages.es.xlf +++ b/apps/client/src/locales/messages.es.xlf @@ -63,7 +63,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 158 + 161 @@ -199,11 +199,11 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 259 + 262 libs/ui/src/lib/activities-table/activities-table.component.html - 295 + 298 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -243,7 +243,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 440 + 443 @@ -279,7 +279,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 467 + 470 libs/ui/src/lib/benchmark/benchmark.component.html @@ -435,7 +435,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 167 + 170 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html @@ -623,7 +623,7 @@ ¿Estás seguro de eliminar este usuario? apps/client/src/app/components/admin-users/admin-users.component.ts - 175 + 207 @@ -699,7 +699,7 @@ apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 68 + 71 libs/common/src/lib/routes/routes.ts @@ -783,7 +783,7 @@ apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 27 + 28 apps/client/src/app/pages/landing/landing-page.html @@ -819,7 +819,7 @@ Iniciar sesión con Internet Identity apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 37 + 38 @@ -827,7 +827,7 @@ Iniciar sesión con Google apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 47 + 48 @@ -835,7 +835,7 @@ Seguir conectado apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 56 + 59 @@ -1007,7 +1007,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 383 + 364 @@ -1019,7 +1019,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 395 + 376 @@ -1031,7 +1031,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 405 + 386 @@ -1043,7 +1043,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 430 + 411 @@ -1055,7 +1055,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 436 + 417 @@ -1063,7 +1063,7 @@ De acuerdo apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 154 + 157 apps/client/src/app/core/http-response.interceptor.ts @@ -1131,7 +1131,7 @@ Por favor, ingresa tu código de cupón: apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 215 + 218 @@ -1139,7 +1139,7 @@ No se puede canjear este código de cupón apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 179 + 182 @@ -1147,7 +1147,7 @@ El codigo de cupón ha sido canjeado apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 192 + 195 @@ -1155,7 +1155,7 @@ Refrescar apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 193 + 196 @@ -1265,6 +1265,10 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html 252 + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 12 + Granted Access @@ -1367,7 +1371,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 278 + 281 @@ -1899,7 +1903,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 188 + 191 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -1915,7 +1919,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 212 + 215 @@ -2187,7 +2191,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 377 + 380 @@ -2199,7 +2203,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 402 + 405 @@ -2211,7 +2215,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 415 + 418 @@ -2219,7 +2223,7 @@ Clonar libs/ui/src/lib/activities-table/activities-table.component.html - 446 + 449 @@ -2227,7 +2231,7 @@ Exportar borrador como ICS libs/ui/src/lib/activities-table/activities-table.component.html - 456 + 459 @@ -2671,14 +2675,14 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 310 + 313 - libs/ui/src/lib/assistant/assistant.html - 185 + libs/ui/src/lib/i18n.ts + 4 - libs/ui/src/lib/i18n.ts + libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html 4 @@ -2705,14 +2709,14 @@ apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html 290 - - libs/ui/src/lib/assistant/assistant.html - 246 - libs/ui/src/lib/i18n.ts 6 + + libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html + 64 + Symbol @@ -2745,14 +2749,14 @@ Tag Etiqueta - - libs/ui/src/lib/assistant/assistant.html - 235 - libs/ui/src/lib/i18n.ts 31 + + libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html + 53 + Cash @@ -3162,8 +3166,8 @@ 32 - libs/ui/src/lib/assistant/assistant.html - 207 + libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html + 26 @@ -3195,7 +3199,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 389 + 392 @@ -3703,7 +3707,7 @@ Suplantar usuario apps/client/src/app/components/admin-users/admin-users.html - 223 + 232 @@ -3711,7 +3715,7 @@ Eliminar usuario apps/client/src/app/components/admin-users/admin-users.html - 244 + 253 @@ -3958,6 +3962,14 @@ 32 + + View Details + View Details + + apps/client/src/app/components/admin-users/admin-users.html + 225 + + Liabilities Pasivos @@ -5301,7 +5313,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 236 + 239 libs/ui/src/lib/i18n.ts @@ -5637,7 +5649,7 @@ Rango de fechas libs/ui/src/lib/assistant/assistant.html - 171 + 170 @@ -5789,7 +5801,7 @@ Semana hasta la fecha libs/ui/src/lib/assistant/assistant.component.ts - 387 + 368 @@ -5801,7 +5813,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 387 + 368 @@ -5809,7 +5821,7 @@ Mes hasta la fecha libs/ui/src/lib/assistant/assistant.component.ts - 391 + 372 @@ -5821,7 +5833,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 391 + 372 @@ -5829,7 +5841,7 @@ El año hasta la fecha libs/ui/src/lib/assistant/assistant.component.ts - 395 + 376 @@ -5857,7 +5869,7 @@ Reiniciar filtros libs/ui/src/lib/assistant/assistant.html - 266 + 205 @@ -5877,7 +5889,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 405 + 386 @@ -5889,7 +5901,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 430 + 411 @@ -5897,7 +5909,7 @@ Aplicar filtros libs/ui/src/lib/assistant/assistant.html - 276 + 219 @@ -7072,7 +7084,7 @@ No se pudo generar una clave API apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 141 + 144 @@ -7080,7 +7092,7 @@ Configure esta clave API en su entorno autohospedado: apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 156 + 159 @@ -7088,7 +7100,7 @@ Clave API del proveedor de datos premium de Ghostfolio apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 159 + 162 @@ -7096,7 +7108,7 @@ ¿Realmente desea generar una nueva clave API? apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 164 + 167 @@ -7440,7 +7452,7 @@ Token de seguridad apps/client/src/app/components/admin-users/admin-users.component.ts - 196 + 228 apps/client/src/app/components/user-account-access/user-account-access.component.ts @@ -7452,7 +7464,7 @@ ¿Realmente deseas generar un nuevo token de seguridad para este usuario? apps/client/src/app/components/admin-users/admin-users.component.ts - 201 + 233 @@ -7460,7 +7472,7 @@ Find account, holding or page... libs/ui/src/lib/assistant/assistant.component.ts - 162 + 152 @@ -7468,7 +7480,7 @@ Generar token de seguridad apps/client/src/app/components/admin-users/admin-users.html - 233 + 242 @@ -8532,6 +8544,14 @@ 128 + + Registration Date + Registration Date + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 22 + + Follow Ghostfolio on LinkedIn Siga a Ghostfolio en LinkedIn diff --git a/apps/client/src/locales/messages.fr.xlf b/apps/client/src/locales/messages.fr.xlf index 62f4847eb..9b40a3031 100644 --- a/apps/client/src/locales/messages.fr.xlf +++ b/apps/client/src/locales/messages.fr.xlf @@ -54,7 +54,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 158 + 161 @@ -202,7 +202,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 278 + 281 @@ -254,11 +254,11 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 259 + 262 libs/ui/src/lib/activities-table/activities-table.component.html - 295 + 298 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -298,7 +298,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 440 + 443 @@ -334,7 +334,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 467 + 470 libs/ui/src/lib/benchmark/benchmark.component.html @@ -490,7 +490,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 167 + 170 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html @@ -830,7 +830,7 @@ Voulez-vous vraiment supprimer cet·te utilisateur·rice ? apps/client/src/app/components/admin-users/admin-users.component.ts - 175 + 207 @@ -946,7 +946,7 @@ apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 68 + 71 libs/common/src/lib/routes/routes.ts @@ -1078,7 +1078,7 @@ apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 27 + 28 apps/client/src/app/pages/landing/landing-page.html @@ -1114,7 +1114,7 @@ Se connecter avec Internet Identity apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 37 + 38 @@ -1122,7 +1122,7 @@ Se connecter avec Google apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 47 + 48 @@ -1130,7 +1130,7 @@ Rester connecté apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 56 + 59 @@ -1242,7 +1242,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 188 + 191 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -1266,7 +1266,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 383 + 364 @@ -1278,7 +1278,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 395 + 376 @@ -1290,7 +1290,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 405 + 386 @@ -1302,7 +1302,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 430 + 411 @@ -1314,7 +1314,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 436 + 417 @@ -1358,7 +1358,7 @@ D’accord apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 154 + 157 apps/client/src/app/core/http-response.interceptor.ts @@ -1438,7 +1438,7 @@ Veuillez entrer votre code promotionnel. apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 215 + 218 @@ -1446,7 +1446,7 @@ Le code promotionnel n’a pas pu être appliqué apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 179 + 182 @@ -1454,7 +1454,7 @@ Le code promotionnel a été appliqué apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 192 + 195 @@ -1462,7 +1462,7 @@ Rafraîchir apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 193 + 196 @@ -1612,6 +1612,10 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html 252 + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 12 + Granted Access @@ -2074,7 +2078,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 212 + 215 @@ -2662,7 +2666,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 377 + 380 @@ -2674,7 +2678,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 402 + 405 @@ -2686,7 +2690,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 415 + 418 @@ -2694,7 +2698,7 @@ Dupliquer libs/ui/src/lib/activities-table/activities-table.component.html - 446 + 449 @@ -2702,7 +2706,7 @@ Exporter Brouillon sous ICS libs/ui/src/lib/activities-table/activities-table.component.html - 456 + 459 @@ -2818,14 +2822,14 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 310 + 313 - libs/ui/src/lib/assistant/assistant.html - 185 + libs/ui/src/lib/i18n.ts + 4 - libs/ui/src/lib/i18n.ts + libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html 4 @@ -2852,14 +2856,14 @@ apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html 290 - - libs/ui/src/lib/assistant/assistant.html - 246 - libs/ui/src/lib/i18n.ts 6 + + libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html + 64 + Asset Sub Class @@ -2948,14 +2952,14 @@ Tag Étiquette - - libs/ui/src/lib/assistant/assistant.html - 235 - libs/ui/src/lib/i18n.ts 31 + + libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html + 53 + Cash @@ -3161,8 +3165,8 @@ 32 - libs/ui/src/lib/assistant/assistant.html - 207 + libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html + 26 @@ -3194,7 +3198,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 389 + 392 @@ -3702,7 +3706,7 @@ Voir en tant que ... apps/client/src/app/components/admin-users/admin-users.html - 223 + 232 @@ -3710,7 +3714,7 @@ Supprimer l’Utilisateur apps/client/src/app/components/admin-users/admin-users.html - 244 + 253 @@ -3957,6 +3961,14 @@ 32 + + View Details + View Details + + apps/client/src/app/components/admin-users/admin-users.html + 225 + + Liabilities Dettes @@ -5300,7 +5312,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 236 + 239 libs/ui/src/lib/i18n.ts @@ -5636,7 +5648,7 @@ Intervalle de Date libs/ui/src/lib/assistant/assistant.html - 171 + 170 @@ -5788,7 +5800,7 @@ Week to date libs/ui/src/lib/assistant/assistant.component.ts - 387 + 368 @@ -5800,7 +5812,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 387 + 368 @@ -5808,7 +5820,7 @@ Month to date libs/ui/src/lib/assistant/assistant.component.ts - 391 + 372 @@ -5820,7 +5832,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 391 + 372 @@ -5828,7 +5840,7 @@ Year to date libs/ui/src/lib/assistant/assistant.component.ts - 395 + 376 @@ -5856,7 +5868,7 @@ Réinitialiser les Filtres libs/ui/src/lib/assistant/assistant.html - 266 + 205 @@ -5876,7 +5888,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 405 + 386 @@ -5888,7 +5900,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 430 + 411 @@ -5896,7 +5908,7 @@ Appliquer les Filtres libs/ui/src/lib/assistant/assistant.html - 276 + 219 @@ -7071,7 +7083,7 @@ Impossible de générer une clé API apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 141 + 144 @@ -7079,7 +7091,7 @@ Définissez cette clé API dans votre environnement auto-hébergé : apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 156 + 159 @@ -7087,7 +7099,7 @@ Clé API du fournisseur de données Ghostfolio Premium apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 159 + 162 @@ -7095,7 +7107,7 @@ Voulez-vous vraiment générer une nouvelle clé API ? apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 164 + 167 @@ -7439,7 +7451,7 @@ Jeton de sécurité apps/client/src/app/components/admin-users/admin-users.component.ts - 196 + 228 apps/client/src/app/components/user-account-access/user-account-access.component.ts @@ -7451,7 +7463,7 @@ Voulez-vous vraiment générer un nouveau jeton de sécurité pour cet utilisateur ? apps/client/src/app/components/admin-users/admin-users.component.ts - 201 + 233 @@ -7459,7 +7471,7 @@ Find account, holding or page... libs/ui/src/lib/assistant/assistant.component.ts - 162 + 152 @@ -7467,7 +7479,7 @@ Générer un jeton de sécurité apps/client/src/app/components/admin-users/admin-users.html - 233 + 242 @@ -8531,6 +8543,14 @@ 128 + + Registration Date + Registration Date + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 22 + + Follow Ghostfolio on LinkedIn Follow Ghostfolio on LinkedIn diff --git a/apps/client/src/locales/messages.it.xlf b/apps/client/src/locales/messages.it.xlf index d5c08f0de..f720742c8 100644 --- a/apps/client/src/locales/messages.it.xlf +++ b/apps/client/src/locales/messages.it.xlf @@ -63,7 +63,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 158 + 161 @@ -199,11 +199,11 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 259 + 262 libs/ui/src/lib/activities-table/activities-table.component.html - 295 + 298 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -243,7 +243,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 440 + 443 @@ -279,7 +279,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 467 + 470 libs/ui/src/lib/benchmark/benchmark.component.html @@ -435,7 +435,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 167 + 170 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html @@ -623,7 +623,7 @@ Vuoi davvero eliminare questo utente? apps/client/src/app/components/admin-users/admin-users.component.ts - 175 + 207 @@ -699,7 +699,7 @@ apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 68 + 71 libs/common/src/lib/routes/routes.ts @@ -783,7 +783,7 @@ apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 27 + 28 apps/client/src/app/pages/landing/landing-page.html @@ -819,7 +819,7 @@ Accedi con Internet Identity apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 37 + 38 @@ -827,7 +827,7 @@ Accedi con Google apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 47 + 48 @@ -835,7 +835,7 @@ Rimani connesso apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 56 + 59 @@ -1007,7 +1007,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 383 + 364 @@ -1019,7 +1019,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 395 + 376 @@ -1031,7 +1031,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 405 + 386 @@ -1043,7 +1043,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 430 + 411 @@ -1055,7 +1055,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 436 + 417 @@ -1063,7 +1063,7 @@ Bene apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 154 + 157 apps/client/src/app/core/http-response.interceptor.ts @@ -1131,7 +1131,7 @@ Inserisci il tuo codice del buono: apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 215 + 218 @@ -1139,7 +1139,7 @@ Impossibile riscattare il codice del buono apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 179 + 182 @@ -1147,7 +1147,7 @@ Il codice del buono è stato riscattato apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 192 + 195 @@ -1155,7 +1155,7 @@ Ricarica apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 193 + 196 @@ -1265,6 +1265,10 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html 252 + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 12 + Granted Access @@ -1367,7 +1371,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 278 + 281 @@ -1899,7 +1903,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 188 + 191 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -1915,7 +1919,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 212 + 215 @@ -2187,7 +2191,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 377 + 380 @@ -2199,7 +2203,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 402 + 405 @@ -2211,7 +2215,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 415 + 418 @@ -2219,7 +2223,7 @@ Clona libs/ui/src/lib/activities-table/activities-table.component.html - 446 + 449 @@ -2227,7 +2231,7 @@ Esporta la bozza come ICS libs/ui/src/lib/activities-table/activities-table.component.html - 456 + 459 @@ -2671,14 +2675,14 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 310 + 313 - libs/ui/src/lib/assistant/assistant.html - 185 + libs/ui/src/lib/i18n.ts + 4 - libs/ui/src/lib/i18n.ts + libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html 4 @@ -2705,14 +2709,14 @@ apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html 290 - - libs/ui/src/lib/assistant/assistant.html - 246 - libs/ui/src/lib/i18n.ts 6 + + libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html + 64 + Symbol @@ -2745,14 +2749,14 @@ Tag Etichetta - - libs/ui/src/lib/assistant/assistant.html - 235 - libs/ui/src/lib/i18n.ts 31 + + libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html + 53 + Cash @@ -3162,8 +3166,8 @@ 32 - libs/ui/src/lib/assistant/assistant.html - 207 + libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html + 26 @@ -3195,7 +3199,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 389 + 392 @@ -3703,7 +3707,7 @@ Imita l’utente apps/client/src/app/components/admin-users/admin-users.html - 223 + 232 @@ -3711,7 +3715,7 @@ Elimina l’utente apps/client/src/app/components/admin-users/admin-users.html - 244 + 253 @@ -3958,6 +3962,14 @@ 32 + + View Details + View Details + + apps/client/src/app/components/admin-users/admin-users.html + 225 + + Liabilities Passività @@ -5301,7 +5313,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 236 + 239 libs/ui/src/lib/i18n.ts @@ -5637,7 +5649,7 @@ Intervallo di date libs/ui/src/lib/assistant/assistant.html - 171 + 170 @@ -5789,7 +5801,7 @@ Da inizio settimana libs/ui/src/lib/assistant/assistant.component.ts - 387 + 368 @@ -5801,7 +5813,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 387 + 368 @@ -5809,7 +5821,7 @@ Da inizio mese libs/ui/src/lib/assistant/assistant.component.ts - 391 + 372 @@ -5821,7 +5833,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 391 + 372 @@ -5829,7 +5841,7 @@ Da inizio anno libs/ui/src/lib/assistant/assistant.component.ts - 395 + 376 @@ -5857,7 +5869,7 @@ Reset Filtri libs/ui/src/lib/assistant/assistant.html - 266 + 205 @@ -5877,7 +5889,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 405 + 386 @@ -5889,7 +5901,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 430 + 411 @@ -5897,7 +5909,7 @@ Applica i Filtri libs/ui/src/lib/assistant/assistant.html - 276 + 219 @@ -7072,7 +7084,7 @@ Non è stato possibile generare un API key apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 141 + 144 @@ -7080,7 +7092,7 @@ Imposta questa API key nel tuo ambiente self-hosted: apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 156 + 159 @@ -7088,7 +7100,7 @@ API Key for Ghostfolio Premium Data Provider apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 159 + 162 @@ -7096,7 +7108,7 @@ Vuoi davvero generare una nuova API key? apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 164 + 167 @@ -7440,7 +7452,7 @@ Token di sicurezza apps/client/src/app/components/admin-users/admin-users.component.ts - 196 + 228 apps/client/src/app/components/user-account-access/user-account-access.component.ts @@ -7452,7 +7464,7 @@ Vuoi davvero generare un nuovo token di sicurezza per questo utente? apps/client/src/app/components/admin-users/admin-users.component.ts - 201 + 233 @@ -7460,7 +7472,7 @@ Find account, holding or page... libs/ui/src/lib/assistant/assistant.component.ts - 162 + 152 @@ -7468,7 +7480,7 @@ Genera Token di Sicurezza apps/client/src/app/components/admin-users/admin-users.html - 233 + 242 @@ -8532,6 +8544,14 @@ 128 + + Registration Date + Registration Date + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 22 + + Follow Ghostfolio on LinkedIn Follow Ghostfolio on LinkedIn diff --git a/apps/client/src/locales/messages.nl.xlf b/apps/client/src/locales/messages.nl.xlf index 4dd7fb278..869b932aa 100644 --- a/apps/client/src/locales/messages.nl.xlf +++ b/apps/client/src/locales/messages.nl.xlf @@ -62,7 +62,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 158 + 161 @@ -198,11 +198,11 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 259 + 262 libs/ui/src/lib/activities-table/activities-table.component.html - 295 + 298 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -242,7 +242,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 440 + 443 @@ -278,7 +278,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 467 + 470 libs/ui/src/lib/benchmark/benchmark.component.html @@ -434,7 +434,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 167 + 170 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html @@ -622,7 +622,7 @@ Wilt je deze gebruiker echt verwijderen? apps/client/src/app/components/admin-users/admin-users.component.ts - 175 + 207 @@ -698,7 +698,7 @@ apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 68 + 71 libs/common/src/lib/routes/routes.ts @@ -782,7 +782,7 @@ apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 27 + 28 apps/client/src/app/pages/landing/landing-page.html @@ -818,7 +818,7 @@ Aanmelden met Internet Identity apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 37 + 38 @@ -826,7 +826,7 @@ Aanmelden met Google apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 47 + 48 @@ -834,7 +834,7 @@ Aangemeld blijven apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 56 + 59 @@ -1006,7 +1006,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 383 + 364 @@ -1018,7 +1018,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 395 + 376 @@ -1030,7 +1030,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 405 + 386 @@ -1042,7 +1042,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 430 + 411 @@ -1054,7 +1054,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 436 + 417 @@ -1062,7 +1062,7 @@ Oké apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 154 + 157 apps/client/src/app/core/http-response.interceptor.ts @@ -1130,7 +1130,7 @@ Voer je couponcode in: apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 215 + 218 @@ -1138,7 +1138,7 @@ Kon je kortingscode niet inwisselen apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 179 + 182 @@ -1146,7 +1146,7 @@ Je couponcode is ingewisseld apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 192 + 195 @@ -1154,7 +1154,7 @@ Herladen apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 193 + 196 @@ -1264,6 +1264,10 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html 252 + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 12 + Granted Access @@ -1366,7 +1370,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 278 + 281 @@ -1898,7 +1902,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 188 + 191 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -1914,7 +1918,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 212 + 215 @@ -2186,7 +2190,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 377 + 380 @@ -2198,7 +2202,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 402 + 405 @@ -2210,7 +2214,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 415 + 418 @@ -2218,7 +2222,7 @@ Kloon libs/ui/src/lib/activities-table/activities-table.component.html - 446 + 449 @@ -2226,7 +2230,7 @@ Concept exporteren als ICS libs/ui/src/lib/activities-table/activities-table.component.html - 456 + 459 @@ -2670,14 +2674,14 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 310 + 313 - libs/ui/src/lib/assistant/assistant.html - 185 + libs/ui/src/lib/i18n.ts + 4 - libs/ui/src/lib/i18n.ts + libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html 4 @@ -2704,14 +2708,14 @@ apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html 290 - - libs/ui/src/lib/assistant/assistant.html - 246 - libs/ui/src/lib/i18n.ts 6 + + libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html + 64 + Symbol @@ -2744,14 +2748,14 @@ Tag Label - - libs/ui/src/lib/assistant/assistant.html - 235 - libs/ui/src/lib/i18n.ts 31 + + libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html + 53 + Cash @@ -3161,8 +3165,8 @@ 32 - libs/ui/src/lib/assistant/assistant.html - 207 + libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html + 26 @@ -3194,7 +3198,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 389 + 392 @@ -3702,7 +3706,7 @@ Gebruiker immiteren apps/client/src/app/components/admin-users/admin-users.html - 223 + 232 @@ -3710,7 +3714,7 @@ Gebruiker verwijderen apps/client/src/app/components/admin-users/admin-users.html - 244 + 253 @@ -3957,6 +3961,14 @@ 32 + + View Details + View Details + + apps/client/src/app/components/admin-users/admin-users.html + 225 + + Liabilities Verplichtingen @@ -5300,7 +5312,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 236 + 239 libs/ui/src/lib/i18n.ts @@ -5636,7 +5648,7 @@ Datumbereik libs/ui/src/lib/assistant/assistant.html - 171 + 170 @@ -5788,7 +5800,7 @@ Week tot nu toe libs/ui/src/lib/assistant/assistant.component.ts - 387 + 368 @@ -5800,7 +5812,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 387 + 368 @@ -5808,7 +5820,7 @@ Maand tot nu toe libs/ui/src/lib/assistant/assistant.component.ts - 391 + 372 @@ -5820,7 +5832,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 391 + 372 @@ -5828,7 +5840,7 @@ Jaar tot nu toe libs/ui/src/lib/assistant/assistant.component.ts - 395 + 376 @@ -5856,7 +5868,7 @@ Filters Herstellen libs/ui/src/lib/assistant/assistant.html - 266 + 205 @@ -5876,7 +5888,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 405 + 386 @@ -5888,7 +5900,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 430 + 411 @@ -5896,7 +5908,7 @@ Filters Toepassen libs/ui/src/lib/assistant/assistant.html - 276 + 219 @@ -7071,7 +7083,7 @@ Er kon geen API-sleutel worden gegenereerd apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 141 + 144 @@ -7079,7 +7091,7 @@ Stel deze API-sleutel in uw zelf-gehoste omgeving in: apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 156 + 159 @@ -7087,7 +7099,7 @@ Ghostfolio Premium Gegevensleverancier API-sleutel apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 159 + 162 @@ -7095,7 +7107,7 @@ Wilt u echt een nieuwe API-sleutel genereren? apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 164 + 167 @@ -7439,7 +7451,7 @@ Beveiligingstoken apps/client/src/app/components/admin-users/admin-users.component.ts - 196 + 228 apps/client/src/app/components/user-account-access/user-account-access.component.ts @@ -7451,7 +7463,7 @@ Wilt u echt een nieuw beveiligingstoken voor deze gebruiker aanmaken? apps/client/src/app/components/admin-users/admin-users.component.ts - 201 + 233 @@ -7459,7 +7471,7 @@ Find account, holding or page... libs/ui/src/lib/assistant/assistant.component.ts - 162 + 152 @@ -7467,7 +7479,7 @@ Beveiligingstoken Aanmaken apps/client/src/app/components/admin-users/admin-users.html - 233 + 242 @@ -8531,6 +8543,14 @@ 128 + + Registration Date + Registration Date + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 22 + + Follow Ghostfolio on LinkedIn Volg Ghostfolio op LinkedIn diff --git a/apps/client/src/locales/messages.pl.xlf b/apps/client/src/locales/messages.pl.xlf index 1f02ab72d..87c485b25 100644 --- a/apps/client/src/locales/messages.pl.xlf +++ b/apps/client/src/locales/messages.pl.xlf @@ -263,7 +263,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 158 + 161 @@ -439,7 +439,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 278 + 281 @@ -475,11 +475,11 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 259 + 262 libs/ui/src/lib/activities-table/activities-table.component.html - 295 + 298 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -519,7 +519,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 440 + 443 @@ -555,7 +555,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 467 + 470 libs/ui/src/lib/benchmark/benchmark.component.html @@ -711,7 +711,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 167 + 170 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html @@ -1287,7 +1287,7 @@ Czy na pewno chcesz usunąć tego użytkownika? apps/client/src/app/components/admin-users/admin-users.component.ts - 175 + 207 @@ -1323,7 +1323,7 @@ Wciel się w Użytkownika apps/client/src/app/components/admin-users/admin-users.html - 223 + 232 @@ -1331,7 +1331,7 @@ Usuń Użytkownika apps/client/src/app/components/admin-users/admin-users.html - 244 + 253 @@ -1435,7 +1435,7 @@ apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 68 + 71 libs/common/src/lib/routes/routes.ts @@ -1667,7 +1667,7 @@ apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 27 + 28 apps/client/src/app/pages/landing/landing-page.html @@ -1703,7 +1703,7 @@ Zaloguj się przy użyciu Tożsamości Internetowej (Internet Identity) apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 37 + 38 @@ -1711,7 +1711,7 @@ Zaloguj się przez Google apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 47 + 48 @@ -1719,7 +1719,7 @@ Pozostań zalogowany apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 56 + 59 @@ -1863,7 +1863,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 188 + 191 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -2055,7 +2055,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 383 + 364 @@ -2067,7 +2067,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 395 + 376 @@ -2079,7 +2079,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 405 + 386 @@ -2091,7 +2091,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 430 + 411 @@ -2103,7 +2103,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 436 + 417 @@ -2135,7 +2135,7 @@ Wpisz kod kuponu: apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 215 + 218 @@ -2143,7 +2143,7 @@ Nie udało się zrealizować kodu kuponu apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 179 + 182 @@ -2151,7 +2151,7 @@ Kupon został zrealizowany apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 192 + 195 @@ -2159,7 +2159,7 @@ Odśwież apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 193 + 196 @@ -2353,6 +2353,10 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html 252 + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 12 + Export Data @@ -2403,7 +2407,7 @@ Okej apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 154 + 157 apps/client/src/app/core/http-response.interceptor.ts @@ -3639,7 +3643,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 212 + 215 @@ -3655,7 +3659,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 377 + 380 @@ -3671,7 +3675,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 389 + 392 @@ -3730,8 +3734,8 @@ 32 - libs/ui/src/lib/assistant/assistant.html - 207 + libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html + 26 @@ -4800,7 +4804,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 402 + 405 @@ -4812,7 +4816,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 415 + 418 @@ -4828,7 +4832,7 @@ Sklonuj libs/ui/src/lib/activities-table/activities-table.component.html - 446 + 449 @@ -4836,7 +4840,7 @@ Eksportuj Wersję Roboczą jako ICS libs/ui/src/lib/activities-table/activities-table.component.html - 456 + 459 @@ -5000,14 +5004,14 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 310 + 313 - libs/ui/src/lib/assistant/assistant.html - 185 + libs/ui/src/lib/i18n.ts + 4 - libs/ui/src/lib/i18n.ts + libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html 4 @@ -5042,14 +5046,14 @@ apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html 290 - - libs/ui/src/lib/assistant/assistant.html - 246 - libs/ui/src/lib/i18n.ts 6 + + libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html + 64 + Asset Sub Class @@ -5250,14 +5254,14 @@ Tag Tag - - libs/ui/src/lib/assistant/assistant.html - 235 - libs/ui/src/lib/i18n.ts 31 + + libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html + 53 + Year @@ -5267,6 +5271,14 @@ 32 + + View Details + View Details + + apps/client/src/app/components/admin-users/admin-users.html + 225 + + Years Lata @@ -5296,7 +5308,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 236 + 239 libs/ui/src/lib/i18n.ts @@ -5636,7 +5648,7 @@ Zakres Dat libs/ui/src/lib/assistant/assistant.html - 171 + 170 @@ -5788,7 +5800,7 @@ Dotychczasowy tydzień libs/ui/src/lib/assistant/assistant.component.ts - 387 + 368 @@ -5800,7 +5812,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 387 + 368 @@ -5808,7 +5820,7 @@ Od początku miesiąca libs/ui/src/lib/assistant/assistant.component.ts - 391 + 372 @@ -5820,7 +5832,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 391 + 372 @@ -5828,7 +5840,7 @@ Od początku roku libs/ui/src/lib/assistant/assistant.component.ts - 395 + 376 @@ -5856,7 +5868,7 @@ Resetuj Filtry libs/ui/src/lib/assistant/assistant.html - 266 + 205 @@ -5876,7 +5888,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 405 + 386 @@ -5888,7 +5900,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 430 + 411 @@ -5896,7 +5908,7 @@ Zastosuj Filtry libs/ui/src/lib/assistant/assistant.html - 276 + 219 @@ -7071,7 +7083,7 @@ Nie udało się wygenerować klucza API apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 141 + 144 @@ -7079,7 +7091,7 @@ Ustaw ten klucz API w samodzielnie hostowanym środowisku: apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 156 + 159 @@ -7087,7 +7099,7 @@ Klucz API dostawcy danych Premium Ghostfolio apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 159 + 162 @@ -7095,7 +7107,7 @@ Czy na pewno chcesz wygenerować nowy klucz API? apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 164 + 167 @@ -7439,7 +7451,7 @@ Token bezpieczeństwa apps/client/src/app/components/admin-users/admin-users.component.ts - 196 + 228 apps/client/src/app/components/user-account-access/user-account-access.component.ts @@ -7451,7 +7463,7 @@ Czy napewno chcesz wygenerować nowy token bezpieczeństwa dla tego użytkownika? apps/client/src/app/components/admin-users/admin-users.component.ts - 201 + 233 @@ -7459,7 +7471,7 @@ Find account, holding or page... libs/ui/src/lib/assistant/assistant.component.ts - 162 + 152 @@ -7467,7 +7479,7 @@ Generowanie Tokena Zabezpieczającego apps/client/src/app/components/admin-users/admin-users.html - 233 + 242 @@ -8531,6 +8543,14 @@ 128 + + Registration Date + Registration Date + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 22 + + Follow Ghostfolio on LinkedIn Follow Ghostfolio on LinkedIn diff --git a/apps/client/src/locales/messages.pt.xlf b/apps/client/src/locales/messages.pt.xlf index 969facd9b..8d93b9ecb 100644 --- a/apps/client/src/locales/messages.pt.xlf +++ b/apps/client/src/locales/messages.pt.xlf @@ -54,7 +54,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 158 + 161 @@ -202,7 +202,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 278 + 281 @@ -254,11 +254,11 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 259 + 262 libs/ui/src/lib/activities-table/activities-table.component.html - 295 + 298 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -298,7 +298,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 440 + 443 @@ -334,7 +334,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 467 + 470 libs/ui/src/lib/benchmark/benchmark.component.html @@ -490,7 +490,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 167 + 170 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html @@ -702,7 +702,7 @@ Deseja realmente excluir este utilizador? apps/client/src/app/components/admin-users/admin-users.component.ts - 175 + 207 @@ -818,7 +818,7 @@ apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 68 + 71 libs/common/src/lib/routes/routes.ts @@ -958,7 +958,7 @@ apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 27 + 28 apps/client/src/app/pages/landing/landing-page.html @@ -994,7 +994,7 @@ Iniciar sessão com Internet Identity apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 37 + 38 @@ -1002,7 +1002,7 @@ Iniciar sessão com Google apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 47 + 48 @@ -1010,7 +1010,7 @@ Manter sessão iniciada apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 56 + 59 @@ -1122,7 +1122,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 188 + 191 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -1254,7 +1254,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 383 + 364 @@ -1266,7 +1266,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 395 + 376 @@ -1278,7 +1278,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 405 + 386 @@ -1290,7 +1290,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 430 + 411 @@ -1302,7 +1302,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 436 + 417 @@ -1346,7 +1346,7 @@ OK apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 154 + 157 apps/client/src/app/core/http-response.interceptor.ts @@ -1426,7 +1426,7 @@ Por favor, insira o seu código de cupão: apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 215 + 218 @@ -1434,7 +1434,7 @@ Não foi possível resgatar o código de cupão apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 179 + 182 @@ -1442,7 +1442,7 @@ Código de cupão foi resgatado apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 192 + 195 @@ -1450,7 +1450,7 @@ Atualizar apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 193 + 196 @@ -1608,6 +1608,10 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html 252 + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 12 + Granted Access @@ -2050,7 +2054,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 212 + 215 @@ -2562,7 +2566,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 377 + 380 @@ -2574,7 +2578,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 402 + 405 @@ -2586,7 +2590,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 415 + 418 @@ -2594,7 +2598,7 @@ Clonar libs/ui/src/lib/activities-table/activities-table.component.html - 446 + 449 @@ -2602,7 +2606,7 @@ Exportar Rascunho como ICS libs/ui/src/lib/activities-table/activities-table.component.html - 456 + 459 @@ -2690,14 +2694,14 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 310 + 313 - libs/ui/src/lib/assistant/assistant.html - 185 + libs/ui/src/lib/i18n.ts + 4 - libs/ui/src/lib/i18n.ts + libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html 4 @@ -2724,14 +2728,14 @@ apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html 290 - - libs/ui/src/lib/assistant/assistant.html - 246 - libs/ui/src/lib/i18n.ts 6 + + libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html + 64 + Emergency Fund @@ -2792,14 +2796,14 @@ Tag Marcador - - libs/ui/src/lib/assistant/assistant.html - 235 - libs/ui/src/lib/i18n.ts 31 + + libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html + 53 + Cash @@ -3161,8 +3165,8 @@ 32 - libs/ui/src/lib/assistant/assistant.html - 207 + libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html + 26 @@ -3194,7 +3198,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 389 + 392 @@ -3702,7 +3706,7 @@ Personificar Utilizador apps/client/src/app/components/admin-users/admin-users.html - 223 + 232 @@ -3710,7 +3714,7 @@ Apagar Utilizador apps/client/src/app/components/admin-users/admin-users.html - 244 + 253 @@ -3957,6 +3961,14 @@ 32 + + View Details + View Details + + apps/client/src/app/components/admin-users/admin-users.html + 225 + + Liabilities Responsabilidades @@ -5300,7 +5312,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 236 + 239 libs/ui/src/lib/i18n.ts @@ -5636,7 +5648,7 @@ Período libs/ui/src/lib/assistant/assistant.html - 171 + 170 @@ -5788,7 +5800,7 @@ Semana até agora libs/ui/src/lib/assistant/assistant.component.ts - 387 + 368 @@ -5800,7 +5812,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 387 + 368 @@ -5808,7 +5820,7 @@ Do mês até a data libs/ui/src/lib/assistant/assistant.component.ts - 391 + 372 @@ -5820,7 +5832,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 391 + 372 @@ -5828,7 +5840,7 @@ No acumulado do ano libs/ui/src/lib/assistant/assistant.component.ts - 395 + 376 @@ -5856,7 +5868,7 @@ Redefinir filtros libs/ui/src/lib/assistant/assistant.html - 266 + 205 @@ -5876,7 +5888,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 405 + 386 @@ -5888,7 +5900,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 430 + 411 @@ -5896,7 +5908,7 @@ Aplicar filtros libs/ui/src/lib/assistant/assistant.html - 276 + 219 @@ -7071,7 +7083,7 @@ Não foi possível gerar uma chave de API apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 141 + 144 @@ -7079,7 +7091,7 @@ Defina esta chave de API no seu ambiente auto-hospedado: apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 156 + 159 @@ -7087,7 +7099,7 @@ Chave de API do Provedor de Dados do Ghostfolio Premium apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 159 + 162 @@ -7095,7 +7107,7 @@ Você realmente deseja gerar uma nova chave de API? apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 164 + 167 @@ -7439,7 +7451,7 @@ Security token apps/client/src/app/components/admin-users/admin-users.component.ts - 196 + 228 apps/client/src/app/components/user-account-access/user-account-access.component.ts @@ -7451,7 +7463,7 @@ Do you really want to generate a new security token for this user? apps/client/src/app/components/admin-users/admin-users.component.ts - 201 + 233 @@ -7459,7 +7471,7 @@ Find account, holding or page... libs/ui/src/lib/assistant/assistant.component.ts - 162 + 152 @@ -7467,7 +7479,7 @@ Generate Security Token apps/client/src/app/components/admin-users/admin-users.html - 233 + 242 @@ -8531,6 +8543,14 @@ 128 + + Registration Date + Registration Date + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 22 + + Follow Ghostfolio on LinkedIn Siga o Ghostfolio no LinkedIn diff --git a/apps/client/src/locales/messages.tr.xlf b/apps/client/src/locales/messages.tr.xlf index 5ed44fbd1..fd87792f9 100644 --- a/apps/client/src/locales/messages.tr.xlf +++ b/apps/client/src/locales/messages.tr.xlf @@ -235,7 +235,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 158 + 161 @@ -399,7 +399,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 278 + 281 @@ -435,11 +435,11 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 259 + 262 libs/ui/src/lib/activities-table/activities-table.component.html - 295 + 298 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -479,7 +479,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 440 + 443 @@ -515,7 +515,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 467 + 470 libs/ui/src/lib/benchmark/benchmark.component.html @@ -671,7 +671,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 167 + 170 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html @@ -1151,7 +1151,7 @@ Bu kullanıcıyı silmeyi gerçekten istiyor musunuz? apps/client/src/app/components/admin-users/admin-users.component.ts - 175 + 207 @@ -1187,7 +1187,7 @@ Kullanıcıyı Taklit Et apps/client/src/app/components/admin-users/admin-users.html - 223 + 232 @@ -1195,7 +1195,7 @@ Kullanıcıyı Sil apps/client/src/app/components/admin-users/admin-users.html - 244 + 253 @@ -1291,7 +1291,7 @@ apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 68 + 71 libs/common/src/lib/routes/routes.ts @@ -1523,7 +1523,7 @@ apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 27 + 28 apps/client/src/app/pages/landing/landing-page.html @@ -1559,7 +1559,7 @@ İnternet Kimliği (Internet Identity) ile Oturum Aç apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 37 + 38 @@ -1567,7 +1567,7 @@ Google ile Oturum Aç apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 47 + 48 @@ -1575,7 +1575,7 @@ Oturumu açık tut apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 56 + 59 @@ -1707,7 +1707,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 188 + 191 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -1911,7 +1911,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 383 + 364 @@ -1923,7 +1923,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 395 + 376 @@ -1935,7 +1935,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 405 + 386 @@ -1947,7 +1947,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 430 + 411 @@ -1959,7 +1959,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 436 + 417 @@ -2003,7 +2003,7 @@ Tamam apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 154 + 157 apps/client/src/app/core/http-response.interceptor.ts @@ -3119,7 +3119,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 212 + 215 @@ -3135,7 +3135,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 377 + 380 @@ -3151,7 +3151,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 389 + 392 @@ -3210,8 +3210,8 @@ 32 - libs/ui/src/lib/assistant/assistant.html - 207 + libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html + 26 @@ -4264,7 +4264,7 @@ Lütfen kupon kodunuzu girin: apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 215 + 218 @@ -4272,7 +4272,7 @@ Kupon kodu kullanılamadı apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 179 + 182 @@ -4280,7 +4280,7 @@ Kupon kodu kullanıldı apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 192 + 195 @@ -4288,7 +4288,7 @@ Yeniden Yükle apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 193 + 196 @@ -4470,6 +4470,10 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html 252 + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 12 + Export Data @@ -4520,7 +4524,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 402 + 405 @@ -4532,7 +4536,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 415 + 418 @@ -4548,7 +4552,7 @@ Klonla libs/ui/src/lib/activities-table/activities-table.component.html - 446 + 449 @@ -4556,7 +4560,7 @@ Taslakları ICS Olarak Dışa Aktar libs/ui/src/lib/activities-table/activities-table.component.html - 456 + 459 @@ -4696,14 +4700,14 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 310 + 313 - libs/ui/src/lib/assistant/assistant.html - 185 + libs/ui/src/lib/i18n.ts + 4 - libs/ui/src/lib/i18n.ts + libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html 4 @@ -4738,14 +4742,14 @@ apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html 290 - - libs/ui/src/lib/assistant/assistant.html - 246 - libs/ui/src/lib/i18n.ts 6 + + libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html + 64 + Asset Sub Class @@ -4946,14 +4950,14 @@ Tag Etiket - - libs/ui/src/lib/assistant/assistant.html - 235 - libs/ui/src/lib/i18n.ts 31 + + libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html + 53 + Year @@ -4963,6 +4967,14 @@ 32 + + View Details + View Details + + apps/client/src/app/components/admin-users/admin-users.html + 225 + + Years Yıl @@ -5308,7 +5320,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 236 + 239 libs/ui/src/lib/i18n.ts @@ -5636,7 +5648,7 @@ Tarih Aralığı libs/ui/src/lib/assistant/assistant.html - 171 + 170 @@ -5788,7 +5800,7 @@ Hafta içi libs/ui/src/lib/assistant/assistant.component.ts - 387 + 368 @@ -5800,7 +5812,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 387 + 368 @@ -5808,7 +5820,7 @@ Ay içi libs/ui/src/lib/assistant/assistant.component.ts - 391 + 372 @@ -5820,7 +5832,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 391 + 372 @@ -5828,7 +5840,7 @@ Yıl içi libs/ui/src/lib/assistant/assistant.component.ts - 395 + 376 @@ -5856,7 +5868,7 @@ Filtreleri Sıfırla libs/ui/src/lib/assistant/assistant.html - 266 + 205 @@ -5876,7 +5888,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 405 + 386 @@ -5888,7 +5900,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 430 + 411 @@ -5896,7 +5908,7 @@ Filtreleri Uygula libs/ui/src/lib/assistant/assistant.html - 276 + 219 @@ -7071,7 +7083,7 @@ API anahtarı oluşturulamadı apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 141 + 144 @@ -7079,7 +7091,7 @@ Bu API anahtarını kendi barındırılan ortamınıza ayarlayın: apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 156 + 159 @@ -7087,7 +7099,7 @@ Ghostfolio Premium Veri Sağlayıcı API Anahtarı apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 159 + 162 @@ -7095,7 +7107,7 @@ Yeni bir API anahtarı oluşturmak istediğinize emin misiniz? apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 164 + 167 @@ -7439,7 +7451,7 @@ Güvenlik belirteci apps/client/src/app/components/admin-users/admin-users.component.ts - 196 + 228 apps/client/src/app/components/user-account-access/user-account-access.component.ts @@ -7451,7 +7463,7 @@ Bu kullanıcı için yeni bir güvenlik belirteci oluşturmak istediğinize emin misiniz? apps/client/src/app/components/admin-users/admin-users.component.ts - 201 + 233 @@ -7459,7 +7471,7 @@ Find account, holding or page... libs/ui/src/lib/assistant/assistant.component.ts - 162 + 152 @@ -7467,7 +7479,7 @@ Güvenlik belirteci oluştur apps/client/src/app/components/admin-users/admin-users.html - 233 + 242 @@ -8531,6 +8543,14 @@ 128 + + Registration Date + Registration Date + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 22 + + Follow Ghostfolio on LinkedIn Ghostfolio’yu LinkedIn’de takip edin diff --git a/apps/client/src/locales/messages.uk.xlf b/apps/client/src/locales/messages.uk.xlf index ee2008b95..61c9be112 100644 --- a/apps/client/src/locales/messages.uk.xlf +++ b/apps/client/src/locales/messages.uk.xlf @@ -42,7 +42,7 @@ apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 68 + 71 libs/common/src/lib/routes/routes.ts @@ -547,7 +547,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 278 + 281 @@ -583,11 +583,11 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 259 + 262 libs/ui/src/lib/activities-table/activities-table.component.html - 295 + 298 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -627,7 +627,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 440 + 443 @@ -663,7 +663,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 467 + 470 libs/ui/src/lib/benchmark/benchmark.component.html @@ -695,7 +695,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 158 + 161 @@ -1503,7 +1503,7 @@ apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 27 + 28 apps/client/src/app/pages/landing/landing-page.html @@ -1583,7 +1583,7 @@ Ви дійсно хочете видалити цього користувача? apps/client/src/app/components/admin-users/admin-users.component.ts - 175 + 207 @@ -1623,7 +1623,7 @@ Видавати себе за користувача apps/client/src/app/components/admin-users/admin-users.html - 223 + 232 @@ -1631,7 +1631,7 @@ Видалити користувача apps/client/src/app/components/admin-users/admin-users.html - 244 + 253 @@ -1827,7 +1827,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 188 + 191 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -2111,7 +2111,7 @@ Увійти з Інтернет-Ідентичністю apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 37 + 38 @@ -2119,7 +2119,7 @@ Увійти з Google apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 47 + 48 @@ -2127,7 +2127,7 @@ Залишатися в системі apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 56 + 59 @@ -2523,7 +2523,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 383 + 364 @@ -2535,7 +2535,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 395 + 376 @@ -2547,7 +2547,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 405 + 386 @@ -2559,7 +2559,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 430 + 411 @@ -2571,7 +2571,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 436 + 417 @@ -2625,6 +2625,10 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html 252 + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 12 + Me @@ -2667,7 +2671,7 @@ Не вдалося згенерувати ключ API apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 141 + 144 @@ -2675,7 +2679,7 @@ ОК apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 154 + 157 apps/client/src/app/core/http-response.interceptor.ts @@ -2691,7 +2695,7 @@ Встановіть цей ключ API у вашому self-hosted середовищі: apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 156 + 159 @@ -2699,7 +2703,7 @@ Ключ API Ghostfolio Premium Data Provider apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 159 + 162 @@ -2707,7 +2711,7 @@ Ви дійсно хочете згенерувати новий ключ API? apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 164 + 167 @@ -2715,7 +2719,7 @@ Не вдалося обміняти код купона apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 179 + 182 @@ -2723,7 +2727,7 @@ Код купона був обміняний apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 192 + 195 @@ -2731,7 +2735,7 @@ Перезавантажити apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 193 + 196 @@ -2739,7 +2743,7 @@ Будь ласка, введіть ваш код купона. apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 215 + 218 @@ -4308,7 +4312,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 167 + 170 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html @@ -4324,7 +4328,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 212 + 215 @@ -4340,7 +4344,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 377 + 380 @@ -4356,7 +4360,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 389 + 392 @@ -4415,8 +4419,8 @@ 32 - libs/ui/src/lib/assistant/assistant.html - 207 + libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html + 26 @@ -5995,7 +5999,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 402 + 405 @@ -6007,7 +6011,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 415 + 418 @@ -6031,7 +6035,7 @@ Клонувати libs/ui/src/lib/activities-table/activities-table.component.html - 446 + 449 @@ -6039,7 +6043,7 @@ Експортувати чернетку як ICS libs/ui/src/lib/activities-table/activities-table.component.html - 456 + 459 @@ -6063,7 +6067,7 @@ Тиждень до дати libs/ui/src/lib/assistant/assistant.component.ts - 387 + 368 @@ -6075,7 +6079,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 387 + 368 @@ -6083,7 +6087,7 @@ Місяць до дати libs/ui/src/lib/assistant/assistant.component.ts - 391 + 372 @@ -6095,7 +6099,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 391 + 372 @@ -6103,7 +6107,7 @@ Рік до дати libs/ui/src/lib/assistant/assistant.component.ts - 395 + 376 @@ -6123,7 +6127,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 405 + 386 @@ -6135,7 +6139,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 430 + 411 @@ -6151,7 +6155,7 @@ Діапазон дат libs/ui/src/lib/assistant/assistant.html - 171 + 170 @@ -6159,7 +6163,7 @@ Скинути фільтри libs/ui/src/lib/assistant/assistant.html - 266 + 205 @@ -6167,7 +6171,7 @@ Застосувати фільтри libs/ui/src/lib/assistant/assistant.html - 276 + 219 @@ -6355,14 +6359,14 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 310 + 313 - libs/ui/src/lib/assistant/assistant.html - 185 + libs/ui/src/lib/i18n.ts + 4 - libs/ui/src/lib/i18n.ts + libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html 4 @@ -6397,14 +6401,14 @@ apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html 290 - - libs/ui/src/lib/assistant/assistant.html - 246 - libs/ui/src/lib/i18n.ts 6 + + libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html + 64 + Asset Sub Class @@ -6713,14 +6717,14 @@ Tag Тег - - libs/ui/src/lib/assistant/assistant.html - 235 - libs/ui/src/lib/i18n.ts 31 + + libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html + 53 + Year @@ -6730,6 +6734,14 @@ 32 + + View Details + View Details + + apps/client/src/app/components/admin-users/admin-users.html + 225 + + Years Роки @@ -6767,7 +6779,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 236 + 239 libs/ui/src/lib/i18n.ts @@ -7439,7 +7451,7 @@ Security token apps/client/src/app/components/admin-users/admin-users.component.ts - 196 + 228 apps/client/src/app/components/user-account-access/user-account-access.component.ts @@ -7451,7 +7463,7 @@ Do you really want to generate a new security token for this user? apps/client/src/app/components/admin-users/admin-users.component.ts - 201 + 233 @@ -7459,7 +7471,7 @@ Find account, holding or page... libs/ui/src/lib/assistant/assistant.component.ts - 162 + 152 @@ -7467,7 +7479,7 @@ Generate Security Token apps/client/src/app/components/admin-users/admin-users.html - 233 + 242 @@ -8531,6 +8543,14 @@ 128 + + Registration Date + Registration Date + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 22 + + Follow Ghostfolio on LinkedIn Follow Ghostfolio on LinkedIn diff --git a/apps/client/src/locales/messages.xlf b/apps/client/src/locales/messages.xlf index 241482624..b9b3fb451 100644 --- a/apps/client/src/locales/messages.xlf +++ b/apps/client/src/locales/messages.xlf @@ -247,7 +247,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 158 + 161 @@ -420,7 +420,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 278 + 281 @@ -455,11 +455,11 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 259 + 262 libs/ui/src/lib/activities-table/activities-table.component.html - 295 + 298 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -498,7 +498,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 440 + 443 @@ -533,7 +533,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 467 + 470 libs/ui/src/lib/benchmark/benchmark.component.html @@ -674,7 +674,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 167 + 170 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html @@ -1214,7 +1214,7 @@ Do you really want to delete this user? apps/client/src/app/components/admin-users/admin-users.component.ts - 175 + 207 @@ -1246,14 +1246,14 @@ Impersonate User apps/client/src/app/components/admin-users/admin-users.html - 223 + 232 Delete User apps/client/src/app/components/admin-users/admin-users.html - 244 + 253 @@ -1348,7 +1348,7 @@ apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 68 + 71 libs/common/src/lib/routes/routes.ts @@ -1559,7 +1559,7 @@ apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 27 + 28 apps/client/src/app/pages/landing/landing-page.html @@ -1594,21 +1594,21 @@ Sign in with Internet Identity apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 37 + 38 Sign in with Google apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 47 + 48 Stay signed in apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 56 + 59 @@ -1736,7 +1736,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 188 + 191 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -1915,7 +1915,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 383 + 364 @@ -1926,7 +1926,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 395 + 376 @@ -1937,7 +1937,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 405 + 386 @@ -1948,7 +1948,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 430 + 411 @@ -1959,7 +1959,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 436 + 417 @@ -1987,28 +1987,28 @@ Please enter your coupon code. apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 215 + 218 Could not redeem coupon code apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 179 + 182 Coupon code has been redeemed apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 192 + 195 Reload apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 193 + 196 @@ -2181,6 +2181,10 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html 252 + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 12 + Export Data @@ -2226,7 +2230,7 @@ Okay apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 154 + 157 apps/client/src/app/core/http-response.interceptor.ts @@ -3354,7 +3358,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 212 + 215 @@ -3369,7 +3373,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 377 + 380 @@ -3384,7 +3388,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 389 + 392 @@ -3436,8 +3440,8 @@ 32 - libs/ui/src/lib/assistant/assistant.html - 207 + libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html + 26 @@ -4420,7 +4424,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 402 + 405 @@ -4431,7 +4435,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 415 + 418 @@ -4445,14 +4449,14 @@ Clone libs/ui/src/lib/activities-table/activities-table.component.html - 446 + 449 Export Draft as ICS libs/ui/src/lib/activities-table/activities-table.component.html - 456 + 459 @@ -4613,14 +4617,14 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 310 + 313 - libs/ui/src/lib/assistant/assistant.html - 185 + libs/ui/src/lib/i18n.ts + 4 - libs/ui/src/lib/i18n.ts + libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html 4 @@ -4653,14 +4657,14 @@ apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html 290 - - libs/ui/src/lib/assistant/assistant.html - 246 - libs/ui/src/lib/i18n.ts 6 + + libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html + 64 + Asset Sub Class @@ -4842,14 +4846,14 @@ Tag - - libs/ui/src/lib/assistant/assistant.html - 235 - libs/ui/src/lib/i18n.ts 31 + + libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html + 53 + Year @@ -4858,6 +4862,13 @@ 32 + + View Details + + apps/client/src/app/components/admin-users/admin-users.html + 225 + + Years @@ -4884,7 +4895,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 236 + 239 libs/ui/src/lib/i18n.ts @@ -5134,7 +5145,7 @@ Date Range libs/ui/src/lib/assistant/assistant.html - 171 + 170 @@ -5284,21 +5295,21 @@ Year to date libs/ui/src/lib/assistant/assistant.component.ts - 395 + 376 Week to date libs/ui/src/lib/assistant/assistant.component.ts - 387 + 368 Month to date libs/ui/src/lib/assistant/assistant.component.ts - 391 + 372 @@ -5309,7 +5320,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 391 + 372 @@ -5320,7 +5331,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 387 + 368 @@ -5345,7 +5356,7 @@ Reset Filters libs/ui/src/lib/assistant/assistant.html - 266 + 205 @@ -5364,7 +5375,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 405 + 386 @@ -5375,14 +5386,14 @@ libs/ui/src/lib/assistant/assistant.component.ts - 430 + 411 Apply Filters libs/ui/src/lib/assistant/assistant.html - 276 + 219 @@ -6451,28 +6462,28 @@ Could not generate an API key apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 141 + 144 Do you really want to generate a new API key? apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 164 + 167 Ghostfolio Premium Data Provider API Key apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 159 + 162 Set this API key in your self-hosted environment: apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 156 + 159 @@ -6767,21 +6778,21 @@ Do you really want to generate a new security token for this user? apps/client/src/app/components/admin-users/admin-users.component.ts - 201 + 233 Find account, holding or page... libs/ui/src/lib/assistant/assistant.component.ts - 162 + 152 Security token apps/client/src/app/components/admin-users/admin-users.component.ts - 196 + 228 apps/client/src/app/components/user-account-access/user-account-access.component.ts @@ -6792,7 +6803,7 @@ Generate Security Token apps/client/src/app/components/admin-users/admin-users.html - 233 + 242 @@ -7712,6 +7723,13 @@ 128 + + Registration Date + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 22 + + Join the Ghostfolio Slack community diff --git a/apps/client/src/locales/messages.zh.xlf b/apps/client/src/locales/messages.zh.xlf index 95735836b..90e239595 100644 --- a/apps/client/src/locales/messages.zh.xlf +++ b/apps/client/src/locales/messages.zh.xlf @@ -264,7 +264,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 158 + 161 @@ -448,7 +448,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 278 + 281 @@ -484,11 +484,11 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 259 + 262 libs/ui/src/lib/activities-table/activities-table.component.html - 295 + 298 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -528,7 +528,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 440 + 443 @@ -564,7 +564,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 467 + 470 libs/ui/src/lib/benchmark/benchmark.component.html @@ -720,7 +720,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 167 + 170 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html @@ -1296,7 +1296,7 @@ 您真的要删除该用户吗? apps/client/src/app/components/admin-users/admin-users.component.ts - 175 + 207 @@ -1332,7 +1332,7 @@ 模拟用户 apps/client/src/app/components/admin-users/admin-users.html - 223 + 232 @@ -1340,7 +1340,7 @@ 删除用户 apps/client/src/app/components/admin-users/admin-users.html - 244 + 253 @@ -1444,7 +1444,7 @@ apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 68 + 71 libs/common/src/lib/routes/routes.ts @@ -1676,7 +1676,7 @@ apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 27 + 28 apps/client/src/app/pages/landing/landing-page.html @@ -1712,7 +1712,7 @@ 使用互联网身份登录 apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 37 + 38 @@ -1720,7 +1720,7 @@ 使用 Google 登录 apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 47 + 48 @@ -1728,7 +1728,7 @@ 保持登录 apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 56 + 59 @@ -1872,7 +1872,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 188 + 191 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -2064,7 +2064,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 383 + 364 @@ -2076,7 +2076,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 395 + 376 @@ -2088,7 +2088,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 405 + 386 @@ -2100,7 +2100,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 430 + 411 @@ -2112,7 +2112,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 436 + 417 @@ -2144,7 +2144,7 @@ 请输入您的优惠券代码。 apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 215 + 218 @@ -2152,7 +2152,7 @@ 无法兑换优惠券代码 apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 179 + 182 @@ -2160,7 +2160,7 @@ 优惠券代码已被兑换 apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 192 + 195 @@ -2168,7 +2168,7 @@ 重新加载 apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 193 + 196 @@ -2362,6 +2362,10 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html 252 + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 12 + Export Data @@ -2412,7 +2416,7 @@ 好的 apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 154 + 157 apps/client/src/app/core/http-response.interceptor.ts @@ -3648,7 +3652,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 212 + 215 @@ -3664,7 +3668,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 377 + 380 @@ -3680,7 +3684,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 389 + 392 @@ -3739,8 +3743,8 @@ 32 - libs/ui/src/lib/assistant/assistant.html - 207 + libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html + 26 @@ -4829,7 +4833,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 402 + 405 @@ -4841,7 +4845,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 415 + 418 @@ -4857,7 +4861,7 @@ 克隆 libs/ui/src/lib/activities-table/activities-table.component.html - 446 + 449 @@ -4865,7 +4869,7 @@ 将汇票导出为 ICS libs/ui/src/lib/activities-table/activities-table.component.html - 456 + 459 @@ -5045,14 +5049,14 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 310 + 313 - libs/ui/src/lib/assistant/assistant.html - 185 + libs/ui/src/lib/i18n.ts + 4 - libs/ui/src/lib/i18n.ts + libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html 4 @@ -5087,14 +5091,14 @@ apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html 290 - - libs/ui/src/lib/assistant/assistant.html - 246 - libs/ui/src/lib/i18n.ts 6 + + libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html + 64 + Asset Sub Class @@ -5295,14 +5299,14 @@ Tag 标签 - - libs/ui/src/lib/assistant/assistant.html - 235 - libs/ui/src/lib/i18n.ts 31 + + libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html + 53 + Year @@ -5312,6 +5316,14 @@ 32 + + View Details + View Details + + apps/client/src/app/components/admin-users/admin-users.html + 225 + + Years @@ -5341,7 +5353,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 236 + 239 libs/ui/src/lib/i18n.ts @@ -5621,7 +5633,7 @@ 日期范围 libs/ui/src/lib/assistant/assistant.html - 171 + 170 @@ -5789,7 +5801,7 @@ 今年迄今为止 libs/ui/src/lib/assistant/assistant.component.ts - 395 + 376 @@ -5797,7 +5809,7 @@ 本周至今 libs/ui/src/lib/assistant/assistant.component.ts - 387 + 368 @@ -5805,7 +5817,7 @@ 本月至今 libs/ui/src/lib/assistant/assistant.component.ts - 391 + 372 @@ -5817,7 +5829,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 391 + 372 @@ -5829,7 +5841,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 387 + 368 @@ -5857,7 +5869,7 @@ 重置过滤器 libs/ui/src/lib/assistant/assistant.html - 266 + 205 @@ -5877,7 +5889,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 405 + 386 @@ -5889,7 +5901,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 430 + 411 @@ -5897,7 +5909,7 @@ 应用过滤器 libs/ui/src/lib/assistant/assistant.html - 276 + 219 @@ -7072,7 +7084,7 @@ 无法生成 API 密钥 apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 141 + 144 @@ -7080,7 +7092,7 @@ 在您的自托管环境中设置此 API 密钥: apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 156 + 159 @@ -7088,7 +7100,7 @@ Ghostfolio Premium 数据提供者 API 密钥 apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 159 + 162 @@ -7096,7 +7108,7 @@ 您确定要生成新的 API 密钥吗? apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 164 + 167 @@ -7440,7 +7452,7 @@ 安全令牌 apps/client/src/app/components/admin-users/admin-users.component.ts - 196 + 228 apps/client/src/app/components/user-account-access/user-account-access.component.ts @@ -7452,7 +7464,7 @@ 您确定要为此用户生成新的安全令牌吗? apps/client/src/app/components/admin-users/admin-users.component.ts - 201 + 233 @@ -7460,7 +7472,7 @@ Find account, holding or page... libs/ui/src/lib/assistant/assistant.component.ts - 162 + 152 @@ -7468,7 +7480,7 @@ 生成安全令牌 apps/client/src/app/components/admin-users/admin-users.html - 233 + 242 @@ -8532,6 +8544,14 @@ 128 + + Registration Date + Registration Date + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 22 + + Follow Ghostfolio on LinkedIn 在 LinkedIn 上关注 Ghostfolio From e03f58feff376957bfbc4e39bfddfed3098fb69e Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Sat, 25 Oct 2025 09:46:52 +0200 Subject: [PATCH 40/92] Task/refactor Activities interface to ActivitiesResponse interface (#5835) * Refactor Activities interface to ActivitiesResponse interface --- apps/api/src/app/order/interfaces/activities.interface.ts | 5 ----- apps/api/src/app/order/order.controller.ts | 8 +++++--- apps/api/src/app/order/order.service.ts | 5 ++--- apps/client/src/app/services/data.service.ts | 4 ++-- libs/common/src/lib/interfaces/index.ts | 2 ++ .../interfaces/responses/activities-response.interface.ts | 6 ++++++ 6 files changed, 17 insertions(+), 13 deletions(-) create mode 100644 libs/common/src/lib/interfaces/responses/activities-response.interface.ts diff --git a/apps/api/src/app/order/interfaces/activities.interface.ts b/apps/api/src/app/order/interfaces/activities.interface.ts index 01a5a60f0..8c88cc2cf 100644 --- a/apps/api/src/app/order/interfaces/activities.interface.ts +++ b/apps/api/src/app/order/interfaces/activities.interface.ts @@ -3,11 +3,6 @@ import { AccountWithPlatform } from '@ghostfolio/common/types'; import { Order, Tag } from '@prisma/client'; -export interface Activities { - activities: Activity[]; - count: number; -} - export interface Activity extends Order { account?: AccountWithPlatform; error?: ActivityError; diff --git a/apps/api/src/app/order/order.controller.ts b/apps/api/src/app/order/order.controller.ts index 86228cf2e..d6c231059 100644 --- a/apps/api/src/app/order/order.controller.ts +++ b/apps/api/src/app/order/order.controller.ts @@ -11,7 +11,10 @@ import { DATA_GATHERING_QUEUE_PRIORITY_HIGH, HEADER_KEY_IMPERSONATION } from '@ghostfolio/common/config'; -import { ActivityResponse } from '@ghostfolio/common/interfaces'; +import { + ActivitiesResponse, + ActivityResponse +} from '@ghostfolio/common/interfaces'; import { permissions } from '@ghostfolio/common/permissions'; import type { DateRange, RequestWithUser } from '@ghostfolio/common/types'; @@ -37,7 +40,6 @@ import { parseISO } from 'date-fns'; import { StatusCodes, getReasonPhrase } from 'http-status-codes'; import { CreateOrderDto } from './create-order.dto'; -import { Activities } from './interfaces/activities.interface'; import { OrderService } from './order.service'; import { UpdateOrderDto } from './update-order.dto'; @@ -114,7 +116,7 @@ export class OrderController { @Query('symbol') filterBySymbol?: string, @Query('tags') filterByTags?: string, @Query('take') take?: number - ): Promise { + ): Promise { let endDate: Date; let startDate: Date; diff --git a/apps/api/src/app/order/order.service.ts b/apps/api/src/app/order/order.service.ts index 2b5d14150..e4c642977 100644 --- a/apps/api/src/app/order/order.service.ts +++ b/apps/api/src/app/order/order.service.ts @@ -14,6 +14,7 @@ import { } from '@ghostfolio/common/config'; import { getAssetProfileIdentifier } from '@ghostfolio/common/helper'; import { + ActivitiesResponse, AssetProfileIdentifier, EnhancedSymbolProfile, Filter @@ -37,8 +38,6 @@ import { endOfToday, isAfter } from 'date-fns'; import { groupBy, uniqBy } from 'lodash'; import { v4 as uuidv4 } from 'uuid'; -import { Activities } from './interfaces/activities.interface'; - @Injectable() export class OrderService { public constructor( @@ -345,7 +344,7 @@ export class OrderService { userCurrency: string; userId: string; withExcludedAccountsAndActivities?: boolean; - }): Promise { + }): Promise { let orderBy: Prisma.Enumerable = [ { date: 'asc' } ]; diff --git a/apps/client/src/app/services/data.service.ts b/apps/client/src/app/services/data.service.ts index a32bc6d3e..6f0b17ed1 100644 --- a/apps/client/src/app/services/data.service.ts +++ b/apps/client/src/app/services/data.service.ts @@ -9,7 +9,6 @@ import { CreateTagDto } from '@ghostfolio/api/app/endpoints/tags/create-tag.dto' import { UpdateTagDto } from '@ghostfolio/api/app/endpoints/tags/update-tag.dto'; import { CreateWatchlistItemDto } from '@ghostfolio/api/app/endpoints/watchlist/create-watchlist-item.dto'; import { CreateOrderDto } from '@ghostfolio/api/app/order/create-order.dto'; -import { Activities } from '@ghostfolio/api/app/order/interfaces/activities.interface'; import { UpdateOrderDto } from '@ghostfolio/api/app/order/update-order.dto'; import { SymbolItem } from '@ghostfolio/api/app/symbol/interfaces/symbol-item.interface'; import { DeleteOwnUserDto } from '@ghostfolio/api/app/user/delete-own-user.dto'; @@ -24,6 +23,7 @@ import { AccessTokenResponse, AccountBalancesResponse, AccountsResponse, + ActivitiesResponse, ActivityResponse, AiPromptResponse, ApiKeyResponse, @@ -215,7 +215,7 @@ export class DataService { sortColumn?: string; sortDirection?: SortDirection; take?: number; - }): Observable { + }): Observable { let params = this.buildFiltersAsQueryParams({ filters }); if (range) { diff --git a/libs/common/src/lib/interfaces/index.ts b/libs/common/src/lib/interfaces/index.ts index 828a65974..eac5db68c 100644 --- a/libs/common/src/lib/interfaces/index.ts +++ b/libs/common/src/lib/interfaces/index.ts @@ -37,6 +37,7 @@ import type { Product } from './product'; import type { AccessTokenResponse } from './responses/access-token-response.interface'; import type { AccountBalancesResponse } from './responses/account-balances-response.interface'; import type { AccountsResponse } from './responses/accounts-response.interface'; +import type { ActivitiesResponse } from './responses/activities-response.interface'; import type { ActivityResponse } from './responses/activity-response.interface'; import type { AiPromptResponse } from './responses/ai-prompt-response.interface'; import type { ApiKeyResponse } from './responses/api-key-response.interface'; @@ -84,6 +85,7 @@ export { AccountBalance, AccountBalancesResponse, AccountsResponse, + ActivitiesResponse, ActivityResponse, AdminData, AdminJobs, diff --git a/libs/common/src/lib/interfaces/responses/activities-response.interface.ts b/libs/common/src/lib/interfaces/responses/activities-response.interface.ts new file mode 100644 index 000000000..e6abe4618 --- /dev/null +++ b/libs/common/src/lib/interfaces/responses/activities-response.interface.ts @@ -0,0 +1,6 @@ +import { Activity } from '@ghostfolio/api/app/order/interfaces/activities.interface'; + +export interface ActivitiesResponse { + activities: Activity[]; + count: number; +} From 76a2249ba4de31ce10f994cd1fed28a11738dbab Mon Sep 17 00:00:00 2001 From: Vaishnavi Parabkar Date: Sat, 25 Oct 2025 13:45:58 +0530 Subject: [PATCH 41/92] Feature/integrate SelfhostedHub into logo carousel (#5786) * Add SelfhostedHub * Update changelog --------- Co-authored-by: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> --- CHANGELOG.md | 1 + apps/client/src/assets/images/logo-selfhostedhub.svg | 2 ++ .../src/lib/logo-carousel/logo-carousel.component.scss | 9 +++++++++ libs/ui/src/lib/logo-carousel/logo-carousel.component.ts | 6 ++++++ 4 files changed, 18 insertions(+) create mode 100644 apps/client/src/assets/images/logo-selfhostedhub.svg diff --git a/CHANGELOG.md b/CHANGELOG.md index a0beadc0f..aa7dcb97c 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 ### Added - Extended the export functionality by the user account’s performance calculation type +- Added the _SelfhostedHub_ logo to the logo carousel on the landing page - Added a user detail dialog to the users section of the admin control panel ### Changed diff --git a/apps/client/src/assets/images/logo-selfhostedhub.svg b/apps/client/src/assets/images/logo-selfhostedhub.svg new file mode 100644 index 000000000..72fccdc07 --- /dev/null +++ b/apps/client/src/assets/images/logo-selfhostedhub.svg @@ -0,0 +1,2 @@ + + diff --git a/libs/ui/src/lib/logo-carousel/logo-carousel.component.scss b/libs/ui/src/lib/logo-carousel/logo-carousel.component.scss index 18c3a26cb..89a837195 100644 --- a/libs/ui/src/lib/logo-carousel/logo-carousel.component.scss +++ b/libs/ui/src/lib/logo-carousel/logo-carousel.component.scss @@ -139,6 +139,15 @@ max-height: 1.25rem; } + &.logo-selfhostedhub { + background-image: url('/assets/images/logo-selfhostedhub.svg'); + background-position: center; + background-repeat: no-repeat; + background-size: contain; + filter: grayscale(1); + opacity: 0.5; + } + &.logo-sourceforge { mask-image: url('/assets/images/logo-sourceforge.svg'); } diff --git a/libs/ui/src/lib/logo-carousel/logo-carousel.component.ts b/libs/ui/src/lib/logo-carousel/logo-carousel.component.ts index d7d3fa6af..ea6344694 100644 --- a/libs/ui/src/lib/logo-carousel/logo-carousel.component.ts +++ b/libs/ui/src/lib/logo-carousel/logo-carousel.component.ts @@ -82,6 +82,12 @@ export class GfLogoCarouselComponent { title: 'selfh.st — Self-hosted content and software', url: 'https://selfh.st' }, + { + className: 'logo-selfhostedhub', + name: 'SelfhostedHub', + title: 'SelfhostedHub — Discover best self-hosted software', + url: 'https://selfhostedhub.com' + }, { className: 'logo-sourceforge', isMask: true, From 31e234610194fe62e1dd3d800310b0f958afe0ca Mon Sep 17 00:00:00 2001 From: vitalymatyushik Date: Sat, 25 Oct 2025 10:37:57 +0200 Subject: [PATCH 42/92] Bugfix/market price in base currency during the portfolio snapshot calculation (#5828) * Add fallback for market price in base currency * Update changelog --- CHANGELOG.md | 4 ++++ apps/api/src/app/portfolio/calculator/portfolio-calculator.ts | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index aa7dcb97c..5f49760b3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -26,6 +26,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Fixed the style in the footer row of the accounts table - Fixed the rendering of names and symbols for custom assets in the import activities dialog +### Fixed + +- Fixed an issue with the market price in base currency during the portfolio snapshot calculation + ## 2.210.1 - 2025-10-22 ### Added diff --git a/apps/api/src/app/portfolio/calculator/portfolio-calculator.ts b/apps/api/src/app/portfolio/calculator/portfolio-calculator.ts index 3218d01f4..10e5c15cb 100644 --- a/apps/api/src/app/portfolio/calculator/portfolio-calculator.ts +++ b/apps/api/src/app/portfolio/calculator/portfolio-calculator.ts @@ -336,7 +336,7 @@ export abstract class PortfolioCalculator { ).mul( exchangeRatesByCurrency[`${item.currency}${this.currency}`]?.[ endDateString - ] + ] ?? 1 ); const { From b47a16961fa5c64c05ede984b4850a89e2e8ea37 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Sat, 25 Oct 2025 10:40:50 +0200 Subject: [PATCH 43/92] Release 2.211.0 (#5837) --- 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 5f49760b3..d84c05f72 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). -## 2.211.0-beta.0 - 2025-10-24 +## 2.211.0 - 2025-10-25 ### Added diff --git a/package-lock.json b/package-lock.json index de1be8c3c..62913d174 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "ghostfolio", - "version": "2.211.0-beta.0", + "version": "2.211.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "ghostfolio", - "version": "2.211.0-beta.0", + "version": "2.211.0", "hasInstallScript": true, "license": "AGPL-3.0", "dependencies": { diff --git a/package.json b/package.json index 6abe23cf4..512f61b6d 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ghostfolio", - "version": "2.211.0-beta.0", + "version": "2.211.0", "homepage": "https://ghostfol.io", "license": "AGPL-3.0", "repository": "https://github.com/ghostfolio/ghostfolio", From c394a2d5294b461c278b1cce3678806ee96a3bec Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Sat, 25 Oct 2025 10:48:29 +0200 Subject: [PATCH 44/92] Release 2.211.0 (#5838) --- CHANGELOG.md | 3 --- 1 file changed, 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d84c05f72..1d5674673 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -25,9 +25,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Fixed the style in the footer row of the accounts table - Fixed the rendering of names and symbols for custom assets in the import activities dialog - -### Fixed - - Fixed an issue with the market price in base currency during the portfolio snapshot calculation ## 2.210.1 - 2025-10-22 From f4bad6acafbecfce2fc45760f25f4c24950b7889 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Sat, 25 Oct 2025 14:34:45 +0200 Subject: [PATCH 45/92] Bugfix/provide missing locale to rule settings dialog (#5845) * Provide locale to rule settings dialog * Update changelog --- CHANGELOG.md | 6 ++++++ apps/client/src/app/components/rule/rule.component.ts | 2 ++ apps/client/src/app/components/rules/rules.component.html | 1 + apps/client/src/app/components/rules/rules.component.ts | 1 + .../src/app/pages/portfolio/x-ray/x-ray-page.component.html | 2 ++ 5 files changed, 12 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1d5674673..36c8c3c29 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 + +### Fixed + +- Ensured the locale is available in the settings dialog to customize the rule thresholds of the _X-ray_ page + ## 2.211.0 - 2025-10-25 ### Added diff --git a/apps/client/src/app/components/rule/rule.component.ts b/apps/client/src/app/components/rule/rule.component.ts index ba77ce162..a4e9f4dea 100644 --- a/apps/client/src/app/components/rule/rule.component.ts +++ b/apps/client/src/app/components/rule/rule.component.ts @@ -51,6 +51,7 @@ export class GfRuleComponent implements OnInit { @Input() categoryName: string; @Input() hasPermissionToUpdateUserSettings: boolean; @Input() isLoading: boolean; + @Input() locale: string; @Input() rule: PortfolioReportRule; @Input() settings: XRayRulesSettings['AccountClusterRiskCurrentInvestment']; @@ -82,6 +83,7 @@ export class GfRuleComponent implements OnInit { data: { rule, categoryName: this.categoryName, + locale: this.locale, settings: this.settings } as RuleSettingsDialogParams, width: this.deviceType === 'mobile' ? '100vw' : '50rem' diff --git a/apps/client/src/app/components/rules/rules.component.html b/apps/client/src/app/components/rules/rules.component.html index d0cf7ece5..0c3153c52 100644 --- a/apps/client/src/app/components/rules/rules.component.html +++ b/apps/client/src/app/components/rules/rules.component.html @@ -12,6 +12,7 @@ [hasPermissionToUpdateUserSettings]=" hasPermissionToUpdateUserSettings " + [locale]="locale" [rule]="rule" [settings]="settings?.[rule.key]" (ruleUpdated)="onRuleUpdated($event)" diff --git a/apps/client/src/app/components/rules/rules.component.ts b/apps/client/src/app/components/rules/rules.component.ts index 6379a40fb..80a59740b 100644 --- a/apps/client/src/app/components/rules/rules.component.ts +++ b/apps/client/src/app/components/rules/rules.component.ts @@ -26,6 +26,7 @@ export class GfRulesComponent { @Input() categoryName: string; @Input() hasPermissionToUpdateUserSettings: boolean; @Input() isLoading: boolean; + @Input() locale: string; @Input() rules: PortfolioReportRule[]; @Input() settings: XRayRulesSettings; diff --git a/apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html b/apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html index d4820b59e..af74137d1 100644 --- a/apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html +++ b/apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html @@ -76,6 +76,7 @@ !hasImpersonationId && hasPermissionToUpdateUserSettings " [isLoading]="isLoading" + [locale]="user?.settings?.locale" [rules]="category.rules" [settings]="user?.settings?.xRayRules" (rulesUpdated)="onRulesUpdated($event)" @@ -90,6 +91,7 @@ !hasImpersonationId && hasPermissionToUpdateUserSettings " [isLoading]="isLoading" + [locale]="user?.settings?.locale" [rules]="inactiveRules" [settings]="user?.settings?.xRayRules" (rulesUpdated)="onRulesUpdated($event)" From 54e0f5e4666e24b49dab9f325e4750b9e979633d Mon Sep 17 00:00:00 2001 From: Abhishek Singla Date: Sat, 25 Oct 2025 23:19:21 +0530 Subject: [PATCH 46/92] Feature/extend user detail dialog (#5844) * Extend user detail dialog * Update changelog --- CHANGELOG.md | 4 + .../admin-users/admin-users.component.ts | 5 +- .../interfaces/interfaces.ts | 1 + .../user-detail-dialog.html | 73 ++++++++++++++++++- 4 files changed, 77 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 36c8c3c29..692029639 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 + +- Extended the user detail dialog in the users section of the admin control panel + ### Fixed - Ensured the locale is available in the settings dialog to customize the rule thresholds of the _X-ray_ page diff --git a/apps/client/src/app/components/admin-users/admin-users.component.ts b/apps/client/src/app/components/admin-users/admin-users.component.ts index fce97877b..4c20f3fe9 100644 --- a/apps/client/src/app/components/admin-users/admin-users.component.ts +++ b/apps/client/src/app/components/admin-users/admin-users.component.ts @@ -278,9 +278,9 @@ export class GfAdminUsersComponent implements OnDestroy, OnInit { }); } - private openUserDetailDialog(userId: string) { + private openUserDetailDialog(aUserId: string) { const userData = this.dataSource.data.find(({ id }) => { - return id === userId; + return id === aUserId; }); if (!userData) { @@ -293,6 +293,7 @@ export class GfAdminUsersComponent implements OnDestroy, OnInit { data: { userData, deviceType: this.deviceType, + hasPermissionForSubscription: this.hasPermissionForSubscription, locale: this.user?.settings?.locale } as UserDetailDialogParams, height: this.deviceType === 'mobile' ? '98vh' : '60vh', diff --git a/apps/client/src/app/components/user-detail-dialog/interfaces/interfaces.ts b/apps/client/src/app/components/user-detail-dialog/interfaces/interfaces.ts index 81cf84d12..5f3f4b87a 100644 --- a/apps/client/src/app/components/user-detail-dialog/interfaces/interfaces.ts +++ b/apps/client/src/app/components/user-detail-dialog/interfaces/interfaces.ts @@ -2,6 +2,7 @@ import { AdminUsers } from '@ghostfolio/common/interfaces'; export interface UserDetailDialogParams { deviceType: string; + hasPermissionForSubscription: boolean; locale: string; userData: AdminUsers['users'][0]; } diff --git a/apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html b/apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html index d90a6abf6..6bc468b59 100644 --- a/apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html +++ b/apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -8,9 +8,9 @@
- User ID + + User ID +
Registration Date + Registration Date +
+ +
+
+ + Role + +
+ @if (data.hasPermissionForSubscription) { +
+ + Country + +
+ } +
+ +
+
+ + Accounts + +
+
+ + Activities + +
+
+ + @if (data.hasPermissionForSubscription) { +
+
+ + Engagement per Day + +
+
+ + API Requests Today + +
+
+ }
From 554710840832de15b48d4405d427209859746e04 Mon Sep 17 00:00:00 2001 From: Kenrick Tandrian <60643640+KenTandrian@users.noreply.github.com> Date: Sun, 26 Oct 2025 01:19:25 +0700 Subject: [PATCH 47/92] Feature/add close holding button to holding detail dialog (#5832) * Add close holding button to holding detail dialog * Update changelog --- CHANGELOG.md | 1 + .../holding-detail-dialog.component.ts | 34 +++++++++++++++++++ .../holding-detail-dialog.html | 33 ++++++++++++------ 3 files changed, 58 insertions(+), 10 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 692029639..990398b49 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added +- Added a close holding button to the holding detail dialog - Extended the user detail dialog in the users section of the admin control panel ### Fixed 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 d4c1c59c1..93005c11f 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 @@ -1,3 +1,4 @@ +import { CreateOrderDto } from '@ghostfolio/api/app/order/create-order.dto'; import { Activity } from '@ghostfolio/api/app/order/interfaces/activities.interface'; import { GfDialogFooterComponent } from '@ghostfolio/client/components/dialog-footer/dialog-footer.component'; import { GfDialogHeaderComponent } from '@ghostfolio/client/components/dialog-header/dialog-header.component'; @@ -57,6 +58,7 @@ import { isUUID } from 'class-validator'; import { format, isSameMonth, isToday, parseISO } from 'date-fns'; import { addIcons } from 'ionicons'; import { + arrowDownCircleOutline, createOutline, flagOutline, readerOutline, @@ -167,6 +169,7 @@ export class GfHoldingDetailDialogComponent implements OnDestroy, OnInit { private userService: UserService ) { addIcons({ + arrowDownCircleOutline, createOutline, flagOutline, readerOutline, @@ -557,6 +560,37 @@ export class GfHoldingDetailDialogComponent implements OnDestroy, OnInit { this.dialogRef.close(); } + public onCloseHolding() { + const today = new Date(); + + const activity: CreateOrderDto = { + accountId: this.accounts.length === 1 ? this.accounts[0].id : null, + comment: null, + currency: this.SymbolProfile.currency, + dataSource: this.SymbolProfile.dataSource, + date: today.toISOString(), + fee: 0, + quantity: this.quantity, + symbol: this.SymbolProfile.symbol, + tags: this.tags.map(({ id }) => { + return id; + }), + type: 'SELL', + unitPrice: this.marketPrice + }; + + this.dataService + .postOrder(activity) + .pipe(takeUntil(this.unsubscribeSubject)) + .subscribe(() => { + this.router.navigate( + internalRoutes.portfolio.subRoutes.activities.routerLink + ); + + this.dialogRef.close(); + }); + } + public onExport() { const activityIds = this.dataSource.data.map(({ id }) => { return id; 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 298692303..b0e462a96 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 @@ -428,6 +428,29 @@
+ @if (data.hasPermissionToCreateActivity && quantity > 0) { + + } + @if ( + dataSource?.data.length > 0 && + data.hasPermissionToReportDataGlitch === true + ) { + Report Data Glitch... + } @if (data.hasPermissionToAccessAdminControl) { ... } - @if ( - dataSource?.data.length > 0 && - data.hasPermissionToReportDataGlitch === true - ) { - Report Data Glitch... - }
From 6a93d8c050cc6ef10df9c79e794908cc73b18fc8 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sat, 25 Oct 2025 20:41:18 +0200 Subject: [PATCH 48/92] Feature/update locales (#5847) * Update locales * Update translations * Update changelog --------- Co-authored-by: github-actions[bot] Co-authored-by: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> --- CHANGELOG.md | 4 ++ apps/client/src/locales/messages.ca.xlf | 76 +++++++++++++++++++++---- apps/client/src/locales/messages.de.xlf | 76 +++++++++++++++++++++---- apps/client/src/locales/messages.es.xlf | 76 +++++++++++++++++++++---- apps/client/src/locales/messages.fr.xlf | 76 +++++++++++++++++++++---- apps/client/src/locales/messages.it.xlf | 76 +++++++++++++++++++++---- apps/client/src/locales/messages.nl.xlf | 76 +++++++++++++++++++++---- apps/client/src/locales/messages.pl.xlf | 76 +++++++++++++++++++++---- apps/client/src/locales/messages.pt.xlf | 76 +++++++++++++++++++++---- apps/client/src/locales/messages.tr.xlf | 76 +++++++++++++++++++++---- apps/client/src/locales/messages.uk.xlf | 76 +++++++++++++++++++++---- apps/client/src/locales/messages.xlf | 69 ++++++++++++++++++---- apps/client/src/locales/messages.zh.xlf | 76 +++++++++++++++++++++---- 13 files changed, 789 insertions(+), 120 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 990398b49..1024336b3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Added a close holding button to the holding detail dialog - Extended the user detail dialog in the users section of the admin control panel +### Changed + +- Improved the language localization for German (`de`) + ### Fixed - Ensured the locale is available in the settings dialog to customize the rule thresholds of the _X-ray_ page diff --git a/apps/client/src/locales/messages.ca.xlf b/apps/client/src/locales/messages.ca.xlf index c68b369d4..d7e986436 100644 --- a/apps/client/src/locales/messages.ca.xlf +++ b/apps/client/src/locales/messages.ca.xlf @@ -1366,6 +1366,14 @@ 200
+ + Activities + Activities + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 61 + + Add Platform Afegeix Plataforma @@ -1739,7 +1747,7 @@ Informar d’un Problema amb les Dades apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 452 + 450 @@ -2409,10 +2417,6 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html 252 - - apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 12 - Granted Access @@ -4451,6 +4455,14 @@ 91 + + Close Holding + Close Holding + + apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html + 441 + + Absolute Asset Performance Rendiment absolut dels actius @@ -5112,6 +5124,14 @@ 210 + + User ID + User ID + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 12 + + Free Plan Pla gratuït @@ -6565,7 +6585,7 @@ Inactive apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 87 + 88 @@ -6668,6 +6688,14 @@ 11 + + Role + Role + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 31 + + Yes Yes @@ -6679,6 +6707,10 @@ Accounts Accounts + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 51 + libs/ui/src/lib/assistant/assistant.html 84 @@ -6972,6 +7004,14 @@ 293 + + Engagement per Day + Engagement per Day + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 76 + + Guides Guides @@ -7110,6 +7150,14 @@ 167 + + Country + Country + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 37 + + API Key API Key @@ -7258,6 +7306,14 @@ 234 + + API Requests Today + API Requests Today + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 86 + + Default Market Price Default Market Price @@ -8128,7 +8184,7 @@ Manage Asset Profile apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 442 + 465 @@ -8152,7 +8208,7 @@ Average Unit Price apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts - 111 + 113 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -8543,12 +8599,12 @@ 128 - + Registration Date Registration Date apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 22 + 23 diff --git a/apps/client/src/locales/messages.de.xlf b/apps/client/src/locales/messages.de.xlf index 2db1d100f..4d7820831 100644 --- a/apps/client/src/locales/messages.de.xlf +++ b/apps/client/src/locales/messages.de.xlf @@ -633,6 +633,14 @@ 200 + + Activities + Aktivitäten + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 61 + + Do you really want to delete this user? Möchtest du diesen Benutzer wirklich löschen? @@ -982,7 +990,7 @@ Datenfehler melden apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 452 + 450 @@ -1280,10 +1288,6 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html 252 - - apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 12 - Granted Access @@ -4313,6 +4317,14 @@ 210 + + User ID + Benutzer ID + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 12 + + Free Plan Kostenlose Nutzung @@ -5771,6 +5783,14 @@ 364 + + Close Holding + Position abschliessen + + apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html + 441 + + Absolute Asset Performance Absolute Anlage Performance @@ -6589,7 +6609,7 @@ Inaktiv apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 87 + 88 @@ -6692,6 +6712,14 @@ 11 + + Role + Rolle + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 31 + + Yes Ja @@ -6703,6 +6731,10 @@ Accounts Konten + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 51 + libs/ui/src/lib/assistant/assistant.html 84 @@ -6996,6 +7028,14 @@ 293 + + Engagement per Day + Engagement pro Tag + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 76 + + Guides Ratgeber @@ -7134,6 +7174,14 @@ 167 + + Country + Land + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 37 + + API Key API-Schlüssel @@ -7282,6 +7330,14 @@ 234 + + API Requests Today + Heutige API Anfragen + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 86 + + Default Market Price Standardmarktpreis @@ -8128,7 +8184,7 @@ Anlageprofil verwalten apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 442 + 465 @@ -8152,7 +8208,7 @@ Ø Preis pro Einheit apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts - 111 + 113 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -8543,12 +8599,12 @@ 128 - + Registration Date Registrierungsdatum apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 22 + 23 diff --git a/apps/client/src/locales/messages.es.xlf b/apps/client/src/locales/messages.es.xlf index 29746f597..5c064d234 100644 --- a/apps/client/src/locales/messages.es.xlf +++ b/apps/client/src/locales/messages.es.xlf @@ -618,6 +618,14 @@ 200 + + Activities + Activities + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 61 + + Do you really want to delete this user? ¿Estás seguro de eliminar este usuario? @@ -967,7 +975,7 @@ Reporta un anomalía de los datos apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 452 + 450 @@ -1265,10 +1273,6 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html 252 - - apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 12 - Granted Access @@ -4290,6 +4294,14 @@ 210 + + User ID + User ID + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 12 + + Free Plan Plan gratuito @@ -5748,6 +5760,14 @@ 364 + + Close Holding + Close Holding + + apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html + 441 + + Absolute Asset Performance Rendimiento absoluto de los activos @@ -6566,7 +6586,7 @@ Inactiva apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 87 + 88 @@ -6669,6 +6689,14 @@ 11 + + Role + Role + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 31 + + Yes @@ -6680,6 +6708,10 @@ Accounts Accounts + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 51 + libs/ui/src/lib/assistant/assistant.html 84 @@ -6973,6 +7005,14 @@ 293 + + Engagement per Day + Engagement per Day + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 76 + + Guides Guías @@ -7111,6 +7151,14 @@ 167 + + Country + Country + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 37 + + API Key Clave API @@ -7259,6 +7307,14 @@ 234 + + API Requests Today + API Requests Today + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 86 + + Default Market Price Precio de mercado por defecto @@ -8129,7 +8185,7 @@ Gestionar perfil de activo apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 442 + 465 @@ -8153,7 +8209,7 @@ Precio medio por unidad apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts - 111 + 113 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -8544,12 +8600,12 @@ 128 - + Registration Date Registration Date apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 22 + 23 diff --git a/apps/client/src/locales/messages.fr.xlf b/apps/client/src/locales/messages.fr.xlf index 9b40a3031..a616256d1 100644 --- a/apps/client/src/locales/messages.fr.xlf +++ b/apps/client/src/locales/messages.fr.xlf @@ -825,6 +825,14 @@ 200 + + Activities + Activities + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 61 + + Do you really want to delete this user? Voulez-vous vraiment supprimer cet·te utilisateur·rice ? @@ -1254,7 +1262,7 @@ Signaler une Erreur de Données apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 452 + 450 @@ -1612,10 +1620,6 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html 252 - - apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 12 - Granted Access @@ -4289,6 +4293,14 @@ 210 + + User ID + User ID + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 12 + + Free Plan Plan gratuit @@ -5747,6 +5759,14 @@ 364 + + Close Holding + Close Holding + + apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html + 441 + + Absolute Asset Performance Performance des Actifs en valeur absolue @@ -6565,7 +6585,7 @@ Inactif apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 87 + 88 @@ -6668,6 +6688,14 @@ 11 + + Role + Role + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 31 + + Yes Oui @@ -6679,6 +6707,10 @@ Accounts Accounts + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 51 + libs/ui/src/lib/assistant/assistant.html 84 @@ -6972,6 +7004,14 @@ 293 + + Engagement per Day + Engagement per Day + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 76 + + Guides Guides @@ -7110,6 +7150,14 @@ 167 + + Country + Country + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 37 + + API Key Clé API @@ -7258,6 +7306,14 @@ 234 + + API Requests Today + API Requests Today + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 86 + + Default Market Price Prix du marché par défaut @@ -8128,7 +8184,7 @@ Gérer le profil d’actif apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 442 + 465 @@ -8152,7 +8208,7 @@ Average Unit Price apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts - 111 + 113 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -8543,12 +8599,12 @@ 128 - + Registration Date Registration Date apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 22 + 23 diff --git a/apps/client/src/locales/messages.it.xlf b/apps/client/src/locales/messages.it.xlf index f720742c8..f65b225f4 100644 --- a/apps/client/src/locales/messages.it.xlf +++ b/apps/client/src/locales/messages.it.xlf @@ -618,6 +618,14 @@ 200 + + Activities + Activities + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 61 + + Do you really want to delete this user? Vuoi davvero eliminare questo utente? @@ -967,7 +975,7 @@ Segnala un’anomalia dei dati apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 452 + 450 @@ -1265,10 +1273,6 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html 252 - - apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 12 - Granted Access @@ -4290,6 +4294,14 @@ 210 + + User ID + User ID + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 12 + + Free Plan Piano gratuito @@ -5748,6 +5760,14 @@ 364 + + Close Holding + Close Holding + + apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html + 441 + + Absolute Asset Performance Rendimento assoluto dell’Asset @@ -6566,7 +6586,7 @@ Inattivo apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 87 + 88 @@ -6669,6 +6689,14 @@ 11 + + Role + Role + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 31 + + Yes Si @@ -6680,6 +6708,10 @@ Accounts Accounts + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 51 + libs/ui/src/lib/assistant/assistant.html 84 @@ -6973,6 +7005,14 @@ 293 + + Engagement per Day + Engagement per Day + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 76 + + Guides Guide @@ -7111,6 +7151,14 @@ 167 + + Country + Country + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 37 + + API Key API Key @@ -7259,6 +7307,14 @@ 234 + + API Requests Today + API Requests Today + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 86 + + Default Market Price Prezzo di mercato predefinito @@ -8129,7 +8185,7 @@ Gestisci profilo risorsa apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 442 + 465 @@ -8153,7 +8209,7 @@ Average Unit Price apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts - 111 + 113 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -8544,12 +8600,12 @@ 128 - + Registration Date Registration Date apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 22 + 23 diff --git a/apps/client/src/locales/messages.nl.xlf b/apps/client/src/locales/messages.nl.xlf index 869b932aa..adf4bd27b 100644 --- a/apps/client/src/locales/messages.nl.xlf +++ b/apps/client/src/locales/messages.nl.xlf @@ -617,6 +617,14 @@ 200 + + Activities + Activities + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 61 + + Do you really want to delete this user? Wilt je deze gebruiker echt verwijderen? @@ -966,7 +974,7 @@ Gegevensstoring melden apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 452 + 450 @@ -1264,10 +1272,6 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html 252 - - apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 12 - Granted Access @@ -4289,6 +4293,14 @@ 210 + + User ID + User ID + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 12 + + Free Plan Gratis abonnement @@ -5747,6 +5759,14 @@ 364 + + Close Holding + Close Holding + + apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html + 441 + + Absolute Asset Performance Absolute Activaprestaties @@ -6565,7 +6585,7 @@ Inactief apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 87 + 88 @@ -6668,6 +6688,14 @@ 11 + + Role + Role + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 31 + + Yes Ja @@ -6679,6 +6707,10 @@ Accounts Accounts + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 51 + libs/ui/src/lib/assistant/assistant.html 84 @@ -6972,6 +7004,14 @@ 293 + + Engagement per Day + Engagement per Day + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 76 + + Guides Gidsen @@ -7110,6 +7150,14 @@ 167 + + Country + Country + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 37 + + API Key API-sleutel @@ -7258,6 +7306,14 @@ 234 + + API Requests Today + API Requests Today + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 86 + + Default Market Price Standaard Marktprijs @@ -8128,7 +8184,7 @@ Beheer activaprofiel apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 442 + 465 @@ -8152,7 +8208,7 @@ Gemiddelde eenheidsprijs apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts - 111 + 113 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -8543,12 +8599,12 @@ 128 - + Registration Date Registration Date apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 22 + 23 diff --git a/apps/client/src/locales/messages.pl.xlf b/apps/client/src/locales/messages.pl.xlf index 87c485b25..378b0a81a 100644 --- a/apps/client/src/locales/messages.pl.xlf +++ b/apps/client/src/locales/messages.pl.xlf @@ -1166,6 +1166,14 @@ 200 + + Activities + Activities + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 61 + + Add Platform Dodaj Platformę @@ -1875,7 +1883,7 @@ Zgłoś Błąd Danych apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 452 + 450 @@ -2353,10 +2361,6 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html 252 - - apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 12 - Export Data @@ -4643,6 +4647,14 @@ 210 + + User ID + User ID + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 12 + + Free Plan Plan Darmowy @@ -5747,6 +5759,14 @@ 364 + + Close Holding + Close Holding + + apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html + 441 + + Absolute Asset Performance Łączny wynik aktywów @@ -6565,7 +6585,7 @@ Nieaktywny apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 87 + 88 @@ -6668,6 +6688,14 @@ 11 + + Role + Role + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 31 + + Yes Tak @@ -6679,6 +6707,10 @@ Accounts Accounts + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 51 + libs/ui/src/lib/assistant/assistant.html 84 @@ -6972,6 +7004,14 @@ 293 + + Engagement per Day + Engagement per Day + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 76 + + Guides Poradniki @@ -7110,6 +7150,14 @@ 167 + + Country + Country + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 37 + + API Key Klucz API @@ -7258,6 +7306,14 @@ 234 + + API Requests Today + API Requests Today + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 86 + + Default Market Price Domyślna cena rynkowa @@ -8128,7 +8184,7 @@ Zarządzaj profilem aktywów apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 442 + 465 @@ -8152,7 +8208,7 @@ Średnia cena jednostkowa apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts - 111 + 113 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -8543,12 +8599,12 @@ 128 - + Registration Date Registration Date apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 22 + 23 diff --git a/apps/client/src/locales/messages.pt.xlf b/apps/client/src/locales/messages.pt.xlf index 8d93b9ecb..6a652b5c6 100644 --- a/apps/client/src/locales/messages.pt.xlf +++ b/apps/client/src/locales/messages.pt.xlf @@ -697,6 +697,14 @@ 200 + + Activities + Activities + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 61 + + Do you really want to delete this user? Deseja realmente excluir este utilizador? @@ -1214,7 +1222,7 @@ Dados do Relatório com Problema apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 452 + 450 @@ -1608,10 +1616,6 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html 252 - - apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 12 - Granted Access @@ -4289,6 +4293,14 @@ 210 + + User ID + User ID + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 12 + + Free Plan Plano gratuito @@ -5747,6 +5759,14 @@ 364 + + Close Holding + Close Holding + + apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html + 441 + + Absolute Asset Performance Desempenho absoluto de ativos @@ -6565,7 +6585,7 @@ Inativo apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 87 + 88 @@ -6668,6 +6688,14 @@ 11 + + Role + Role + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 31 + + Yes Sim @@ -6679,6 +6707,10 @@ Accounts Accounts + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 51 + libs/ui/src/lib/assistant/assistant.html 84 @@ -6972,6 +7004,14 @@ 293 + + Engagement per Day + Engagement per Day + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 76 + + Guides Guias @@ -7110,6 +7150,14 @@ 167 + + Country + Country + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 37 + + API Key Chave de API @@ -7258,6 +7306,14 @@ 234 + + API Requests Today + API Requests Today + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 86 + + Default Market Price Preço de mercado padrão @@ -8128,7 +8184,7 @@ Gerenciar perfil de ativos apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 442 + 465 @@ -8152,7 +8208,7 @@ Preço médio unitário apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts - 111 + 113 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -8543,12 +8599,12 @@ 128 - + Registration Date Registration Date apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 22 + 23 diff --git a/apps/client/src/locales/messages.tr.xlf b/apps/client/src/locales/messages.tr.xlf index fd87792f9..d0dd4191d 100644 --- a/apps/client/src/locales/messages.tr.xlf +++ b/apps/client/src/locales/messages.tr.xlf @@ -1078,6 +1078,14 @@ 200 + + Activities + Activities + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 61 + + Add Platform Platform Ekle @@ -1731,7 +1739,7 @@ Rapor Veri Sorunu apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 452 + 450 @@ -4131,6 +4139,14 @@ 210 + + User ID + User ID + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 12 + + Free Plan Ücretsiz Plan @@ -4470,10 +4486,6 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html 252 - - apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 12 - Export Data @@ -5747,6 +5759,14 @@ 364 + + Close Holding + Close Holding + + apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html + 441 + + Absolute Asset Performance Mutlak Varlık Performansı @@ -6565,7 +6585,7 @@ Pasif apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 87 + 88 @@ -6668,6 +6688,14 @@ 11 + + Role + Role + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 31 + + Yes Evet @@ -6679,6 +6707,10 @@ Accounts Accounts + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 51 + libs/ui/src/lib/assistant/assistant.html 84 @@ -6972,6 +7004,14 @@ 293 + + Engagement per Day + Engagement per Day + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 76 + + Guides Kılavuzlar @@ -7110,6 +7150,14 @@ 167 + + Country + Country + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 37 + + API Key API Anahtarı @@ -7258,6 +7306,14 @@ 234 + + API Requests Today + API Requests Today + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 86 + + Default Market Price Varsayılan Piyasa Fiyatı @@ -8128,7 +8184,7 @@ Manage Asset Profile apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 442 + 465 @@ -8152,7 +8208,7 @@ Average Unit Price apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts - 111 + 113 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -8543,12 +8599,12 @@ 128 - + Registration Date Registration Date apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 22 + 23 diff --git a/apps/client/src/locales/messages.uk.xlf b/apps/client/src/locales/messages.uk.xlf index 61c9be112..6698f404a 100644 --- a/apps/client/src/locales/messages.uk.xlf +++ b/apps/client/src/locales/messages.uk.xlf @@ -345,6 +345,10 @@ Accounts Accounts + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 51 + libs/ui/src/lib/assistant/assistant.html 84 @@ -1362,6 +1366,14 @@ 200 + + Activities + Activities + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 61 + + Add Platform Додати платформу @@ -1875,7 +1887,7 @@ Повідомити про збій даних apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 452 + 450 @@ -2625,10 +2637,6 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html 252 - - apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 12 - Me @@ -4779,6 +4787,14 @@ 91 + + Close Holding + Close Holding + + apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html + 441 + + Absolute Asset Performance Абсолютна прибутковість активів @@ -4936,7 +4952,7 @@ Неактивний apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 87 + 88 @@ -5255,6 +5271,14 @@ 293 + + Engagement per Day + Engagement per Day + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 76 + + Guides Посібники @@ -5786,6 +5810,14 @@ 210 + + User ID + User ID + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 12 + + can be used anonymously може використовуватися анонімно @@ -6750,6 +6782,14 @@ 33 + + Role + Role + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 31 + + Yes Так @@ -7166,6 +7206,14 @@ 110 + + Country + Country + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 37 + + API Key Ключ API @@ -7258,6 +7306,14 @@ 234 + + API Requests Today + API Requests Today + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 86 + + Default Market Price Default Market Price @@ -8128,7 +8184,7 @@ Manage Asset Profile apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 442 + 465 @@ -8152,7 +8208,7 @@ Average Unit Price apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts - 111 + 113 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -8543,12 +8599,12 @@ 128 - + Registration Date Registration Date apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 22 + 23 diff --git a/apps/client/src/locales/messages.xlf b/apps/client/src/locales/messages.xlf index b9b3fb451..1fb1b659d 100644 --- a/apps/client/src/locales/messages.xlf +++ b/apps/client/src/locales/messages.xlf @@ -1106,6 +1106,13 @@ 200 + + Activities + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 61 + + Add Platform @@ -1747,7 +1754,7 @@ Report Data Glitch apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 452 + 450 @@ -2181,10 +2188,6 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html 252 - - apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 12 - Export Data @@ -4261,6 +4264,13 @@ 210 + + User ID + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 12 + + Free Plan @@ -5233,6 +5243,13 @@ 193 + + Close Holding + + apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html + 441 + + Absolute Asset Performance @@ -6000,6 +6017,13 @@ 9 + + Role + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 31 + + Yes @@ -6018,7 +6042,7 @@ Inactive apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 87 + 88 @@ -6136,6 +6160,10 @@ Accounts + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 51 + libs/ui/src/lib/assistant/assistant.html 84 @@ -6361,6 +6389,13 @@ 291 + + Engagement per Day + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 76 + + Guides @@ -6444,6 +6479,13 @@ 26 + + Country + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 37 + + API Key @@ -6600,6 +6642,13 @@ 450 + + API Requests Today + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 86 + + Default Market Price @@ -7358,7 +7407,7 @@ Manage Asset Profile apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 442 + 465 @@ -7379,7 +7428,7 @@ Average Unit Price apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts - 111 + 113 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -7723,11 +7772,11 @@ 128 - + Registration Date apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 22 + 23 diff --git a/apps/client/src/locales/messages.zh.xlf b/apps/client/src/locales/messages.zh.xlf index 90e239595..bb136c783 100644 --- a/apps/client/src/locales/messages.zh.xlf +++ b/apps/client/src/locales/messages.zh.xlf @@ -1175,6 +1175,14 @@ 200 + + Activities + Activities + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 61 + + Add Platform 添加平台 @@ -1884,7 +1892,7 @@ 报告数据故障 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 452 + 450 @@ -2362,10 +2370,6 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html 252 - - apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 12 - Export Data @@ -4652,6 +4656,14 @@ 210 + + User ID + User ID + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 12 + + Free Plan 免费计划 @@ -5732,6 +5744,14 @@ 193 + + Close Holding + Close Holding + + apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html + 441 + + Absolute Asset Performance 绝对资产回报 @@ -6566,7 +6586,7 @@ 非活跃 apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 87 + 88 @@ -6669,6 +6689,14 @@ 11 + + Role + Role + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 31 + + Yes @@ -6680,6 +6708,10 @@ Accounts Accounts + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 51 + libs/ui/src/lib/assistant/assistant.html 84 @@ -6973,6 +7005,14 @@ 293 + + Engagement per Day + Engagement per Day + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 76 + + Guides 指南 @@ -7111,6 +7151,14 @@ 167 + + Country + Country + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 37 + + API Key API 密钥 @@ -7259,6 +7307,14 @@ 234 + + API Requests Today + API Requests Today + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 86 + + Default Market Price 默认市场价格 @@ -8129,7 +8185,7 @@ 管理资产概况 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 442 + 465 @@ -8153,7 +8209,7 @@ 平均单位价格 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts - 111 + 113 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -8544,12 +8600,12 @@ 128 - + Registration Date Registration Date apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 22 + 23 From ecc35c9ffaae297e607d650cbe26c54a4fae2430 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Sun, 26 Oct 2025 08:59:36 +0100 Subject: [PATCH 49/92] Task/improve typings of dialogs (#5846) * Improve typings --- apps/client/src/app/app.component.ts | 7 +- .../admin-market-data.component.ts | 27 ++++--- .../admin-platform.component.ts | 62 +++++++++------- .../admin-tag/admin-tag.component.ts | 14 +++- .../interfaces/interfaces.ts | 2 +- .../admin-users/admin-users.component.ts | 7 +- .../app/components/header/header.component.ts | 6 +- .../home-watchlist.component.ts | 20 ++--- .../interfaces/interfaces.ts | 5 ++ ...ogin-with-access-token-dialog.component.ts | 4 +- .../src/app/components/rule/rule.component.ts | 7 +- .../user-account-access.component.ts | 15 +++- .../pages/accounts/accounts-page.component.ts | 25 +++++-- .../interfaces/interfaces.ts | 2 +- .../activities/activities-page.component.ts | 73 ++++++++++--------- .../interfaces/interfaces.ts | 1 - .../interfaces/interfaces.ts | 2 +- .../allocations/allocations-page.component.ts | 7 +- .../pages/register/register-page.component.ts | 22 +++--- .../src/app/services/user/user.service.ts | 22 +++--- .../src/lib/benchmark/benchmark.component.ts | 7 +- ...historical-market-data-editor.component.ts | 28 +++---- 22 files changed, 221 insertions(+), 144 deletions(-) create mode 100644 apps/client/src/app/components/login-with-access-token-dialog/interfaces/interfaces.ts diff --git a/apps/client/src/app/app.component.ts b/apps/client/src/app/app.component.ts index bddd7d3da..5ecb7bf8b 100644 --- a/apps/client/src/app/app.component.ts +++ b/apps/client/src/app/app.component.ts @@ -276,7 +276,10 @@ export class AppComponent implements OnDestroy, OnInit { .subscribe((user) => { this.user = user; - const dialogRef = this.dialog.open(GfHoldingDetailDialogComponent, { + const dialogRef = this.dialog.open< + GfHoldingDetailDialogComponent, + HoldingDetailDialogParams + >(GfHoldingDetailDialogComponent, { autoFocus: false, data: { dataSource, @@ -302,7 +305,7 @@ export class AppComponent implements OnDestroy, OnInit { hasPermission(this.user?.permissions, permissions.updateOrder) && !this.user?.settings?.isRestrictedView, locale: this.user?.settings?.locale - } as HoldingDetailDialogParams, + }, height: this.deviceType === 'mobile' ? '98vh' : '80vh', width: this.deviceType === 'mobile' ? '100vw' : '50rem' }); 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 e907f4b03..2b96bda3b 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 @@ -430,7 +430,10 @@ export class GfAdminMarketDataComponent .subscribe((user) => { this.user = user; - const dialogRef = this.dialog.open(GfAssetProfileDialogComponent, { + const dialogRef = this.dialog.open< + GfAssetProfileDialogComponent, + AssetProfileDialogParams + >(GfAssetProfileDialogComponent, { autoFocus: false, data: { dataSource, @@ -438,7 +441,7 @@ export class GfAdminMarketDataComponent colorScheme: this.user?.settings.colorScheme, deviceType: this.deviceType, locale: this.user?.settings?.locale - } as AssetProfileDialogParams, + }, height: this.deviceType === 'mobile' ? '98vh' : '80vh', width: this.deviceType === 'mobile' ? '100vw' : '50rem' }); @@ -465,17 +468,17 @@ export class GfAdminMarketDataComponent .subscribe((user) => { this.user = user; - const dialogRef = this.dialog.open( + const dialogRef = this.dialog.open< GfCreateAssetProfileDialogComponent, - { - autoFocus: false, - data: { - deviceType: this.deviceType, - locale: this.user?.settings?.locale - } as CreateAssetProfileDialogParams, - width: this.deviceType === 'mobile' ? '100vw' : '50rem' - } - ); + CreateAssetProfileDialogParams + >(GfCreateAssetProfileDialogComponent, { + autoFocus: false, + data: { + deviceType: this.deviceType, + locale: this.user?.settings?.locale + }, + width: this.deviceType === 'mobile' ? '100vw' : '50rem' + }); dialogRef .afterClosed() diff --git a/apps/client/src/app/components/admin-platform/admin-platform.component.ts b/apps/client/src/app/components/admin-platform/admin-platform.component.ts index 845c7f375..6c95cee0b 100644 --- a/apps/client/src/app/components/admin-platform/admin-platform.component.ts +++ b/apps/client/src/app/components/admin-platform/admin-platform.component.ts @@ -34,6 +34,7 @@ import { DeviceDetectorService } from 'ngx-device-detector'; import { Subject, takeUntil } from 'rxjs'; import { GfCreateOrUpdatePlatformDialogComponent } from './create-or-update-platform-dialog/create-or-update-platform-dialog.component'; +import { CreateOrUpdatePlatformDialogParams } from './create-or-update-platform-dialog/interfaces/interfaces'; @Component({ changeDetection: ChangeDetectionStrategy.OnPush, @@ -153,19 +154,20 @@ export class GfAdminPlatformComponent implements OnInit, OnDestroy { } private openCreatePlatformDialog() { - const dialogRef = this.dialog.open( + const dialogRef = this.dialog.open< GfCreateOrUpdatePlatformDialogComponent, - { - data: { - platform: { - name: null, - url: null - } - }, - height: this.deviceType === 'mobile' ? '98vh' : undefined, - width: this.deviceType === 'mobile' ? '100vw' : '50rem' - } - ); + CreateOrUpdatePlatformDialogParams + >(GfCreateOrUpdatePlatformDialogComponent, { + data: { + platform: { + id: null, + name: null, + url: null + } + }, + height: this.deviceType === 'mobile' ? '98vh' : undefined, + width: this.deviceType === 'mobile' ? '100vw' : '50rem' + }); dialogRef .afterClosed() @@ -191,21 +193,29 @@ export class GfAdminPlatformComponent implements OnInit, OnDestroy { }); } - private openUpdatePlatformDialog({ id, name, url }) { - const dialogRef = this.dialog.open( + private openUpdatePlatformDialog({ + id, + name, + url + }: { + id: string; + name: string; + url: string; + }) { + const dialogRef = this.dialog.open< GfCreateOrUpdatePlatformDialogComponent, - { - data: { - platform: { - id, - name, - url - } - }, - height: this.deviceType === 'mobile' ? '98vh' : undefined, - width: this.deviceType === 'mobile' ? '100vw' : '50rem' - } - ); + CreateOrUpdatePlatformDialogParams + >(GfCreateOrUpdatePlatformDialogComponent, { + data: { + platform: { + id, + name, + url + } + }, + height: this.deviceType === 'mobile' ? '98vh' : undefined, + width: this.deviceType === 'mobile' ? '100vw' : '50rem' + }); dialogRef .afterClosed() diff --git a/apps/client/src/app/components/admin-tag/admin-tag.component.ts b/apps/client/src/app/components/admin-tag/admin-tag.component.ts index de4c8cedc..5552fa01b 100644 --- a/apps/client/src/app/components/admin-tag/admin-tag.component.ts +++ b/apps/client/src/app/components/admin-tag/admin-tag.component.ts @@ -32,6 +32,7 @@ import { DeviceDetectorService } from 'ngx-device-detector'; import { Subject, takeUntil } from 'rxjs'; import { GfCreateOrUpdateTagDialogComponent } from './create-or-update-tag-dialog/create-or-update-tag-dialog.component'; +import { CreateOrUpdateTagDialogParams } from './create-or-update-tag-dialog/interfaces/interfaces'; @Component({ changeDetection: ChangeDetectionStrategy.OnPush, @@ -149,9 +150,13 @@ export class GfAdminTagComponent implements OnInit, OnDestroy { } private openCreateTagDialog() { - const dialogRef = this.dialog.open(GfCreateOrUpdateTagDialogComponent, { + const dialogRef = this.dialog.open< + GfCreateOrUpdateTagDialogComponent, + CreateOrUpdateTagDialogParams + >(GfCreateOrUpdateTagDialogComponent, { data: { tag: { + id: null, name: null } }, @@ -183,8 +188,11 @@ export class GfAdminTagComponent implements OnInit, OnDestroy { }); } - private openUpdateTagDialog({ id, name }) { - const dialogRef = this.dialog.open(GfCreateOrUpdateTagDialogComponent, { + private openUpdateTagDialog({ id, name }: { id: string; name: string }) { + const dialogRef = this.dialog.open< + GfCreateOrUpdateTagDialogComponent, + CreateOrUpdateTagDialogParams + >(GfCreateOrUpdateTagDialogComponent, { data: { tag: { id, diff --git a/apps/client/src/app/components/admin-tag/create-or-update-tag-dialog/interfaces/interfaces.ts b/apps/client/src/app/components/admin-tag/create-or-update-tag-dialog/interfaces/interfaces.ts index bd7214786..4b7f83e93 100644 --- a/apps/client/src/app/components/admin-tag/create-or-update-tag-dialog/interfaces/interfaces.ts +++ b/apps/client/src/app/components/admin-tag/create-or-update-tag-dialog/interfaces/interfaces.ts @@ -1,5 +1,5 @@ import { Tag } from '@prisma/client'; export interface CreateOrUpdateTagDialogParams { - tag: Tag; + tag: Pick; } diff --git a/apps/client/src/app/components/admin-users/admin-users.component.ts b/apps/client/src/app/components/admin-users/admin-users.component.ts index 4c20f3fe9..fba54b0bb 100644 --- a/apps/client/src/app/components/admin-users/admin-users.component.ts +++ b/apps/client/src/app/components/admin-users/admin-users.component.ts @@ -288,14 +288,17 @@ export class GfAdminUsersComponent implements OnDestroy, OnInit { return; } - const dialogRef = this.dialog.open(GfUserDetailDialogComponent, { + const dialogRef = this.dialog.open< + GfUserDetailDialogComponent, + UserDetailDialogParams + >(GfUserDetailDialogComponent, { autoFocus: false, data: { userData, deviceType: this.deviceType, hasPermissionForSubscription: this.hasPermissionForSubscription, locale: this.user?.settings?.locale - } as UserDetailDialogParams, + }, height: this.deviceType === 'mobile' ? '98vh' : '60vh', width: this.deviceType === 'mobile' ? '100vw' : '50rem' }); diff --git a/apps/client/src/app/components/header/header.component.ts b/apps/client/src/app/components/header/header.component.ts index 6e1a909a1..3f011fec4 100644 --- a/apps/client/src/app/components/header/header.component.ts +++ b/apps/client/src/app/components/header/header.component.ts @@ -1,4 +1,5 @@ import { UpdateUserSettingDto } from '@ghostfolio/api/app/user/update-user-setting.dto'; +import { LoginWithAccessTokenDialogParams } from '@ghostfolio/client/components/login-with-access-token-dialog/interfaces/interfaces'; import { GfLoginWithAccessTokenDialogComponent } from '@ghostfolio/client/components/login-with-access-token-dialog/login-with-access-token-dialog.component'; import { LayoutService } from '@ghostfolio/client/core/layout.service'; import { NotificationService } from '@ghostfolio/client/core/notification/notification.service'; @@ -271,7 +272,10 @@ export class GfHeaderComponent implements OnChanges { } public openLoginDialog() { - const dialogRef = this.dialog.open(GfLoginWithAccessTokenDialogComponent, { + const dialogRef = this.dialog.open< + GfLoginWithAccessTokenDialogComponent, + LoginWithAccessTokenDialogParams + >(GfLoginWithAccessTokenDialogComponent, { autoFocus: false, data: { accessToken: '', 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 4c0b614c0..ab43e54dd 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 @@ -149,17 +149,17 @@ export class GfHomeWatchlistComponent implements OnDestroy, OnInit { .subscribe((user) => { this.user = user; - const dialogRef = this.dialog.open( + const dialogRef = this.dialog.open< GfCreateWatchlistItemDialogComponent, - { - autoFocus: false, - data: { - deviceType: this.deviceType, - locale: this.user?.settings?.locale - } as CreateWatchlistItemDialogParams, - width: this.deviceType === 'mobile' ? '100vw' : '50rem' - } - ); + CreateWatchlistItemDialogParams + >(GfCreateWatchlistItemDialogComponent, { + autoFocus: false, + data: { + deviceType: this.deviceType, + locale: this.user?.settings?.locale + }, + width: this.deviceType === 'mobile' ? '100vw' : '50rem' + }); dialogRef .afterClosed() diff --git a/apps/client/src/app/components/login-with-access-token-dialog/interfaces/interfaces.ts b/apps/client/src/app/components/login-with-access-token-dialog/interfaces/interfaces.ts new file mode 100644 index 000000000..2fa8b7ea4 --- /dev/null +++ b/apps/client/src/app/components/login-with-access-token-dialog/interfaces/interfaces.ts @@ -0,0 +1,5 @@ +export interface LoginWithAccessTokenDialogParams { + accessToken: string; + hasPermissionToUseSocialLogin: boolean; + title: string; +} diff --git a/apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.component.ts b/apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.component.ts index 3812a18b9..aaca03594 100644 --- a/apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.component.ts +++ b/apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.component.ts @@ -26,6 +26,8 @@ import { IonIcon } from '@ionic/angular/standalone'; import { addIcons } from 'ionicons'; import { eyeOffOutline, eyeOutline } from 'ionicons/icons'; +import { LoginWithAccessTokenDialogParams } from './interfaces/interfaces'; + @Component({ changeDetection: ChangeDetectionStrategy.OnPush, imports: [ @@ -51,7 +53,7 @@ export class GfLoginWithAccessTokenDialogComponent { public isAccessTokenHidden = true; public constructor( - @Inject(MAT_DIALOG_DATA) public data: any, + @Inject(MAT_DIALOG_DATA) public data: LoginWithAccessTokenDialogParams, public dialogRef: MatDialogRef, private internetIdentityService: InternetIdentityService, private router: Router, diff --git a/apps/client/src/app/components/rule/rule.component.ts b/apps/client/src/app/components/rule/rule.component.ts index a4e9f4dea..5ed39d5be 100644 --- a/apps/client/src/app/components/rule/rule.component.ts +++ b/apps/client/src/app/components/rule/rule.component.ts @@ -79,13 +79,16 @@ export class GfRuleComponent implements OnInit { } public onCustomizeRule(rule: PortfolioReportRule) { - const dialogRef = this.dialog.open(GfRuleSettingsDialogComponent, { + const dialogRef = this.dialog.open< + GfRuleSettingsDialogComponent, + RuleSettingsDialogParams + >(GfRuleSettingsDialogComponent, { data: { rule, categoryName: this.categoryName, locale: this.locale, settings: this.settings - } as RuleSettingsDialogParams, + }, width: this.deviceType === 'mobile' ? '100vw' : '50rem' }); diff --git a/apps/client/src/app/components/user-account-access/user-account-access.component.ts b/apps/client/src/app/components/user-account-access/user-account-access.component.ts index bdb9af6ed..afcb9d9c8 100644 --- a/apps/client/src/app/components/user-account-access/user-account-access.component.ts +++ b/apps/client/src/app/components/user-account-access/user-account-access.component.ts @@ -31,6 +31,7 @@ import { EMPTY, Subject } from 'rxjs'; import { catchError, takeUntil } from 'rxjs/operators'; import { GfCreateOrUpdateAccessDialogComponent } from './create-or-update-access-dialog/create-or-update-access-dialog.component'; +import { CreateOrUpdateAccessDialogParams } from './create-or-update-access-dialog/interfaces/interfaces'; @Component({ changeDetection: ChangeDetectionStrategy.OnPush, @@ -187,10 +188,15 @@ export class GfUserAccountAccessComponent implements OnDestroy, OnInit { } private openCreateAccessDialog() { - const dialogRef = this.dialog.open(GfCreateOrUpdateAccessDialogComponent, { + const dialogRef = this.dialog.open< + GfCreateOrUpdateAccessDialogComponent, + CreateOrUpdateAccessDialogParams + >(GfCreateOrUpdateAccessDialogComponent, { data: { access: { alias: '', + grantee: null, + id: null, permissions: ['READ_RESTRICTED'], type: 'PRIVATE' } @@ -219,12 +225,15 @@ export class GfUserAccountAccessComponent implements OnDestroy, OnInit { return; } - const dialogRef = this.dialog.open(GfCreateOrUpdateAccessDialogComponent, { + const dialogRef = this.dialog.open< + GfCreateOrUpdateAccessDialogComponent, + CreateOrUpdateAccessDialogParams + >(GfCreateOrUpdateAccessDialogComponent, { data: { access: { alias: access.alias, - id: access.id, grantee: access.grantee === 'Public' ? null : access.grantee, + id: access.id, permissions: access.permissions, type: access.type } 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 f09901e45..3a1616b6f 100644 --- a/apps/client/src/app/pages/accounts/accounts-page.component.ts +++ b/apps/client/src/app/pages/accounts/accounts-page.component.ts @@ -23,6 +23,8 @@ import { EMPTY, Subject, Subscription } from 'rxjs'; import { catchError, takeUntil } from 'rxjs/operators'; 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'; @Component({ @@ -179,7 +181,10 @@ export class GfAccountsPageComponent implements OnDestroy, OnInit { name, platformId }: AccountModel) { - const dialogRef = this.dialog.open(GfCreateOrUpdateAccountDialogComponent, { + const dialogRef = this.dialog.open< + GfCreateOrUpdateAccountDialogComponent, + CreateOrUpdateAccountDialogParams + >(GfCreateOrUpdateAccountDialogComponent, { data: { account: { balance, @@ -227,7 +232,10 @@ export class GfAccountsPageComponent implements OnDestroy, OnInit { } private openAccountDetailDialog(aAccountId: string) { - const dialogRef = this.dialog.open(GfAccountDetailDialogComponent, { + const dialogRef = this.dialog.open< + GfAccountDetailDialogComponent, + AccountDetailDialogParams + >(GfAccountDetailDialogComponent, { autoFocus: false, data: { accountId: aAccountId, @@ -237,7 +245,7 @@ export class GfAccountsPageComponent implements OnDestroy, OnInit { !this.hasImpersonationId && hasPermission(this.user?.permissions, permissions.createOrder) && !this.user?.settings?.isRestrictedView - } as AccountDetailDialogParams, + }, height: this.deviceType === 'mobile' ? '98vh' : '80vh', width: this.deviceType === 'mobile' ? '100vw' : '50rem' }); @@ -253,12 +261,16 @@ export class GfAccountsPageComponent implements OnDestroy, OnInit { } private openCreateAccountDialog() { - const dialogRef = this.dialog.open(GfCreateOrUpdateAccountDialogComponent, { + const dialogRef = this.dialog.open< + GfCreateOrUpdateAccountDialogComponent, + CreateOrUpdateAccountDialogParams + >(GfCreateOrUpdateAccountDialogComponent, { data: { account: { balance: 0, comment: null, currency: this.user?.settings?.baseCurrency, + id: null, isExcluded: false, name: null, platformId: null @@ -295,7 +307,10 @@ export class GfAccountsPageComponent implements OnDestroy, OnInit { } private openTransferBalanceDialog() { - const dialogRef = this.dialog.open(GfTransferBalanceDialogComponent, { + const dialogRef = this.dialog.open< + GfTransferBalanceDialogComponent, + TransferBalanceDialogParams + >(GfTransferBalanceDialogComponent, { data: { accounts: this.accounts }, diff --git a/apps/client/src/app/pages/accounts/create-or-update-account-dialog/interfaces/interfaces.ts b/apps/client/src/app/pages/accounts/create-or-update-account-dialog/interfaces/interfaces.ts index ffe4f14f6..a3e6272f8 100644 --- a/apps/client/src/app/pages/accounts/create-or-update-account-dialog/interfaces/interfaces.ts +++ b/apps/client/src/app/pages/accounts/create-or-update-account-dialog/interfaces/interfaces.ts @@ -1,5 +1,5 @@ import { Account } from '@prisma/client'; export interface CreateOrUpdateAccountDialogParams { - account: Account; + account: Omit; } diff --git a/apps/client/src/app/pages/portfolio/activities/activities-page.component.ts b/apps/client/src/app/pages/portfolio/activities/activities-page.component.ts index ce99fbf77..6ee02bd8e 100644 --- a/apps/client/src/app/pages/portfolio/activities/activities-page.component.ts +++ b/apps/client/src/app/pages/portfolio/activities/activities-page.component.ts @@ -28,6 +28,7 @@ import { Subject, Subscription } from 'rxjs'; import { takeUntil } from 'rxjs/operators'; import { GfCreateOrUpdateActivityDialogComponent } from './create-or-update-activity-dialog/create-or-update-activity-dialog.component'; +import { CreateOrUpdateActivityDialogParams } from './create-or-update-activity-dialog/interfaces/interfaces'; import { GfImportActivitiesDialogComponent } from './import-activities-dialog/import-activities-dialog.component'; import { ImportActivitiesDialogParams } from './import-activities-dialog/interfaces/interfaces'; @@ -245,11 +246,14 @@ export class GfActivitiesPageComponent implements OnDestroy, OnInit { } public onImport() { - const dialogRef = this.dialog.open(GfImportActivitiesDialogComponent, { + const dialogRef = this.dialog.open< + GfImportActivitiesDialogComponent, + ImportActivitiesDialogParams + >(GfImportActivitiesDialogComponent, { data: { deviceType: this.deviceType, user: this.user - } as ImportActivitiesDialogParams, + }, height: this.deviceType === 'mobile' ? '98vh' : undefined, width: this.deviceType === 'mobile' ? '100vw' : '50rem' }); @@ -268,12 +272,15 @@ export class GfActivitiesPageComponent implements OnDestroy, OnInit { } public onImportDividends() { - const dialogRef = this.dialog.open(GfImportActivitiesDialogComponent, { + const dialogRef = this.dialog.open< + GfImportActivitiesDialogComponent, + ImportActivitiesDialogParams + >(GfImportActivitiesDialogComponent, { data: { activityTypes: ['DIVIDEND'], deviceType: this.deviceType, user: this.user - } as ImportActivitiesDialogParams, + }, height: this.deviceType === 'mobile' ? '98vh' : undefined, width: this.deviceType === 'mobile' ? '100vw' : '50rem' }); @@ -306,18 +313,18 @@ export class GfActivitiesPageComponent implements OnDestroy, OnInit { } public openUpdateActivityDialog(aActivity: Activity) { - const dialogRef = this.dialog.open( + const dialogRef = this.dialog.open< GfCreateOrUpdateActivityDialogComponent, - { - data: { - activity: aActivity, - accounts: this.user?.accounts, - user: this.user - }, - height: this.deviceType === 'mobile' ? '98vh' : '80vh', - width: this.deviceType === 'mobile' ? '100vw' : '50rem' - } - ); + CreateOrUpdateActivityDialogParams + >(GfCreateOrUpdateActivityDialogComponent, { + data: { + activity: aActivity, + accounts: this.user?.accounts, + user: this.user + }, + height: this.deviceType === 'mobile' ? '98vh' : '80vh', + width: this.deviceType === 'mobile' ? '100vw' : '50rem' + }); dialogRef .afterClosed() @@ -350,26 +357,26 @@ export class GfActivitiesPageComponent implements OnDestroy, OnInit { .subscribe((user) => { this.updateUser(user); - const dialogRef = this.dialog.open( + const dialogRef = this.dialog.open< GfCreateOrUpdateActivityDialogComponent, - { - data: { - accounts: this.user?.accounts, - activity: { - ...aActivity, - accountId: aActivity?.accountId, - date: new Date(), - id: null, - fee: 0, - type: aActivity?.type ?? 'BUY', - unitPrice: null - }, - user: this.user + CreateOrUpdateActivityDialogParams + >(GfCreateOrUpdateActivityDialogComponent, { + data: { + accounts: this.user?.accounts, + activity: { + ...aActivity, + accountId: aActivity?.accountId, + date: new Date(), + id: null, + fee: 0, + type: aActivity?.type ?? 'BUY', + unitPrice: null }, - height: this.deviceType === 'mobile' ? '98vh' : '80vh', - width: this.deviceType === 'mobile' ? '100vw' : '50rem' - } - ); + user: this.user + }, + height: this.deviceType === 'mobile' ? '98vh' : '80vh', + width: this.deviceType === 'mobile' ? '100vw' : '50rem' + }); dialogRef .afterClosed() diff --git a/apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/interfaces/interfaces.ts b/apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/interfaces/interfaces.ts index 60a39d361..cc454a66a 100644 --- a/apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/interfaces/interfaces.ts +++ b/apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/interfaces/interfaces.ts @@ -4,7 +4,6 @@ import { User } from '@ghostfolio/common/interfaces'; import { Account } from '@prisma/client'; export interface CreateOrUpdateActivityDialogParams { - accountId: string; accounts: Account[]; activity: Activity; user: User; diff --git a/apps/client/src/app/pages/portfolio/activities/import-activities-dialog/interfaces/interfaces.ts b/apps/client/src/app/pages/portfolio/activities/import-activities-dialog/interfaces/interfaces.ts index a2131db88..051345e60 100644 --- a/apps/client/src/app/pages/portfolio/activities/import-activities-dialog/interfaces/interfaces.ts +++ b/apps/client/src/app/pages/portfolio/activities/import-activities-dialog/interfaces/interfaces.ts @@ -3,7 +3,7 @@ import { User } from '@ghostfolio/common/interfaces'; import { Type } from '@prisma/client'; export interface ImportActivitiesDialogParams { - activityTypes: Type[]; + activityTypes?: Type[]; deviceType: string; user: User; } diff --git a/apps/client/src/app/pages/portfolio/allocations/allocations-page.component.ts b/apps/client/src/app/pages/portfolio/allocations/allocations-page.component.ts index da909a78d..b4de51701 100644 --- a/apps/client/src/app/pages/portfolio/allocations/allocations-page.component.ts +++ b/apps/client/src/app/pages/portfolio/allocations/allocations-page.component.ts @@ -558,7 +558,10 @@ export class GfAllocationsPageComponent implements OnDestroy, OnInit { } private openAccountDetailDialog(aAccountId: string) { - const dialogRef = this.dialog.open(GfAccountDetailDialogComponent, { + const dialogRef = this.dialog.open< + GfAccountDetailDialogComponent, + AccountDetailDialogParams + >(GfAccountDetailDialogComponent, { autoFocus: false, data: { accountId: aAccountId, @@ -568,7 +571,7 @@ export class GfAllocationsPageComponent implements OnDestroy, OnInit { !this.hasImpersonationId && hasPermission(this.user?.permissions, permissions.createOrder) && !this.user?.settings?.isRestrictedView - } as AccountDetailDialogParams, + }, height: this.deviceType === 'mobile' ? '98vh' : '80vh', width: this.deviceType === 'mobile' ? '100vw' : '50rem' }); diff --git a/apps/client/src/app/pages/register/register-page.component.ts b/apps/client/src/app/pages/register/register-page.component.ts index eff4e308b..acf3c40eb 100644 --- a/apps/client/src/app/pages/register/register-page.component.ts +++ b/apps/client/src/app/pages/register/register-page.component.ts @@ -84,18 +84,18 @@ export class GfRegisterPageComponent implements OnDestroy, OnInit { } public openShowAccessTokenDialog() { - const dialogRef = this.dialog.open( + const dialogRef = this.dialog.open< GfUserAccountRegistrationDialogComponent, - { - data: { - deviceType: this.deviceType, - needsToAcceptTermsOfService: this.hasPermissionForSubscription - } as UserAccountRegistrationDialogParams, - disableClose: true, - height: this.deviceType === 'mobile' ? '98vh' : undefined, - width: this.deviceType === 'mobile' ? '100vw' : '30rem' - } - ); + UserAccountRegistrationDialogParams + >(GfUserAccountRegistrationDialogComponent, { + data: { + deviceType: this.deviceType, + needsToAcceptTermsOfService: this.hasPermissionForSubscription + }, + disableClose: true, + height: this.deviceType === 'mobile' ? '98vh' : undefined, + width: this.deviceType === 'mobile' ? '100vw' : '30rem' + }); dialogRef .afterClosed() diff --git a/apps/client/src/app/services/user/user.service.ts b/apps/client/src/app/services/user/user.service.ts index f52a52975..bd9d7d04c 100644 --- a/apps/client/src/app/services/user/user.service.ts +++ b/apps/client/src/app/services/user/user.service.ts @@ -116,18 +116,18 @@ export class UserService extends ObservableStore { permissions.enableSubscriptionInterstitial ) ) { - const dialogRef = this.dialog.open( + const dialogRef = this.dialog.open< GfSubscriptionInterstitialDialogComponent, - { - autoFocus: false, - data: { - user - } as SubscriptionInterstitialDialogParams, - disableClose: true, - height: this.deviceType === 'mobile' ? '98vh' : '80vh', - width: this.deviceType === 'mobile' ? '100vw' : '50rem' - } - ); + SubscriptionInterstitialDialogParams + >(GfSubscriptionInterstitialDialogComponent, { + autoFocus: false, + data: { + user + }, + disableClose: true, + height: this.deviceType === 'mobile' ? '98vh' : '80vh', + width: this.deviceType === 'mobile' ? '100vw' : '50rem' + }); dialogRef .afterClosed() diff --git a/libs/ui/src/lib/benchmark/benchmark.component.ts b/libs/ui/src/lib/benchmark/benchmark.component.ts index 3af9bc674..bb66acba8 100644 --- a/libs/ui/src/lib/benchmark/benchmark.component.ts +++ b/libs/ui/src/lib/benchmark/benchmark.component.ts @@ -155,14 +155,17 @@ export class GfBenchmarkComponent implements OnChanges, OnDestroy { dataSource, symbol }: AssetProfileIdentifier) { - const dialogRef = this.dialog.open(GfBenchmarkDetailDialogComponent, { + const dialogRef = this.dialog.open< + GfBenchmarkDetailDialogComponent, + BenchmarkDetailDialogParams + >(GfBenchmarkDetailDialogComponent, { data: { dataSource, symbol, colorScheme: this.user?.settings?.colorScheme, deviceType: this.deviceType, locale: this.locale - } as BenchmarkDetailDialogParams, + }, height: this.deviceType === 'mobile' ? '98vh' : undefined, width: this.deviceType === 'mobile' ? '100vw' : '50rem' }); diff --git a/libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor.component.ts b/libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor.component.ts index 7fbb1e621..002422c57 100644 --- a/libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor.component.ts +++ b/libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor.component.ts @@ -199,21 +199,21 @@ export class GfHistoricalMarketDataEditorComponent }) { const marketPrice = this.marketDataByMonth[yearMonth]?.[day]?.marketPrice; - const dialogRef = this.dialog.open( + const dialogRef = this.dialog.open< GfHistoricalMarketDataEditorDialogComponent, - { - data: { - marketPrice, - currency: this.currency, - dataSource: this.dataSource, - dateString: `${yearMonth}-${day}`, - symbol: this.symbol, - user: this.user - } as HistoricalMarketDataEditorDialogParams, - height: this.deviceType === 'mobile' ? '98vh' : '80vh', - width: this.deviceType === 'mobile' ? '100vw' : '50rem' - } - ); + HistoricalMarketDataEditorDialogParams + >(GfHistoricalMarketDataEditorDialogComponent, { + data: { + marketPrice, + currency: this.currency, + dataSource: this.dataSource, + dateString: `${yearMonth}-${day}`, + symbol: this.symbol, + user: this.user + }, + height: this.deviceType === 'mobile' ? '98vh' : '80vh', + width: this.deviceType === 'mobile' ? '100vw' : '50rem' + }); dialogRef .afterClosed() From 9f36eef39d9cd7c5d5d280713c63620ef5e6819c Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Mon, 27 Oct 2025 20:46:44 +0100 Subject: [PATCH 50/92] Task/extend Contributing section in README.md (#5864) * Add GitHub Sponsors --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 82d5710d1..9f3633f8f 100644 --- a/README.md +++ b/README.md @@ -297,7 +297,7 @@ Ghostfolio is **100% free** and **open source**. We encourage and support an act Not sure what to work on? We have [some ideas](https://github.com/ghostfolio/ghostfolio/issues?q=is%3Aissue+is%3Aopen+label%3A%22help+wanted%22%20no%3Aassignee), even for [newcomers](https://github.com/ghostfolio/ghostfolio/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22%20no%3Aassignee). Please join the Ghostfolio [Slack](https://join.slack.com/t/ghostfolio/shared_invite/zt-vsaan64h-F_I0fEo5M0P88lP9ibCxFg) channel or post to [@ghostfolio\_](https://x.com/ghostfolio_) on _X_. We would love to hear from you. -If you like to support this project, get [**Ghostfolio Premium**](https://ghostfol.io/en/pricing) or [**Buy me a coffee**](https://www.buymeacoffee.com/ghostfolio). +If you like to support this project, become a [**Sponsor**](https://github.com/sponsors/ghostfolio), get [**Ghostfolio Premium**](https://ghostfol.io/en/pricing) or [**Buy me a coffee**](https://www.buymeacoffee.com/ghostfolio). ## Analytics From cf2dd95906870b7359f39bc3f10750db0fab547d Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Mon, 27 Oct 2025 20:47:38 +0100 Subject: [PATCH 51/92] Task/add LambdaTest to Sponsors in README.md (#5861) * Add LambdaTest --- README.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/README.md b/README.md index 9f3633f8f..1a5cc6e95 100644 --- a/README.md +++ b/README.md @@ -299,6 +299,17 @@ Not sure what to work on? We have [some ideas](https://github.com/ghostfolio/gho If you like to support this project, become a [**Sponsor**](https://github.com/sponsors/ghostfolio), get [**Ghostfolio Premium**](https://ghostfol.io/en/pricing) or [**Buy me a coffee**](https://www.buymeacoffee.com/ghostfolio). +## Sponsors + +
+

+ Browser testing via
+ + LambdaTest Logo + +

+
+ ## Analytics ![Alt](https://repobeats.axiom.co/api/embed/281a80b2d0c4af1162866c24c803f1f18e5ed60e.svg 'Repobeats analytics image') From 7dc74fe6812cf1efe85d19f0713e79df06200b8d Mon Sep 17 00:00:00 2001 From: Vansh <140736931+Vansh-Parate@users.noreply.github.com> Date: Tue, 28 Oct 2025 12:40:35 +0530 Subject: [PATCH 52/92] Task/refactor column definitions in AI service (#5834) * Refactor column definitions in AI service * Update changelog --- CHANGELOG.md | 2 + apps/api/src/app/endpoints/ai/ai.service.ts | 79 ++++++++++++++++----- 2 files changed, 64 insertions(+), 17 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1024336b3..220b29036 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed +- Refactored the generation of the holdings table in the _Copy AI prompt to clipboard for analysis_ action on the analysis page (experimental) +- Refactored the generation of the holdings table in the _Copy portfolio data to clipboard for AI prompt_ action on the analysis page (experimental) - Improved the language localization for German (`de`) ### Fixed diff --git a/apps/api/src/app/endpoints/ai/ai.service.ts b/apps/api/src/app/endpoints/ai/ai.service.ts index 4cc4fde65..d07768d69 100644 --- a/apps/api/src/app/endpoints/ai/ai.service.ts +++ b/apps/api/src/app/endpoints/ai/ai.service.ts @@ -14,6 +14,27 @@ import type { ColumnDescriptor } from 'tablemark'; @Injectable() export class AiService { + private static readonly HOLDINGS_TABLE_COLUMN_DEFINITIONS: ({ + key: + | 'ALLOCATION_PERCENTAGE' + | 'ASSET_CLASS' + | 'ASSET_SUB_CLASS' + | 'CURRENCY' + | 'NAME' + | 'SYMBOL'; + } & ColumnDescriptor)[] = [ + { key: 'NAME', name: 'Name' }, + { key: 'SYMBOL', name: 'Symbol' }, + { key: 'CURRENCY', name: 'Currency' }, + { key: 'ASSET_CLASS', name: 'Asset Class' }, + { key: 'ASSET_SUB_CLASS', name: 'Asset Sub Class' }, + { + align: 'right', + key: 'ALLOCATION_PERCENTAGE', + name: 'Allocation in Percentage' + } + ]; + public constructor( private readonly portfolioService: PortfolioService, private readonly propertyService: PropertyService @@ -59,14 +80,10 @@ export class AiService { userId }); - const holdingsTableColumns: ColumnDescriptor[] = [ - { name: 'Name' }, - { name: 'Symbol' }, - { name: 'Currency' }, - { name: 'Asset Class' }, - { name: 'Asset Sub Class' }, - { align: 'right', name: 'Allocation in Percentage' } - ]; + const holdingsTableColumns: ColumnDescriptor[] = + AiService.HOLDINGS_TABLE_COLUMN_DEFINITIONS.map(({ align, name }) => { + return { name, align: align ?? 'left' }; + }); const holdingsTableRows = Object.values(holdings) .sort((a, b) => { @@ -78,17 +95,45 @@ export class AiService { assetClass, assetSubClass, currency, - name, + name: label, symbol }) => { - return { - Name: name, - Symbol: symbol, - Currency: currency, - 'Asset Class': assetClass ?? '', - 'Asset Sub Class': assetSubClass ?? '', - 'Allocation in Percentage': `${(allocationInPercentage * 100).toFixed(3)}%` - }; + return AiService.HOLDINGS_TABLE_COLUMN_DEFINITIONS.reduce( + (row, { key, name }) => { + switch (key) { + case 'ALLOCATION_PERCENTAGE': + row[name] = `${(allocationInPercentage * 100).toFixed(3)}%`; + break; + + case 'ASSET_CLASS': + row[name] = assetClass ?? ''; + break; + + case 'ASSET_SUB_CLASS': + row[name] = assetSubClass ?? ''; + break; + + case 'CURRENCY': + row[name] = currency; + break; + + case 'NAME': + row[name] = label; + break; + + case 'SYMBOL': + row[name] = symbol; + break; + + default: + row[name] = ''; + break; + } + + return row; + }, + {} as Record + ); } ); From 8bd47d3f7c6db67d90f997f04ece134c5bf876a9 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Tue, 28 Oct 2025 18:30:39 +0100 Subject: [PATCH 53/92] Feature/set up sponsors section on about page (#5862) * Set up sponsors section * Update changelog --- CHANGELOG.md | 1 + .../about/overview/about-overview-page.html | 24 ++++++++++++++++++- 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 220b29036..ad8f2f70e 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 ### Added - Added a close holding button to the holding detail dialog +- Added the _Sponsors_ section to the about page - Extended the user detail dialog in the users section of the admin control panel ### Changed diff --git a/apps/client/src/app/pages/about/overview/about-overview-page.html b/apps/client/src/app/pages/about/overview/about-overview-page.html index 4085498a9..72c054170 100644 --- a/apps/client/src/app/pages/about/overview/about-overview-page.html +++ b/apps/client/src/app/pages/about/overview/about-overview-page.html @@ -175,7 +175,7 @@ -
+
}
+ +
+
+

Sponsors

+
+ Browser testing via +
+ + LambdaTest Logo + +
+
+
From 8c80086da168f9eaf5be240852ba3a2656729bdd Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Tue, 28 Oct 2025 18:31:16 +0100 Subject: [PATCH 54/92] Bugfix/fix typography hierarchy in resources pages (#5863) * Fix hierarchy --- .../glossary/resources-glossary.component.html | 18 +++++++++--------- .../guides/resources-guides.component.html | 4 ++-- .../markets/resources-markets.component.html | 8 ++++---- .../overview/resources-overview.component.html | 2 +- 4 files changed, 16 insertions(+), 16 deletions(-) diff --git a/apps/client/src/app/pages/resources/glossary/resources-glossary.component.html b/apps/client/src/app/pages/resources/glossary/resources-glossary.component.html index b65054bba..fa74cd084 100644 --- a/apps/client/src/app/pages/resources/glossary/resources-glossary.component.html +++ b/apps/client/src/app/pages/resources/glossary/resources-glossary.component.html @@ -5,7 +5,7 @@
-

Buy and Hold

+

Buy and Hold

Buy and hold is a passive investment strategy where you buy assets and hold them for a long period regardless of fluctuations in the @@ -22,7 +22,7 @@
-

Deflation

+

Deflation

Deflation is a decrease of the general price level for goods and services in an economy over a period of time. @@ -38,7 +38,7 @@
-

Dollar-Cost Averaging (DCA)

+

Dollar-Cost Averaging (DCA)

Dollar-cost averaging is an investment strategy where you split the total amount to be invested across periodic purchases of a @@ -56,7 +56,7 @@
-

Financial Independence

+

Financial Independence

Financial independence is the status of having enough income, for example with a passive income like dividends, to cover your living @@ -73,7 +73,7 @@
-

FIRE

+

FIRE

FIRE is a movement that promotes saving and investing to achieve financial independence and early retirement. @@ -85,7 +85,7 @@
-

Inflation

+

Inflation

Inflation is an increase of the general price level for goods and services in an economy over a period of time. @@ -102,7 +102,7 @@ @if (hasPermissionForSubscription) {
-

Personal Finance Tools

+

Personal Finance Tools

Personal finance tools are software applications that help manage your money, track expenses, set budgets, monitor @@ -118,7 +118,7 @@ }
-

Stagflation

+

Stagflation

Stagflation describes a situation in which there is a stagnant economy with high unemployment and high inflation. @@ -134,7 +134,7 @@
-

Stealth Wealth

+

Stealth Wealth

Stealth wealth is a lifestyle choice where you don’t openly show off your wealth, but instead live quietly to maintain privacy and diff --git a/apps/client/src/app/pages/resources/guides/resources-guides.component.html b/apps/client/src/app/pages/resources/guides/resources-guides.component.html index 3bd8efec6..54b3d1f3e 100644 --- a/apps/client/src/app/pages/resources/guides/resources-guides.component.html +++ b/apps/client/src/app/pages/resources/guides/resources-guides.component.html @@ -5,7 +5,7 @@
-

Boringly Getting Rich

+

Boringly Getting Rich

The Boringly Getting Rich guide supports you to get started with investing. It introduces a strategy utilizing a broadly @@ -21,7 +21,7 @@
-

How do I get my finances in order?

+

How do I get my finances in order?

Before you can think of long-term investing, you have to get your finances in order. Learn how you can reach your financial goals diff --git a/apps/client/src/app/pages/resources/markets/resources-markets.component.html b/apps/client/src/app/pages/resources/markets/resources-markets.component.html index 74d4bb82b..ce780aedf 100644 --- a/apps/client/src/app/pages/resources/markets/resources-markets.component.html +++ b/apps/client/src/app/pages/resources/markets/resources-markets.component.html @@ -3,7 +3,7 @@
-

Crypto Coins Heatmap

+

Crypto Coins Heatmap

With the Crypto Coins Heatmap you can track the daily market movements of cryptocurrencies as a visual snapshot. @@ -17,7 +17,7 @@
-

Fear & Greed Index

+

Fear & Greed Index

The fear and greed index was developed by CNNMoney to measure the primary emotions (fear and greed) that influence how much @@ -32,7 +32,7 @@
-

Inflation Chart

+

Inflation Chart

Inflation Chart helps you find the intrinsic value of stock markets, stock prices, goods and services by adjusting them to the @@ -48,7 +48,7 @@
-

Stock Heatmap

+

Stock Heatmap

With the Stock Heatmap you can track the daily market movements of stocks as a visual snapshot. diff --git a/apps/client/src/app/pages/resources/overview/resources-overview.component.html b/apps/client/src/app/pages/resources/overview/resources-overview.component.html index 39d7c1e62..3a6f18d40 100644 --- a/apps/client/src/app/pages/resources/overview/resources-overview.component.html +++ b/apps/client/src/app/pages/resources/overview/resources-overview.component.html @@ -5,7 +5,7 @@
@for (item of overviewItems; track item) {
-

{{ item.title }}

+

{{ item.title }}

{{ item.description }}

Explore {{ item.title }} →
From ed115c59b14cfd0cc69dd9060d91938c0d98e6f1 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Wed, 29 Oct 2025 17:30:09 +0100 Subject: [PATCH 55/92] Feature/improve usability of user detail dialog (#5868) * Do not reload on close * Update changelog --- CHANGELOG.md | 1 + .../src/app/components/admin-users/admin-users.component.ts | 1 - 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ad8f2f70e..24103d37d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,6 +17,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Refactored the generation of the holdings table in the _Copy AI prompt to clipboard for analysis_ action on the analysis page (experimental) - Refactored the generation of the holdings table in the _Copy portfolio data to clipboard for AI prompt_ action on the analysis page (experimental) +- Improved the usability of the user detail dialog in the users section of the admin control panel - Improved the language localization for German (`de`) ### Fixed diff --git a/apps/client/src/app/components/admin-users/admin-users.component.ts b/apps/client/src/app/components/admin-users/admin-users.component.ts index fba54b0bb..c0d058ad2 100644 --- a/apps/client/src/app/components/admin-users/admin-users.component.ts +++ b/apps/client/src/app/components/admin-users/admin-users.component.ts @@ -307,7 +307,6 @@ export class GfAdminUsersComponent implements OnDestroy, OnInit { .afterClosed() .pipe(takeUntil(this.unsubscribeSubject)) .subscribe(() => { - this.fetchUsers(); this.router.navigate(['.'], { relativeTo: this.route }); }); } From aa8f933110316943b394ff4573461d4740df210a Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Wed, 29 Oct 2025 17:33:22 +0100 Subject: [PATCH 56/92] Release 2.212.0 (#5871) --- 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 24103d37d..8245505b5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,7 +5,7 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## Unreleased +## 2.212.0 - 2025-10-29 ### Added diff --git a/package-lock.json b/package-lock.json index 62913d174..50138c7c9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "ghostfolio", - "version": "2.211.0", + "version": "2.212.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "ghostfolio", - "version": "2.211.0", + "version": "2.212.0", "hasInstallScript": true, "license": "AGPL-3.0", "dependencies": { diff --git a/package.json b/package.json index 512f61b6d..d7b626f85 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ghostfolio", - "version": "2.211.0", + "version": "2.212.0", "homepage": "https://ghostfol.io", "license": "AGPL-3.0", "repository": "https://github.com/ghostfolio/ghostfolio", From 0ea2edd1e55015f086ee081bac53910d2991b03d Mon Sep 17 00:00:00 2001 From: David Requeno <108202767+DavidReque@users.noreply.github.com> Date: Wed, 29 Oct 2025 13:28:46 -0600 Subject: [PATCH 57/92] Feature/extend menu in activities table component (#5855) * Extend menu in activities table component * Update changelog --- CHANGELOG.md | 6 +++++ .../activities-table.component.html | 14 +++++++----- .../activities-table.component.ts | 22 ++++++++++++------- 3 files changed, 29 insertions(+), 13 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8245505b5..d0f90277e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,12 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## Unreleased + +### Added + +- Extended the activities table menu with a _View Holding_ item + ## 2.212.0 - 2025-10-29 ### Added 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 843832e1a..e230c0bcd 100644 --- a/libs/ui/src/lib/activities-table/activities-table.component.html +++ b/libs/ui/src/lib/activities-table/activities-table.component.html @@ -437,6 +437,14 @@ class="no-max-width" xPosition="before" > + @if (canClickActivity(element)) { + + }
-
-
-

Sponsors

-
- Browser testing via -
- - LambdaTest Logo - + @if (user?.subscription?.type !== 'Premium') { +
+
+

Sponsors

+
+ Browser testing via +
+ + LambdaTest Logo + +
-
+ }
From f188d1b2ab87b1a3bbe9eb45be21968e95ee32be Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Fri, 31 Oct 2025 19:16:15 +0100 Subject: [PATCH 67/92] Feature/update OSS friends 20251031 (#5879) * Update OSS friends --- apps/client/src/assets/oss-friends.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/apps/client/src/assets/oss-friends.json b/apps/client/src/assets/oss-friends.json index 827b56c3a..2fbf5e27d 100644 --- a/apps/client/src/assets/oss-friends.json +++ b/apps/client/src/assets/oss-friends.json @@ -1,5 +1,5 @@ { - "createdAt": "2025-09-17T00:00:00.000Z", + "createdAt": "2025-10-31T00:00:00.000Z", "data": [ { "name": "Activepieces", @@ -16,6 +16,11 @@ "description": "Argos provides the developer tools to debug tests and detect visual regressions.", "href": "https://argos-ci.com" }, + { + "name": "Bifrost", + "description": "Fastest LLM gateway with adaptive load balancer, cluster mode, guardrails, 1000+ models support & <100 µs overhead at 5k RPS.", + "href": "https://www.getmaxim.ai/bifrost" + }, { "name": "Cal.com", "description": "Cal.com is a scheduling tool that helps you schedule meetings without the back-and-forth emails.", @@ -56,11 +61,6 @@ "description": "Inbox Zero makes it easy to clean up your inbox and reach inbox zero fast. It provides bulk newsletter unsubscribe, cold email blocking, email analytics, and AI automations.", "href": "https://getinboxzero.com" }, - { - "name": "Infisical", - "description": "Open source, end-to-end encrypted platform that lets you securely manage secrets and configs across your team, devices, and infrastructure.", - "href": "https://infisical.com" - }, { "name": "KeepHQ", "description": "Keep is an open-source AIOps (AI for IT operations) platform", From 6177ec0ec57ed60a089efc97739583088efe332e Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Fri, 31 Oct 2025 19:18:21 +0100 Subject: [PATCH 68/92] Feature/improve icon of View Holding menu item in activities table (#5881) * Improve icon * Update changelog --- CHANGELOG.md | 1 + .../lib/activities-table/activities-table.component.html | 2 +- .../lib/activities-table/activities-table.component.ts | 8 ++++---- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2417d3dcc..71370cd35 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 icon of the _View Holding_ menu item in the activities table - Refreshed the cryptocurrencies list ## 2.213.0 - 2025-10-30 diff --git a/libs/ui/src/lib/activities-table/activities-table.component.html b/libs/ui/src/lib/activities-table/activities-table.component.html index e230c0bcd..46e1de875 100644 --- a/libs/ui/src/lib/activities-table/activities-table.component.html +++ b/libs/ui/src/lib/activities-table/activities-table.component.html @@ -440,7 +440,7 @@ @if (canClickActivity(element)) { 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 0b58bda94..1313ef1e2 100644 --- a/libs/ui/src/lib/activities-table/activities-table.component.ts +++ b/libs/ui/src/lib/activities-table/activities-table.component.ts @@ -56,8 +56,8 @@ import { documentTextOutline, ellipsisHorizontal, ellipsisVertical, - trashOutline, - walletOutline + tabletLandscapeOutline, + trashOutline } from 'ionicons/icons'; import { NgxSkeletonLoaderModule } from 'ngx-skeleton-loader'; import { Subject, Subscription, takeUntil } from 'rxjs'; @@ -154,8 +154,8 @@ export class GfActivitiesTableComponent documentTextOutline, ellipsisHorizontal, ellipsisVertical, - trashOutline, - walletOutline + tabletLandscapeOutline, + trashOutline }); } From b705b8f07b8dc3443300af8af925969f9cabbae6 Mon Sep 17 00:00:00 2001 From: Kenrick Tandrian <60643640+KenTandrian@users.noreply.github.com> Date: Sat, 1 Nov 2025 15:07:03 +0700 Subject: [PATCH 69/92] Task/resolve @typescript-eslint/prefer-regexp-exec ESLint rule (#5885) * fix(lint): remove @typescript-eslint/prefer-regexp-exec override * fix(lint): resolve eslint errors --- apps/api/src/services/i18n/i18n.service.ts | 2 +- eslint.config.cjs | 3 +-- libs/common/src/lib/helper.ts | 2 +- 3 files changed, 3 insertions(+), 4 deletions(-) diff --git a/apps/api/src/services/i18n/i18n.service.ts b/apps/api/src/services/i18n/i18n.service.ts index 0f1f6239d..cf340d7c6 100644 --- a/apps/api/src/services/i18n/i18n.service.ts +++ b/apps/api/src/services/i18n/i18n.service.ts @@ -65,7 +65,7 @@ export class I18nService { } private parseLanguageCode(aFileName: string) { - const match = aFileName.match(/\.([a-zA-Z]+)\.xlf$/); + const match = /\.([a-zA-Z]+)\.xlf$/.exec(aFileName); return match ? match[1] : DEFAULT_LANGUAGE_CODE; } diff --git a/eslint.config.cjs b/eslint.config.cjs index c7e08821c..7907f4bce 100644 --- a/eslint.config.cjs +++ b/eslint.config.cjs @@ -189,8 +189,7 @@ module.exports = [ // The following rules are part of @typescript-eslint/stylistic-type-checked // and can be remove once solved - '@typescript-eslint/prefer-nullish-coalescing': 'warn', // TODO: Requires strictNullChecks: true - '@typescript-eslint/prefer-regexp-exec': 'warn' + '@typescript-eslint/prefer-nullish-coalescing': 'warn' // TODO: Requires strictNullChecks: true } })) ]; diff --git a/libs/common/src/lib/helper.ts b/libs/common/src/lib/helper.ts index 97b762267..7452b604c 100644 --- a/libs/common/src/lib/helper.ts +++ b/libs/common/src/lib/helper.ts @@ -375,7 +375,7 @@ export function parseDate(date: string): Date { // Transform 'yyyyMMdd' format to supported format by parse function if (date?.length === 8) { - const match = date.match(/^(\d{4})(\d{2})(\d{2})$/); + const match = /^(\d{4})(\d{2})(\d{2})$/.exec(date); if (match) { const [, year, month, day] = match; From debadd455ea4f14b8e00965721ced1ed5a39973b Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Sat, 1 Nov 2025 09:44:21 +0100 Subject: [PATCH 70/92] Task/upgrade ng-extract-i18n-merge to version 3.1.0 (#5886) * Upgrade ng-extract-i18n-merge to version 3.1.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 71370cd35..248aaa6ac 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 icon of the _View Holding_ menu item in the activities table - Refreshed the cryptocurrencies list +- Upgraded `ng-extract-i18n-merge` from version `3.0.0` to `3.1.0` ## 2.213.0 - 2025-10-30 diff --git a/package-lock.json b/package-lock.json index b306692a3..914a783e0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -77,7 +77,7 @@ "lodash": "4.17.21", "marked": "15.0.4", "ms": "3.0.0-canary.1", - "ng-extract-i18n-merge": "3.0.0", + "ng-extract-i18n-merge": "3.1.0", "ngx-device-detector": "10.1.0", "ngx-markdown": "20.0.0", "ngx-skeleton-loader": "11.3.0", @@ -32780,9 +32780,9 @@ "license": "MIT" }, "node_modules/ng-extract-i18n-merge": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ng-extract-i18n-merge/-/ng-extract-i18n-merge-3.0.0.tgz", - "integrity": "sha512-vTWtAz6a/wVYxnUMFHp1ur6o4JSLm+LcxdSMV8o8Ml2p5oCsSB4iFd5E6h8Yb8X8D596qyBz0ELgiDmbn4YyRQ==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/ng-extract-i18n-merge/-/ng-extract-i18n-merge-3.1.0.tgz", + "integrity": "sha512-4rJRcpTcP54xf5cjoz3S1By0T04X2RoyQcMDxr4wLdRx3fVxkeP8jeuLzmj9F4G5n0yMQb+6jhUiFERxpkfs1w==", "license": "MIT", "dependencies": { "@angular-devkit/architect": "^0.2000.0", diff --git a/package.json b/package.json index cbbb12652..43970a7f0 100644 --- a/package.json +++ b/package.json @@ -123,7 +123,7 @@ "lodash": "4.17.21", "marked": "15.0.4", "ms": "3.0.0-canary.1", - "ng-extract-i18n-merge": "3.0.0", + "ng-extract-i18n-merge": "3.1.0", "ngx-device-detector": "10.1.0", "ngx-markdown": "20.0.0", "ngx-skeleton-loader": "11.3.0", From 4ecfdadda448d681fb8d6c16deb56d1d566493e5 Mon Sep 17 00:00:00 2001 From: Kenrick Tandrian <60643640+KenTandrian@users.noreply.github.com> Date: Sat, 1 Nov 2025 23:59:59 +0700 Subject: [PATCH 71/92] Task/resolve @typescript-eslint/no-unsafe-function-type ESLint rule (#5889) * fix(lint): remove @typescript-eslint/no-unsafe-function-type override * fix(lint): resolve eslint errors --- apps/api/src/app/auth/google.strategy.ts | 3 ++- apps/client/src/app/core/module-preload.service.ts | 2 +- eslint.config.cjs | 1 - 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/api/src/app/auth/google.strategy.ts b/apps/api/src/app/auth/google.strategy.ts index 02f82a7a8..3e4b4ca0d 100644 --- a/apps/api/src/app/auth/google.strategy.ts +++ b/apps/api/src/app/auth/google.strategy.ts @@ -3,6 +3,7 @@ import { ConfigurationService } from '@ghostfolio/api/services/configuration/con import { Injectable, Logger } from '@nestjs/common'; import { PassportStrategy } from '@nestjs/passport'; import { Provider } from '@prisma/client'; +import { DoneCallback } from 'passport'; import { Profile, Strategy } from 'passport-google-oauth20'; import { AuthService } from './auth.service'; @@ -29,7 +30,7 @@ export class GoogleStrategy extends PassportStrategy(Strategy, 'google') { _token: string, _refreshToken: string, profile: Profile, - done: Function + done: DoneCallback ) { try { const jwt = await this.authService.validateOAuthLogin({ diff --git a/apps/client/src/app/core/module-preload.service.ts b/apps/client/src/app/core/module-preload.service.ts index fcba48c52..85d9c5e33 100644 --- a/apps/client/src/app/core/module-preload.service.ts +++ b/apps/client/src/app/core/module-preload.service.ts @@ -7,7 +7,7 @@ export class ModulePreloadService implements PreloadingStrategy { /** * Preloads all lazy loading modules with the attribute 'preload' set to true */ - preload(route: Route, load: Function): Observable { + preload(route: Route, load: () => Observable): Observable { return route.data?.preload ? load() : of(null); } } diff --git a/eslint.config.cjs b/eslint.config.cjs index 7907f4bce..cb586e8ed 100644 --- a/eslint.config.cjs +++ b/eslint.config.cjs @@ -170,7 +170,6 @@ module.exports = [ '@typescript-eslint/no-unsafe-argument': 'warn', '@typescript-eslint/no-unsafe-assignment': 'warn', '@typescript-eslint/no-unsafe-enum-comparison': 'warn', - '@typescript-eslint/no-unsafe-function-type': 'warn', '@typescript-eslint/no-unsafe-member-access': 'warn', '@typescript-eslint/no-unsafe-return': 'warn', '@typescript-eslint/no-unsafe-call': 'warn', From 60bfe1eaa6b0c08ea6235136ffa175c800e3b251 Mon Sep 17 00:00:00 2001 From: Kenrick Tandrian <60643640+KenTandrian@users.noreply.github.com> Date: Sun, 2 Nov 2025 00:01:24 +0700 Subject: [PATCH 72/92] Task/resolve no-constant-binary-expression ESLint rule (#5890) * fix(lint): remove no-constant-binary-expression override * fix(lint): resolve eslint errors --- eslint.config.cjs | 1 - libs/ui/src/lib/fire-calculator/fire-calculator.component.ts | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/eslint.config.cjs b/eslint.config.cjs index cb586e8ed..a88d0cc85 100644 --- a/eslint.config.cjs +++ b/eslint.config.cjs @@ -152,7 +152,6 @@ module.exports = [ // The following rules are part of eslint:recommended // and can be remove once solved - 'no-constant-binary-expression': 'warn', 'no-loss-of-precision': 'warn', // The following rules are part of @typescript-eslint/recommended-type-checked diff --git a/libs/ui/src/lib/fire-calculator/fire-calculator.component.ts b/libs/ui/src/lib/fire-calculator/fire-calculator.component.ts index df7ca79fa..44276ec43 100644 --- a/libs/ui/src/lib/fire-calculator/fire-calculator.component.ts +++ b/libs/ui/src/lib/fire-calculator/fire-calculator.component.ts @@ -185,7 +185,7 @@ export class GfFireCalculatorComponent implements OnChanges, OnDestroy { 'principalInvestmentAmount' ).value, projectedTotalAmount: - Number(this.getProjectedTotalAmount().toFixed(0)) ?? 0, + Math.round(this.getProjectedTotalAmount()) || 0, retirementDate: this.getRetirementDate() ?? this.DEFAULT_RETIREMENT_DATE }, From e5550a432222c6ce03cdea6562fb177fd031c4bf Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Sat, 1 Nov 2025 18:02:37 +0100 Subject: [PATCH 73/92] Task/extend user settings in test files (#5836) * Extend user settings by performance calculation type --- test/import/not-ok/invalid-data-source.json | 8 +++++++- test/import/not-ok/invalid-date-before-min.json | 8 +++++++- test/import/not-ok/invalid-date.json | 8 +++++++- test/import/not-ok/invalid-symbol.json | 8 +++++++- test/import/not-ok/invalid-type.json | 8 +++++++- test/import/not-ok/unavailable-exchange-rate.json | 8 +++++++- test/import/ok/500-activities.json | 3 ++- test/import/ok/btceur.json | 3 ++- test/import/ok/btcusd-short.json | 3 ++- test/import/ok/btcusd.json | 3 ++- test/import/ok/derived-currency.json | 3 ++- test/import/ok/novn-buy-and-sell-partially.json | 3 ++- test/import/ok/novn-buy-and-sell.json | 3 ++- test/import/ok/penthouse-apartment.json | 3 ++- test/import/ok/sample.json | 3 ++- test/import/ok/vti-buy-long-history.json | 3 ++- test/import/ok/without-accounts.json | 3 ++- 17 files changed, 64 insertions(+), 17 deletions(-) diff --git a/test/import/not-ok/invalid-data-source.json b/test/import/not-ok/invalid-data-source.json index 472e295ee..f8e920c67 100644 --- a/test/import/not-ok/invalid-data-source.json +++ b/test/import/not-ok/invalid-data-source.json @@ -14,5 +14,11 @@ "type": "BUY", "unitPrice": 100.0 } - ] + ], + "user": { + "settings": { + "currency": "USD", + "performanceCalculationType": "ROAI" + } + } } diff --git a/test/import/not-ok/invalid-date-before-min.json b/test/import/not-ok/invalid-date-before-min.json index 3040581b2..260d79166 100644 --- a/test/import/not-ok/invalid-date-before-min.json +++ b/test/import/not-ok/invalid-date-before-min.json @@ -14,5 +14,11 @@ "type": "BUY", "unitPrice": 100.0 } - ] + ], + "user": { + "settings": { + "currency": "USD", + "performanceCalculationType": "ROAI" + } + } } diff --git a/test/import/not-ok/invalid-date.json b/test/import/not-ok/invalid-date.json index 99cd6d156..4522c6dcc 100644 --- a/test/import/not-ok/invalid-date.json +++ b/test/import/not-ok/invalid-date.json @@ -14,5 +14,11 @@ "type": "BUY", "unitPrice": 100.0 } - ] + ], + "user": { + "settings": { + "currency": "USD", + "performanceCalculationType": "ROAI" + } + } } diff --git a/test/import/not-ok/invalid-symbol.json b/test/import/not-ok/invalid-symbol.json index 14f0051ec..0bbbf53db 100644 --- a/test/import/not-ok/invalid-symbol.json +++ b/test/import/not-ok/invalid-symbol.json @@ -14,5 +14,11 @@ "type": "BUY", "unitPrice": 100.0 } - ] + ], + "user": { + "settings": { + "currency": "USD", + "performanceCalculationType": "ROAI" + } + } } diff --git a/test/import/not-ok/invalid-type.json b/test/import/not-ok/invalid-type.json index a23f72411..a8967d81a 100644 --- a/test/import/not-ok/invalid-type.json +++ b/test/import/not-ok/invalid-type.json @@ -14,5 +14,11 @@ "type": "", "unitPrice": 100.0 } - ] + ], + "user": { + "settings": { + "currency": "USD", + "performanceCalculationType": "ROAI" + } + } } diff --git a/test/import/not-ok/unavailable-exchange-rate.json b/test/import/not-ok/unavailable-exchange-rate.json index 4d8be156a..66c7044d7 100644 --- a/test/import/not-ok/unavailable-exchange-rate.json +++ b/test/import/not-ok/unavailable-exchange-rate.json @@ -15,5 +15,11 @@ "date": "1990-01-01T00:00:00.000Z", "symbol": "MSFT" } - ] + ], + "user": { + "settings": { + "currency": "USD", + "performanceCalculationType": "ROAI" + } + } } diff --git a/test/import/ok/500-activities.json b/test/import/ok/500-activities.json index b691a6f9f..2793c695e 100644 --- a/test/import/ok/500-activities.json +++ b/test/import/ok/500-activities.json @@ -6019,7 +6019,8 @@ ], "user": { "settings": { - "currency": "USD" + "currency": "USD", + "performanceCalculationType": "ROAI" } } } diff --git a/test/import/ok/btceur.json b/test/import/ok/btceur.json index b370682f9..ae9eb8921 100644 --- a/test/import/ok/btceur.json +++ b/test/import/ok/btceur.json @@ -23,7 +23,8 @@ ], "user": { "settings": { - "currency": "USD" + "currency": "USD", + "performanceCalculationType": "ROAI" } } } diff --git a/test/import/ok/btcusd-short.json b/test/import/ok/btcusd-short.json index bc4152de9..6f25a7740 100644 --- a/test/import/ok/btcusd-short.json +++ b/test/import/ok/btcusd-short.json @@ -36,7 +36,8 @@ ], "user": { "settings": { - "currency": "USD" + "currency": "USD", + "performanceCalculationType": "ROAI" } } } diff --git a/test/import/ok/btcusd.json b/test/import/ok/btcusd.json index fc2e1f66e..4a85f967e 100644 --- a/test/import/ok/btcusd.json +++ b/test/import/ok/btcusd.json @@ -23,7 +23,8 @@ ], "user": { "settings": { - "currency": "USD" + "currency": "USD", + "performanceCalculationType": "ROAI" } } } diff --git a/test/import/ok/derived-currency.json b/test/import/ok/derived-currency.json index e740c1ae3..637ab21b6 100644 --- a/test/import/ok/derived-currency.json +++ b/test/import/ok/derived-currency.json @@ -31,7 +31,8 @@ ], "user": { "settings": { - "currency": "USD" + "currency": "USD", + "performanceCalculationType": "ROAI" } } } diff --git a/test/import/ok/novn-buy-and-sell-partially.json b/test/import/ok/novn-buy-and-sell-partially.json index 8c5778566..3bdd7eb7e 100644 --- a/test/import/ok/novn-buy-and-sell-partially.json +++ b/test/import/ok/novn-buy-and-sell-partially.json @@ -27,7 +27,8 @@ ], "user": { "settings": { - "currency": "CHF" + "currency": "CHF", + "performanceCalculationType": "ROAI" } } } diff --git a/test/import/ok/novn-buy-and-sell.json b/test/import/ok/novn-buy-and-sell.json index 71ee9b7a9..6ae519d87 100644 --- a/test/import/ok/novn-buy-and-sell.json +++ b/test/import/ok/novn-buy-and-sell.json @@ -27,7 +27,8 @@ ], "user": { "settings": { - "currency": "CHF" + "currency": "CHF", + "performanceCalculationType": "ROAI" } } } diff --git a/test/import/ok/penthouse-apartment.json b/test/import/ok/penthouse-apartment.json index 2bc7f0cf8..0c35521e6 100644 --- a/test/import/ok/penthouse-apartment.json +++ b/test/import/ok/penthouse-apartment.json @@ -47,7 +47,8 @@ ], "user": { "settings": { - "currency": "USD" + "currency": "USD", + "performanceCalculationType": "ROAI" } } } diff --git a/test/import/ok/sample.json b/test/import/ok/sample.json index 21277129f..bc2798718 100644 --- a/test/import/ok/sample.json +++ b/test/import/ok/sample.json @@ -147,7 +147,8 @@ ], "user": { "settings": { - "currency": "USD" + "currency": "USD", + "performanceCalculationType": "ROAI" } } } diff --git a/test/import/ok/vti-buy-long-history.json b/test/import/ok/vti-buy-long-history.json index c8cd25e60..88b38d2b1 100644 --- a/test/import/ok/vti-buy-long-history.json +++ b/test/import/ok/vti-buy-long-history.json @@ -40,7 +40,8 @@ ], "user": { "settings": { - "currency": "USD" + "currency": "USD", + "performanceCalculationType": "ROAI" } } } diff --git a/test/import/ok/without-accounts.json b/test/import/ok/without-accounts.json index 8a24f86fc..2283dd889 100644 --- a/test/import/ok/without-accounts.json +++ b/test/import/ok/without-accounts.json @@ -47,7 +47,8 @@ ], "user": { "settings": { - "currency": "USD" + "currency": "USD", + "performanceCalculationType": "ROAI" } } } From 5598b3780c008d20c19afba5869718be58a28bf7 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Sat, 1 Nov 2025 18:37:43 +0100 Subject: [PATCH 74/92] Feature/set up unit test for BTCEUR in base currency EUR (#5778) * Set up test --- ...ulator-btceur-in-base-currency-eur.spec.ts | 140 ++++++++++++++++++ .../exchange-rate-data.service.mock.ts | 10 ++ 2 files changed, 150 insertions(+) create mode 100644 apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btceur-in-base-currency-eur.spec.ts 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 new file mode 100644 index 000000000..87893e647 --- /dev/null +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btceur-in-base-currency-eur.spec.ts @@ -0,0 +1,140 @@ +import { Activity } from '@ghostfolio/api/app/order/interfaces/activities.interface'; +import { + activityDummyData, + loadExportFile, + symbolProfileDummyData, + userDummyData +} from '@ghostfolio/api/app/portfolio/calculator/portfolio-calculator-test-utils'; +import { PortfolioCalculatorFactory } from '@ghostfolio/api/app/portfolio/calculator/portfolio-calculator.factory'; +import { CurrentRateService } from '@ghostfolio/api/app/portfolio/current-rate.service'; +import { CurrentRateServiceMock } from '@ghostfolio/api/app/portfolio/current-rate.service.mock'; +import { RedisCacheService } from '@ghostfolio/api/app/redis-cache/redis-cache.service'; +import { RedisCacheServiceMock } from '@ghostfolio/api/app/redis-cache/redis-cache.service.mock'; +import { ConfigurationService } from '@ghostfolio/api/services/configuration/configuration.service'; +import { ExchangeRateDataService } from '@ghostfolio/api/services/exchange-rate-data/exchange-rate-data.service'; +import { ExchangeRateDataServiceMock } from '@ghostfolio/api/services/exchange-rate-data/exchange-rate-data.service.mock'; +import { PortfolioSnapshotService } from '@ghostfolio/api/services/queues/portfolio-snapshot/portfolio-snapshot.service'; +import { PortfolioSnapshotServiceMock } from '@ghostfolio/api/services/queues/portfolio-snapshot/portfolio-snapshot.service.mock'; +import { parseDate } from '@ghostfolio/common/helper'; +import { ExportResponse } from '@ghostfolio/common/interfaces'; +import { PerformanceCalculationType } from '@ghostfolio/common/types/performance-calculation-type.type'; + +import { Big } from 'big.js'; +import { join } from 'node:path'; + +jest.mock('@ghostfolio/api/app/portfolio/current-rate.service', () => { + return { + CurrentRateService: jest.fn().mockImplementation(() => { + return CurrentRateServiceMock; + }) + }; +}); + +jest.mock( + '@ghostfolio/api/services/exchange-rate-data/exchange-rate-data.service', + () => { + return { + ExchangeRateDataService: jest.fn().mockImplementation(() => { + return ExchangeRateDataServiceMock; + }) + }; + } +); + +jest.mock( + '@ghostfolio/api/services/queues/portfolio-snapshot/portfolio-snapshot.service', + () => { + return { + PortfolioSnapshotService: jest.fn().mockImplementation(() => { + return PortfolioSnapshotServiceMock; + }) + }; + } +); + +jest.mock('@ghostfolio/api/app/redis-cache/redis-cache.service', () => { + return { + RedisCacheService: jest.fn().mockImplementation(() => { + return RedisCacheServiceMock; + }) + }; +}); + +describe('PortfolioCalculator', () => { + let exportResponse: ExportResponse; + + let configurationService: ConfigurationService; + let currentRateService: CurrentRateService; + let exchangeRateDataService: ExchangeRateDataService; + let portfolioCalculatorFactory: PortfolioCalculatorFactory; + let portfolioSnapshotService: PortfolioSnapshotService; + let redisCacheService: RedisCacheService; + + beforeAll(() => { + exportResponse = loadExportFile( + join(__dirname, '../../../../../../../test/import/ok/btceur.json') + ); + }); + + beforeEach(() => { + configurationService = new ConfigurationService(); + + currentRateService = new CurrentRateService(null, null, null, null); + + exchangeRateDataService = new ExchangeRateDataService( + null, + null, + null, + null + ); + + portfolioSnapshotService = new PortfolioSnapshotService(null); + + redisCacheService = new RedisCacheService(null, null); + + portfolioCalculatorFactory = new PortfolioCalculatorFactory( + configurationService, + currentRateService, + exchangeRateDataService, + portfolioSnapshotService, + redisCacheService + ); + }); + + describe('get current positions', () => { + it.only('with BTCUSD buy (in EUR)', async () => { + jest.useFakeTimers().setSystemTime(parseDate('2022-01-14').getTime()); + + const activities: Activity[] = exportResponse.activities.map( + (activity) => ({ + ...activityDummyData, + ...activity, + date: parseDate(activity.date), + feeInAssetProfileCurrency: 4.46, + SymbolProfile: { + ...symbolProfileDummyData, + currency: 'USD', + dataSource: activity.dataSource, + name: 'Bitcoin', + symbol: activity.symbol + }, + unitPriceInAssetProfileCurrency: 44558.42 + }) + ); + + const portfolioCalculator = portfolioCalculatorFactory.createCalculator({ + activities, + calculationType: PerformanceCalculationType.ROAI, + currency: 'EUR', + userId: userDummyData.id + }); + + const portfolioSnapshot = await portfolioCalculator.computeSnapshot(); + + expect(portfolioSnapshot.positions[0].fee).toEqual(new Big(4.46)); + expect( + portfolioSnapshot.positions[0].feeInBaseCurrency.toNumber() + ).toBeCloseTo(3.94, 1); + }); + }); +}); diff --git a/apps/api/src/services/exchange-rate-data/exchange-rate-data.service.mock.ts b/apps/api/src/services/exchange-rate-data/exchange-rate-data.service.mock.ts index 8f5d1c28a..076375523 100644 --- a/apps/api/src/services/exchange-rate-data/exchange-rate-data.service.mock.ts +++ b/apps/api/src/services/exchange-rate-data/exchange-rate-data.service.mock.ts @@ -17,11 +17,21 @@ export const ExchangeRateDataServiceMock = { '2023-07-10': 0.8854 } }); + } else if (targetCurrency === 'EUR') { + return Promise.resolve({ + EUREUR: { + '2021-12-12': 1 + }, + USDEUR: { + '2021-12-12': 0.8855 + } + }); } else if (targetCurrency === 'USD') { return Promise.resolve({ USDUSD: { '2018-01-01': 1, '2021-11-16': 1, + '2021-12-12': 1, '2023-07-10': 1 } }); From 96cad6ad7a54f0cbafaf83732daf7e6be080c66a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sven=20G=C3=BCnther?= Date: Sat, 1 Nov 2025 18:39:38 +0100 Subject: [PATCH 75/92] Feature/atomic data replacement during historical market data gathering (#5858) * Atomic data replacement during historical market data gathering * Update changelog --- CHANGELOG.md | 1 + .../api/src/services/interfaces/interfaces.ts | 1 + .../market-data/market-data.service.ts | 55 +++++++++++++++++++ .../data-gathering.processor.ts | 14 ++++- .../data-gathering/data-gathering.service.ts | 8 +-- 5 files changed, 72 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 248aaa6ac..15e89924f 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 icon of the _View Holding_ menu item in the activities table +- Ensured atomic data replacement during historical market data gathering - Refreshed the cryptocurrencies list - Upgraded `ng-extract-i18n-merge` from version `3.0.0` to `3.1.0` diff --git a/apps/api/src/services/interfaces/interfaces.ts b/apps/api/src/services/interfaces/interfaces.ts index 7469754b5..492c2bd35 100644 --- a/apps/api/src/services/interfaces/interfaces.ts +++ b/apps/api/src/services/interfaces/interfaces.ts @@ -20,4 +20,5 @@ export interface DataProviderResponse { export interface DataGatheringItem extends AssetProfileIdentifier { date?: Date; + force?: boolean; } diff --git a/apps/api/src/services/market-data/market-data.service.ts b/apps/api/src/services/market-data/market-data.service.ts index 38ad61663..d318b9a70 100644 --- a/apps/api/src/services/market-data/market-data.service.ts +++ b/apps/api/src/services/market-data/market-data.service.ts @@ -132,6 +132,61 @@ export class MarketDataService { }); } + /** + * Atomically replace market data for a symbol within a date range. + * Deletes existing data in the range and inserts new data within a single + * transaction to prevent data loss if the operation fails. + */ + public async replaceForSymbol({ + data, + dataSource, + symbol + }: AssetProfileIdentifier & { data: Prisma.MarketDataUpdateInput[] }) { + await this.prismaService.$transaction(async (prisma) => { + if (data.length > 0) { + let minTime = Infinity; + let maxTime = -Infinity; + + for (const { date } of data) { + const time = (date as Date).getTime(); + + if (time < minTime) { + minTime = time; + } + + if (time > maxTime) { + maxTime = time; + } + } + + const minDate = new Date(minTime); + const maxDate = new Date(maxTime); + + await prisma.marketData.deleteMany({ + where: { + dataSource, + symbol, + date: { + gte: minDate, + lte: maxDate + } + } + }); + + await prisma.marketData.createMany({ + data: data.map(({ date, marketPrice, state }) => ({ + dataSource, + symbol, + date: date as Date, + marketPrice: marketPrice as number, + state: state as MarketDataState + })), + skipDuplicates: true + }); + } + }); + } + public async updateAssetProfileIdentifier( oldAssetProfileIdentifier: AssetProfileIdentifier, newAssetProfileIdentifier: AssetProfileIdentifier diff --git a/apps/api/src/services/queues/data-gathering/data-gathering.processor.ts b/apps/api/src/services/queues/data-gathering/data-gathering.processor.ts index 1a172f3ea..1a4038652 100644 --- a/apps/api/src/services/queues/data-gathering/data-gathering.processor.ts +++ b/apps/api/src/services/queues/data-gathering/data-gathering.processor.ts @@ -100,7 +100,7 @@ export class DataGatheringProcessor { name: GATHER_HISTORICAL_MARKET_DATA_PROCESS_JOB_NAME }) public async gatherHistoricalMarketData(job: Job) { - const { dataSource, date, symbol } = job.data; + const { dataSource, date, force, symbol } = job.data; try { let currentDate = parseISO(date as unknown as string); @@ -109,7 +109,7 @@ export class DataGatheringProcessor { `Historical market data gathering has been started for ${symbol} (${dataSource}) at ${format( currentDate, DATE_FORMAT - )}`, + )}${force ? ' (forced update)' : ''}`, `DataGatheringProcessor (${GATHER_HISTORICAL_MARKET_DATA_PROCESS_JOB_NAME})` ); @@ -157,7 +157,15 @@ export class DataGatheringProcessor { currentDate = addDays(currentDate, 1); } - await this.marketDataService.updateMany({ data }); + if (force) { + await this.marketDataService.replaceForSymbol({ + data, + dataSource, + symbol + }); + } else { + await this.marketDataService.updateMany({ data }); + } Logger.log( `Historical market data gathering has been completed for ${symbol} (${dataSource}) at ${format( diff --git a/apps/api/src/services/queues/data-gathering/data-gathering.service.ts b/apps/api/src/services/queues/data-gathering/data-gathering.service.ts index 2d3ec45ad..c433f692f 100644 --- a/apps/api/src/services/queues/data-gathering/data-gathering.service.ts +++ b/apps/api/src/services/queues/data-gathering/data-gathering.service.ts @@ -2,7 +2,6 @@ import { DataProviderService } from '@ghostfolio/api/services/data-provider/data import { DataEnhancerInterface } from '@ghostfolio/api/services/data-provider/interfaces/data-enhancer.interface'; import { ExchangeRateDataService } from '@ghostfolio/api/services/exchange-rate-data/exchange-rate-data.service'; import { DataGatheringItem } from '@ghostfolio/api/services/interfaces/interfaces'; -import { MarketDataService } from '@ghostfolio/api/services/market-data/market-data.service'; import { PrismaService } from '@ghostfolio/api/services/prisma/prisma.service'; import { PropertyService } from '@ghostfolio/api/services/property/property.service'; import { SymbolProfileService } from '@ghostfolio/api/services/symbol-profile/symbol-profile.service'; @@ -41,7 +40,6 @@ export class DataGatheringService { private readonly dataGatheringQueue: Queue, private readonly dataProviderService: DataProviderService, private readonly exchangeRateDataService: ExchangeRateDataService, - private readonly marketDataService: MarketDataService, private readonly prismaService: PrismaService, private readonly propertyService: PropertyService, private readonly symbolProfileService: SymbolProfileService @@ -95,8 +93,6 @@ export class DataGatheringService { } public async gatherSymbol({ dataSource, date, symbol }: DataGatheringItem) { - await this.marketDataService.deleteMany({ dataSource, symbol }); - const dataGatheringItems = (await this.getSymbolsMax()) .filter((dataGatheringItem) => { return ( @@ -111,6 +107,7 @@ export class DataGatheringService { await this.gatherSymbols({ dataGatheringItems, + force: true, priority: DATA_GATHERING_QUEUE_PRIORITY_HIGH }); } @@ -274,9 +271,11 @@ export class DataGatheringService { public async gatherSymbols({ dataGatheringItems, + force = false, priority }: { dataGatheringItems: DataGatheringItem[]; + force?: boolean; priority: number; }) { await this.addJobsToQueue( @@ -285,6 +284,7 @@ export class DataGatheringService { data: { dataSource, date, + force, symbol }, name: GATHER_HISTORICAL_MARKET_DATA_PROCESS_JOB_NAME, From a4040c3c3c91eb01fa66bb53b9a95663f78f8ecc Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Sat, 1 Nov 2025 19:28:22 +0100 Subject: [PATCH 76/92] Task/remove Internet Identity as social login provider (#5891) * Remove Internet Identity * Update changelog --- CHANGELOG.md | 1 + apps/api/src/app/auth/auth.controller.ts | 17 -- apps/api/src/app/auth/auth.service.ts | 37 --- ...ogin-with-access-token-dialog.component.ts | 18 +- .../login-with-access-token-dialog.html | 11 - .../pages/register/register-page.component.ts | 12 - .../src/app/pages/register/register-page.html | 14 -- .../app/services/internet-identity.service.ts | 56 ----- .../src/assets/icons/internet-computer.svg | 28 --- package-lock.json | 212 ++---------------- package.json | 5 - 11 files changed, 18 insertions(+), 393 deletions(-) delete mode 100644 apps/client/src/app/services/internet-identity.service.ts delete mode 100644 apps/client/src/assets/icons/internet-computer.svg diff --git a/CHANGELOG.md b/CHANGELOG.md index 15e89924f..2e4b9af16 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 icon of the _View Holding_ menu item in the activities table - Ensured atomic data replacement during historical market data gathering +- Removed _Internet Identity_ as a social login provider - Refreshed the cryptocurrencies list - Upgraded `ng-extract-i18n-merge` from version `3.0.0` to `3.1.0` diff --git a/apps/api/src/app/auth/auth.controller.ts b/apps/api/src/app/auth/auth.controller.ts index 13d8e37f6..57fd04bc7 100644 --- a/apps/api/src/app/auth/auth.controller.ts +++ b/apps/api/src/app/auth/auth.controller.ts @@ -102,23 +102,6 @@ export class AuthController { } } - @Post('internet-identity') - public async internetIdentityLogin( - @Body() body: { principalId: string } - ): Promise { - try { - const authToken = await this.authService.validateInternetIdentityLogin( - body.principalId - ); - return { authToken }; - } catch { - throw new HttpException( - getReasonPhrase(StatusCodes.FORBIDDEN), - StatusCodes.FORBIDDEN - ); - } - } - @Get('webauthn/generate-registration-options') @UseGuards(AuthGuard('jwt'), HasPermissionGuard) public async generateRegistrationOptions() { diff --git a/apps/api/src/app/auth/auth.service.ts b/apps/api/src/app/auth/auth.service.ts index ceff492a0..a6ee5d260 100644 --- a/apps/api/src/app/auth/auth.service.ts +++ b/apps/api/src/app/auth/auth.service.ts @@ -4,7 +4,6 @@ import { PropertyService } from '@ghostfolio/api/services/property/property.serv import { Injectable, InternalServerErrorException } from '@nestjs/common'; import { JwtService } from '@nestjs/jwt'; -import { Provider } from '@prisma/client'; import { ValidateOAuthLoginParams } from './interfaces/interfaces'; @@ -44,42 +43,6 @@ export class AuthService { }); } - public async validateInternetIdentityLogin(principalId: string) { - try { - const provider: Provider = 'INTERNET_IDENTITY'; - - let [user] = await this.userService.users({ - where: { provider, thirdPartyId: principalId } - }); - - if (!user) { - const isUserSignupEnabled = - await this.propertyService.isUserSignupEnabled(); - - if (!isUserSignupEnabled || true) { - throw new Error('Sign up forbidden'); - } - - // Create new user if not found - user = await this.userService.createUser({ - data: { - provider, - thirdPartyId: principalId - } - }); - } - - return this.jwtService.sign({ - id: user.id - }); - } catch (error) { - throw new InternalServerErrorException( - 'validateInternetIdentityLogin', - error.message - ); - } - } - public async validateOAuthLogin({ provider, thirdPartyId diff --git a/apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.component.ts b/apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.component.ts index aaca03594..c0926150f 100644 --- a/apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.component.ts +++ b/apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.component.ts @@ -1,10 +1,8 @@ import { GfDialogHeaderComponent } from '@ghostfolio/client/components/dialog-header/dialog-header.component'; -import { InternetIdentityService } from '@ghostfolio/client/services/internet-identity.service'; import { KEY_STAY_SIGNED_IN, SettingsStorageService } from '@ghostfolio/client/services/settings-storage.service'; -import { TokenStorageService } from '@ghostfolio/client/services/token-storage.service'; import { CommonModule } from '@angular/common'; import { ChangeDetectionStrategy, Component, Inject } from '@angular/core'; @@ -21,7 +19,6 @@ import { } from '@angular/material/dialog'; import { MatFormFieldModule } from '@angular/material/form-field'; import { MatInputModule } from '@angular/material/input'; -import { Router } from '@angular/router'; import { IonIcon } from '@ionic/angular/standalone'; import { addIcons } from 'ionicons'; import { eyeOffOutline, eyeOutline } from 'ionicons/icons'; @@ -55,10 +52,7 @@ export class GfLoginWithAccessTokenDialogComponent { public constructor( @Inject(MAT_DIALOG_DATA) public data: LoginWithAccessTokenDialogParams, public dialogRef: MatDialogRef, - private internetIdentityService: InternetIdentityService, - private router: Router, - private settingsStorageService: SettingsStorageService, - private tokenStorageService: TokenStorageService + private settingsStorageService: SettingsStorageService ) { addIcons({ eyeOffOutline, eyeOutline }); } @@ -81,14 +75,4 @@ export class GfLoginWithAccessTokenDialogComponent { }); } } - - public async onLoginWithInternetIdentity() { - try { - const { authToken } = await this.internetIdentityService.login(); - - this.tokenStorageService.saveToken(authToken); - this.dialogRef.close(); - this.router.navigate(['/']); - } catch {} - } } diff --git a/apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html b/apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html index b51802caf..15e68822a 100644 --- a/apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html +++ b/apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html @@ -26,17 +26,6 @@ @if (data.hasPermissionToUseSocialLogin) {
or
- @if (hasPermissionForSocialLogin) {
or
- @if (false) { - - }
(); - - public constructor(private http: HttpClient) {} - - public async login(): Promise { - const authClient = await AuthClient.create({ - idleOptions: { - disableDefaultIdleCallback: true, - disableIdle: true - } - }); - - return new Promise((resolve, reject) => { - authClient.login({ - onError: async () => { - return reject(); - }, - onSuccess: () => { - const principalId = authClient.getIdentity().getPrincipal(); - - this.http - .post(`/api/v1/auth/internet-identity`, { - principalId: principalId.toText() - }) - .pipe( - catchError(() => { - reject(); - return EMPTY; - }), - takeUntil(this.unsubscribeSubject) - ) - .subscribe((response) => { - resolve(response); - }); - } - }); - }); - } - - public ngOnDestroy() { - this.unsubscribeSubject.next(); - this.unsubscribeSubject.complete(); - } -} diff --git a/apps/client/src/assets/icons/internet-computer.svg b/apps/client/src/assets/icons/internet-computer.svg deleted file mode 100644 index 6a1bf6c86..000000000 --- a/apps/client/src/assets/icons/internet-computer.svg +++ /dev/null @@ -1,28 +0,0 @@ - - - - - - - - - - - - - - - - diff --git a/package-lock.json b/package-lock.json index 914a783e0..3d2dfa25b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -23,11 +23,6 @@ "@angular/service-worker": "20.2.4", "@codewithdan/observable-store": "2.2.15", "@date-fns/utc": "2.1.0", - "@dfinity/agent": "0.15.7", - "@dfinity/auth-client": "0.15.7", - "@dfinity/candid": "0.15.7", - "@dfinity/identity": "0.15.7", - "@dfinity/principal": "0.15.7", "@internationalized/number": "3.6.3", "@ionic/angular": "8.7.3", "@keyv/redis": "4.4.0", @@ -4713,6 +4708,7 @@ "version": "0.8.1", "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "dev": true, "license": "MIT", "dependencies": { "@jridgewell/trace-mapping": "0.3.9" @@ -4725,6 +4721,7 @@ "version": "0.3.9", "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "dev": true, "license": "MIT", "dependencies": { "@jridgewell/resolve-uri": "^3.0.3", @@ -4953,73 +4950,6 @@ "node": "^16.13.0 || >=18.0.0" } }, - "node_modules/@dfinity/agent": { - "version": "0.15.7", - "resolved": "https://registry.npmjs.org/@dfinity/agent/-/agent-0.15.7.tgz", - "integrity": "sha512-w34yvlUTpPBG8nLOD0t/ao3k2xonOFq4QGvfJ1HiS/nIggdza/3xC3nLBszGrjVYWj1jqu8BLFvQXCAeWin75A==", - "license": "Apache-2.0", - "dependencies": { - "base64-arraybuffer": "^0.2.0", - "bignumber.js": "^9.0.0", - "borc": "^2.1.1", - "js-sha256": "0.9.0", - "simple-cbor": "^0.4.1", - "ts-node": "^10.8.2" - }, - "peerDependencies": { - "@dfinity/candid": "^0.15.7", - "@dfinity/principal": "^0.15.7" - } - }, - "node_modules/@dfinity/auth-client": { - "version": "0.15.7", - "resolved": "https://registry.npmjs.org/@dfinity/auth-client/-/auth-client-0.15.7.tgz", - "integrity": "sha512-f6cRqXayCf+7+9gNcDnAZZwJrgBYKIzfxjxeRLlpsueQeo+E/BX2yVSANxzTkCNc4U3p+ttHI1RNtasLunYTcA==", - "license": "Apache-2.0", - "dependencies": { - "idb": "^7.0.2" - }, - "peerDependencies": { - "@dfinity/agent": "^0.15.7", - "@dfinity/identity": "^0.15.7", - "@dfinity/principal": "^0.15.7" - } - }, - "node_modules/@dfinity/candid": { - "version": "0.15.7", - "resolved": "https://registry.npmjs.org/@dfinity/candid/-/candid-0.15.7.tgz", - "integrity": "sha512-lTcjK/xrSyT7wvUQ2pApG+yklQAwxaofQ04D1IWv0/8gKbY0eUbh8G2w6+CypJ15Hb1CH24ijUj8nWdeX/z3jg==", - "license": "Apache-2.0", - "dependencies": { - "ts-node": "^10.8.2" - } - }, - "node_modules/@dfinity/identity": { - "version": "0.15.7", - "resolved": "https://registry.npmjs.org/@dfinity/identity/-/identity-0.15.7.tgz", - "integrity": "sha512-kBAkx9wq78jSQf6T5aayLyWm8YgtOZw8bW6+OuzX6tR3hkAEa85A9TcKA7BjkmMWSIskjEDVQub4fFfKWS2vOQ==", - "license": "Apache-2.0", - "dependencies": { - "borc": "^2.1.1", - "js-sha256": "^0.9.0", - "tweetnacl": "^1.0.1" - }, - "peerDependencies": { - "@dfinity/agent": "^0.15.7", - "@dfinity/principal": "^0.15.7", - "@peculiar/webcrypto": "^1.4.0" - } - }, - "node_modules/@dfinity/principal": { - "version": "0.15.7", - "resolved": "https://registry.npmjs.org/@dfinity/principal/-/principal-0.15.7.tgz", - "integrity": "sha512-6/AkYzpGEH6Jw/0+B/EeeQn+5u2GDDvRLt1kQPhIG4txQYFnOy04H3VvyrymmfAj6/CXUgrOrux6OxgYSLYVJg==", - "license": "Apache-2.0", - "dependencies": { - "js-sha256": "^0.9.0", - "ts-node": "^10.8.2" - } - }, "node_modules/@discoveryjs/json-ext": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.6.3.tgz", @@ -11908,36 +11838,6 @@ "tslib": "^2.8.1" } }, - "node_modules/@peculiar/json-schema": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/@peculiar/json-schema/-/json-schema-1.1.12.tgz", - "integrity": "sha512-coUfuoMeIB7B8/NMekxaDzLhaYmp0HZNPEjYRm9goRou8UZIC3z21s0sL9AWoCw4EG876QyO3kYrc61WNF9B/w==", - "license": "MIT", - "peer": true, - "dependencies": { - "tslib": "^2.0.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/@peculiar/webcrypto": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@peculiar/webcrypto/-/webcrypto-1.5.0.tgz", - "integrity": "sha512-BRs5XUAwiyCDQMsVA9IDvDa7UBR9gAvPHgugOeGng3YN6vJ9JYonyDc0lNczErgtCWtucjR5N7VtaonboD/ezg==", - "license": "MIT", - "peer": true, - "dependencies": { - "@peculiar/asn1-schema": "^2.3.8", - "@peculiar/json-schema": "^1.1.12", - "pvtsutils": "^1.3.5", - "tslib": "^2.6.2", - "webcrypto-core": "^1.8.0" - }, - "engines": { - "node": ">=10.12.0" - } - }, "node_modules/@phenomnomnominal/tsquery": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/@phenomnomnominal/tsquery/-/tsquery-5.0.1.tgz", @@ -13754,24 +13654,28 @@ "version": "1.0.11", "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==", + "dev": true, "license": "MIT" }, "node_modules/@tsconfig/node12": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", + "dev": true, "license": "MIT" }, "node_modules/@tsconfig/node14": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", + "dev": true, "license": "MIT" }, "node_modules/@tsconfig/node16": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", + "dev": true, "license": "MIT" }, "node_modules/@tufjs/canonical-json": { @@ -15686,6 +15590,7 @@ "version": "8.15.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", + "devOptional": true, "license": "MIT", "bin": { "acorn": "bin/acorn" @@ -15732,6 +15637,7 @@ "version": "8.3.4", "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", + "dev": true, "license": "MIT", "dependencies": { "acorn": "^8.11.0" @@ -16057,6 +15963,7 @@ "version": "4.1.3", "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true, "license": "MIT" }, "node_modules/argparse": { @@ -16709,14 +16616,6 @@ "dev": true, "license": "MIT" }, - "node_modules/base64-arraybuffer": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.2.0.tgz", - "integrity": "sha512-7emyCsu1/xiBXgQZrscw/8KPRT44I4Yq9Pe6EGs3aPRTsWuggML1/1DTuZUuIaJPIm1FTDUVXl4x/yW8s0kQDQ==", - "engines": { - "node": ">= 0.6.0" - } - }, "node_modules/base64-js": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", @@ -17040,30 +16939,6 @@ "popper.js": "^1.16.1" } }, - "node_modules/borc": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/borc/-/borc-2.1.2.tgz", - "integrity": "sha512-Sy9eoUi4OiKzq7VovMn246iTo17kzuyHJKomCfpWMlI6RpfN1gk95w7d7gH264nApVLg0HZfcpz62/g4VH1Y4w==", - "license": "MIT", - "dependencies": { - "bignumber.js": "^9.0.0", - "buffer": "^5.5.0", - "commander": "^2.15.0", - "ieee754": "^1.1.13", - "iso-url": "~0.4.7", - "json-text-sequence": "~0.1.0", - "readable-stream": "^3.6.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/borc/node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "license": "MIT" - }, "node_modules/brace-expansion": { "version": "1.1.12", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", @@ -17160,6 +17035,7 @@ "version": "5.7.1", "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, "funding": [ { "type": "github", @@ -19325,6 +19201,7 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true, "license": "MIT" }, "node_modules/cron": { @@ -20808,12 +20685,6 @@ "dev": true, "license": "MIT" }, - "node_modules/delimit-stream": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/delimit-stream/-/delimit-stream-0.1.0.tgz", - "integrity": "sha512-a02fiQ7poS5CnjiJBAsjGLPp5EwVoGHNeu9sziBd9huppRfsAFIpv5zNLv0V1gbop53ilngAf5Kf331AwcoRBQ==", - "license": "BSD-2-Clause" - }, "node_modules/denque": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/denque/-/denque-2.1.0.tgz", @@ -20908,6 +20779,7 @@ "version": "4.0.2", "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true, "license": "BSD-3-Clause", "engines": { "node": ">=0.3.1" @@ -24840,12 +24712,6 @@ "postcss": "^8.1.0" } }, - "node_modules/idb": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/idb/-/idb-7.1.1.tgz", - "integrity": "sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ==", - "license": "ISC" - }, "node_modules/identity-obj-proxy": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/identity-obj-proxy/-/identity-obj-proxy-3.0.0.tgz", @@ -25837,15 +25703,6 @@ "dev": true, "license": "ISC" }, - "node_modules/iso-url": { - "version": "0.4.7", - "resolved": "https://registry.npmjs.org/iso-url/-/iso-url-0.4.7.tgz", - "integrity": "sha512-27fFRDnPAMnHGLq36bWTpKET+eiXct3ENlCcdcMdk+mjXrb2kw3mhBUg1B7ewAC0kVzlOPhADzQgz1SE6Tglog==", - "license": "MIT", - "engines": { - "node": ">=10" - } - }, "node_modules/isobject": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", @@ -30098,12 +29955,6 @@ "license": "MIT", "peer": true }, - "node_modules/js-sha256": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/js-sha256/-/js-sha256-0.9.0.tgz", - "integrity": "sha512-sga3MHh9sgQN2+pJ9VYZ+1LPwXOxuBJBA5nrR5/ofPfuiJBE2hnjsaN8se8JznOmGLN2p49Pe5U/ttafcs/apA==", - "license": "MIT" - }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -30316,15 +30167,6 @@ "dev": true, "license": "ISC" }, - "node_modules/json-text-sequence": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/json-text-sequence/-/json-text-sequence-0.1.1.tgz", - "integrity": "sha512-L3mEegEWHRekSHjc7+sc8eJhba9Clq1PZ8kMkzf8OxElhXc8O4TS5MwcVlj9aEbm5dr81N90WHC5nAz3UO971w==", - "license": "MIT", - "dependencies": { - "delimit-stream": "0.1.0" - } - }, "node_modules/json5": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", @@ -32083,6 +31925,7 @@ "version": "1.3.6", "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true, "license": "ISC" }, "node_modules/make-fetch-happen": { @@ -38081,12 +37924,6 @@ "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/simple-cbor": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/simple-cbor/-/simple-cbor-0.4.1.tgz", - "integrity": "sha512-rijcxtwx2b4Bje3sqeIqw5EeW7UlOIC4YfOdwqIKacpvRQ/D78bWg/4/0m5e0U91oKvlGh7LlJuZCu07ISCC7w==", - "license": "ISC" - }, "node_modules/sirv": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/sirv/-/sirv-2.0.4.tgz", @@ -40042,6 +39879,7 @@ "version": "10.9.2", "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", + "dev": true, "license": "MIT", "dependencies": { "@cspotcode/source-map-support": "^0.8.0", @@ -40219,12 +40057,6 @@ "node": "*" } }, - "node_modules/tweetnacl": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz", - "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==", - "license": "Unlicense" - }, "node_modules/twitter-api-v2": { "version": "1.23.0", "resolved": "https://registry.npmjs.org/twitter-api-v2/-/twitter-api-v2-1.23.0.tgz", @@ -40795,6 +40627,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", + "dev": true, "license": "MIT" }, "node_modules/v8-to-istanbul": { @@ -41110,20 +40943,6 @@ "license": "MIT", "optional": true }, - "node_modules/webcrypto-core": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/webcrypto-core/-/webcrypto-core-1.8.1.tgz", - "integrity": "sha512-P+x1MvlNCXlKbLSOY4cYrdreqPG5hbzkmawbcXLKN/mf6DZW0SdNNkZ+sjwsqVkI4A4Ko2sPZmkZtCKY58w83A==", - "license": "MIT", - "peer": true, - "dependencies": { - "@peculiar/asn1-schema": "^2.3.13", - "@peculiar/json-schema": "^1.1.12", - "asn1js": "^3.0.5", - "pvtsutils": "^1.3.5", - "tslib": "^2.7.0" - } - }, "node_modules/webidl-conversions": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", @@ -42424,6 +42243,7 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true, "license": "MIT", "engines": { "node": ">=6" diff --git a/package.json b/package.json index 43970a7f0..48ebb9215 100644 --- a/package.json +++ b/package.json @@ -69,11 +69,6 @@ "@angular/service-worker": "20.2.4", "@codewithdan/observable-store": "2.2.15", "@date-fns/utc": "2.1.0", - "@dfinity/agent": "0.15.7", - "@dfinity/auth-client": "0.15.7", - "@dfinity/candid": "0.15.7", - "@dfinity/identity": "0.15.7", - "@dfinity/principal": "0.15.7", "@internationalized/number": "3.6.3", "@ionic/angular": "8.7.3", "@keyv/redis": "4.4.0", From c8e6f9b38117b8256a1589a9e7ff71d294e8a66e Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Sat, 1 Nov 2025 19:28:51 +0100 Subject: [PATCH 77/92] Task/upgrade countries-list to version 3.2.0 (#5888) * Upgrade countries-list to version 3.2.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 2e4b9af16..f0a46c801 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Ensured atomic data replacement during historical market data gathering - Removed _Internet Identity_ as a social login provider - Refreshed the cryptocurrencies list +- Upgraded `countries-list` from version `3.1.1` to `3.2.0` - Upgraded `ng-extract-i18n-merge` from version `3.0.0` to `3.1.0` ## 2.213.0 - 2025-10-30 diff --git a/package-lock.json b/package-lock.json index 3d2dfa25b..0812c99b9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -57,7 +57,7 @@ "class-validator": "0.14.2", "color": "5.0.0", "countries-and-timezones": "3.8.0", - "countries-list": "3.1.1", + "countries-list": "3.2.0", "countup.js": "2.9.0", "date-fns": "4.1.0", "dotenv": "17.2.3", @@ -18523,9 +18523,9 @@ } }, "node_modules/countries-list": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/countries-list/-/countries-list-3.1.1.tgz", - "integrity": "sha512-nPklKJ5qtmY5MdBKw1NiBAoyx5Sa7p2yPpljZyQ7gyCN1m+eMFs9I6CT37Mxt8zvR5L3VzD3DJBE4WQzX3WF4A==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/countries-list/-/countries-list-3.2.0.tgz", + "integrity": "sha512-HYHAo2fwEsG3TmbsNdVmIQPHizRlqeYMTtLEAl0IANG/3jRYX7p3NR6VapDqKP0n60TmsRy1dyRjVN5JbywDbA==", "license": "MIT" }, "node_modules/countup.js": { diff --git a/package.json b/package.json index 48ebb9215..4f52177d2 100644 --- a/package.json +++ b/package.json @@ -103,7 +103,7 @@ "class-validator": "0.14.2", "color": "5.0.0", "countries-and-timezones": "3.8.0", - "countries-list": "3.1.1", + "countries-list": "3.2.0", "countup.js": "2.9.0", "date-fns": "4.1.0", "dotenv": "17.2.3", From 6fd0a9a5c258807ee744a473bdab22d10d081da1 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Sat, 1 Nov 2025 19:38:41 +0100 Subject: [PATCH 78/92] Task/upgrade twitter-api-v2 to version 1.27.0 (#5892) * Upgrade twitter-api-v2 to version 1.27.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 f0a46c801..cf13e8ec3 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 - Refreshed the cryptocurrencies list - Upgraded `countries-list` from version `3.1.1` to `3.2.0` - Upgraded `ng-extract-i18n-merge` from version `3.0.0` to `3.1.0` +- Upgraded `twitter-api-v2` from version `1.23.0` to `1.27.0` ## 2.213.0 - 2025-10-30 diff --git a/package-lock.json b/package-lock.json index 0812c99b9..286dc628c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -88,7 +88,7 @@ "stripe": "18.5.0", "svgmap": "2.12.2", "tablemark": "4.1.0", - "twitter-api-v2": "1.23.0", + "twitter-api-v2": "1.27.0", "uuid": "11.1.0", "yahoo-finance2": "3.10.0", "zone.js": "0.15.1" @@ -40058,9 +40058,9 @@ } }, "node_modules/twitter-api-v2": { - "version": "1.23.0", - "resolved": "https://registry.npmjs.org/twitter-api-v2/-/twitter-api-v2-1.23.0.tgz", - "integrity": "sha512-5i1agETVpTuY68Zuk9i2B3N9wHzc4JIWw0WKyG4CEaFv9mRKmU87roa+U1oYYXTChWb0HMcqfkwoBJHYmLbeDA==", + "version": "1.27.0", + "resolved": "https://registry.npmjs.org/twitter-api-v2/-/twitter-api-v2-1.27.0.tgz", + "integrity": "sha512-hbIFwzg0NeOcFOdmJqtKMCXjLjc0INff/7NwhnZ2zpnw65oku8i+0eMxo5M0iTc1hs+inD/IpDw3S0Xh2c45QQ==", "license": "Apache-2.0" }, "node_modules/type-check": { diff --git a/package.json b/package.json index 4f52177d2..146b27c52 100644 --- a/package.json +++ b/package.json @@ -134,7 +134,7 @@ "stripe": "18.5.0", "svgmap": "2.12.2", "tablemark": "4.1.0", - "twitter-api-v2": "1.23.0", + "twitter-api-v2": "1.27.0", "uuid": "11.1.0", "yahoo-finance2": "3.10.0", "zone.js": "0.15.1" From af2c46830627c8e6842f1b6ae1286c30270eaf31 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Sat, 1 Nov 2025 20:40:06 +0100 Subject: [PATCH 79/92] Release 2.214.0 (#5893) --- 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 cf13e8ec3..fa39b0061 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,7 +5,7 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## Unreleased +## 2.214.0 - 2025-11-01 ### Changed diff --git a/package-lock.json b/package-lock.json index 286dc628c..6429912bb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "ghostfolio", - "version": "2.213.0", + "version": "2.214.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "ghostfolio", - "version": "2.213.0", + "version": "2.214.0", "hasInstallScript": true, "license": "AGPL-3.0", "dependencies": { diff --git a/package.json b/package.json index 146b27c52..7648cee02 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ghostfolio", - "version": "2.213.0", + "version": "2.214.0", "homepage": "https://ghostfol.io", "license": "AGPL-3.0", "repository": "https://github.com/ghostfolio/ghostfolio", From a92f94e6970d84137cc093e7756c7456b39c2b79 Mon Sep 17 00:00:00 2001 From: Kenrick Tandrian <60643640+KenTandrian@users.noreply.github.com> Date: Sun, 2 Nov 2025 02:58:46 +0700 Subject: [PATCH 80/92] Feature/migrate client build executor to @nx/angular:browser-esbuild (#5883) * Migrate client build executor to @nx/angular:browser-esbuild * Update changelog --- CHANGELOG.md | 6 ++ apps/client/project.json | 56 +++++++++---------- .../portfolio-proportion-chart.component.ts | 3 +- .../treemap-chart/treemap-chart.component.ts | 3 +- 4 files changed, 38 insertions(+), 30 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index fa39b0061..8ba1a6d7e 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 + +- Changed the build executor of the client from `@nx/angular:webpack-browser` to `@nx/angular:browser-esbuild` + ## 2.214.0 - 2025-11-01 ### Changed diff --git a/apps/client/project.json b/apps/client/project.json index adb63d5c1..0d3571cdf 100644 --- a/apps/client/project.json +++ b/apps/client/project.json @@ -61,30 +61,30 @@ }, "targets": { "build": { - "executor": "@nx/angular:webpack-browser", + "executor": "@nx/angular:browser-esbuild", "options": { - "deleteOutputPath": false, - "localize": true, - "outputPath": "dist/apps/client", "index": "apps/client/src/index.html", "main": "apps/client/src/main.ts", - "polyfills": "apps/client/src/polyfills.ts", + "outputPath": "dist/apps/client", "tsConfig": "apps/client/tsconfig.app.json", + "buildOptimizer": false, + "deleteOutputPath": false, + "extractLicenses": false, + "localize": true, + "namedChunks": true, + "ngswConfigPath": "apps/client/ngsw-config.json", + "optimization": false, + "polyfills": "apps/client/src/polyfills.ts", + "scripts": ["node_modules/marked/marked.min.js"], + "serviceWorker": true, + "sourceMap": true, "styles": [ "apps/client/src/assets/fonts/inter.css", "apps/client/src/styles/theme.scss", "apps/client/src/styles.scss", "node_modules/open-color/open-color.css" ], - "scripts": ["node_modules/marked/marked.min.js"], - "vendorChunk": true, - "extractLicenses": false, - "buildOptimizer": false, - "sourceMap": true, - "optimization": false, - "namedChunks": true, - "serviceWorker": true, - "ngswConfigPath": "apps/client/ngsw-config.json" + "vendorChunk": true }, "configurations": { "development-ca": { @@ -136,19 +136,6 @@ "localize": ["zh"] }, "production": { - "fileReplacements": [ - { - "replace": "apps/client/src/environments/environment.ts", - "with": "apps/client/src/environments/environment.prod.ts" - } - ], - "optimization": true, - "outputHashing": "all", - "sourceMap": false, - "namedChunks": false, - "extractLicenses": true, - "vendorChunk": false, - "buildOptimizer": true, "budgets": [ { "type": "initial", @@ -160,7 +147,20 @@ "maximumWarning": "6kb", "maximumError": "10kb" } - ] + ], + "buildOptimizer": true, + "extractLicenses": true, + "fileReplacements": [ + { + "replace": "apps/client/src/environments/environment.ts", + "with": "apps/client/src/environments/environment.prod.ts" + } + ], + "namedChunks": false, + "optimization": true, + "outputHashing": "all", + "sourceMap": false, + "vendorChunk": false } }, "outputs": ["{options.outputPath}"], diff --git a/libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts b/libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts index 3f062a374..2d8a03ac0 100644 --- a/libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts +++ b/libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts @@ -31,6 +31,7 @@ import ChartDataLabels from 'chartjs-plugin-datalabels'; import { isUUID } from 'class-validator'; import Color from 'color'; import { NgxSkeletonLoaderModule } from 'ngx-skeleton-loader'; +import OpenColor from 'open-color'; import { translate } from '../i18n'; @@ -47,7 +48,7 @@ const { teal, violet, yellow -} = require('open-color'); +} = OpenColor; @Component({ changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/libs/ui/src/lib/treemap-chart/treemap-chart.component.ts b/libs/ui/src/lib/treemap-chart/treemap-chart.component.ts index 4e06d49cc..6ae958b83 100644 --- a/libs/ui/src/lib/treemap-chart/treemap-chart.component.ts +++ b/libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -33,10 +33,11 @@ import { isUUID } from 'class-validator'; import { differenceInDays, max } from 'date-fns'; import { orderBy } from 'lodash'; import { NgxSkeletonLoaderModule } from 'ngx-skeleton-loader'; +import OpenColor from 'open-color'; import { GetColorParams } from './interfaces/interfaces'; -const { gray, green, red } = require('open-color'); +const { gray, green, red } = OpenColor; @Component({ changeDetection: ChangeDetectionStrategy.OnPush, From 592baec9f3222502116fbdb1ef417546d2acc257 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Sun, 2 Nov 2025 15:31:16 +0100 Subject: [PATCH 81/92] Bugfix/fix style of safe withdrawal rate selector (#5899) * Fix style of selector * Update changelog --- CHANGELOG.md | 4 ++ .../app/pages/portfolio/fire/fire-page.scss | 14 +++++ apps/client/src/styles/theme.scss | 61 +++++++++---------- apps/client/src/styles/variables.scss | 4 ++ 4 files changed, 51 insertions(+), 32 deletions(-) create mode 100644 apps/client/src/styles/variables.scss diff --git a/CHANGELOG.md b/CHANGELOG.md index 8ba1a6d7e..5ecf2a57d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Changed the build executor of the client from `@nx/angular:webpack-browser` to `@nx/angular:browser-esbuild` +### Fixed + +- Fixed the style of the safe withdrawal rate selector in the _FIRE_ section (experimental) + ## 2.214.0 - 2025-11-01 ### Changed diff --git a/apps/client/src/app/pages/portfolio/fire/fire-page.scss b/apps/client/src/app/pages/portfolio/fire/fire-page.scss index 2892885c9..3a0618ed6 100644 --- a/apps/client/src/app/pages/portfolio/fire/fire-page.scss +++ b/apps/client/src/app/pages/portfolio/fire/fire-page.scss @@ -1,9 +1,21 @@ +@use '../../../../styles/variables.scss' as variables; + +@mixin select-arrow($color) { + background-image: url("data:image/svg+xml;utf8,"); +} + :host { display: block; .safe-withdrawal-rate-select { + @include select-arrow(variables.$dark-primary-text); + + appearance: none; background-color: transparent; + background-position: right 0 center; + background-repeat: no-repeat; color: rgb(var(--dark-primary-text)); + padding: 0 0.75rem 0 0.25rem; &:focus { box-shadow: none; @@ -14,6 +26,8 @@ :host-context(.theme-dark) { .safe-withdrawal-rate-select { + @include select-arrow(variables.$light-primary-text); + color: rgb(var(--light-primary-text)); } } diff --git a/apps/client/src/styles/theme.scss b/apps/client/src/styles/theme.scss index fe9fd44a5..8dd6d8e36 100644 --- a/apps/client/src/styles/theme.scss +++ b/apps/client/src/styles/theme.scss @@ -1,9 +1,6 @@ @use '@angular/material' as mat; -$dark-primary-text: rgba(black, 0.87); -$light-primary-text: white; - -$mat-css-dark-theme-selector: '.theme-dark'; +@use './variables.scss' as variables; $gf-primary: ( 50: var(--gf-theme-primary-50), @@ -21,20 +18,20 @@ $gf-primary: ( A400: var(--gf-theme-primary-A400), A700: var(--gf-theme-primary-A700), contrast: ( - 50: $dark-primary-text, - 100: $dark-primary-text, - 200: $dark-primary-text, - 300: $light-primary-text, - 400: $light-primary-text, - 500: $light-primary-text, - 600: $light-primary-text, - 700: $light-primary-text, - 800: $light-primary-text, - 900: $light-primary-text, - A100: $dark-primary-text, - A200: $light-primary-text, - A400: $light-primary-text, - A700: $light-primary-text + 50: variables.$dark-primary-text, + 100: variables.$dark-primary-text, + 200: variables.$dark-primary-text, + 300: variables.$light-primary-text, + 400: variables.$light-primary-text, + 500: variables.$light-primary-text, + 600: variables.$light-primary-text, + 700: variables.$light-primary-text, + 800: variables.$light-primary-text, + 900: variables.$light-primary-text, + A100: variables.$dark-primary-text, + A200: variables.$light-primary-text, + A400: variables.$light-primary-text, + A700: variables.$light-primary-text ) ); @@ -54,20 +51,20 @@ $gf-secondary: ( A400: var(--gf-theme-secondary-A400), A700: var(--gf-theme-secondary-A700), contrast: ( - 50: $dark-primary-text, - 100: $dark-primary-text, - 200: $dark-primary-text, - 300: $light-primary-text, - 400: $light-primary-text, - 500: $light-primary-text, - 600: $light-primary-text, - 700: $light-primary-text, - 800: $light-primary-text, - 900: $light-primary-text, - A100: $dark-primary-text, - A200: $light-primary-text, - A400: $light-primary-text, - A700: $light-primary-text + 50: variables.$dark-primary-text, + 100: variables.$dark-primary-text, + 200: variables.$dark-primary-text, + 300: variables.$light-primary-text, + 400: variables.$light-primary-text, + 500: variables.$light-primary-text, + 600: variables.$light-primary-text, + 700: variables.$light-primary-text, + 800: variables.$light-primary-text, + 900: variables.$light-primary-text, + A100: variables.$dark-primary-text, + A200: variables.$light-primary-text, + A400: variables.$light-primary-text, + A700: variables.$light-primary-text ) ); diff --git a/apps/client/src/styles/variables.scss b/apps/client/src/styles/variables.scss new file mode 100644 index 000000000..dcf26eecc --- /dev/null +++ b/apps/client/src/styles/variables.scss @@ -0,0 +1,4 @@ +$dark-primary-text: rgba(black, 0.87); +$light-primary-text: white; + +$mat-css-dark-theme-selector: '.theme-dark'; From a5f934460bc4a79d5eaeb9a912b917a4743e7b5f Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Sun, 2 Nov 2025 19:51:27 +0100 Subject: [PATCH 82/92] Task/introduce interface for get admin users response (#5903) * Introduce interface for get admin users response --- apps/api/src/app/admin/admin.controller.ts | 4 ++-- apps/api/src/app/admin/admin.service.ts | 6 +++--- .../app/components/admin-users/admin-users.component.ts | 8 ++++++-- .../user-detail-dialog/interfaces/interfaces.ts | 4 ++-- apps/client/src/app/services/admin.service.ts | 4 ++-- libs/common/src/lib/interfaces/index.ts | 4 ++-- .../admin-users-response.interface.ts} | 2 +- 7 files changed, 18 insertions(+), 14 deletions(-) rename libs/common/src/lib/interfaces/{admin-users.interface.ts => responses/admin-users-response.interface.ts} (88%) diff --git a/apps/api/src/app/admin/admin.controller.ts b/apps/api/src/app/admin/admin.controller.ts index d7c4c5d3d..2419b0a7d 100644 --- a/apps/api/src/app/admin/admin.controller.ts +++ b/apps/api/src/app/admin/admin.controller.ts @@ -17,7 +17,7 @@ import { getAssetProfileIdentifier } from '@ghostfolio/common/helper'; import { AdminData, AdminMarketData, - AdminUsers, + AdminUsersResponse, EnhancedSymbolProfile, ScraperConfiguration } from '@ghostfolio/common/interfaces'; @@ -315,7 +315,7 @@ export class AdminController { public async getUsers( @Query('skip') skip?: number, @Query('take') take?: number - ): Promise { + ): Promise { return this.adminService.getUsers({ skip: isNaN(skip) ? undefined : skip, take: isNaN(take) ? undefined : take diff --git a/apps/api/src/app/admin/admin.service.ts b/apps/api/src/app/admin/admin.service.ts index 11f6f0599..683e72cb8 100644 --- a/apps/api/src/app/admin/admin.service.ts +++ b/apps/api/src/app/admin/admin.service.ts @@ -23,7 +23,7 @@ import { AdminMarketData, AdminMarketDataDetails, AdminMarketDataItem, - AdminUsers, + AdminUsersResponse, AssetProfileIdentifier, EnhancedSymbolProfile, Filter @@ -513,7 +513,7 @@ export class AdminService { }: { skip?: number; take?: number; - }): Promise { + }): Promise { const [count, users] = await Promise.all([ this.countUsersWithAnalytics(), this.getUsersWithAnalytics({ skip, take }) @@ -818,7 +818,7 @@ export class AdminService { }: { skip?: number; take?: number; - }): Promise { + }): Promise { let orderBy: Prisma.Enumerable = [ { createdAt: 'desc' } ]; diff --git a/apps/client/src/app/components/admin-users/admin-users.component.ts b/apps/client/src/app/components/admin-users/admin-users.component.ts index c0d058ad2..94b5839c6 100644 --- a/apps/client/src/app/components/admin-users/admin-users.component.ts +++ b/apps/client/src/app/components/admin-users/admin-users.component.ts @@ -5,7 +5,11 @@ import { getDateFormatString, getEmojiFlag } from '@ghostfolio/common/helper'; -import { AdminUsers, InfoItem, User } from '@ghostfolio/common/interfaces'; +import { + AdminUsersResponse, + InfoItem, + User +} from '@ghostfolio/common/interfaces'; import { hasPermission, permissions } from '@ghostfolio/common/permissions'; import { GfPremiumIndicatorComponent } from '@ghostfolio/ui/premium-indicator'; import { GfValueComponent } from '@ghostfolio/ui/value'; @@ -75,7 +79,7 @@ import { GfUserDetailDialogComponent } from '../user-detail-dialog/user-detail-d export class GfAdminUsersComponent implements OnDestroy, OnInit { @ViewChild(MatPaginator) paginator: MatPaginator; - public dataSource = new MatTableDataSource(); + public dataSource = new MatTableDataSource(); public defaultDateFormat: string; public deviceType: string; public displayedColumns: string[] = []; diff --git a/apps/client/src/app/components/user-detail-dialog/interfaces/interfaces.ts b/apps/client/src/app/components/user-detail-dialog/interfaces/interfaces.ts index 5f3f4b87a..d29bc01bc 100644 --- a/apps/client/src/app/components/user-detail-dialog/interfaces/interfaces.ts +++ b/apps/client/src/app/components/user-detail-dialog/interfaces/interfaces.ts @@ -1,8 +1,8 @@ -import { AdminUsers } from '@ghostfolio/common/interfaces'; +import { AdminUsersResponse } from '@ghostfolio/common/interfaces'; export interface UserDetailDialogParams { deviceType: string; hasPermissionForSubscription: boolean; locale: string; - userData: AdminUsers['users'][0]; + userData: AdminUsersResponse['users'][0]; } diff --git a/apps/client/src/app/services/admin.service.ts b/apps/client/src/app/services/admin.service.ts index a04ad8d56..2f3040ba3 100644 --- a/apps/client/src/app/services/admin.service.ts +++ b/apps/client/src/app/services/admin.service.ts @@ -12,7 +12,7 @@ import { AdminData, AdminJobs, AdminMarketData, - AdminUsers, + AdminUsersResponse, DataProviderGhostfolioStatusResponse, EnhancedSymbolProfile, Filter @@ -154,7 +154,7 @@ export class AdminService { params = params.append('skip', skip); params = params.append('take', take); - return this.http.get('/api/v1/admin/user', { params }); + return this.http.get('/api/v1/admin/user', { params }); } public gather7Days() { diff --git a/libs/common/src/lib/interfaces/index.ts b/libs/common/src/lib/interfaces/index.ts index eac5db68c..06ecf32e8 100644 --- a/libs/common/src/lib/interfaces/index.ts +++ b/libs/common/src/lib/interfaces/index.ts @@ -7,7 +7,6 @@ import type { AdminMarketData, AdminMarketDataItem } from './admin-market-data.interface'; -import type { AdminUsers } from './admin-users.interface'; import type { AssetClassSelectorOption } from './asset-class-selector-option.interface'; import type { AssetProfileIdentifier } from './asset-profile-identifier.interface'; import type { BenchmarkProperty } from './benchmark-property.interface'; @@ -39,6 +38,7 @@ import type { AccountBalancesResponse } from './responses/account-balances-respo import type { AccountsResponse } from './responses/accounts-response.interface'; import type { ActivitiesResponse } from './responses/activities-response.interface'; import type { ActivityResponse } from './responses/activity-response.interface'; +import type { AdminUsersResponse } from './responses/admin-users-response.interface'; import type { AiPromptResponse } from './responses/ai-prompt-response.interface'; import type { ApiKeyResponse } from './responses/api-key-response.interface'; import type { AssetResponse } from './responses/asset-response.interface'; @@ -92,7 +92,7 @@ export { AdminMarketData, AdminMarketDataDetails, AdminMarketDataItem, - AdminUsers, + AdminUsersResponse, AiPromptResponse, ApiKeyResponse, AssetClassSelectorOption, diff --git a/libs/common/src/lib/interfaces/admin-users.interface.ts b/libs/common/src/lib/interfaces/responses/admin-users-response.interface.ts similarity index 88% rename from libs/common/src/lib/interfaces/admin-users.interface.ts rename to libs/common/src/lib/interfaces/responses/admin-users-response.interface.ts index 79031425a..d9f58ee18 100644 --- a/libs/common/src/lib/interfaces/admin-users.interface.ts +++ b/libs/common/src/lib/interfaces/responses/admin-users-response.interface.ts @@ -1,6 +1,6 @@ import { Role } from '@prisma/client'; -export interface AdminUsers { +export interface AdminUsersResponse { count: number; users: { accountCount: number; From a892f51799205206359e74bc1f8de9dce11ee159 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Tue, 4 Nov 2025 18:30:24 +0100 Subject: [PATCH 83/92] Task/improve localization in lib components (#5907) * Improve localization --- .../accounts-table.component.html | 2 +- libs/ui/src/lib/assistant/assistant.html | 22 +++++++++---------- .../lib/benchmark/benchmark.component.html | 4 ++-- 3 files changed, 13 insertions(+), 15 deletions(-) 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 e9e0337c9..805ffe77d 100644 --- a/libs/ui/src/lib/accounts-table/accounts-table.component.html +++ b/libs/ui/src/lib/accounts-table/accounts-table.component.html @@ -290,7 +290,7 @@ - +
diff --git a/libs/ui/src/lib/benchmark/benchmark.component.html b/libs/ui/src/lib/benchmark/benchmark.component.html index 2b75e5672..ab6db8887 100644 --- a/libs/ui/src/lib/benchmark/benchmark.component.html +++ b/libs/ui/src/lib/benchmark/benchmark.component.html @@ -8,8 +8,8 @@ [dataSource]="dataSource" > - - Name + + Name
From dfb4310904f9815820af4726da8721ad5adbedb9 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Tue, 4 Nov 2025 18:49:18 +0100 Subject: [PATCH 84/92] Task/improve localization of get started buttons (#5913) * Improve localization --- apps/client/src/app/components/header/header.component.html | 5 +++-- apps/client/src/app/pages/landing/landing-page.html | 6 ++---- apps/client/src/app/pages/pricing/pricing-page.html | 3 +-- .../resources/personal-finance-tools/product-page.html | 6 +++--- 4 files changed, 9 insertions(+), 11 deletions(-) diff --git a/apps/client/src/app/components/header/header.component.html b/apps/client/src/app/components/header/header.component.html index 27f136a3a..501119b31 100644 --- a/apps/client/src/app/components/header/header.component.html +++ b/apps/client/src/app/components/header/header.component.html @@ -427,10 +427,11 @@ Get started - + >Get Started } diff --git a/apps/client/src/app/pages/landing/landing-page.html b/apps/client/src/app/pages/landing/landing-page.html index 7f77c31a7..50602858a 100644 --- a/apps/client/src/app/pages/landing/landing-page.html +++ b/apps/client/src/app/pages/landing/landing-page.html @@ -38,9 +38,8 @@ i18n mat-flat-button [routerLink]="routerLinkRegister" + >Get Started - Get Started - } @if (hasPermissionForDemo) { @if (hasPermissionToCreateUser) { @@ -342,9 +341,8 @@ i18n mat-flat-button [routerLink]="routerLinkRegister" + >Get Started - Get Started - @if (hasPermissionForDemo) {
or
Get Started - Get Started -

It’s free.

diff --git a/apps/client/src/app/pages/resources/personal-finance-tools/product-page.html b/apps/client/src/app/pages/resources/personal-finance-tools/product-page.html index 3c5c97558..a71ca0038 100644 --- a/apps/client/src/app/pages/resources/personal-finance-tools/product-page.html +++ b/apps/client/src/app/pages/resources/personal-finance-tools/product-page.html @@ -330,9 +330,9 @@ Ghostfolio.

From c84f4bd5e6360db661aa7886e2dc516cc491c8f5 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 4 Nov 2025 19:03:09 +0100 Subject: [PATCH 85/92] Feature/update locales (#5875) * Update locales * Update changelog --------- Co-authored-by: github-actions[bot] Co-authored-by: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> --- CHANGELOG.md | 1 + apps/client/src/locales/messages.ca.xlf | 228 ++++++++++-------------- apps/client/src/locales/messages.de.xlf | 220 ++++++++++------------- apps/client/src/locales/messages.es.xlf | 220 ++++++++++------------- apps/client/src/locales/messages.fr.xlf | 228 ++++++++++-------------- apps/client/src/locales/messages.it.xlf | 220 ++++++++++------------- apps/client/src/locales/messages.nl.xlf | 220 ++++++++++------------- apps/client/src/locales/messages.pl.xlf | 228 ++++++++++-------------- apps/client/src/locales/messages.pt.xlf | 220 ++++++++++------------- apps/client/src/locales/messages.tr.xlf | 228 ++++++++++-------------- apps/client/src/locales/messages.uk.xlf | 228 ++++++++++-------------- apps/client/src/locales/messages.xlf | 221 ++++++++++------------- apps/client/src/locales/messages.zh.xlf | 228 ++++++++++-------------- 13 files changed, 1133 insertions(+), 1557 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5ecf2a57d..0ff76b0c2 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 - Changed the build executor of the client from `@nx/angular:webpack-browser` to `@nx/angular:browser-esbuild` +- Improved the language localization for German (`de`) ### Fixed diff --git a/apps/client/src/locales/messages.ca.xlf b/apps/client/src/locales/messages.ca.xlf index 7c676e092..361c4ec31 100644 --- a/apps/client/src/locales/messages.ca.xlf +++ b/apps/client/src/locales/messages.ca.xlf @@ -42,7 +42,7 @@ apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 71 + 60 libs/common/src/lib/routes/routes.ts @@ -398,14 +398,6 @@ 86 - - Holdings - En cartera - - libs/ui/src/lib/assistant/assistant.html - 110 - - Cash Balances Balanç de Caixa @@ -473,6 +465,10 @@ libs/ui/src/lib/activities-table/activities-table.component.html 135 + + libs/ui/src/lib/benchmark/benchmark.component.html + 12 + libs/ui/src/lib/holdings-table/holdings-table.component.html 28 @@ -1475,7 +1471,7 @@ Està segur que vol eliminar aquest usuari? apps/client/src/app/components/admin-users/admin-users.component.ts - 207 + 211 @@ -1646,14 +1642,6 @@ 5 - - Get started - Primers Passos - - apps/client/src/app/components/header/header.component.html - 432 - - Oops! Incorrect Security Token. Oooh! El testimoni de seguretat és incorrecte. @@ -1747,7 +1735,7 @@ Informar d’un Problema amb les Dades apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 450 + 451 @@ -1991,11 +1979,11 @@ apps/client/src/app/pages/landing/landing-page.html - 48 + 47 apps/client/src/app/pages/landing/landing-page.html - 350 + 348 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html @@ -2018,20 +2006,12 @@ 30 - - Sign in with Internet Identity - Inicieu la sessió amb la identitat d’Internet - - apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 38 - - Sign in with Google Inicieu la sessió amb Google apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 48 + 37 @@ -2039,7 +2019,7 @@ Manteniu la sessió iniciada apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 59 + 48 @@ -2889,6 +2869,10 @@ libs/common/src/lib/routes/routes.ts 69 + + libs/ui/src/lib/assistant/assistant.html + 84 + Oops, cash balance transfer has failed. @@ -3334,14 +3318,34 @@ Get Started Comença + + apps/client/src/app/components/header/header.component.html + 433 + apps/client/src/app/pages/features/features-page.html 320 + + apps/client/src/app/pages/landing/landing-page.html + 41 + + + apps/client/src/app/pages/landing/landing-page.html + 344 + + + apps/client/src/app/pages/pricing/pricing-page.html + 377 + apps/client/src/app/pages/public/public-page.html 242 + + apps/client/src/app/pages/resources/personal-finance-tools/product-page.html + 334 + Holdings @@ -3366,6 +3370,10 @@ libs/common/src/lib/routes/routes.ts 167 + + libs/ui/src/lib/assistant/assistant.html + 110 + Summary @@ -3479,32 +3487,12 @@ 11 - - Get Started - Comença - - apps/client/src/app/pages/landing/landing-page.html - 42 - - - apps/client/src/app/pages/landing/landing-page.html - 346 - - - apps/client/src/app/pages/pricing/pricing-page.html - 378 - - - apps/client/src/app/pages/resources/personal-finance-tools/product-page.html - 334 - - Monthly Active Users Usuaris actius mensuals apps/client/src/app/pages/landing/landing-page.html - 70 + 69 @@ -3512,7 +3500,7 @@ Estrelles a GitHub apps/client/src/app/pages/landing/landing-page.html - 88 + 87 apps/client/src/app/pages/open/open-page.html @@ -3524,7 +3512,7 @@ Activa el Docker Hub apps/client/src/app/pages/landing/landing-page.html - 106 + 105 apps/client/src/app/pages/open/open-page.html @@ -3536,7 +3524,7 @@ Com es veu a apps/client/src/app/pages/landing/landing-page.html - 115 + 114 @@ -3544,7 +3532,7 @@ Protegeix els teus actius. Refina la teva estratègia d’inversió personal. apps/client/src/app/pages/landing/landing-page.html - 125 + 124 @@ -3552,7 +3540,7 @@ Ghostfolio permet a la gent ocupada fer un seguiment d’accions, ETF o criptomonedes sense ser rastrejada. apps/client/src/app/pages/landing/landing-page.html - 129 + 128 @@ -3560,7 +3548,7 @@ Vista de 360° apps/client/src/app/pages/landing/landing-page.html - 139 + 138 @@ -3568,7 +3556,7 @@ Obtingueu la imatge completa de les vostres finances personals en múltiples plataformes. apps/client/src/app/pages/landing/landing-page.html - 142 + 141 @@ -3576,7 +3564,7 @@ Web3 llest apps/client/src/app/pages/landing/landing-page.html - 150 + 149 @@ -3584,7 +3572,7 @@ Utilitza Ghostfolio de manera anònima i sigues propietari de les teves dades financeres. apps/client/src/app/pages/landing/landing-page.html - 153 + 152 @@ -3592,7 +3580,7 @@ Beneficia’t de millores contínues gràcies a una comunitat forta. apps/client/src/app/pages/landing/landing-page.html - 163 + 162 @@ -3608,7 +3596,7 @@ Per què Ghostfolio? apps/client/src/app/pages/landing/landing-page.html - 171 + 170 @@ -3616,7 +3604,7 @@ Ghostfolio és per a tu si ets... apps/client/src/app/pages/landing/landing-page.html - 173 + 172 @@ -3624,7 +3612,7 @@ negociar accions, ETF o criptomonedes en múltiples plataformes apps/client/src/app/pages/landing/landing-page.html - 179 + 178 @@ -3632,7 +3620,7 @@ perseguint una compra & mantenir l’estratègia apps/client/src/app/pages/landing/landing-page.html - 185 + 184 @@ -3640,7 +3628,7 @@ interessat a obtenir informació sobre la composició de la vostra cartera apps/client/src/app/pages/landing/landing-page.html - 190 + 189 @@ -3648,7 +3636,7 @@ valorant la privadesa i la propietat de les dades apps/client/src/app/pages/landing/landing-page.html - 195 + 194 @@ -3656,7 +3644,7 @@ al minimalisme apps/client/src/app/pages/landing/landing-page.html - 198 + 197 @@ -3664,7 +3652,7 @@ preocupant-se per diversificar els seus recursos econòmics apps/client/src/app/pages/landing/landing-page.html - 202 + 201 @@ -3672,7 +3660,7 @@ interessada en la independència financera apps/client/src/app/pages/landing/landing-page.html - 206 + 205 @@ -3680,7 +3668,7 @@ dir no als fulls de càlcul apps/client/src/app/pages/landing/landing-page.html - 210 + 209 @@ -3688,7 +3676,7 @@ encara llegint aquesta llista apps/client/src/app/pages/landing/landing-page.html - 213 + 212 @@ -3696,7 +3684,7 @@ Més informació sobre Ghostfolio apps/client/src/app/pages/landing/landing-page.html - 218 + 217 @@ -3704,7 +3692,7 @@ Que nostre usuaris estan dient apps/client/src/app/pages/landing/landing-page.html - 227 + 226 @@ -3712,7 +3700,7 @@ Membres de tot el món estan utilitzant Ghostfolio Premium apps/client/src/app/pages/landing/landing-page.html - 266 + 265 @@ -3720,7 +3708,7 @@ Com ho fa Ghostfolio treballar? apps/client/src/app/pages/landing/landing-page.html - 283 + 282 @@ -3728,7 +3716,7 @@ Comença en només 3 passos apps/client/src/app/pages/landing/landing-page.html - 285 + 284 @@ -3744,7 +3732,7 @@ Registra’t de manera anònima* apps/client/src/app/pages/landing/landing-page.html - 291 + 290 @@ -3752,7 +3740,7 @@ * no es requereix cap adreça de correu electrònic ni targeta de crèdit apps/client/src/app/pages/landing/landing-page.html - 293 + 292 @@ -3760,7 +3748,7 @@ Afegiu qualsevol de les vostres transaccions històriques apps/client/src/app/pages/landing/landing-page.html - 305 + 304 @@ -3768,7 +3756,7 @@ Obteniu informació valuosa sobre la composició de la vostra cartera apps/client/src/app/pages/landing/landing-page.html - 317 + 316 @@ -3776,7 +3764,7 @@ Són tu llest? apps/client/src/app/pages/landing/landing-page.html - 331 + 330 @@ -3784,7 +3772,7 @@ Uneix-te ara o consulteu el compte d’exemple apps/client/src/app/pages/landing/landing-page.html - 334 + 333 @@ -4460,7 +4448,7 @@ Close Holding apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 441 + 442 @@ -4788,7 +4776,7 @@ És gratuït. apps/client/src/app/pages/pricing/pricing-page.html - 380 + 379 @@ -4843,20 +4831,12 @@ 281 - - Continue with Internet Identity - Continueu amb Internet Identity - - apps/client/src/app/pages/register/register-page.html - 42 - - Continue with Google Continueu amb Google apps/client/src/app/pages/register/register-page.html - 53 + 39 @@ -5439,6 +5419,10 @@ apps/client/src/app/components/admin-settings/admin-settings.component.html 106 + + libs/ui/src/lib/assistant/assistant.html + 140 + Date Range @@ -5448,20 +5432,20 @@ 170 - + Reset Filters Restableix els filtres libs/ui/src/lib/assistant/assistant.html - 205 + 204 - + Apply Filters Aplicar filtres libs/ui/src/lib/assistant/assistant.html - 219 + 217 @@ -5833,7 +5817,7 @@ libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 412 + 413 @@ -6209,11 +6193,11 @@ libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 414 + 415 libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 427 + 428 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -6329,7 +6313,7 @@ Open Source apps/client/src/app/pages/landing/landing-page.html - 160 + 159 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts @@ -6719,10 +6703,6 @@ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html 51 - - libs/ui/src/lib/assistant/assistant.html - 84 - Copy link to clipboard @@ -7395,7 +7375,7 @@ libs/ui/src/lib/treemap-chart/treemap-chart.component.ts - 367 + 368 @@ -7415,11 +7395,11 @@ libs/ui/src/lib/treemap-chart/treemap-chart.component.ts - 367 + 368 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts - 380 + 381 @@ -7515,7 +7495,7 @@ Security token apps/client/src/app/components/admin-users/admin-users.component.ts - 228 + 232 apps/client/src/app/components/user-account-access/user-account-access.component.ts @@ -7527,7 +7507,7 @@ Do you really want to generate a new security token for this user? apps/client/src/app/components/admin-users/admin-users.component.ts - 233 + 237 @@ -7804,15 +7784,7 @@ 158 - - Name - Name - - libs/ui/src/lib/benchmark/benchmark.component.html - 12 - - - + Quick Links Quick Links @@ -7820,24 +7792,16 @@ 58 - - Asset Profiles - Asset Profiles - - libs/ui/src/lib/assistant/assistant.html - 140 - - Live Demo Live Demo apps/client/src/app/pages/landing/landing-page.html - 49 + 48 apps/client/src/app/pages/landing/landing-page.html - 351 + 349 libs/common/src/lib/routes/routes.ts @@ -8192,7 +8156,7 @@ Manage Asset Profile apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 465 + 466 diff --git a/apps/client/src/locales/messages.de.xlf b/apps/client/src/locales/messages.de.xlf index fa47cc6a6..9a0ebd159 100644 --- a/apps/client/src/locales/messages.de.xlf +++ b/apps/client/src/locales/messages.de.xlf @@ -144,6 +144,10 @@ libs/ui/src/lib/activities-table/activities-table.component.html 135 + + libs/ui/src/lib/benchmark/benchmark.component.html + 12 + libs/ui/src/lib/holdings-table/holdings-table.component.html 28 @@ -376,6 +380,10 @@ apps/client/src/app/components/admin-settings/admin-settings.component.html 106 + + libs/ui/src/lib/assistant/assistant.html + 140 + Historical Market Data @@ -646,7 +654,7 @@ Möchtest du diesen Benutzer wirklich löschen? apps/client/src/app/components/admin-users/admin-users.component.ts - 207 + 211 @@ -700,14 +708,34 @@ Get Started Registrieren + + apps/client/src/app/components/header/header.component.html + 433 + apps/client/src/app/pages/features/features-page.html 320 + + apps/client/src/app/pages/landing/landing-page.html + 41 + + + apps/client/src/app/pages/landing/landing-page.html + 344 + + + apps/client/src/app/pages/pricing/pricing-page.html + 377 + apps/client/src/app/pages/public/public-page.html 242 + + apps/client/src/app/pages/resources/personal-finance-tools/product-page.html + 334 + Sign in @@ -722,7 +750,7 @@ apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 71 + 60 libs/common/src/lib/routes/routes.ts @@ -810,11 +838,11 @@ apps/client/src/app/pages/landing/landing-page.html - 48 + 47 apps/client/src/app/pages/landing/landing-page.html - 350 + 348 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html @@ -837,20 +865,12 @@ 30 - - Sign in with Internet Identity - Einloggen mit Internet Identity - - apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 38 - - Sign in with Google Einloggen mit Google apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 48 + 37 @@ -858,7 +878,7 @@ Eingeloggt bleiben apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 59 + 48 @@ -990,7 +1010,7 @@ Datenfehler melden apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 450 + 451 @@ -1344,6 +1364,10 @@ libs/common/src/lib/routes/routes.ts 69 + + libs/ui/src/lib/assistant/assistant.html + 84 + Update account @@ -1840,10 +1864,6 @@ libs/common/src/lib/routes/routes.ts 167 - - - Holdings - Positionen libs/ui/src/lib/assistant/assistant.html 110 @@ -2117,20 +2137,12 @@ 281 - - Continue with Internet Identity - Weiter mit Internet Identity - - apps/client/src/app/pages/register/register-page.html - 42 - - Continue with Google Weiter mit Google apps/client/src/app/pages/register/register-page.html - 53 + 39 @@ -2309,14 +2321,6 @@ 56 - - Get started - Registrieren - - apps/client/src/app/components/header/header.component.html - 432 - - This feature is currently unavailable. Diese Funktion ist derzeit nicht verfügbar. @@ -2906,7 +2910,7 @@ libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 412 + 413 @@ -2926,11 +2930,11 @@ libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 414 + 415 libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 427 + 428 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -3537,32 +3541,12 @@ 303 - - Get Started - Jetzt loslegen - - apps/client/src/app/pages/landing/landing-page.html - 42 - - - apps/client/src/app/pages/landing/landing-page.html - 346 - - - apps/client/src/app/pages/pricing/pricing-page.html - 378 - - - apps/client/src/app/pages/resources/personal-finance-tools/product-page.html - 334 - - It’s free. Es ist kostenlos. apps/client/src/app/pages/pricing/pricing-page.html - 380 + 379 @@ -4598,7 +4582,7 @@ Sterne auf GitHub apps/client/src/app/pages/landing/landing-page.html - 88 + 87 apps/client/src/app/pages/open/open-page.html @@ -4610,7 +4594,7 @@ Downloads auf Docker Hub apps/client/src/app/pages/landing/landing-page.html - 106 + 105 apps/client/src/app/pages/open/open-page.html @@ -4730,7 +4714,7 @@ Monatlich aktive Nutzer apps/client/src/app/pages/landing/landing-page.html - 70 + 69 @@ -4738,7 +4722,7 @@ Bekannt aus apps/client/src/app/pages/landing/landing-page.html - 115 + 114 @@ -4746,7 +4730,7 @@ Schütze dein Vermögen. Optimiere deine persönliche Anlagestrategie. apps/client/src/app/pages/landing/landing-page.html - 125 + 124 @@ -4754,7 +4738,7 @@ Ghostfolio ermöglicht es geschäftigen Leuten, den Überblick über Aktien, ETFs oder Kryptowährungen zu behalten, ohne überwacht zu werden. apps/client/src/app/pages/landing/landing-page.html - 129 + 128 @@ -4762,7 +4746,7 @@ 360° Ansicht apps/client/src/app/pages/landing/landing-page.html - 139 + 138 @@ -4770,7 +4754,7 @@ Web3 ready apps/client/src/app/pages/landing/landing-page.html - 150 + 149 @@ -4778,7 +4762,7 @@ Nutze Ghostfolio ganz anonym und behalte deine Finanzdaten. apps/client/src/app/pages/landing/landing-page.html - 153 + 152 @@ -4786,7 +4770,7 @@ Profitiere von kontinuierlichen Verbesserungen durch eine aktive Community. apps/client/src/app/pages/landing/landing-page.html - 163 + 162 @@ -4802,7 +4786,7 @@ Warum Ghostfolio? apps/client/src/app/pages/landing/landing-page.html - 171 + 170 @@ -4810,7 +4794,7 @@ Ghostfolio ist für dich geeignet, wenn du... apps/client/src/app/pages/landing/landing-page.html - 173 + 172 @@ -4818,7 +4802,7 @@ Aktien, ETFs oder Kryptowährungen auf unterschiedlichen Plattformen handelst apps/client/src/app/pages/landing/landing-page.html - 179 + 178 @@ -4826,7 +4810,7 @@ eine Buy & Hold Strategie verfolgst apps/client/src/app/pages/landing/landing-page.html - 185 + 184 @@ -4834,7 +4818,7 @@ dich für die Zusammensetzung deines Portfolios interessierst apps/client/src/app/pages/landing/landing-page.html - 190 + 189 @@ -4842,7 +4826,7 @@ Privatsphäre und Datenhoheit wertschätzt apps/client/src/app/pages/landing/landing-page.html - 195 + 194 @@ -4850,7 +4834,7 @@ zum Frugalismus oder Minimalismus neigst apps/client/src/app/pages/landing/landing-page.html - 198 + 197 @@ -4858,7 +4842,7 @@ dich um die Diversifizierung deiner finanziellen Mittel kümmerst apps/client/src/app/pages/landing/landing-page.html - 202 + 201 @@ -4866,7 +4850,7 @@ Interesse an finanzieller Freiheit hast apps/client/src/app/pages/landing/landing-page.html - 206 + 205 @@ -4874,7 +4858,7 @@ Nein sagst zu Excel-Tabellen im Jahr apps/client/src/app/pages/landing/landing-page.html - 210 + 209 @@ -4882,7 +4866,7 @@ diese Liste bis zum Ende liest apps/client/src/app/pages/landing/landing-page.html - 213 + 212 @@ -4890,7 +4874,7 @@ Erfahre mehr über Ghostfolio apps/client/src/app/pages/landing/landing-page.html - 218 + 217 @@ -4898,7 +4882,7 @@ Was unsere Nutzer sagen apps/client/src/app/pages/landing/landing-page.html - 227 + 226 @@ -4906,7 +4890,7 @@ Nutzer aus aller Welt verwenden Ghostfolio Premium apps/client/src/app/pages/landing/landing-page.html - 266 + 265 @@ -4914,7 +4898,7 @@ Wie funktioniert Ghostfolio ? apps/client/src/app/pages/landing/landing-page.html - 283 + 282 @@ -4922,7 +4906,7 @@ Registriere dich anonym* apps/client/src/app/pages/landing/landing-page.html - 291 + 290 @@ -4930,7 +4914,7 @@ * Keine E-Mail-Adresse oder Kreditkarte erforderlich apps/client/src/app/pages/landing/landing-page.html - 293 + 292 @@ -4938,7 +4922,7 @@ Füge historische Transaktionen hinzu apps/client/src/app/pages/landing/landing-page.html - 305 + 304 @@ -4946,7 +4930,7 @@ Erhalte nützliche Erkenntnisse über die Zusammensetzung deines Portfolios apps/client/src/app/pages/landing/landing-page.html - 317 + 316 @@ -4954,7 +4938,7 @@ Bist du bereit? apps/client/src/app/pages/landing/landing-page.html - 331 + 330 @@ -4962,7 +4946,7 @@ Verschaffe dir einen vollständigen Überblick deiner persönlichen Finanzen über mehrere Plattformen hinweg. apps/client/src/app/pages/landing/landing-page.html - 142 + 141 @@ -4970,7 +4954,7 @@ Beginne mit nur 3 Schritten apps/client/src/app/pages/landing/landing-page.html - 285 + 284 @@ -5788,7 +5772,7 @@ Position abschliessen apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 441 + 442 @@ -5907,12 +5891,12 @@ 8 - + Reset Filters Filter zurücksetzen libs/ui/src/lib/assistant/assistant.html - 205 + 204 @@ -5947,12 +5931,12 @@ 411 - + Apply Filters Filter anwenden libs/ui/src/lib/assistant/assistant.html - 219 + 217 @@ -6177,7 +6161,7 @@ Melde dich jetzt an oder probiere die Live Demo aus apps/client/src/app/pages/landing/landing-page.html - 334 + 333 @@ -6353,7 +6337,7 @@ Open Source apps/client/src/app/pages/landing/landing-page.html - 160 + 159 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts @@ -6743,10 +6727,6 @@ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html 51 - - libs/ui/src/lib/assistant/assistant.html - 84 - Copy link to clipboard @@ -7419,7 +7399,7 @@ libs/ui/src/lib/treemap-chart/treemap-chart.component.ts - 367 + 368 @@ -7439,11 +7419,11 @@ libs/ui/src/lib/treemap-chart/treemap-chart.component.ts - 367 + 368 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts - 380 + 381 @@ -7539,7 +7519,7 @@ Sicherheits-Token apps/client/src/app/components/admin-users/admin-users.component.ts - 228 + 232 apps/client/src/app/components/user-account-access/user-account-access.component.ts @@ -7551,7 +7531,7 @@ Möchtest du für diesen Benutzer wirklich ein neues Sicherheits-Token generieren? apps/client/src/app/components/admin-users/admin-users.component.ts - 233 + 237 @@ -7804,15 +7784,7 @@ 158 - - Name - Name - - libs/ui/src/lib/benchmark/benchmark.component.html - 12 - - - + Quick Links Schnellzugriff @@ -7820,24 +7792,16 @@ 58 - - Asset Profiles - Anlageprofile - - libs/ui/src/lib/assistant/assistant.html - 140 - - Live Demo Live Demo apps/client/src/app/pages/landing/landing-page.html - 49 + 48 apps/client/src/app/pages/landing/landing-page.html - 351 + 349 libs/common/src/lib/routes/routes.ts @@ -8192,7 +8156,7 @@ Anlageprofil verwalten apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 465 + 466 diff --git a/apps/client/src/locales/messages.es.xlf b/apps/client/src/locales/messages.es.xlf index 4c380b007..07e4e855d 100644 --- a/apps/client/src/locales/messages.es.xlf +++ b/apps/client/src/locales/messages.es.xlf @@ -145,6 +145,10 @@ libs/ui/src/lib/activities-table/activities-table.component.html 135 + + libs/ui/src/lib/benchmark/benchmark.component.html + 12 + libs/ui/src/lib/holdings-table/holdings-table.component.html 28 @@ -377,6 +381,10 @@ apps/client/src/app/components/admin-settings/admin-settings.component.html 106 + + libs/ui/src/lib/assistant/assistant.html + 140 + Historical Market Data @@ -631,7 +639,7 @@ ¿Estás seguro de eliminar este usuario? apps/client/src/app/components/admin-users/admin-users.component.ts - 207 + 211 @@ -685,14 +693,34 @@ Get Started Empezar + + apps/client/src/app/components/header/header.component.html + 433 + apps/client/src/app/pages/features/features-page.html 320 + + apps/client/src/app/pages/landing/landing-page.html + 41 + + + apps/client/src/app/pages/landing/landing-page.html + 344 + + + apps/client/src/app/pages/pricing/pricing-page.html + 377 + apps/client/src/app/pages/public/public-page.html 242 + + apps/client/src/app/pages/resources/personal-finance-tools/product-page.html + 334 + Sign in @@ -707,7 +735,7 @@ apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 71 + 60 libs/common/src/lib/routes/routes.ts @@ -795,11 +823,11 @@ apps/client/src/app/pages/landing/landing-page.html - 48 + 47 apps/client/src/app/pages/landing/landing-page.html - 350 + 348 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html @@ -822,20 +850,12 @@ 30 - - Sign in with Internet Identity - Iniciar sesión con Internet Identity - - apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 38 - - Sign in with Google Iniciar sesión con Google apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 48 + 37 @@ -843,7 +863,7 @@ Seguir conectado apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 59 + 48 @@ -975,7 +995,7 @@ Reporta un anomalía de los datos apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 450 + 451 @@ -1329,6 +1349,10 @@ libs/common/src/lib/routes/routes.ts 69 + + libs/ui/src/lib/assistant/assistant.html + 84 + Update account @@ -1825,10 +1849,6 @@ libs/common/src/lib/routes/routes.ts 167 - - - Holdings - Participaciones libs/ui/src/lib/assistant/assistant.html 110 @@ -2102,20 +2122,12 @@ 281 - - Continue with Internet Identity - Continuar con Internet Identity - - apps/client/src/app/pages/register/register-page.html - 42 - - Continue with Google Continuar con Google apps/client/src/app/pages/register/register-page.html - 53 + 39 @@ -2294,14 +2306,6 @@ 56 - - Get started - Comenzar - - apps/client/src/app/components/header/header.component.html - 432 - - This feature is currently unavailable. Esta funcionalidad no está disponible actualmente. @@ -2891,7 +2895,7 @@ libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 412 + 413 @@ -2911,11 +2915,11 @@ libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 414 + 415 libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 427 + 428 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -3522,32 +3526,12 @@ 303 - - Get Started - Empieza - - apps/client/src/app/pages/landing/landing-page.html - 42 - - - apps/client/src/app/pages/landing/landing-page.html - 346 - - - apps/client/src/app/pages/pricing/pricing-page.html - 378 - - - apps/client/src/app/pages/resources/personal-finance-tools/product-page.html - 334 - - It’s free. Es gratis. apps/client/src/app/pages/pricing/pricing-page.html - 380 + 379 @@ -4575,7 +4559,7 @@ Estrellas en GitHub apps/client/src/app/pages/landing/landing-page.html - 88 + 87 apps/client/src/app/pages/open/open-page.html @@ -4587,7 +4571,7 @@ Descargas en Docker Hub apps/client/src/app/pages/landing/landing-page.html - 106 + 105 apps/client/src/app/pages/open/open-page.html @@ -4707,7 +4691,7 @@ Usuarios activos mensuales apps/client/src/app/pages/landing/landing-page.html - 70 + 69 @@ -4715,7 +4699,7 @@ Visto en apps/client/src/app/pages/landing/landing-page.html - 115 + 114 @@ -4723,7 +4707,7 @@ Protege tus assets. Mejora tu estrategia de inversión personal. apps/client/src/app/pages/landing/landing-page.html - 125 + 124 @@ -4731,7 +4715,7 @@ Ghostfolio permite a las personas ocupadas hacer un seguimiento de acciones, ETFs o criptomonedas sin ser rastreadas. apps/client/src/app/pages/landing/landing-page.html - 129 + 128 @@ -4739,7 +4723,7 @@ Vista 360° apps/client/src/app/pages/landing/landing-page.html - 139 + 138 @@ -4747,7 +4731,7 @@ Preparado para Web3 apps/client/src/app/pages/landing/landing-page.html - 150 + 149 @@ -4755,7 +4739,7 @@ Usa Ghostfolio de forma anónima y sé dueño de tus datos financieros. apps/client/src/app/pages/landing/landing-page.html - 153 + 152 @@ -4763,7 +4747,7 @@ Disfruta de mejoras continuas gracias a una comunidad sólida. apps/client/src/app/pages/landing/landing-page.html - 163 + 162 @@ -4779,7 +4763,7 @@ ¿Por qué Ghostfolio? apps/client/src/app/pages/landing/landing-page.html - 171 + 170 @@ -4787,7 +4771,7 @@ Ghostfolio es para ti si estás... apps/client/src/app/pages/landing/landing-page.html - 173 + 172 @@ -4795,7 +4779,7 @@ operando con acciones, ETFs o criptomonedas en múltiples plataformas apps/client/src/app/pages/landing/landing-page.html - 179 + 178 @@ -4803,7 +4787,7 @@ persiguiendo una compra & mantener estrategia apps/client/src/app/pages/landing/landing-page.html - 185 + 184 @@ -4811,7 +4795,7 @@ interesado en obtener información sobre la composición de tu portafolio apps/client/src/app/pages/landing/landing-page.html - 190 + 189 @@ -4819,7 +4803,7 @@ valorando la privacidad y la propiedad de tus datos apps/client/src/app/pages/landing/landing-page.html - 195 + 194 @@ -4827,7 +4811,7 @@ en el minimalismo apps/client/src/app/pages/landing/landing-page.html - 198 + 197 @@ -4835,7 +4819,7 @@ preocuparse por diversificar tus recursos financieros apps/client/src/app/pages/landing/landing-page.html - 202 + 201 @@ -4843,7 +4827,7 @@ interesado en la independencia financiera apps/client/src/app/pages/landing/landing-page.html - 206 + 205 @@ -4851,7 +4835,7 @@ diciendo no a las hojas de cálculo en apps/client/src/app/pages/landing/landing-page.html - 210 + 209 @@ -4859,7 +4843,7 @@ todavía leyendo esta lista apps/client/src/app/pages/landing/landing-page.html - 213 + 212 @@ -4867,7 +4851,7 @@ Más información sobre Ghostfolio apps/client/src/app/pages/landing/landing-page.html - 218 + 217 @@ -4875,7 +4859,7 @@ Lo que nuestros usuarios están diciendo apps/client/src/app/pages/landing/landing-page.html - 227 + 226 @@ -4883,7 +4867,7 @@ Miembros de todo el mundo están usando Ghostfolio Premium apps/client/src/app/pages/landing/landing-page.html - 266 + 265 @@ -4891,7 +4875,7 @@ ¿Cómo Ghostfolio work? apps/client/src/app/pages/landing/landing-page.html - 283 + 282 @@ -4899,7 +4883,7 @@ Regístrate de forma anónima* apps/client/src/app/pages/landing/landing-page.html - 291 + 290 @@ -4907,7 +4891,7 @@ * no se requiere dirección de correo electrónico ni tarjeta de crédito apps/client/src/app/pages/landing/landing-page.html - 293 + 292 @@ -4915,7 +4899,7 @@ Agrega cualquiera de tus transacciones históricas apps/client/src/app/pages/landing/landing-page.html - 305 + 304 @@ -4923,7 +4907,7 @@ Obtén información valiosa sobre la composición de tu portafolio apps/client/src/app/pages/landing/landing-page.html - 317 + 316 @@ -4931,7 +4915,7 @@ ¿Estás listo? apps/client/src/app/pages/landing/landing-page.html - 331 + 330 @@ -4939,7 +4923,7 @@ Obtén una visión completa de tus finanzas personales en múltiples plataformas. apps/client/src/app/pages/landing/landing-page.html - 142 + 141 @@ -4947,7 +4931,7 @@ Comienza en solo 3 pasos apps/client/src/app/pages/landing/landing-page.html - 285 + 284 @@ -5765,7 +5749,7 @@ Close Holding apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 441 + 442 @@ -5884,12 +5868,12 @@ 8 - + Reset Filters Reiniciar filtros libs/ui/src/lib/assistant/assistant.html - 205 + 204 @@ -5924,12 +5908,12 @@ 411 - + Apply Filters Aplicar filtros libs/ui/src/lib/assistant/assistant.html - 219 + 217 @@ -6154,7 +6138,7 @@ Únete ahora o consulta la cuenta de ejemplo apps/client/src/app/pages/landing/landing-page.html - 334 + 333 @@ -6330,7 +6314,7 @@ Código abierto apps/client/src/app/pages/landing/landing-page.html - 160 + 159 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts @@ -6720,10 +6704,6 @@ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html 51 - - libs/ui/src/lib/assistant/assistant.html - 84 - Copy link to clipboard @@ -7396,7 +7376,7 @@ libs/ui/src/lib/treemap-chart/treemap-chart.component.ts - 367 + 368 @@ -7416,11 +7396,11 @@ libs/ui/src/lib/treemap-chart/treemap-chart.component.ts - 367 + 368 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts - 380 + 381 @@ -7516,7 +7496,7 @@ Token de seguridad apps/client/src/app/components/admin-users/admin-users.component.ts - 228 + 232 apps/client/src/app/components/user-account-access/user-account-access.component.ts @@ -7528,7 +7508,7 @@ ¿Realmente deseas generar un nuevo token de seguridad para este usuario? apps/client/src/app/components/admin-users/admin-users.component.ts - 233 + 237 @@ -7805,15 +7785,7 @@ 158 - - Name - Nombre - - libs/ui/src/lib/benchmark/benchmark.component.html - 12 - - - + Quick Links Enlaces rápidos @@ -7821,24 +7793,16 @@ 58 - - Asset Profiles - Perfiles de activos - - libs/ui/src/lib/assistant/assistant.html - 140 - - Live Demo Demostración en vivo apps/client/src/app/pages/landing/landing-page.html - 49 + 48 apps/client/src/app/pages/landing/landing-page.html - 351 + 349 libs/common/src/lib/routes/routes.ts @@ -8193,7 +8157,7 @@ Gestionar perfil de activo apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 465 + 466 diff --git a/apps/client/src/locales/messages.fr.xlf b/apps/client/src/locales/messages.fr.xlf index b25a87570..f51609582 100644 --- a/apps/client/src/locales/messages.fr.xlf +++ b/apps/client/src/locales/messages.fr.xlf @@ -152,6 +152,10 @@ libs/ui/src/lib/activities-table/activities-table.component.html 135 + + libs/ui/src/lib/benchmark/benchmark.component.html + 12 + libs/ui/src/lib/holdings-table/holdings-table.component.html 28 @@ -432,6 +436,10 @@ apps/client/src/app/components/admin-settings/admin-settings.component.html 106 + + libs/ui/src/lib/assistant/assistant.html + 140 + Historical Market Data @@ -838,7 +846,7 @@ Voulez-vous vraiment supprimer cet·te utilisateur·rice ? apps/client/src/app/components/admin-users/admin-users.component.ts - 207 + 211 @@ -933,14 +941,6 @@ 5 - - Get started - Démarrer - - apps/client/src/app/components/header/header.component.html - 432 - - Sign in Se connecter @@ -954,7 +954,7 @@ apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 71 + 60 libs/common/src/lib/routes/routes.ts @@ -1090,11 +1090,11 @@ apps/client/src/app/pages/landing/landing-page.html - 48 + 47 apps/client/src/app/pages/landing/landing-page.html - 350 + 348 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html @@ -1117,20 +1117,12 @@ 30 - - Sign in with Internet Identity - Se connecter avec Internet Identity - - apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 38 - - Sign in with Google Se connecter avec Google apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 48 + 37 @@ -1138,7 +1130,7 @@ Rester connecté apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 59 + 48 @@ -1262,7 +1254,7 @@ Signaler une Erreur de Données apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 450 + 451 @@ -1676,6 +1668,10 @@ libs/common/src/lib/routes/routes.ts 69 + + libs/ui/src/lib/assistant/assistant.html + 84 + Update account @@ -1912,6 +1908,10 @@ libs/common/src/lib/routes/routes.ts 167 + + libs/ui/src/lib/assistant/assistant.html + 110 + Summary @@ -2425,14 +2425,6 @@ 7 - - Holdings - Positions - - libs/ui/src/lib/assistant/assistant.html - 110 - - Pricing Prix @@ -2500,14 +2492,34 @@ Get Started Démarrer + + apps/client/src/app/components/header/header.component.html + 433 + apps/client/src/app/pages/features/features-page.html 320 + + apps/client/src/app/pages/landing/landing-page.html + 41 + + + apps/client/src/app/pages/landing/landing-page.html + 344 + + + apps/client/src/app/pages/pricing/pricing-page.html + 377 + apps/client/src/app/pages/public/public-page.html 242 + + apps/client/src/app/pages/resources/personal-finance-tools/product-page.html + 334 + Registration @@ -2541,20 +2553,12 @@ 101 - - Continue with Internet Identity - Continue avec Internet Identity - - apps/client/src/app/pages/register/register-page.html - 42 - - Continue with Google Continuer avec Google apps/client/src/app/pages/register/register-page.html - 53 + 39 @@ -2922,7 +2926,7 @@ libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 412 + 413 @@ -3150,11 +3154,11 @@ libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 414 + 415 libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 427 + 428 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -3521,32 +3525,12 @@ 303 - - Get Started - Démarrer - - apps/client/src/app/pages/landing/landing-page.html - 42 - - - apps/client/src/app/pages/landing/landing-page.html - 346 - - - apps/client/src/app/pages/pricing/pricing-page.html - 378 - - - apps/client/src/app/pages/resources/personal-finance-tools/product-page.html - 334 - - It’s free. C’est gratuit. apps/client/src/app/pages/pricing/pricing-page.html - 380 + 379 @@ -4574,7 +4558,7 @@ Etoiles sur GitHub apps/client/src/app/pages/landing/landing-page.html - 88 + 87 apps/client/src/app/pages/open/open-page.html @@ -4586,7 +4570,7 @@ Téléchargement depuis Docker Hub apps/client/src/app/pages/landing/landing-page.html - 106 + 105 apps/client/src/app/pages/open/open-page.html @@ -4706,7 +4690,7 @@ Utilisateurs actifs mensuels apps/client/src/app/pages/landing/landing-page.html - 70 + 69 @@ -4714,7 +4698,7 @@ Médias apps/client/src/app/pages/landing/landing-page.html - 115 + 114 @@ -4722,7 +4706,7 @@ Protégez vos actifs. Affinez votre stratégie d’investissement personnelle.. apps/client/src/app/pages/landing/landing-page.html - 125 + 124 @@ -4730,7 +4714,7 @@ Ghostfolio permet aux personnes occupées de suivre ses actions, ETF ou cryptomonnaies sans être pistées. apps/client/src/app/pages/landing/landing-page.html - 129 + 128 @@ -4738,7 +4722,7 @@ Vision 360° apps/client/src/app/pages/landing/landing-page.html - 139 + 138 @@ -4746,7 +4730,7 @@ Compatible Web3 apps/client/src/app/pages/landing/landing-page.html - 150 + 149 @@ -4754,7 +4738,7 @@ Utilisez Ghostfolio de manière anonyme et soyez propriétaire de vos données financières. apps/client/src/app/pages/landing/landing-page.html - 153 + 152 @@ -4762,7 +4746,7 @@ Bénéficiez d’améliorations continues grâce à une communauté impliquée. apps/client/src/app/pages/landing/landing-page.html - 163 + 162 @@ -4778,7 +4762,7 @@ Pourquoi Ghostfolio? apps/client/src/app/pages/landing/landing-page.html - 171 + 170 @@ -4786,7 +4770,7 @@ Ghostfolio est pour vous si vous ... apps/client/src/app/pages/landing/landing-page.html - 173 + 172 @@ -4794,7 +4778,7 @@ tradez des actions, ETFs or crypto-monnaies sur plusieurs plateforme. apps/client/src/app/pages/landing/landing-page.html - 179 + 178 @@ -4802,7 +4786,7 @@ adoptez une stratégie Buy & and Hold apps/client/src/app/pages/landing/landing-page.html - 185 + 184 @@ -4810,7 +4794,7 @@ êtes intéressés d’avoir un aperçu de la composition de votre portefeuille apps/client/src/app/pages/landing/landing-page.html - 190 + 189 @@ -4818,7 +4802,7 @@ valorisez la confidentialité et la propriété de vos données apps/client/src/app/pages/landing/landing-page.html - 195 + 194 @@ -4826,7 +4810,7 @@ êtes minimaliste apps/client/src/app/pages/landing/landing-page.html - 198 + 197 @@ -4834,7 +4818,7 @@ vous souciez de diversifier vos ressources financières apps/client/src/app/pages/landing/landing-page.html - 202 + 201 @@ -4842,7 +4826,7 @@ êtes intéressés d’atteindre l’indépendance financière apps/client/src/app/pages/landing/landing-page.html - 206 + 205 @@ -4850,7 +4834,7 @@ dites non aux feuilles de calcul en apps/client/src/app/pages/landing/landing-page.html - 210 + 209 @@ -4858,7 +4842,7 @@ continuez à lire cette liste apps/client/src/app/pages/landing/landing-page.html - 213 + 212 @@ -4866,7 +4850,7 @@ En appendre plus sur Ghostfolio apps/client/src/app/pages/landing/landing-page.html - 218 + 217 @@ -4874,7 +4858,7 @@ Qu’en pensent nos utilisateurs apps/client/src/app/pages/landing/landing-page.html - 227 + 226 @@ -4882,7 +4866,7 @@ Les utilisateurs du monde entier utilisent Ghostfolio Premium apps/client/src/app/pages/landing/landing-page.html - 266 + 265 @@ -4890,7 +4874,7 @@ Comment fonctionne Ghostfolio ? apps/client/src/app/pages/landing/landing-page.html - 283 + 282 @@ -4898,7 +4882,7 @@ Inscrivez-vous de manière anonyme* apps/client/src/app/pages/landing/landing-page.html - 291 + 290 @@ -4906,7 +4890,7 @@ * aucune adresse mail ni carte de crédit requise apps/client/src/app/pages/landing/landing-page.html - 293 + 292 @@ -4914,7 +4898,7 @@ Ajoutez l’une de vos transactions historiques apps/client/src/app/pages/landing/landing-page.html - 305 + 304 @@ -4922,7 +4906,7 @@ Obtenez de précieuses informations sur la composition de votre portefeuille apps/client/src/app/pages/landing/landing-page.html - 317 + 316 @@ -4930,7 +4914,7 @@ Êtes- vous prêts ? apps/client/src/app/pages/landing/landing-page.html - 331 + 330 @@ -4938,7 +4922,7 @@ Obtenez une vue d’ensemble de vos finances personnelles sur plusieurs plateformes. apps/client/src/app/pages/landing/landing-page.html - 142 + 141 @@ -4946,7 +4930,7 @@ Démarrer en seulement 3 étapes apps/client/src/app/pages/landing/landing-page.html - 285 + 284 @@ -5764,7 +5748,7 @@ Close Holding apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 441 + 442 @@ -5883,12 +5867,12 @@ 8 - + Reset Filters Réinitialiser les Filtres libs/ui/src/lib/assistant/assistant.html - 205 + 204 @@ -5923,12 +5907,12 @@ 411 - + Apply Filters Appliquer les Filtres libs/ui/src/lib/assistant/assistant.html - 219 + 217 @@ -6153,7 +6137,7 @@ Rejoindre ou voir un compte démo apps/client/src/app/pages/landing/landing-page.html - 334 + 333 @@ -6329,7 +6313,7 @@ Open Source apps/client/src/app/pages/landing/landing-page.html - 160 + 159 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts @@ -6719,10 +6703,6 @@ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html 51 - - libs/ui/src/lib/assistant/assistant.html - 84 - Copy link to clipboard @@ -7395,7 +7375,7 @@ libs/ui/src/lib/treemap-chart/treemap-chart.component.ts - 367 + 368 @@ -7415,11 +7395,11 @@ libs/ui/src/lib/treemap-chart/treemap-chart.component.ts - 367 + 368 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts - 380 + 381 @@ -7515,7 +7495,7 @@ Jeton de sécurité apps/client/src/app/components/admin-users/admin-users.component.ts - 228 + 232 apps/client/src/app/components/user-account-access/user-account-access.component.ts @@ -7527,7 +7507,7 @@ Voulez-vous vraiment générer un nouveau jeton de sécurité pour cet utilisateur ? apps/client/src/app/components/admin-users/admin-users.component.ts - 233 + 237 @@ -7804,15 +7784,7 @@ 158 - - Name - Nom - - libs/ui/src/lib/benchmark/benchmark.component.html - 12 - - - + Quick Links Liens rapides @@ -7820,24 +7792,16 @@ 58 - - Asset Profiles - Profils d’Actifs - - libs/ui/src/lib/assistant/assistant.html - 140 - - Live Demo Démo Live apps/client/src/app/pages/landing/landing-page.html - 49 + 48 apps/client/src/app/pages/landing/landing-page.html - 351 + 349 libs/common/src/lib/routes/routes.ts @@ -8192,7 +8156,7 @@ Gérer le profil d’actif apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 465 + 466 diff --git a/apps/client/src/locales/messages.it.xlf b/apps/client/src/locales/messages.it.xlf index f5c8f799c..5b4058606 100644 --- a/apps/client/src/locales/messages.it.xlf +++ b/apps/client/src/locales/messages.it.xlf @@ -145,6 +145,10 @@ libs/ui/src/lib/activities-table/activities-table.component.html 135 + + libs/ui/src/lib/benchmark/benchmark.component.html + 12 + libs/ui/src/lib/holdings-table/holdings-table.component.html 28 @@ -377,6 +381,10 @@ apps/client/src/app/components/admin-settings/admin-settings.component.html 106 + + libs/ui/src/lib/assistant/assistant.html + 140 + Historical Market Data @@ -631,7 +639,7 @@ Vuoi davvero eliminare questo utente? apps/client/src/app/components/admin-users/admin-users.component.ts - 207 + 211 @@ -685,14 +693,34 @@ Get Started Inizia + + apps/client/src/app/components/header/header.component.html + 433 + apps/client/src/app/pages/features/features-page.html 320 + + apps/client/src/app/pages/landing/landing-page.html + 41 + + + apps/client/src/app/pages/landing/landing-page.html + 344 + + + apps/client/src/app/pages/pricing/pricing-page.html + 377 + apps/client/src/app/pages/public/public-page.html 242 + + apps/client/src/app/pages/resources/personal-finance-tools/product-page.html + 334 + Sign in @@ -707,7 +735,7 @@ apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 71 + 60 libs/common/src/lib/routes/routes.ts @@ -795,11 +823,11 @@ apps/client/src/app/pages/landing/landing-page.html - 48 + 47 apps/client/src/app/pages/landing/landing-page.html - 350 + 348 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html @@ -822,20 +850,12 @@ 30 - - Sign in with Internet Identity - Accedi con Internet Identity - - apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 38 - - Sign in with Google Accedi con Google apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 48 + 37 @@ -843,7 +863,7 @@ Rimani connesso apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 59 + 48 @@ -975,7 +995,7 @@ Segnala un’anomalia dei dati apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 450 + 451 @@ -1329,6 +1349,10 @@ libs/common/src/lib/routes/routes.ts 69 + + libs/ui/src/lib/assistant/assistant.html + 84 + Update account @@ -1825,10 +1849,6 @@ libs/common/src/lib/routes/routes.ts 167 - - - Holdings - Partecipazioni libs/ui/src/lib/assistant/assistant.html 110 @@ -2102,20 +2122,12 @@ 281 - - Continue with Internet Identity - Continua con Internet Identity - - apps/client/src/app/pages/register/register-page.html - 42 - - Continue with Google Continua con Google apps/client/src/app/pages/register/register-page.html - 53 + 39 @@ -2294,14 +2306,6 @@ 56 - - Get started - Inizia - - apps/client/src/app/components/header/header.component.html - 432 - - This feature is currently unavailable. Questa funzionalità non è attualmente disponibile. @@ -2891,7 +2895,7 @@ libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 412 + 413 @@ -2911,11 +2915,11 @@ libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 414 + 415 libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 427 + 428 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -3522,32 +3526,12 @@ 303 - - Get Started - Inizia - - apps/client/src/app/pages/landing/landing-page.html - 42 - - - apps/client/src/app/pages/landing/landing-page.html - 346 - - - apps/client/src/app/pages/pricing/pricing-page.html - 378 - - - apps/client/src/app/pages/resources/personal-finance-tools/product-page.html - 334 - - It’s free. È gratuito. apps/client/src/app/pages/pricing/pricing-page.html - 380 + 379 @@ -4575,7 +4559,7 @@ Stelle su GitHub apps/client/src/app/pages/landing/landing-page.html - 88 + 87 apps/client/src/app/pages/open/open-page.html @@ -4587,7 +4571,7 @@ Estrazioni su Docker Hub apps/client/src/app/pages/landing/landing-page.html - 106 + 105 apps/client/src/app/pages/open/open-page.html @@ -4707,7 +4691,7 @@ Utenti attivi mensili apps/client/src/app/pages/landing/landing-page.html - 70 + 69 @@ -4715,7 +4699,7 @@ Come si vede su apps/client/src/app/pages/landing/landing-page.html - 115 + 114 @@ -4723,7 +4707,7 @@ Proteggi i tuoi asset. Perfeziona la tua strategia di investimento personale. apps/client/src/app/pages/landing/landing-page.html - 125 + 124 @@ -4731,7 +4715,7 @@ Ghostfolio permette alle persone impegnate di tenere traccia di azioni, ETF o criptovalute senza essere tracciate. apps/client/src/app/pages/landing/landing-page.html - 129 + 128 @@ -4739,7 +4723,7 @@ Vista a 360° apps/client/src/app/pages/landing/landing-page.html - 139 + 138 @@ -4747,7 +4731,7 @@ Pronto per il Web3 apps/client/src/app/pages/landing/landing-page.html - 150 + 149 @@ -4755,7 +4739,7 @@ Usa Ghostfolio in modo anonimo e possiedi i tuoi dati finanziari. apps/client/src/app/pages/landing/landing-page.html - 153 + 152 @@ -4763,7 +4747,7 @@ Beneficia dei continui miglioramenti grazie a una forte comunità. apps/client/src/app/pages/landing/landing-page.html - 163 + 162 @@ -4779,7 +4763,7 @@ Perché Ghostfolio? apps/client/src/app/pages/landing/landing-page.html - 171 + 170 @@ -4787,7 +4771,7 @@ Ghostfolio è per te se... apps/client/src/app/pages/landing/landing-page.html - 173 + 172 @@ -4795,7 +4779,7 @@ fai trading di azioni, ETF o criptovalute su più piattaforme apps/client/src/app/pages/landing/landing-page.html - 179 + 178 @@ -4803,7 +4787,7 @@ persegui una strategia buy & hold apps/client/src/app/pages/landing/landing-page.html - 185 + 184 @@ -4811,7 +4795,7 @@ sei interessato a conoscere la composizione del tuo portafoglio apps/client/src/app/pages/landing/landing-page.html - 190 + 189 @@ -4819,7 +4803,7 @@ valorizzi la privacy e la proprietà dei dati apps/client/src/app/pages/landing/landing-page.html - 195 + 194 @@ -4827,7 +4811,7 @@ sei per il minimalismo apps/client/src/app/pages/landing/landing-page.html - 198 + 197 @@ -4835,7 +4819,7 @@ ti interessa diversificare le tue risorse finanziarie apps/client/src/app/pages/landing/landing-page.html - 202 + 201 @@ -4843,7 +4827,7 @@ sei interessato all’indipendenza finanziaria apps/client/src/app/pages/landing/landing-page.html - 206 + 205 @@ -4851,7 +4835,7 @@ non vuoi utilizzare il foglio elettronico nel apps/client/src/app/pages/landing/landing-page.html - 210 + 209 @@ -4859,7 +4843,7 @@ stai ancora leggendo questo elenco apps/client/src/app/pages/landing/landing-page.html - 213 + 212 @@ -4867,7 +4851,7 @@ Ulteriori informazioni su Ghostfolio apps/client/src/app/pages/landing/landing-page.html - 218 + 217 @@ -4875,7 +4859,7 @@ Cosa dicono i nostri utenti apps/client/src/app/pages/landing/landing-page.html - 227 + 226 @@ -4883,7 +4867,7 @@ Membri da tutto il mondo utilizzano Ghostfolio Premium apps/client/src/app/pages/landing/landing-page.html - 266 + 265 @@ -4891,7 +4875,7 @@ Come funziona Ghostfolio? apps/client/src/app/pages/landing/landing-page.html - 283 + 282 @@ -4899,7 +4883,7 @@ Iscriviti in modo anonimo* apps/client/src/app/pages/landing/landing-page.html - 291 + 290 @@ -4907,7 +4891,7 @@ * non è richiesto alcun indirizzo email né la carta di credito apps/client/src/app/pages/landing/landing-page.html - 293 + 292 @@ -4915,7 +4899,7 @@ Aggiungi le tue transazioni storiche apps/client/src/app/pages/landing/landing-page.html - 305 + 304 @@ -4923,7 +4907,7 @@ Ottieni informazioni preziose sulla composizione del tuo portafoglio apps/client/src/app/pages/landing/landing-page.html - 317 + 316 @@ -4931,7 +4915,7 @@ Sei pronto? apps/client/src/app/pages/landing/landing-page.html - 331 + 330 @@ -4939,7 +4923,7 @@ Ottieni un quadro completo delle tue finanze personali su più piattaforme. apps/client/src/app/pages/landing/landing-page.html - 142 + 141 @@ -4947,7 +4931,7 @@ Inizia in soli 3 passi apps/client/src/app/pages/landing/landing-page.html - 285 + 284 @@ -5765,7 +5749,7 @@ Close Holding apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 441 + 442 @@ -5884,12 +5868,12 @@ 8 - + Reset Filters Reset Filtri libs/ui/src/lib/assistant/assistant.html - 205 + 204 @@ -5924,12 +5908,12 @@ 411 - + Apply Filters Applica i Filtri libs/ui/src/lib/assistant/assistant.html - 219 + 217 @@ -6154,7 +6138,7 @@ Registrati adesso o prova l’account demo apps/client/src/app/pages/landing/landing-page.html - 334 + 333 @@ -6330,7 +6314,7 @@ Open Source apps/client/src/app/pages/landing/landing-page.html - 160 + 159 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts @@ -6720,10 +6704,6 @@ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html 51 - - libs/ui/src/lib/assistant/assistant.html - 84 - Copy link to clipboard @@ -7396,7 +7376,7 @@ libs/ui/src/lib/treemap-chart/treemap-chart.component.ts - 367 + 368 @@ -7416,11 +7396,11 @@ libs/ui/src/lib/treemap-chart/treemap-chart.component.ts - 367 + 368 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts - 380 + 381 @@ -7516,7 +7496,7 @@ Token di sicurezza apps/client/src/app/components/admin-users/admin-users.component.ts - 228 + 232 apps/client/src/app/components/user-account-access/user-account-access.component.ts @@ -7528,7 +7508,7 @@ Vuoi davvero generare un nuovo token di sicurezza per questo utente? apps/client/src/app/components/admin-users/admin-users.component.ts - 233 + 237 @@ -7805,15 +7785,7 @@ 158 - - Name - Nome - - libs/ui/src/lib/benchmark/benchmark.component.html - 12 - - - + Quick Links Collegamenti rapidi @@ -7821,24 +7793,16 @@ 58 - - Asset Profiles - Profili delle risorse - - libs/ui/src/lib/assistant/assistant.html - 140 - - Live Demo Dimostrazione dal vivo apps/client/src/app/pages/landing/landing-page.html - 49 + 48 apps/client/src/app/pages/landing/landing-page.html - 351 + 349 libs/common/src/lib/routes/routes.ts @@ -8193,7 +8157,7 @@ Gestisci profilo risorsa apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 465 + 466 diff --git a/apps/client/src/locales/messages.nl.xlf b/apps/client/src/locales/messages.nl.xlf index 1ec127b22..6a1f871a6 100644 --- a/apps/client/src/locales/messages.nl.xlf +++ b/apps/client/src/locales/messages.nl.xlf @@ -144,6 +144,10 @@ libs/ui/src/lib/activities-table/activities-table.component.html 135 + + libs/ui/src/lib/benchmark/benchmark.component.html + 12 + libs/ui/src/lib/holdings-table/holdings-table.component.html 28 @@ -376,6 +380,10 @@ apps/client/src/app/components/admin-settings/admin-settings.component.html 106 + + libs/ui/src/lib/assistant/assistant.html + 140 + Historical Market Data @@ -630,7 +638,7 @@ Wilt je deze gebruiker echt verwijderen? apps/client/src/app/components/admin-users/admin-users.component.ts - 207 + 211 @@ -684,14 +692,34 @@ Get Started Aan de slag + + apps/client/src/app/components/header/header.component.html + 433 + apps/client/src/app/pages/features/features-page.html 320 + + apps/client/src/app/pages/landing/landing-page.html + 41 + + + apps/client/src/app/pages/landing/landing-page.html + 344 + + + apps/client/src/app/pages/pricing/pricing-page.html + 377 + apps/client/src/app/pages/public/public-page.html 242 + + apps/client/src/app/pages/resources/personal-finance-tools/product-page.html + 334 + Sign in @@ -706,7 +734,7 @@ apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 71 + 60 libs/common/src/lib/routes/routes.ts @@ -794,11 +822,11 @@ apps/client/src/app/pages/landing/landing-page.html - 48 + 47 apps/client/src/app/pages/landing/landing-page.html - 350 + 348 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html @@ -821,20 +849,12 @@ 30 - - Sign in with Internet Identity - Aanmelden met Internet Identity - - apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 38 - - Sign in with Google Aanmelden met Google apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 48 + 37 @@ -842,7 +862,7 @@ Aangemeld blijven apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 59 + 48 @@ -974,7 +994,7 @@ Gegevensstoring melden apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 450 + 451 @@ -1328,6 +1348,10 @@ libs/common/src/lib/routes/routes.ts 69 + + libs/ui/src/lib/assistant/assistant.html + 84 + Update account @@ -1824,10 +1848,6 @@ libs/common/src/lib/routes/routes.ts 167 - - - Holdings - Posities libs/ui/src/lib/assistant/assistant.html 110 @@ -2101,20 +2121,12 @@ 281 - - Continue with Internet Identity - Ga verder met Internet Identity - - apps/client/src/app/pages/register/register-page.html - 42 - - Continue with Google Verder met Google apps/client/src/app/pages/register/register-page.html - 53 + 39 @@ -2293,14 +2305,6 @@ 56 - - Get started - Aan de slag - - apps/client/src/app/components/header/header.component.html - 432 - - This feature is currently unavailable. Deze functie is momenteel niet beschikbaar. @@ -2890,7 +2894,7 @@ libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 412 + 413 @@ -2910,11 +2914,11 @@ libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 414 + 415 libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 427 + 428 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -3521,32 +3525,12 @@ 303 - - Get Started - Aan de slag - - apps/client/src/app/pages/landing/landing-page.html - 42 - - - apps/client/src/app/pages/landing/landing-page.html - 346 - - - apps/client/src/app/pages/pricing/pricing-page.html - 378 - - - apps/client/src/app/pages/resources/personal-finance-tools/product-page.html - 334 - - It’s free. Het is gratis. apps/client/src/app/pages/pricing/pricing-page.html - 380 + 379 @@ -4574,7 +4558,7 @@ Sterren op GitHub apps/client/src/app/pages/landing/landing-page.html - 88 + 87 apps/client/src/app/pages/open/open-page.html @@ -4586,7 +4570,7 @@ Pulls op Docker Hub apps/client/src/app/pages/landing/landing-page.html - 106 + 105 apps/client/src/app/pages/open/open-page.html @@ -4706,7 +4690,7 @@ Maandelijkse actieve gebruikers apps/client/src/app/pages/landing/landing-page.html - 70 + 69 @@ -4714,7 +4698,7 @@ Zoals te zien in apps/client/src/app/pages/landing/landing-page.html - 115 + 114 @@ -4722,7 +4706,7 @@ Bescherm je financiële bezittingen. Verfijn je persoonlijke investeringsstrategie. apps/client/src/app/pages/landing/landing-page.html - 125 + 124 @@ -4730,7 +4714,7 @@ Ghostfolio stelt drukbezette mensen in staat om aandelen, ETF’s of cryptocurrencies bij te houden zonder gevolgd te worden. apps/client/src/app/pages/landing/landing-page.html - 129 + 128 @@ -4738,7 +4722,7 @@ 360°-overzicht apps/client/src/app/pages/landing/landing-page.html - 139 + 138 @@ -4746,7 +4730,7 @@ Klaar voor Web3 apps/client/src/app/pages/landing/landing-page.html - 150 + 149 @@ -4754,7 +4738,7 @@ Gebruik Ghostfolio anoniem en bezit je financiële gegevens. apps/client/src/app/pages/landing/landing-page.html - 153 + 152 @@ -4762,7 +4746,7 @@ Profiteer van voortdurende verbeteringen door een sterke gemeenschap. apps/client/src/app/pages/landing/landing-page.html - 163 + 162 @@ -4778,7 +4762,7 @@ Waarom Ghostfolio? apps/client/src/app/pages/landing/landing-page.html - 171 + 170 @@ -4786,7 +4770,7 @@ Ghostfolio is iets voor je als je... apps/client/src/app/pages/landing/landing-page.html - 173 + 172 @@ -4794,7 +4778,7 @@ handelt in aandelen, ETF’s of cryptocurrencies op meerdere platforms apps/client/src/app/pages/landing/landing-page.html - 179 + 178 @@ -4802,7 +4786,7 @@ streeft naar een buy & hold strategie apps/client/src/app/pages/landing/landing-page.html - 185 + 184 @@ -4810,7 +4794,7 @@ geïnteresseerd bent in het krijgen van inzicht in je portefeuillesamenstelling apps/client/src/app/pages/landing/landing-page.html - 190 + 189 @@ -4818,7 +4802,7 @@ privacy en eigendom van gegevens waardeert apps/client/src/app/pages/landing/landing-page.html - 195 + 194 @@ -4826,7 +4810,7 @@ houdt van een minimalistisch ontwerp apps/client/src/app/pages/landing/landing-page.html - 198 + 197 @@ -4834,7 +4818,7 @@ zorgdraagt voor het diversifiëren van je financiële middelen apps/client/src/app/pages/landing/landing-page.html - 202 + 201 @@ -4842,7 +4826,7 @@ geïnteresseerd bent in financiële onafhankelijkheid apps/client/src/app/pages/landing/landing-page.html - 206 + 205 @@ -4850,7 +4834,7 @@ "nee" zegt tegen spreadsheets in apps/client/src/app/pages/landing/landing-page.html - 210 + 209 @@ -4858,7 +4842,7 @@ nog steeds deze lijst aan het lezen bent apps/client/src/app/pages/landing/landing-page.html - 213 + 212 @@ -4866,7 +4850,7 @@ Leer meer over Ghostfolio apps/client/src/app/pages/landing/landing-page.html - 218 + 217 @@ -4874,7 +4858,7 @@ Wat onze gebruikers zeggen apps/client/src/app/pages/landing/landing-page.html - 227 + 226 @@ -4882,7 +4866,7 @@ Leden van over de hele wereld gebruikenGhostfolio Premium apps/client/src/app/pages/landing/landing-page.html - 266 + 265 @@ -4890,7 +4874,7 @@ Hoe Ghostfolio werkt? apps/client/src/app/pages/landing/landing-page.html - 283 + 282 @@ -4898,7 +4882,7 @@ Anoniem aanmelden* apps/client/src/app/pages/landing/landing-page.html - 291 + 290 @@ -4906,7 +4890,7 @@ * geen e-mailadres of creditcard nodig apps/client/src/app/pages/landing/landing-page.html - 293 + 292 @@ -4914,7 +4898,7 @@ Voeg al je historische transacties toe apps/client/src/app/pages/landing/landing-page.html - 305 + 304 @@ -4922,7 +4906,7 @@ Krijg waardevolle inzichten in de samenstelling van je portefeuille apps/client/src/app/pages/landing/landing-page.html - 317 + 316 @@ -4930,7 +4914,7 @@ Ben jij er klaar voor? apps/client/src/app/pages/landing/landing-page.html - 331 + 330 @@ -4938,7 +4922,7 @@ Krijg een volledig beeld van je persoonlijke financiën op meerdere platforms. apps/client/src/app/pages/landing/landing-page.html - 142 + 141 @@ -4946,7 +4930,7 @@ Aan de slag in slechts 3 stappen apps/client/src/app/pages/landing/landing-page.html - 285 + 284 @@ -5764,7 +5748,7 @@ Close Holding apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 441 + 442 @@ -5883,12 +5867,12 @@ 8 - + Reset Filters Filters Herstellen libs/ui/src/lib/assistant/assistant.html - 205 + 204 @@ -5923,12 +5907,12 @@ 411 - + Apply Filters Filters Toepassen libs/ui/src/lib/assistant/assistant.html - 219 + 217 @@ -6153,7 +6137,7 @@ Word nu lid of bekijk het voorbeeldaccount apps/client/src/app/pages/landing/landing-page.html - 334 + 333 @@ -6329,7 +6313,7 @@ Open Source apps/client/src/app/pages/landing/landing-page.html - 160 + 159 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts @@ -6719,10 +6703,6 @@ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html 51 - - libs/ui/src/lib/assistant/assistant.html - 84 - Copy link to clipboard @@ -7395,7 +7375,7 @@ libs/ui/src/lib/treemap-chart/treemap-chart.component.ts - 367 + 368 @@ -7415,11 +7395,11 @@ libs/ui/src/lib/treemap-chart/treemap-chart.component.ts - 367 + 368 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts - 380 + 381 @@ -7515,7 +7495,7 @@ Beveiligingstoken apps/client/src/app/components/admin-users/admin-users.component.ts - 228 + 232 apps/client/src/app/components/user-account-access/user-account-access.component.ts @@ -7527,7 +7507,7 @@ Wilt u echt een nieuw beveiligingstoken voor deze gebruiker aanmaken? apps/client/src/app/components/admin-users/admin-users.component.ts - 233 + 237 @@ -7804,15 +7784,7 @@ 158 - - Name - Naam - - libs/ui/src/lib/benchmark/benchmark.component.html - 12 - - - + Quick Links Snelle koppelingen @@ -7820,24 +7792,16 @@ 58 - - Asset Profiles - Activaprofielen - - libs/ui/src/lib/assistant/assistant.html - 140 - - Live Demo Live-demo apps/client/src/app/pages/landing/landing-page.html - 49 + 48 apps/client/src/app/pages/landing/landing-page.html - 351 + 349 libs/common/src/lib/routes/routes.ts @@ -8192,7 +8156,7 @@ Beheer activaprofiel apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 465 + 466 diff --git a/apps/client/src/locales/messages.pl.xlf b/apps/client/src/locales/messages.pl.xlf index d8e342569..a52b15599 100644 --- a/apps/client/src/locales/messages.pl.xlf +++ b/apps/client/src/locales/messages.pl.xlf @@ -389,6 +389,10 @@ libs/ui/src/lib/activities-table/activities-table.component.html 135 + + libs/ui/src/lib/benchmark/benchmark.component.html + 12 + libs/ui/src/lib/holdings-table/holdings-table.component.html 28 @@ -1295,7 +1299,7 @@ Czy na pewno chcesz usunąć tego użytkownika? apps/client/src/app/components/admin-users/admin-users.component.ts - 207 + 211 @@ -1422,14 +1426,6 @@ 5 - - Get started - Rozpocznij - - apps/client/src/app/components/header/header.component.html - 432 - - Sign in Zaloguj się @@ -1443,7 +1439,7 @@ apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 71 + 60 libs/common/src/lib/routes/routes.ts @@ -1679,11 +1675,11 @@ apps/client/src/app/pages/landing/landing-page.html - 48 + 47 apps/client/src/app/pages/landing/landing-page.html - 350 + 348 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html @@ -1706,20 +1702,12 @@ 30 - - Sign in with Internet Identity - Zaloguj się przy użyciu Tożsamości Internetowej (Internet Identity) - - apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 38 - - Sign in with Google Zaloguj się przez Google apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 48 + 37 @@ -1727,7 +1715,7 @@ Pozostań zalogowany apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 59 + 48 @@ -1883,7 +1871,7 @@ Zgłoś Błąd Danych apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 450 + 451 @@ -2557,6 +2545,10 @@ libs/common/src/lib/routes/routes.ts 69 + + libs/ui/src/lib/assistant/assistant.html + 84 + Oops, cash balance transfer has failed. @@ -2969,14 +2961,34 @@ Get Started Rozpocznij + + apps/client/src/app/components/header/header.component.html + 433 + apps/client/src/app/pages/features/features-page.html 320 + + apps/client/src/app/pages/landing/landing-page.html + 41 + + + apps/client/src/app/pages/landing/landing-page.html + 344 + + + apps/client/src/app/pages/pricing/pricing-page.html + 377 + apps/client/src/app/pages/public/public-page.html 242 + + apps/client/src/app/pages/resources/personal-finance-tools/product-page.html + 334 + Holdings @@ -3001,6 +3013,10 @@ libs/common/src/lib/routes/routes.ts 167 + + libs/ui/src/lib/assistant/assistant.html + 110 + Summary @@ -3106,32 +3122,12 @@ 11 - - Get Started - Rozpocznij - - apps/client/src/app/pages/landing/landing-page.html - 42 - - - apps/client/src/app/pages/landing/landing-page.html - 346 - - - apps/client/src/app/pages/pricing/pricing-page.html - 378 - - - apps/client/src/app/pages/resources/personal-finance-tools/product-page.html - 334 - - Monthly Active Users Aktywni Użytkownicy w Miesiącu apps/client/src/app/pages/landing/landing-page.html - 70 + 69 @@ -3139,7 +3135,7 @@ Gwiazdki na GitHubie apps/client/src/app/pages/landing/landing-page.html - 88 + 87 apps/client/src/app/pages/open/open-page.html @@ -3151,7 +3147,7 @@ Pobrania na Docker Hub apps/client/src/app/pages/landing/landing-page.html - 106 + 105 apps/client/src/app/pages/open/open-page.html @@ -3163,7 +3159,7 @@ Dostrzegli Nas apps/client/src/app/pages/landing/landing-page.html - 115 + 114 @@ -3171,7 +3167,7 @@ Chroń swoje zasoby. Udoskonal swoją osobistą strategię inwestycyjną. apps/client/src/app/pages/landing/landing-page.html - 125 + 124 @@ -3179,7 +3175,7 @@ Ghostfolio umożliwia zapracowanym osobom śledzenie akcji, funduszy ETF lub kryptowalut, jednocześnie zachowując prywatność. apps/client/src/app/pages/landing/landing-page.html - 129 + 128 @@ -3187,7 +3183,7 @@ Widok 360° apps/client/src/app/pages/landing/landing-page.html - 139 + 138 @@ -3195,7 +3191,7 @@ Uzyskaj pełny obraz swoich finansów osobistych na wielu różnych platformach. apps/client/src/app/pages/landing/landing-page.html - 142 + 141 @@ -3203,7 +3199,7 @@ Gotowy na Web3 apps/client/src/app/pages/landing/landing-page.html - 150 + 149 @@ -3211,7 +3207,7 @@ Korzystaj z Ghostfolio anonimowo i zachowaj pełną kontrolę nad swoimi danymi finansowymi. apps/client/src/app/pages/landing/landing-page.html - 153 + 152 @@ -3219,7 +3215,7 @@ Czerp korzyści z nieustannych ulepszeń dzięki silnej społeczności. apps/client/src/app/pages/landing/landing-page.html - 163 + 162 @@ -3235,7 +3231,7 @@ Dlaczego Ghostfolio? apps/client/src/app/pages/landing/landing-page.html - 171 + 170 @@ -3243,7 +3239,7 @@ Ghostfolio jest dla Ciebie, jeśli... apps/client/src/app/pages/landing/landing-page.html - 173 + 172 @@ -3251,7 +3247,7 @@ handlujesz akcjami, funduszami ETF lub kryptowalutami na wielu platformach apps/client/src/app/pages/landing/landing-page.html - 179 + 178 @@ -3259,7 +3255,7 @@ realizujesz strategię buy & hold apps/client/src/app/pages/landing/landing-page.html - 185 + 184 @@ -3267,7 +3263,7 @@ chcesz uzyskać wgląd w strukturę swojego portfolio apps/client/src/app/pages/landing/landing-page.html - 190 + 189 @@ -3275,7 +3271,7 @@ cenisz sobie prywatność i własność swoich danych apps/client/src/app/pages/landing/landing-page.html - 195 + 194 @@ -3283,7 +3279,7 @@ lubisz minimalizm apps/client/src/app/pages/landing/landing-page.html - 198 + 197 @@ -3291,7 +3287,7 @@ zależy Ci na dywersyfikacji swoich zasobów finansowych apps/client/src/app/pages/landing/landing-page.html - 202 + 201 @@ -3299,7 +3295,7 @@ jesteś zainteresowany niezależnością finansową apps/client/src/app/pages/landing/landing-page.html - 206 + 205 @@ -3307,7 +3303,7 @@ mówisz „nie” arkuszom kalkulacyjnym w roku apps/client/src/app/pages/landing/landing-page.html - 210 + 209 @@ -3315,7 +3311,7 @@ nadal czytasz tę listę apps/client/src/app/pages/landing/landing-page.html - 213 + 212 @@ -3323,7 +3319,7 @@ Dowiedz się więcej o Ghostfolio apps/client/src/app/pages/landing/landing-page.html - 218 + 217 @@ -3331,7 +3327,7 @@ Co mówią nasi użytkownicy apps/client/src/app/pages/landing/landing-page.html - 227 + 226 @@ -3339,7 +3335,7 @@ Użytkownicy z całego świata korzystają z Ghostfolio Premium apps/client/src/app/pages/landing/landing-page.html - 266 + 265 @@ -3347,7 +3343,7 @@ Jak działa Ghostfolio ? apps/client/src/app/pages/landing/landing-page.html - 283 + 282 @@ -3355,7 +3351,7 @@ Rozpocznij w zaledwie 3 krokach apps/client/src/app/pages/landing/landing-page.html - 285 + 284 @@ -3371,7 +3367,7 @@ Zarejestruj się anonimowo* apps/client/src/app/pages/landing/landing-page.html - 291 + 290 @@ -3379,7 +3375,7 @@ * nie jest wymagany ani adres e-mail, ani karta kredytowa apps/client/src/app/pages/landing/landing-page.html - 293 + 292 @@ -3387,7 +3383,7 @@ Dodaj dowolne z Twoich historycznych transakcji apps/client/src/app/pages/landing/landing-page.html - 305 + 304 @@ -3395,7 +3391,7 @@ Zyskaj cenny wgląd w strukturę swojego portfolio apps/client/src/app/pages/landing/landing-page.html - 317 + 316 @@ -3403,7 +3399,7 @@ Czy jesteś gotów? apps/client/src/app/pages/landing/landing-page.html - 331 + 330 @@ -4114,14 +4110,6 @@ 7 - - Holdings - Inwestycje - - libs/ui/src/lib/assistant/assistant.html - 110 - - Pricing Cennik @@ -4343,7 +4331,7 @@ Jest bezpłatny. apps/client/src/app/pages/pricing/pricing-page.html - 380 + 379 @@ -4390,20 +4378,12 @@ 281 - - Continue with Internet Identity - Kontynuuj z tożsamością internetową - - apps/client/src/app/pages/register/register-page.html - 42 - - Continue with Google Zaloguj z Google apps/client/src/app/pages/register/register-page.html - 53 + 39 @@ -4870,6 +4850,10 @@ apps/client/src/app/components/admin-settings/admin-settings.component.html 106 + + libs/ui/src/lib/assistant/assistant.html + 140 + , @@ -5208,7 +5192,7 @@ libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 412 + 413 @@ -5576,11 +5560,11 @@ libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 414 + 415 libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 427 + 428 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -5764,7 +5748,7 @@ Close Holding apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 441 + 442 @@ -5883,12 +5867,12 @@ 8 - + Reset Filters Resetuj Filtry libs/ui/src/lib/assistant/assistant.html - 205 + 204 @@ -5923,12 +5907,12 @@ 411 - + Apply Filters Zastosuj Filtry libs/ui/src/lib/assistant/assistant.html - 219 + 217 @@ -6153,7 +6137,7 @@ Dołącz teraz lub sprawdź przykładowe konto apps/client/src/app/pages/landing/landing-page.html - 334 + 333 @@ -6329,7 +6313,7 @@ Otwarty Kod Źródłowy apps/client/src/app/pages/landing/landing-page.html - 160 + 159 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts @@ -6719,10 +6703,6 @@ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html 51 - - libs/ui/src/lib/assistant/assistant.html - 84 - Copy link to clipboard @@ -7395,7 +7375,7 @@ libs/ui/src/lib/treemap-chart/treemap-chart.component.ts - 367 + 368 @@ -7415,11 +7395,11 @@ libs/ui/src/lib/treemap-chart/treemap-chart.component.ts - 367 + 368 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts - 380 + 381 @@ -7515,7 +7495,7 @@ Token bezpieczeństwa apps/client/src/app/components/admin-users/admin-users.component.ts - 228 + 232 apps/client/src/app/components/user-account-access/user-account-access.component.ts @@ -7527,7 +7507,7 @@ Czy napewno chcesz wygenerować nowy token bezpieczeństwa dla tego użytkownika? apps/client/src/app/components/admin-users/admin-users.component.ts - 233 + 237 @@ -7804,15 +7784,7 @@ 158 - - Name - Nazwa - - libs/ui/src/lib/benchmark/benchmark.component.html - 12 - - - + Quick Links Szybkie linki @@ -7820,24 +7792,16 @@ 58 - - Asset Profiles - Profile zasobów - - libs/ui/src/lib/assistant/assistant.html - 140 - - Live Demo Demonstracja na żywo apps/client/src/app/pages/landing/landing-page.html - 49 + 48 apps/client/src/app/pages/landing/landing-page.html - 351 + 349 libs/common/src/lib/routes/routes.ts @@ -8192,7 +8156,7 @@ Zarządzaj profilem aktywów apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 465 + 466 diff --git a/apps/client/src/locales/messages.pt.xlf b/apps/client/src/locales/messages.pt.xlf index 9280de1dd..3867d6fbe 100644 --- a/apps/client/src/locales/messages.pt.xlf +++ b/apps/client/src/locales/messages.pt.xlf @@ -152,6 +152,10 @@ libs/ui/src/lib/activities-table/activities-table.component.html 135 + + libs/ui/src/lib/benchmark/benchmark.component.html + 12 + libs/ui/src/lib/holdings-table/holdings-table.component.html 28 @@ -432,6 +436,10 @@ apps/client/src/app/components/admin-settings/admin-settings.component.html 106 + + libs/ui/src/lib/assistant/assistant.html + 140 + Historical Market Data @@ -710,7 +718,7 @@ Deseja realmente excluir este utilizador? apps/client/src/app/components/admin-users/admin-users.component.ts - 207 + 211 @@ -805,14 +813,6 @@ 5 - - Get started - Começar - - apps/client/src/app/components/header/header.component.html - 432 - - Sign in Iniciar sessão @@ -826,7 +826,7 @@ apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 71 + 60 libs/common/src/lib/routes/routes.ts @@ -970,11 +970,11 @@ apps/client/src/app/pages/landing/landing-page.html - 48 + 47 apps/client/src/app/pages/landing/landing-page.html - 350 + 348 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html @@ -997,20 +997,12 @@ 30 - - Sign in with Internet Identity - Iniciar sessão com Internet Identity - - apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 38 - - Sign in with Google Iniciar sessão com Google apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 48 + 37 @@ -1018,7 +1010,7 @@ Manter sessão iniciada apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 59 + 48 @@ -1222,7 +1214,7 @@ Dados do Relatório com Problema apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 450 + 451 @@ -1672,6 +1664,10 @@ libs/common/src/lib/routes/routes.ts 69 + + libs/ui/src/lib/assistant/assistant.html + 84 + Update account @@ -2360,10 +2356,6 @@ libs/common/src/lib/routes/routes.ts 167 - - - Holdings - Posições libs/ui/src/lib/assistant/assistant.html 110 @@ -2436,14 +2428,34 @@ Get Started Começar + + apps/client/src/app/components/header/header.component.html + 433 + apps/client/src/app/pages/features/features-page.html 320 + + apps/client/src/app/pages/landing/landing-page.html + 41 + + + apps/client/src/app/pages/landing/landing-page.html + 344 + + + apps/client/src/app/pages/pricing/pricing-page.html + 377 + apps/client/src/app/pages/public/public-page.html 242 + + apps/client/src/app/pages/resources/personal-finance-tools/product-page.html + 334 + Registration @@ -2477,20 +2489,12 @@ 101 - - Continue with Internet Identity - Continuar com Internet Identity - - apps/client/src/app/pages/register/register-page.html - 42 - - Continue with Google Continuar com Google apps/client/src/app/pages/register/register-page.html - 53 + 39 @@ -2766,7 +2770,7 @@ libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 412 + 413 @@ -2994,11 +2998,11 @@ libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 414 + 415 libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 427 + 428 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -3521,32 +3525,12 @@ 303 - - Get Started - Começar - - apps/client/src/app/pages/landing/landing-page.html - 42 - - - apps/client/src/app/pages/landing/landing-page.html - 346 - - - apps/client/src/app/pages/pricing/pricing-page.html - 378 - - - apps/client/src/app/pages/resources/personal-finance-tools/product-page.html - 334 - - It’s free. É gratuito. apps/client/src/app/pages/pricing/pricing-page.html - 380 + 379 @@ -4574,7 +4558,7 @@ Estrelas no GitHub apps/client/src/app/pages/landing/landing-page.html - 88 + 87 apps/client/src/app/pages/open/open-page.html @@ -4586,7 +4570,7 @@ Não puxa Docker Hub apps/client/src/app/pages/landing/landing-page.html - 106 + 105 apps/client/src/app/pages/open/open-page.html @@ -4706,7 +4690,7 @@ Usuários ativos mensais apps/client/src/app/pages/landing/landing-page.html - 70 + 69 @@ -4714,7 +4698,7 @@ Como visto em apps/client/src/app/pages/landing/landing-page.html - 115 + 114 @@ -4722,7 +4706,7 @@ Proteja o seu assets. Refine your personal investment strategy. apps/client/src/app/pages/landing/landing-page.html - 125 + 124 @@ -4730,7 +4714,7 @@ O Ghostfolio permite que pessoas ocupadas acompanhem ações, ETFs ou criptomoedas sem serem rastreadas. apps/client/src/app/pages/landing/landing-page.html - 129 + 128 @@ -4738,7 +4722,7 @@ 360° visualizar apps/client/src/app/pages/landing/landing-page.html - 139 + 138 @@ -4746,7 +4730,7 @@ Web3 Preparar apps/client/src/app/pages/landing/landing-page.html - 150 + 149 @@ -4754,7 +4738,7 @@ Use o Ghostfolio anonimamente e possua seus dados financeiros. apps/client/src/app/pages/landing/landing-page.html - 153 + 152 @@ -4762,7 +4746,7 @@ Beneficie-se de melhorias contínuas através de uma comunidade forte. apps/client/src/app/pages/landing/landing-page.html - 163 + 162 @@ -4778,7 +4762,7 @@ Por que Ghostfolio? apps/client/src/app/pages/landing/landing-page.html - 171 + 170 @@ -4786,7 +4770,7 @@ Ghostfolio é para você se você for... apps/client/src/app/pages/landing/landing-page.html - 173 + 172 @@ -4794,7 +4778,7 @@ negociar ações, ETFs ou criptomoedas em múltiplas plataformas apps/client/src/app/pages/landing/landing-page.html - 179 + 178 @@ -4802,7 +4786,7 @@ buscando uma compra & estratégia de retenção apps/client/src/app/pages/landing/landing-page.html - 185 + 184 @@ -4810,7 +4794,7 @@ interessado em obter insights sobre a composição do seu portfólio apps/client/src/app/pages/landing/landing-page.html - 190 + 189 @@ -4818,7 +4802,7 @@ valorizando a privacidade e a propriedade dos dados apps/client/src/app/pages/landing/landing-page.html - 195 + 194 @@ -4826,7 +4810,7 @@ no minimalismo apps/client/src/app/pages/landing/landing-page.html - 198 + 197 @@ -4834,7 +4818,7 @@ preocupando-se em diversificar seus recursos financeiros apps/client/src/app/pages/landing/landing-page.html - 202 + 201 @@ -4842,7 +4826,7 @@ interessado em independência financeira apps/client/src/app/pages/landing/landing-page.html - 206 + 205 @@ -4850,7 +4834,7 @@ dizendo não às planilhas em apps/client/src/app/pages/landing/landing-page.html - 210 + 209 @@ -4858,7 +4842,7 @@ ainda lendo esta lista apps/client/src/app/pages/landing/landing-page.html - 213 + 212 @@ -4866,7 +4850,7 @@ Saiba mais sobre o Ghostfolio apps/client/src/app/pages/landing/landing-page.html - 218 + 217 @@ -4874,7 +4858,7 @@ Qual é o nosso users are saying apps/client/src/app/pages/landing/landing-page.html - 227 + 226 @@ -4882,7 +4866,7 @@ Membros de todo o mundo estão usando Ghostfolio Premium apps/client/src/app/pages/landing/landing-page.html - 266 + 265 @@ -4890,7 +4874,7 @@ Como é que Ghostfolio work? apps/client/src/app/pages/landing/landing-page.html - 283 + 282 @@ -4898,7 +4882,7 @@ Inscreva-se anonimamente* apps/client/src/app/pages/landing/landing-page.html - 291 + 290 @@ -4906,7 +4890,7 @@ * no e-mail address nor credit card required apps/client/src/app/pages/landing/landing-page.html - 293 + 292 @@ -4914,7 +4898,7 @@ Adicione qualquer uma de suas transações históricas apps/client/src/app/pages/landing/landing-page.html - 305 + 304 @@ -4922,7 +4906,7 @@ Obtenha insights valiosos sobre a composição do seu portfólio apps/client/src/app/pages/landing/landing-page.html - 317 + 316 @@ -4930,7 +4914,7 @@ São you preparar? apps/client/src/app/pages/landing/landing-page.html - 331 + 330 @@ -4938,7 +4922,7 @@ Tenha uma visão completa das suas finanças pessoais em diversas plataformas. apps/client/src/app/pages/landing/landing-page.html - 142 + 141 @@ -4946,7 +4930,7 @@ Comece em apenas 3 passos apps/client/src/app/pages/landing/landing-page.html - 285 + 284 @@ -5764,7 +5748,7 @@ Close Holding apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 441 + 442 @@ -5883,12 +5867,12 @@ 8 - + Reset Filters Redefinir filtros libs/ui/src/lib/assistant/assistant.html - 205 + 204 @@ -5923,12 +5907,12 @@ 411 - + Apply Filters Aplicar filtros libs/ui/src/lib/assistant/assistant.html - 219 + 217 @@ -6153,7 +6137,7 @@ Cadastre-se agora ou confira a conta de exemplo apps/client/src/app/pages/landing/landing-page.html - 334 + 333 @@ -6329,7 +6313,7 @@ Código aberto apps/client/src/app/pages/landing/landing-page.html - 160 + 159 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts @@ -6719,10 +6703,6 @@ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html 51 - - libs/ui/src/lib/assistant/assistant.html - 84 - Copy link to clipboard @@ -7395,7 +7375,7 @@ libs/ui/src/lib/treemap-chart/treemap-chart.component.ts - 367 + 368 @@ -7415,11 +7395,11 @@ libs/ui/src/lib/treemap-chart/treemap-chart.component.ts - 367 + 368 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts - 380 + 381 @@ -7515,7 +7495,7 @@ Security token apps/client/src/app/components/admin-users/admin-users.component.ts - 228 + 232 apps/client/src/app/components/user-account-access/user-account-access.component.ts @@ -7527,7 +7507,7 @@ Do you really want to generate a new security token for this user? apps/client/src/app/components/admin-users/admin-users.component.ts - 233 + 237 @@ -7804,15 +7784,7 @@ 158 - - Name - Nome - - libs/ui/src/lib/benchmark/benchmark.component.html - 12 - - - + Quick Links Links rápidos @@ -7820,24 +7792,16 @@ 58 - - Asset Profiles - Perfis de ativos - - libs/ui/src/lib/assistant/assistant.html - 140 - - Live Demo Live Demo apps/client/src/app/pages/landing/landing-page.html - 49 + 48 apps/client/src/app/pages/landing/landing-page.html - 351 + 349 libs/common/src/lib/routes/routes.ts @@ -8192,7 +8156,7 @@ Gerenciar perfil de ativos apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 465 + 466 diff --git a/apps/client/src/locales/messages.tr.xlf b/apps/client/src/locales/messages.tr.xlf index b867b8da8..b672a6f2c 100644 --- a/apps/client/src/locales/messages.tr.xlf +++ b/apps/client/src/locales/messages.tr.xlf @@ -349,6 +349,10 @@ libs/ui/src/lib/activities-table/activities-table.component.html 135 + + libs/ui/src/lib/benchmark/benchmark.component.html + 12 + libs/ui/src/lib/holdings-table/holdings-table.component.html 28 @@ -613,6 +617,10 @@ apps/client/src/app/components/admin-settings/admin-settings.component.html 106 + + libs/ui/src/lib/assistant/assistant.html + 140 + Historical Market Data @@ -1159,7 +1167,7 @@ Bu kullanıcıyı silmeyi gerçekten istiyor musunuz? apps/client/src/app/components/admin-users/admin-users.component.ts - 207 + 211 @@ -1278,14 +1286,6 @@ 5 - - Get started - Haydi Başlayalım - - apps/client/src/app/components/header/header.component.html - 432 - - Sign in Giriş @@ -1299,7 +1299,7 @@ apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 71 + 60 libs/common/src/lib/routes/routes.ts @@ -1535,11 +1535,11 @@ apps/client/src/app/pages/landing/landing-page.html - 48 + 47 apps/client/src/app/pages/landing/landing-page.html - 350 + 348 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html @@ -1562,20 +1562,12 @@ 30 - - Sign in with Internet Identity - İnternet Kimliği (Internet Identity) ile Oturum Aç - - apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 38 - - Sign in with Google Google ile Oturum Aç apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 48 + 37 @@ -1583,7 +1575,7 @@ Oturumu açık tut apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 59 + 48 @@ -1739,7 +1731,7 @@ Rapor Veri Sorunu apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 450 + 451 @@ -2157,6 +2149,10 @@ libs/common/src/lib/routes/routes.ts 69 + + libs/ui/src/lib/assistant/assistant.html + 84 + Update account @@ -2549,14 +2545,34 @@ Get Started Başla + + apps/client/src/app/components/header/header.component.html + 433 + apps/client/src/app/pages/features/features-page.html 320 + + apps/client/src/app/pages/landing/landing-page.html + 41 + + + apps/client/src/app/pages/landing/landing-page.html + 344 + + + apps/client/src/app/pages/pricing/pricing-page.html + 377 + apps/client/src/app/pages/public/public-page.html 242 + + apps/client/src/app/pages/resources/personal-finance-tools/product-page.html + 334 + Holdings @@ -2581,6 +2597,10 @@ libs/common/src/lib/routes/routes.ts 167 + + libs/ui/src/lib/assistant/assistant.html + 110 + Summary @@ -2662,32 +2682,12 @@ 11 - - Get Started - Başla - - apps/client/src/app/pages/landing/landing-page.html - 42 - - - apps/client/src/app/pages/landing/landing-page.html - 346 - - - apps/client/src/app/pages/pricing/pricing-page.html - 378 - - - apps/client/src/app/pages/resources/personal-finance-tools/product-page.html - 334 - - Monthly Active Users Aylık Aktif Kullanıcılar apps/client/src/app/pages/landing/landing-page.html - 70 + 69 @@ -2695,7 +2695,7 @@ GitHub’daki Beğeniler apps/client/src/app/pages/landing/landing-page.html - 88 + 87 apps/client/src/app/pages/open/open-page.html @@ -2707,7 +2707,7 @@ Docker Hub’ta Çekmeler apps/client/src/app/pages/landing/landing-page.html - 106 + 105 apps/client/src/app/pages/open/open-page.html @@ -2719,7 +2719,7 @@ Şurada görüldüğü gibi apps/client/src/app/pages/landing/landing-page.html - 115 + 114 @@ -2727,7 +2727,7 @@ varlıklarınızı koruyun. Kişisel yatırım stratejinizi geliştirin. apps/client/src/app/pages/landing/landing-page.html - 125 + 124 @@ -2735,7 +2735,7 @@ Ghostfolio, takip edilmeden hisse senetleri, ETF’ler veya kripto paraları izlemek isteyen yoğun insanlara güç verir. apps/client/src/app/pages/landing/landing-page.html - 129 + 128 @@ -2743,7 +2743,7 @@ 360° Görünüm apps/client/src/app/pages/landing/landing-page.html - 139 + 138 @@ -2751,7 +2751,7 @@ Kişisel finansınızın tam resmini birden fazla platformda edinin. apps/client/src/app/pages/landing/landing-page.html - 142 + 141 @@ -2759,7 +2759,7 @@ Web3 Hazır apps/client/src/app/pages/landing/landing-page.html - 150 + 149 @@ -2767,7 +2767,7 @@ Ghostfolio’yu anonim olarak kullanın ve finansal verilerinize sahip çıkın. apps/client/src/app/pages/landing/landing-page.html - 153 + 152 @@ -2775,7 +2775,7 @@ Güçlü bir topluluk aracılığıyla sürekli gelişmelerden faydalanın. apps/client/src/app/pages/landing/landing-page.html - 163 + 162 @@ -2791,7 +2791,7 @@ Neden Ghostfolio? apps/client/src/app/pages/landing/landing-page.html - 171 + 170 @@ -2799,7 +2799,7 @@ Ghostfolio tam size göre, apps/client/src/app/pages/landing/landing-page.html - 173 + 172 @@ -2807,7 +2807,7 @@ Birden fazla platformda hisse senedi, ETF veya kripto para ticareti yapıyorsanız, apps/client/src/app/pages/landing/landing-page.html - 179 + 178 @@ -2815,7 +2815,7 @@ al ve tut stratejisi izliyorsanız, apps/client/src/app/pages/landing/landing-page.html - 185 + 184 @@ -2823,7 +2823,7 @@ Portföy bileşimine dair içgörüleri edinmek istiyorsanız, apps/client/src/app/pages/landing/landing-page.html - 190 + 189 @@ -2831,7 +2831,7 @@ Gizliliğe ve verilerinize sahip çıkmayı önemsiyorsanız apps/client/src/app/pages/landing/landing-page.html - 195 + 194 @@ -2839,7 +2839,7 @@ minimalizme ilgi duyuyorsanız apps/client/src/app/pages/landing/landing-page.html - 198 + 197 @@ -2847,7 +2847,7 @@ finansal kaynaklarınızı çeşitlendirmeye önem veriyorsanız apps/client/src/app/pages/landing/landing-page.html - 202 + 201 @@ -2855,7 +2855,7 @@ finansal özgürlük peşindeyseniz apps/client/src/app/pages/landing/landing-page.html - 206 + 205 @@ -2863,7 +2863,7 @@ elektronik tablo uygulamalarına hayır diyorsanız apps/client/src/app/pages/landing/landing-page.html - 210 + 209 @@ -2871,7 +2871,7 @@ bu listeyi hala okuyorsanız apps/client/src/app/pages/landing/landing-page.html - 213 + 212 @@ -2879,7 +2879,7 @@ Ghostfolio hakkında daha fazla bilgi edinin apps/client/src/app/pages/landing/landing-page.html - 218 + 217 @@ -2887,7 +2887,7 @@ Kullanıcılarımızın görüşleri apps/client/src/app/pages/landing/landing-page.html - 227 + 226 @@ -2895,7 +2895,7 @@ Dünyanın dört bir yanındaki kullanıcılar Ghostfolio Premium kullanıyorlar. apps/client/src/app/pages/landing/landing-page.html - 266 + 265 @@ -2903,7 +2903,7 @@ NasılGhostfolio çalışır? apps/client/src/app/pages/landing/landing-page.html - 283 + 282 @@ -2911,7 +2911,7 @@ Sadece 3 adımda başlayın apps/client/src/app/pages/landing/landing-page.html - 285 + 284 @@ -2927,7 +2927,7 @@ Anonim olarak kaydolun* apps/client/src/app/pages/landing/landing-page.html - 291 + 290 @@ -2935,7 +2935,7 @@ * e-posta adresi veya kredi kartı gerekmez apps/client/src/app/pages/landing/landing-page.html - 293 + 292 @@ -2943,7 +2943,7 @@ Herhangi bir geçmiş işleminizi ekleyin apps/client/src/app/pages/landing/landing-page.html - 305 + 304 @@ -2951,7 +2951,7 @@ Portföy bileşiminizle ilgili değerli bilgiler edinin apps/client/src/app/pages/landing/landing-page.html - 317 + 316 @@ -2959,7 +2959,7 @@ Hazır mısınız? apps/client/src/app/pages/landing/landing-page.html - 331 + 330 @@ -3602,14 +3602,6 @@ 7 - - Holdings - Varlıklar - - libs/ui/src/lib/assistant/assistant.html - 110 - - Pricing Fiyatlandırma @@ -3831,7 +3823,7 @@ Ücretsiz. apps/client/src/app/pages/pricing/pricing-page.html - 380 + 379 @@ -3898,20 +3890,12 @@ 101 - - Continue with Internet Identity - İnternet Kimliği ile Devam Et - - apps/client/src/app/pages/register/register-page.html - 42 - - Continue with Google Google ile Devam Et apps/client/src/app/pages/register/register-page.html - 53 + 39 @@ -4904,7 +4888,7 @@ libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 412 + 413 @@ -5220,11 +5204,11 @@ libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 414 + 415 libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 427 + 428 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -5764,7 +5748,7 @@ Close Holding apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 441 + 442 @@ -5883,12 +5867,12 @@ 8 - + Reset Filters Filtreleri Sıfırla libs/ui/src/lib/assistant/assistant.html - 205 + 204 @@ -5923,12 +5907,12 @@ 411 - + Apply Filters Filtreleri Uygula libs/ui/src/lib/assistant/assistant.html - 219 + 217 @@ -6153,7 +6137,7 @@ Hemen katıl ya da örnek hesabı incele apps/client/src/app/pages/landing/landing-page.html - 334 + 333 @@ -6329,7 +6313,7 @@ Açık Kaynak apps/client/src/app/pages/landing/landing-page.html - 160 + 159 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts @@ -6719,10 +6703,6 @@ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html 51 - - libs/ui/src/lib/assistant/assistant.html - 84 - Copy link to clipboard @@ -7395,7 +7375,7 @@ libs/ui/src/lib/treemap-chart/treemap-chart.component.ts - 367 + 368 @@ -7415,11 +7395,11 @@ libs/ui/src/lib/treemap-chart/treemap-chart.component.ts - 367 + 368 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts - 380 + 381 @@ -7515,7 +7495,7 @@ Güvenlik belirteci apps/client/src/app/components/admin-users/admin-users.component.ts - 228 + 232 apps/client/src/app/components/user-account-access/user-account-access.component.ts @@ -7527,7 +7507,7 @@ Bu kullanıcı için yeni bir güvenlik belirteci oluşturmak istediğinize emin misiniz? apps/client/src/app/components/admin-users/admin-users.component.ts - 233 + 237 @@ -7804,15 +7784,7 @@ 158 - - Name - İsim - - libs/ui/src/lib/benchmark/benchmark.component.html - 12 - - - + Quick Links Hızlı Bağlantılar @@ -7820,24 +7792,16 @@ 58 - - Asset Profiles - Varlık Profilleri - - libs/ui/src/lib/assistant/assistant.html - 140 - - Live Demo Canlı Demo apps/client/src/app/pages/landing/landing-page.html - 49 + 48 apps/client/src/app/pages/landing/landing-page.html - 351 + 349 libs/common/src/lib/routes/routes.ts @@ -8192,7 +8156,7 @@ Manage Asset Profile apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 465 + 466 diff --git a/apps/client/src/locales/messages.uk.xlf b/apps/client/src/locales/messages.uk.xlf index 0305608c2..5677f32ca 100644 --- a/apps/client/src/locales/messages.uk.xlf +++ b/apps/client/src/locales/messages.uk.xlf @@ -42,7 +42,7 @@ apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 71 + 60 libs/common/src/lib/routes/routes.ts @@ -349,10 +349,6 @@ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html 51 - - libs/ui/src/lib/assistant/assistant.html - 84 - Copy link to clipboard @@ -426,14 +422,6 @@ 86 - - Holdings - Активи - - libs/ui/src/lib/assistant/assistant.html - 110 - - Cash Balances Баланс готівки @@ -501,6 +489,10 @@ libs/ui/src/lib/activities-table/activities-table.component.html 135 + + libs/ui/src/lib/benchmark/benchmark.component.html + 12 + libs/ui/src/lib/holdings-table/holdings-table.component.html 28 @@ -1519,11 +1511,11 @@ apps/client/src/app/pages/landing/landing-page.html - 48 + 47 apps/client/src/app/pages/landing/landing-page.html - 350 + 348 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html @@ -1595,7 +1587,7 @@ Ви дійсно хочете видалити цього користувача? apps/client/src/app/components/admin-users/admin-users.component.ts - 207 + 211 @@ -1762,14 +1754,6 @@ 5 - - Get started - Почати - - apps/client/src/app/components/header/header.component.html - 432 - - Oops! Incorrect Security Token. Упс! Неправильний Секретний Токен. @@ -1887,7 +1871,7 @@ Повідомити про збій даних apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 450 + 451 @@ -2118,20 +2102,12 @@ 72 - - Sign in with Internet Identity - Увійти з Інтернет-Ідентичністю - - apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 38 - - Sign in with Google Увійти з Google apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 48 + 37 @@ -2139,7 +2115,7 @@ Залишатися в системі apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 59 + 48 @@ -3177,6 +3153,10 @@ libs/common/src/lib/routes/routes.ts 69 + + libs/ui/src/lib/assistant/assistant.html + 84 + Oops, cash balance transfer has failed. @@ -3630,14 +3610,34 @@ Get Started Почати + + apps/client/src/app/components/header/header.component.html + 433 + apps/client/src/app/pages/features/features-page.html 320 + + apps/client/src/app/pages/landing/landing-page.html + 41 + + + apps/client/src/app/pages/landing/landing-page.html + 344 + + + apps/client/src/app/pages/pricing/pricing-page.html + 377 + apps/client/src/app/pages/public/public-page.html 242 + + apps/client/src/app/pages/resources/personal-finance-tools/product-page.html + 334 + Holdings @@ -3662,6 +3662,10 @@ libs/common/src/lib/routes/routes.ts 167 + + libs/ui/src/lib/assistant/assistant.html + 110 + Summary @@ -3775,32 +3779,12 @@ 11 - - Get Started - Почати - - apps/client/src/app/pages/landing/landing-page.html - 42 - - - apps/client/src/app/pages/landing/landing-page.html - 346 - - - apps/client/src/app/pages/pricing/pricing-page.html - 378 - - - apps/client/src/app/pages/resources/personal-finance-tools/product-page.html - 334 - - Monthly Active Users Щомісячні активні користувачі apps/client/src/app/pages/landing/landing-page.html - 70 + 69 @@ -3808,7 +3792,7 @@ Зірки на GitHub apps/client/src/app/pages/landing/landing-page.html - 88 + 87 apps/client/src/app/pages/open/open-page.html @@ -3820,7 +3804,7 @@ Завантаження на Docker Hub apps/client/src/app/pages/landing/landing-page.html - 106 + 105 apps/client/src/app/pages/open/open-page.html @@ -3832,7 +3816,7 @@ Як видно в apps/client/src/app/pages/landing/landing-page.html - 115 + 114 @@ -3840,7 +3824,7 @@ Захищайте свої активи. Вдосконалюйте власну інвестиційну стратегію. apps/client/src/app/pages/landing/landing-page.html - 125 + 124 @@ -3848,7 +3832,7 @@ Ghostfolio допомагає зайнятим людям відстежувати акції, ETF або криптовалюти без ризику бути відстеженими. apps/client/src/app/pages/landing/landing-page.html - 129 + 128 @@ -3856,7 +3840,7 @@ 360° огляд apps/client/src/app/pages/landing/landing-page.html - 139 + 138 @@ -3864,7 +3848,7 @@ Отримайте повну картину ваших особистих фінансів на різних платформах. apps/client/src/app/pages/landing/landing-page.html - 142 + 141 @@ -3872,7 +3856,7 @@ Готовий до Web3 apps/client/src/app/pages/landing/landing-page.html - 150 + 149 @@ -3880,7 +3864,7 @@ Використовуйте Ghostfolio анонімно та володійте своїми фінансовими даними. apps/client/src/app/pages/landing/landing-page.html - 153 + 152 @@ -3888,7 +3872,7 @@ Отримуйте користь від постійних покращень завдяки сильній спільноті. apps/client/src/app/pages/landing/landing-page.html - 163 + 162 @@ -3904,7 +3888,7 @@ Чому Ghostfolio? apps/client/src/app/pages/landing/landing-page.html - 171 + 170 @@ -3912,7 +3896,7 @@ Ghostfolio для вас, якщо ви... apps/client/src/app/pages/landing/landing-page.html - 173 + 172 @@ -3920,7 +3904,7 @@ торгуєте акціями, ETF або криптовалютами на різних платформах apps/client/src/app/pages/landing/landing-page.html - 179 + 178 @@ -3928,7 +3912,7 @@ дотримуєтеся стратегії купівлі та утримання apps/client/src/app/pages/landing/landing-page.html - 185 + 184 @@ -3936,7 +3920,7 @@ вас цікавлять інсайти вашого складу портфеля apps/client/src/app/pages/landing/landing-page.html - 190 + 189 @@ -3944,7 +3928,7 @@ цінуєте конфіденційність і володіння даними apps/client/src/app/pages/landing/landing-page.html - 195 + 194 @@ -3952,7 +3936,7 @@ займаєтесь мінімалізмом apps/client/src/app/pages/landing/landing-page.html - 198 + 197 @@ -3960,7 +3944,7 @@ піклуєтесь про диверсифікацію ваших фінансових ресурсів apps/client/src/app/pages/landing/landing-page.html - 202 + 201 @@ -3968,7 +3952,7 @@ цікавитесь фінансовою незалежністю apps/client/src/app/pages/landing/landing-page.html - 206 + 205 @@ -3976,7 +3960,7 @@ кажете ні таблицям у apps/client/src/app/pages/landing/landing-page.html - 210 + 209 @@ -3984,7 +3968,7 @@ все ще читаєте цей список apps/client/src/app/pages/landing/landing-page.html - 213 + 212 @@ -3992,7 +3976,7 @@ Дізнайтеся більше про Ghostfolio apps/client/src/app/pages/landing/landing-page.html - 218 + 217 @@ -4000,7 +3984,7 @@ Що говорять користувачі apps/client/src/app/pages/landing/landing-page.html - 227 + 226 @@ -4008,7 +3992,7 @@ Члени зі всього світу використовують Ghostfolio Premium apps/client/src/app/pages/landing/landing-page.html - 266 + 265 @@ -4016,7 +4000,7 @@ Як працює Ghostfolio? apps/client/src/app/pages/landing/landing-page.html - 283 + 282 @@ -4024,7 +4008,7 @@ Почніть всього за 3 кроки apps/client/src/app/pages/landing/landing-page.html - 285 + 284 @@ -4040,7 +4024,7 @@ Зареєструйтеся анонімно* apps/client/src/app/pages/landing/landing-page.html - 291 + 290 @@ -4048,7 +4032,7 @@ * не потрібні електронна адреса та кредитна картка apps/client/src/app/pages/landing/landing-page.html - 293 + 292 @@ -4056,7 +4040,7 @@ Додайте будь-які з ваших історичних транзакцій apps/client/src/app/pages/landing/landing-page.html - 305 + 304 @@ -4064,7 +4048,7 @@ Отримуйте цінні інсайти вашого складу портфеля apps/client/src/app/pages/landing/landing-page.html - 317 + 316 @@ -4072,7 +4056,7 @@ Ви готові? apps/client/src/app/pages/landing/landing-page.html - 331 + 330 @@ -4080,7 +4064,7 @@ Приєднуйтесь зараз або перегляньте демонстраційний рахунок apps/client/src/app/pages/landing/landing-page.html - 334 + 333 @@ -4792,7 +4776,7 @@ Close Holding apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 441 + 442 @@ -5160,7 +5144,7 @@ Це безкоштовно. apps/client/src/app/pages/pricing/pricing-page.html - 380 + 379 @@ -5231,20 +5215,12 @@ 281 - - Continue with Internet Identity - Продовжити з Інтернет-Ідентичністю - - apps/client/src/app/pages/register/register-page.html - 42 - - Continue with Google Продовжити з Google apps/client/src/app/pages/register/register-page.html - 53 + 39 @@ -5503,7 +5479,7 @@ Відкритий код apps/client/src/app/pages/landing/landing-page.html - 160 + 159 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts @@ -6181,6 +6157,10 @@ apps/client/src/app/components/admin-settings/admin-settings.component.html 106 + + libs/ui/src/lib/assistant/assistant.html + 140 + Date Range @@ -6190,20 +6170,20 @@ 170 - + Reset Filters Скинути фільтри libs/ui/src/lib/assistant/assistant.html - 205 + 204 - + Apply Filters Застосувати фільтри libs/ui/src/lib/assistant/assistant.html - 219 + 217 @@ -6683,7 +6663,7 @@ libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 412 + 413 @@ -7263,11 +7243,11 @@ libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 414 + 415 libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 427 + 428 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -7395,7 +7375,7 @@ libs/ui/src/lib/treemap-chart/treemap-chart.component.ts - 367 + 368 @@ -7415,11 +7395,11 @@ libs/ui/src/lib/treemap-chart/treemap-chart.component.ts - 367 + 368 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts - 380 + 381 @@ -7515,7 +7495,7 @@ Security token apps/client/src/app/components/admin-users/admin-users.component.ts - 228 + 232 apps/client/src/app/components/user-account-access/user-account-access.component.ts @@ -7527,7 +7507,7 @@ Do you really want to generate a new security token for this user? apps/client/src/app/components/admin-users/admin-users.component.ts - 233 + 237 @@ -7804,15 +7784,7 @@ 158 - - Name - Name - - libs/ui/src/lib/benchmark/benchmark.component.html - 12 - - - + Quick Links Quick Links @@ -7820,24 +7792,16 @@ 58 - - Asset Profiles - Asset Profiles - - libs/ui/src/lib/assistant/assistant.html - 140 - - Live Demo Live Demo apps/client/src/app/pages/landing/landing-page.html - 49 + 48 apps/client/src/app/pages/landing/landing-page.html - 351 + 349 libs/common/src/lib/routes/routes.ts @@ -8192,7 +8156,7 @@ Manage Asset Profile apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 465 + 466 diff --git a/apps/client/src/locales/messages.xlf b/apps/client/src/locales/messages.xlf index 34502dbc9..d6f615dc8 100644 --- a/apps/client/src/locales/messages.xlf +++ b/apps/client/src/locales/messages.xlf @@ -372,6 +372,10 @@ libs/ui/src/lib/activities-table/activities-table.component.html 135 + + libs/ui/src/lib/benchmark/benchmark.component.html + 12 + libs/ui/src/lib/holdings-table/holdings-table.component.html 28 @@ -1221,7 +1225,7 @@ Do you really want to delete this user? apps/client/src/app/components/admin-users/admin-users.component.ts - 207 + 211 @@ -1336,13 +1340,6 @@ 5 - - Get started - - apps/client/src/app/components/header/header.component.html - 432 - - Sign in @@ -1355,7 +1352,7 @@ apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 71 + 60 libs/common/src/lib/routes/routes.ts @@ -1570,11 +1567,11 @@ apps/client/src/app/pages/landing/landing-page.html - 48 + 47 apps/client/src/app/pages/landing/landing-page.html - 350 + 348 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html @@ -1597,25 +1594,18 @@ 30 - - Sign in with Internet Identity - - apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 38 - - Sign in with Google apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 48 + 37 Stay signed in apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 59 + 48 @@ -1754,7 +1744,7 @@ Report Data Glitch apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 450 + 451 @@ -2370,6 +2360,10 @@ libs/common/src/lib/routes/routes.ts 69 + + libs/ui/src/lib/assistant/assistant.html + 84 + Oops, cash balance transfer has failed. @@ -2751,14 +2745,34 @@ Get Started + + apps/client/src/app/components/header/header.component.html + 433 + apps/client/src/app/pages/features/features-page.html 320 + + apps/client/src/app/pages/landing/landing-page.html + 41 + + + apps/client/src/app/pages/landing/landing-page.html + 344 + + + apps/client/src/app/pages/pricing/pricing-page.html + 377 + apps/client/src/app/pages/public/public-page.html 242 + + apps/client/src/app/pages/resources/personal-finance-tools/product-page.html + 334 + Holdings @@ -2782,6 +2796,10 @@ libs/common/src/lib/routes/routes.ts 167 + + libs/ui/src/lib/assistant/assistant.html + 110 + Summary @@ -2879,37 +2897,18 @@ 11 - - Get Started - - apps/client/src/app/pages/landing/landing-page.html - 42 - - - apps/client/src/app/pages/landing/landing-page.html - 346 - - - apps/client/src/app/pages/pricing/pricing-page.html - 378 - - - apps/client/src/app/pages/resources/personal-finance-tools/product-page.html - 334 - - Monthly Active Users apps/client/src/app/pages/landing/landing-page.html - 70 + 69 Stars on GitHub apps/client/src/app/pages/landing/landing-page.html - 88 + 87 apps/client/src/app/pages/open/open-page.html @@ -2920,7 +2919,7 @@ Pulls on Docker Hub apps/client/src/app/pages/landing/landing-page.html - 106 + 105 apps/client/src/app/pages/open/open-page.html @@ -2931,56 +2930,56 @@ As seen in apps/client/src/app/pages/landing/landing-page.html - 115 + 114 Protect your assets. Refine your personal investment strategy. apps/client/src/app/pages/landing/landing-page.html - 125 + 124 Ghostfolio empowers busy people to keep track of stocks, ETFs or cryptocurrencies without being tracked. apps/client/src/app/pages/landing/landing-page.html - 129 + 128 360° View apps/client/src/app/pages/landing/landing-page.html - 139 + 138 Get the full picture of your personal finances across multiple platforms. apps/client/src/app/pages/landing/landing-page.html - 142 + 141 Web3 Ready apps/client/src/app/pages/landing/landing-page.html - 150 + 149 Use Ghostfolio anonymously and own your financial data. apps/client/src/app/pages/landing/landing-page.html - 153 + 152 Benefit from continuous improvements through a strong community. apps/client/src/app/pages/landing/landing-page.html - 163 + 162 @@ -2994,112 +2993,112 @@ Why Ghostfolio? apps/client/src/app/pages/landing/landing-page.html - 171 + 170 Ghostfolio is for you if you are... apps/client/src/app/pages/landing/landing-page.html - 173 + 172 trading stocks, ETFs or cryptocurrencies on multiple platforms apps/client/src/app/pages/landing/landing-page.html - 179 + 178 pursuing a buy & hold strategy apps/client/src/app/pages/landing/landing-page.html - 185 + 184 interested in getting insights of your portfolio composition apps/client/src/app/pages/landing/landing-page.html - 190 + 189 valuing privacy and data ownership apps/client/src/app/pages/landing/landing-page.html - 195 + 194 into minimalism apps/client/src/app/pages/landing/landing-page.html - 198 + 197 caring about diversifying your financial resources apps/client/src/app/pages/landing/landing-page.html - 202 + 201 interested in financial independence apps/client/src/app/pages/landing/landing-page.html - 206 + 205 saying no to spreadsheets in apps/client/src/app/pages/landing/landing-page.html - 210 + 209 still reading this list apps/client/src/app/pages/landing/landing-page.html - 213 + 212 Learn more about Ghostfolio apps/client/src/app/pages/landing/landing-page.html - 218 + 217 What our users are saying apps/client/src/app/pages/landing/landing-page.html - 227 + 226 Members from around the globe are using Ghostfolio Premium apps/client/src/app/pages/landing/landing-page.html - 266 + 265 How does Ghostfolio work? apps/client/src/app/pages/landing/landing-page.html - 283 + 282 Get started in only 3 steps apps/client/src/app/pages/landing/landing-page.html - 285 + 284 @@ -3113,35 +3112,35 @@ Sign up anonymously* apps/client/src/app/pages/landing/landing-page.html - 291 + 290 * no e-mail address nor credit card required apps/client/src/app/pages/landing/landing-page.html - 293 + 292 Add any of your historical transactions apps/client/src/app/pages/landing/landing-page.html - 305 + 304 Get valuable insights of your portfolio composition apps/client/src/app/pages/landing/landing-page.html - 317 + 316 Are you ready? apps/client/src/app/pages/landing/landing-page.html - 331 + 330 @@ -3780,13 +3779,6 @@ 7 - - Holdings - - libs/ui/src/lib/assistant/assistant.html - 110 - - Pricing @@ -3989,7 +3981,7 @@ It’s free. apps/client/src/app/pages/pricing/pricing-page.html - 380 + 379 @@ -4031,18 +4023,11 @@ 281 - - Continue with Internet Identity - - apps/client/src/app/pages/register/register-page.html - 42 - - Continue with Google apps/client/src/app/pages/register/register-page.html - 53 + 39 @@ -4482,6 +4467,10 @@ apps/client/src/app/components/admin-settings/admin-settings.component.html 106 + + libs/ui/src/lib/assistant/assistant.html + 140 + 50-Day Trend @@ -4803,7 +4792,7 @@ libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 412 + 413 @@ -5133,11 +5122,11 @@ libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 414 + 415 libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 427 + 428 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -5247,7 +5236,7 @@ Close Holding apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 441 + 442 @@ -5369,11 +5358,11 @@ 42 - + Reset Filters libs/ui/src/lib/assistant/assistant.html - 205 + 204 @@ -5406,11 +5395,11 @@ 411 - + Apply Filters libs/ui/src/lib/assistant/assistant.html - 219 + 217 @@ -5609,7 +5598,7 @@ Join now or check out the example account apps/client/src/app/pages/landing/landing-page.html - 334 + 333 @@ -5906,7 +5895,7 @@ Open Source apps/client/src/app/pages/landing/landing-page.html - 160 + 159 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts @@ -6171,10 +6160,6 @@ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html 51 - - libs/ui/src/lib/assistant/assistant.html - 84 - Copy link to clipboard @@ -6727,7 +6712,7 @@ libs/ui/src/lib/treemap-chart/treemap-chart.component.ts - 367 + 368 @@ -6746,11 +6731,11 @@ libs/ui/src/lib/treemap-chart/treemap-chart.component.ts - 367 + 368 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts - 380 + 381 @@ -6834,7 +6819,7 @@ Do you really want to generate a new security token for this user? apps/client/src/app/components/admin-users/admin-users.component.ts - 233 + 237 @@ -6848,7 +6833,7 @@ Security token apps/client/src/app/components/admin-users/admin-users.component.ts - 228 + 232 apps/client/src/app/components/user-account-access/user-account-access.component.ts @@ -7028,13 +7013,6 @@ 275 - - Name - - libs/ui/src/lib/benchmark/benchmark.component.html - 12 - - Set up @@ -7077,29 +7055,22 @@ 158 - + Quick Links libs/ui/src/lib/assistant/assistant.html 58 - - Asset Profiles - - libs/ui/src/lib/assistant/assistant.html - 140 - - Live Demo apps/client/src/app/pages/landing/landing-page.html - 49 + 48 apps/client/src/app/pages/landing/landing-page.html - 351 + 349 libs/common/src/lib/routes/routes.ts @@ -7414,7 +7385,7 @@ Manage Asset Profile apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 465 + 466 diff --git a/apps/client/src/locales/messages.zh.xlf b/apps/client/src/locales/messages.zh.xlf index 6d490fc0e..524e28259 100644 --- a/apps/client/src/locales/messages.zh.xlf +++ b/apps/client/src/locales/messages.zh.xlf @@ -398,6 +398,10 @@ libs/ui/src/lib/activities-table/activities-table.component.html 135 + + libs/ui/src/lib/benchmark/benchmark.component.html + 12 + libs/ui/src/lib/holdings-table/holdings-table.component.html 28 @@ -1304,7 +1308,7 @@ 您真的要删除该用户吗? apps/client/src/app/components/admin-users/admin-users.component.ts - 207 + 211 @@ -1431,14 +1435,6 @@ 5 - - Get started - 开始使用 - - apps/client/src/app/components/header/header.component.html - 432 - - Sign in 登入 @@ -1452,7 +1448,7 @@ apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 71 + 60 libs/common/src/lib/routes/routes.ts @@ -1688,11 +1684,11 @@ apps/client/src/app/pages/landing/landing-page.html - 48 + 47 apps/client/src/app/pages/landing/landing-page.html - 350 + 348 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html @@ -1715,20 +1711,12 @@ 30 - - Sign in with Internet Identity - 使用互联网身份登录 - - apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 38 - - Sign in with Google 使用 Google 登录 apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 48 + 37 @@ -1736,7 +1724,7 @@ 保持登录 apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 59 + 48 @@ -1892,7 +1880,7 @@ 报告数据故障 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 450 + 451 @@ -2566,6 +2554,10 @@ libs/common/src/lib/routes/routes.ts 69 + + libs/ui/src/lib/assistant/assistant.html + 84 + Oops, cash balance transfer has failed. @@ -2978,14 +2970,34 @@ Get Started 立即开始 + + apps/client/src/app/components/header/header.component.html + 433 + apps/client/src/app/pages/features/features-page.html 320 + + apps/client/src/app/pages/landing/landing-page.html + 41 + + + apps/client/src/app/pages/landing/landing-page.html + 344 + + + apps/client/src/app/pages/pricing/pricing-page.html + 377 + apps/client/src/app/pages/public/public-page.html 242 + + apps/client/src/app/pages/resources/personal-finance-tools/product-page.html + 334 + Holdings @@ -3010,6 +3022,10 @@ libs/common/src/lib/routes/routes.ts 167 + + libs/ui/src/lib/assistant/assistant.html + 110 + Summary @@ -3115,32 +3131,12 @@ 11 - - Get Started - 开始使用 - - apps/client/src/app/pages/landing/landing-page.html - 42 - - - apps/client/src/app/pages/landing/landing-page.html - 346 - - - apps/client/src/app/pages/pricing/pricing-page.html - 378 - - - apps/client/src/app/pages/resources/personal-finance-tools/product-page.html - 334 - - Monthly Active Users 每月活跃用户数 apps/client/src/app/pages/landing/landing-page.html - 70 + 69 @@ -3148,7 +3144,7 @@ GitHub 上的星星 apps/client/src/app/pages/landing/landing-page.html - 88 + 87 apps/client/src/app/pages/open/open-page.html @@ -3160,7 +3156,7 @@ Docker Hub 拉取次数 apps/client/src/app/pages/landing/landing-page.html - 106 + 105 apps/client/src/app/pages/open/open-page.html @@ -3172,7 +3168,7 @@ 如图所示 apps/client/src/app/pages/landing/landing-page.html - 115 + 114 @@ -3180,7 +3176,7 @@ 保护你的资产。完善你的个人投资策略 apps/client/src/app/pages/landing/landing-page.html - 125 + 124 @@ -3188,7 +3184,7 @@ Ghostfolio 使忙碌的人们能够在不被追踪的情况下跟踪股票、ETF 或加密货币。 apps/client/src/app/pages/landing/landing-page.html - 129 + 128 @@ -3196,7 +3192,7 @@ 360° 视角 apps/client/src/app/pages/landing/landing-page.html - 139 + 138 @@ -3204,7 +3200,7 @@ 跨多个平台全面了解您的个人财务状况。 apps/client/src/app/pages/landing/landing-page.html - 142 + 141 @@ -3212,7 +3208,7 @@ Web3 就绪 apps/client/src/app/pages/landing/landing-page.html - 150 + 149 @@ -3220,7 +3216,7 @@ 匿名使用 Ghostfolio 并拥有您的财务数据。 apps/client/src/app/pages/landing/landing-page.html - 153 + 152 @@ -3228,7 +3224,7 @@ 通过强大的社区不断改进,从中受益。 apps/client/src/app/pages/landing/landing-page.html - 163 + 162 @@ -3244,7 +3240,7 @@ 为什么使用Ghostfolio apps/client/src/app/pages/landing/landing-page.html - 171 + 170 @@ -3252,7 +3248,7 @@ 如果您符合以下条件,那么 Ghostfolio 适合您... apps/client/src/app/pages/landing/landing-page.html - 173 + 172 @@ -3260,7 +3256,7 @@ 在多个平台上交易股票、ETF 或加密货币 apps/client/src/app/pages/landing/landing-page.html - 179 + 178 @@ -3268,7 +3264,7 @@ 采取买入并持有策略 apps/client/src/app/pages/landing/landing-page.html - 185 + 184 @@ -3276,7 +3272,7 @@ 有兴趣深入了解您的投资组合构成 apps/client/src/app/pages/landing/landing-page.html - 190 + 189 @@ -3284,7 +3280,7 @@ 重视隐私和数据所有权 apps/client/src/app/pages/landing/landing-page.html - 195 + 194 @@ -3292,7 +3288,7 @@ 进入极简主义 apps/client/src/app/pages/landing/landing-page.html - 198 + 197 @@ -3300,7 +3296,7 @@ 关心您的财务资源多元化 apps/client/src/app/pages/landing/landing-page.html - 202 + 201 @@ -3308,7 +3304,7 @@ 对财务独立感兴趣 apps/client/src/app/pages/landing/landing-page.html - 206 + 205 @@ -3316,7 +3312,7 @@ 年对电子表格说不 apps/client/src/app/pages/landing/landing-page.html - 210 + 209 @@ -3324,7 +3320,7 @@ 仍在阅读此列表 apps/client/src/app/pages/landing/landing-page.html - 213 + 212 @@ -3332,7 +3328,7 @@ 了解有关 Ghostfolio 的更多信息 apps/client/src/app/pages/landing/landing-page.html - 218 + 217 @@ -3340,7 +3336,7 @@ 听听我们的用户怎么说 apps/client/src/app/pages/landing/landing-page.html - 227 + 226 @@ -3348,7 +3344,7 @@ 来自世界各地的会员正在使用Ghostfolio 高级版 apps/client/src/app/pages/landing/landing-page.html - 266 + 265 @@ -3356,7 +3352,7 @@ Ghostfolio 如何工作? apps/client/src/app/pages/landing/landing-page.html - 283 + 282 @@ -3364,7 +3360,7 @@ 只需 3 步即可开始 apps/client/src/app/pages/landing/landing-page.html - 285 + 284 @@ -3380,7 +3376,7 @@ 匿名注册* apps/client/src/app/pages/landing/landing-page.html - 291 + 290 @@ -3388,7 +3384,7 @@ * 无需电子邮件地址或信用卡 apps/client/src/app/pages/landing/landing-page.html - 293 + 292 @@ -3396,7 +3392,7 @@ 添加您的任何历史交易 apps/client/src/app/pages/landing/landing-page.html - 305 + 304 @@ -3404,7 +3400,7 @@ 获取有关您的投资组合构成的宝贵见解 apps/client/src/app/pages/landing/landing-page.html - 317 + 316 @@ -3412,7 +3408,7 @@ 准备好了吗? apps/client/src/app/pages/landing/landing-page.html - 331 + 330 @@ -4123,14 +4119,6 @@ 7 - - Holdings - 持仓 - - libs/ui/src/lib/assistant/assistant.html - 110 - - Pricing 价格 @@ -4352,7 +4340,7 @@ 免费。 apps/client/src/app/pages/pricing/pricing-page.html - 380 + 379 @@ -4399,20 +4387,12 @@ 281 - - Continue with Internet Identity - 继续互联网身份 - - apps/client/src/app/pages/register/register-page.html - 42 - - Continue with Google 继续使用谷歌 apps/client/src/app/pages/register/register-page.html - 53 + 39 @@ -4899,6 +4879,10 @@ apps/client/src/app/components/admin-settings/admin-settings.component.html 106 + + libs/ui/src/lib/assistant/assistant.html + 140 + 50-Day Trend @@ -5253,7 +5237,7 @@ libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 412 + 413 @@ -5621,11 +5605,11 @@ libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 414 + 415 libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 427 + 428 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -5749,7 +5733,7 @@ Close Holding apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 441 + 442 @@ -5884,12 +5868,12 @@ 42 - + Reset Filters 重置过滤器 libs/ui/src/lib/assistant/assistant.html - 205 + 204 @@ -5924,12 +5908,12 @@ 411 - + Apply Filters 应用过滤器 libs/ui/src/lib/assistant/assistant.html - 219 + 217 @@ -6154,7 +6138,7 @@ 立即加入 或查看示例账户 apps/client/src/app/pages/landing/landing-page.html - 334 + 333 @@ -6330,7 +6314,7 @@ 开源 apps/client/src/app/pages/landing/landing-page.html - 160 + 159 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts @@ -6720,10 +6704,6 @@ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html 51 - - libs/ui/src/lib/assistant/assistant.html - 84 - Copy link to clipboard @@ -7396,7 +7376,7 @@ libs/ui/src/lib/treemap-chart/treemap-chart.component.ts - 367 + 368 @@ -7416,11 +7396,11 @@ libs/ui/src/lib/treemap-chart/treemap-chart.component.ts - 367 + 368 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts - 380 + 381 @@ -7516,7 +7496,7 @@ 安全令牌 apps/client/src/app/components/admin-users/admin-users.component.ts - 228 + 232 apps/client/src/app/components/user-account-access/user-account-access.component.ts @@ -7528,7 +7508,7 @@ 您确定要为此用户生成新的安全令牌吗? apps/client/src/app/components/admin-users/admin-users.component.ts - 233 + 237 @@ -7805,15 +7785,7 @@ 158 - - Name - 名称 - - libs/ui/src/lib/benchmark/benchmark.component.html - 12 - - - + Quick Links 快速链接 @@ -7821,24 +7793,16 @@ 58 - - Asset Profiles - 资产概况 - - libs/ui/src/lib/assistant/assistant.html - 140 - - Live Demo 现场演示 apps/client/src/app/pages/landing/landing-page.html - 49 + 48 apps/client/src/app/pages/landing/landing-page.html - 351 + 349 libs/common/src/lib/routes/routes.ts @@ -8193,7 +8157,7 @@ 管理资产概况 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 465 + 466 From a1920fedd5fd52ce1cff78366bef770701b178f2 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Wed, 5 Nov 2025 11:54:22 +0100 Subject: [PATCH 86/92] Feature/improve usability for benchmark and markets management in asset profile dialog (#5911) * Improve usability for benchmark and markets management * Update changelog --- CHANGELOG.md | 2 ++ .../asset-profile-dialog/asset-profile-dialog.html | 8 ++++++-- .../app/pages/faq/self-hosting/self-hosting-page.html | 9 ++++++--- 3 files changed, 14 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0ff76b0c2..bca1a8de9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed +- Improved the _Self-Hosting_ section content for the _Compare with..._ concept on the Frequently Asked Questions (FAQ) page +- Improved the _Self-Hosting_ section content for the _Markets_ concept on the Frequently Asked Questions (FAQ) page - Changed the build executor of the client from `@nx/angular:webpack-browser` to `@nx/angular:browser-esbuild` - Improved the language localization for German (`de`) diff --git a/apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html b/apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html index b2c063684..3d855e6e0 100644 --- a/apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html +++ b/apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -352,7 +352,6 @@
Benchmark + Include in +   + Benchmark + / + Markets +
diff --git a/apps/client/src/app/pages/faq/self-hosting/self-hosting-page.html b/apps/client/src/app/pages/faq/self-hosting/self-hosting-page.html index bc468fe96..f44759124 100644 --- a/apps/client/src/app/pages/faq/self-hosting/self-hosting-page.html +++ b/apps/client/src/app/pages/faq/self-hosting/self-hosting-page.html @@ -184,7 +184,9 @@
  • Open the Admin Control panel
  • Navigate to the Market Data section
  • Choose an asset profile
  • -
  • In the dialog, check the Benchmark box
  • +
  • + In the dialog, check the Include in Benchmark / Markets box +
  • @@ -212,12 +214,13 @@ How do I set up Markets? -

    The Markets list is derived from your Benchmarks.

    1. Open the Admin Control panel
    2. Navigate to the Market Data section
    3. Choose an asset profile
    4. -
    5. In the dialog, check the Benchmark box
    6. +
    7. + In the dialog, check the Include in Benchmark / Markets box +

    Please note: Data is cached, meaning changes may take a few minutes From 58d9235b8a195f0e05152f9c61c2d8a49f14e134 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 5 Nov 2025 17:25:41 +0100 Subject: [PATCH 87/92] Feature/update locales (#5916) * Update locales * Update translation --------- Co-authored-by: github-actions[bot] Co-authored-by: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> --- apps/client/src/locales/messages.ca.xlf | 50 +++++++++++++++---------- apps/client/src/locales/messages.de.xlf | 50 +++++++++++++++---------- apps/client/src/locales/messages.es.xlf | 50 +++++++++++++++---------- apps/client/src/locales/messages.fr.xlf | 50 +++++++++++++++---------- apps/client/src/locales/messages.it.xlf | 50 +++++++++++++++---------- apps/client/src/locales/messages.nl.xlf | 50 +++++++++++++++---------- apps/client/src/locales/messages.pl.xlf | 50 +++++++++++++++---------- apps/client/src/locales/messages.pt.xlf | 50 +++++++++++++++---------- apps/client/src/locales/messages.tr.xlf | 50 +++++++++++++++---------- apps/client/src/locales/messages.uk.xlf | 50 +++++++++++++++---------- apps/client/src/locales/messages.xlf | 49 ++++++++++++++---------- apps/client/src/locales/messages.zh.xlf | 50 +++++++++++++++---------- 12 files changed, 371 insertions(+), 228 deletions(-) diff --git a/apps/client/src/locales/messages.ca.xlf b/apps/client/src/locales/messages.ca.xlf index 361c4ec31..7513eedaf 100644 --- a/apps/client/src/locales/messages.ca.xlf +++ b/apps/client/src/locales/messages.ca.xlf @@ -687,7 +687,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 563 + 567 @@ -1071,7 +1071,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 511 + 515 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -1091,7 +1091,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 522 + 526 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -1103,7 +1103,7 @@ Mapatge de Símbols apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 375 + 379 @@ -1119,7 +1119,7 @@ Configuració del Proveïdor de Dades apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 400 + 404 @@ -1127,7 +1127,7 @@ Prova apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 500 + 504 @@ -1135,11 +1135,11 @@ Url apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 482 + 486 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 534 + 538 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -1155,7 +1155,7 @@ Notes apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 547 + 551 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -1303,7 +1303,7 @@ Recollida de Dades apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 593 + 597 apps/client/src/app/components/admin-overview/admin-overview.html @@ -1563,7 +1563,7 @@ Punt de Referència apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 369 + 371 apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts @@ -2498,6 +2498,14 @@ 280 + + Include in + Include in + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html + 369 + + Oops! There was an error setting up biometric authentication. Ups! Hi ha hagut un error en configurar l’autenticació biomètrica. @@ -2551,7 +2559,7 @@ Localització apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 437 + 441 apps/client/src/app/components/user-account-settings/user-account-settings.html @@ -3390,6 +3398,10 @@ Markets Mercats + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html + 373 + apps/client/src/app/components/footer/footer.component.html 11 @@ -6589,7 +6601,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 598 + 602 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6641,7 +6653,7 @@ Close apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 600 + 604 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -7183,7 +7195,7 @@ Save apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 609 + 613 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -7307,7 +7319,7 @@ Default Market Price apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 409 + 413 @@ -7315,7 +7327,7 @@ Mode apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 450 + 454 @@ -7323,7 +7335,7 @@ Selector apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 466 + 470 @@ -7331,7 +7343,7 @@ HTTP Request Headers apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 422 + 426 diff --git a/apps/client/src/locales/messages.de.xlf b/apps/client/src/locales/messages.de.xlf index 9a0ebd159..a3583df02 100644 --- a/apps/client/src/locales/messages.de.xlf +++ b/apps/client/src/locales/messages.de.xlf @@ -394,7 +394,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 563 + 567 @@ -962,7 +962,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 511 + 515 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -982,7 +982,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 522 + 526 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -1262,7 +1262,7 @@ Lokalität apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 437 + 441 apps/client/src/app/components/user-account-settings/user-account-settings.html @@ -1664,6 +1664,10 @@ Markets Märkte + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html + 373 + apps/client/src/app/components/footer/footer.component.html 11 @@ -1966,7 +1970,7 @@ Kommentar apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 547 + 551 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -2606,7 +2610,7 @@ Benchmark apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 369 + 371 apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts @@ -3038,7 +3042,7 @@ Symbol Zuordnung apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 375 + 379 @@ -3774,11 +3778,11 @@ Url apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 482 + 486 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 534 + 538 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -4142,7 +4146,7 @@ Scraper Konfiguration apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 400 + 404 @@ -5660,7 +5664,7 @@ Test apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 500 + 504 @@ -5944,7 +5948,7 @@ Finanzmarktdaten synchronisieren apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 593 + 597 apps/client/src/app/components/admin-overview/admin-overview.html @@ -6164,6 +6168,14 @@ 333 + + Include in + Berücksichtigen in + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html + 369 + + Oops! There was an error setting up biometric authentication. Ups! Beim Einrichten der biometrischen Authentifizierung ist ein Fehler aufgetreten. @@ -6613,7 +6625,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 598 + 602 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6665,7 +6677,7 @@ Schliessen apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 600 + 604 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -7207,7 +7219,7 @@ Speichern apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 609 + 613 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -7331,7 +7343,7 @@ Standardmarktpreis apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 409 + 413 @@ -7339,7 +7351,7 @@ Modus apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 450 + 454 @@ -7347,7 +7359,7 @@ Selektor apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 466 + 470 @@ -7355,7 +7367,7 @@ HTTP Request-Headers apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 422 + 426 diff --git a/apps/client/src/locales/messages.es.xlf b/apps/client/src/locales/messages.es.xlf index 07e4e855d..62f437994 100644 --- a/apps/client/src/locales/messages.es.xlf +++ b/apps/client/src/locales/messages.es.xlf @@ -395,7 +395,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 563 + 567 @@ -947,7 +947,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 511 + 515 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -967,7 +967,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 522 + 526 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -1247,7 +1247,7 @@ Ubicación apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 437 + 441 apps/client/src/app/components/user-account-settings/user-account-settings.html @@ -1649,6 +1649,10 @@ Markets Mercados + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html + 373 + apps/client/src/app/components/footer/footer.component.html 11 @@ -1951,7 +1955,7 @@ Nota apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 547 + 551 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -2583,7 +2587,7 @@ Benchmark apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 369 + 371 apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts @@ -3023,7 +3027,7 @@ Mapeo de símbolos apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 375 + 379 @@ -3751,11 +3755,11 @@ ¿La URL? apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 482 + 486 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 534 + 538 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -4119,7 +4123,7 @@ Configuración del scraper apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 400 + 404 @@ -5637,7 +5641,7 @@ Prueba apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 500 + 504 @@ -5921,7 +5925,7 @@ Recopilación de datos apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 593 + 597 apps/client/src/app/components/admin-overview/admin-overview.html @@ -6141,6 +6145,14 @@ 333 + + Include in + Include in + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html + 369 + + Oops! There was an error setting up biometric authentication. ¡Ups! Hubo un error al configurar la autenticación biométrica. @@ -6590,7 +6602,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 598 + 602 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6642,7 +6654,7 @@ Cerca apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 600 + 604 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -7184,7 +7196,7 @@ Ahorrar apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 609 + 613 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -7308,7 +7320,7 @@ Precio de mercado por defecto apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 409 + 413 @@ -7316,7 +7328,7 @@ Modo apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 450 + 454 @@ -7324,7 +7336,7 @@ Selector apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 466 + 470 @@ -7332,7 +7344,7 @@ Encabezados de solicitud HTTP apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 422 + 426 diff --git a/apps/client/src/locales/messages.fr.xlf b/apps/client/src/locales/messages.fr.xlf index f51609582..560859d05 100644 --- a/apps/client/src/locales/messages.fr.xlf +++ b/apps/client/src/locales/messages.fr.xlf @@ -450,7 +450,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 563 + 567 @@ -642,7 +642,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 511 + 515 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -662,7 +662,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 522 + 526 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -674,7 +674,7 @@ Équivalence de Symboles apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 375 + 379 @@ -682,7 +682,7 @@ Note apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 547 + 551 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -914,7 +914,7 @@ Référence apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 369 + 371 apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts @@ -1534,7 +1534,7 @@ Paramètres régionaux apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 437 + 441 apps/client/src/app/components/user-account-settings/user-account-settings.html @@ -1928,6 +1928,10 @@ Markets Marchés + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html + 373 + apps/client/src/app/components/footer/footer.component.html 11 @@ -3750,11 +3754,11 @@ Lien apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 482 + 486 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 534 + 538 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -4118,7 +4122,7 @@ Configuration du Scraper apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 400 + 404 @@ -5636,7 +5640,7 @@ Test apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 500 + 504 @@ -5920,7 +5924,7 @@ Collecter les données apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 593 + 597 apps/client/src/app/components/admin-overview/admin-overview.html @@ -6140,6 +6144,14 @@ 333 + + Include in + Include in + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html + 369 + + Oops! There was an error setting up biometric authentication. Oops! Une erreur s’est produite lors de la configuration de l’authentification biométrique. @@ -6589,7 +6601,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 598 + 602 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6641,7 +6653,7 @@ Fermer apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 600 + 604 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -7183,7 +7195,7 @@ Sauvegarder apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 609 + 613 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -7307,7 +7319,7 @@ Prix du marché par défaut apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 409 + 413 @@ -7315,7 +7327,7 @@ Mode apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 450 + 454 @@ -7323,7 +7335,7 @@ Selecteur apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 466 + 470 @@ -7331,7 +7343,7 @@ En-têtes de requête HTTP apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 422 + 426 diff --git a/apps/client/src/locales/messages.it.xlf b/apps/client/src/locales/messages.it.xlf index 5b4058606..076c02068 100644 --- a/apps/client/src/locales/messages.it.xlf +++ b/apps/client/src/locales/messages.it.xlf @@ -395,7 +395,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 563 + 567 @@ -947,7 +947,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 511 + 515 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -967,7 +967,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 522 + 526 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -1247,7 +1247,7 @@ Locale apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 437 + 441 apps/client/src/app/components/user-account-settings/user-account-settings.html @@ -1649,6 +1649,10 @@ Markets Mercati + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html + 373 + apps/client/src/app/components/footer/footer.component.html 11 @@ -1951,7 +1955,7 @@ Nota apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 547 + 551 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -2583,7 +2587,7 @@ Benchmark apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 369 + 371 apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts @@ -3023,7 +3027,7 @@ Mappatura dei simboli apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 375 + 379 @@ -3751,11 +3755,11 @@ Url apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 482 + 486 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 534 + 538 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -4119,7 +4123,7 @@ Configurazione dello scraper apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 400 + 404 @@ -5637,7 +5641,7 @@ Prova apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 500 + 504 @@ -5921,7 +5925,7 @@ Raccolta Dati apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 593 + 597 apps/client/src/app/components/admin-overview/admin-overview.html @@ -6141,6 +6145,14 @@ 333 + + Include in + Include in + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html + 369 + + Oops! There was an error setting up biometric authentication. Ops! C’è stato un errore impostando l’autenticazione biometrica. @@ -6590,7 +6602,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 598 + 602 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6642,7 +6654,7 @@ Chiudi apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 600 + 604 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -7184,7 +7196,7 @@ Salva apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 609 + 613 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -7308,7 +7320,7 @@ Prezzo di mercato predefinito apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 409 + 413 @@ -7316,7 +7328,7 @@ Modalità apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 450 + 454 @@ -7324,7 +7336,7 @@ Selettore apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 466 + 470 @@ -7332,7 +7344,7 @@ Intestazioni della richiesta HTTP apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 422 + 426 diff --git a/apps/client/src/locales/messages.nl.xlf b/apps/client/src/locales/messages.nl.xlf index 6a1f871a6..4a17736b4 100644 --- a/apps/client/src/locales/messages.nl.xlf +++ b/apps/client/src/locales/messages.nl.xlf @@ -394,7 +394,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 563 + 567 @@ -946,7 +946,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 511 + 515 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -966,7 +966,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 522 + 526 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -1246,7 +1246,7 @@ Locatie apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 437 + 441 apps/client/src/app/components/user-account-settings/user-account-settings.html @@ -1648,6 +1648,10 @@ Markets Markten + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html + 373 + apps/client/src/app/components/footer/footer.component.html 11 @@ -1950,7 +1954,7 @@ Opmerking apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 547 + 551 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -2582,7 +2586,7 @@ Benchmark apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 369 + 371 apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts @@ -3022,7 +3026,7 @@ Symbool toewijzen apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 375 + 379 @@ -3750,11 +3754,11 @@ Url apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 482 + 486 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 534 + 538 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -4118,7 +4122,7 @@ Scraper instellingen apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 400 + 404 @@ -5636,7 +5640,7 @@ Test apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 500 + 504 @@ -5920,7 +5924,7 @@ Data Verzamelen apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 593 + 597 apps/client/src/app/components/admin-overview/admin-overview.html @@ -6140,6 +6144,14 @@ 333 + + Include in + Include in + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html + 369 + + Oops! There was an error setting up biometric authentication. Oeps! Er is een fout opgetreden met het instellen van de biometrische authenticatie. @@ -6589,7 +6601,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 598 + 602 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6641,7 +6653,7 @@ Sluiten apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 600 + 604 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -7183,7 +7195,7 @@ Opslaan apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 609 + 613 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -7307,7 +7319,7 @@ Standaard Marktprijs apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 409 + 413 @@ -7315,7 +7327,7 @@ Modus apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 450 + 454 @@ -7323,7 +7335,7 @@ Kiezer apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 466 + 470 @@ -7331,7 +7343,7 @@ HTTP Verzoek Headers apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 422 + 426 diff --git a/apps/client/src/locales/messages.pl.xlf b/apps/client/src/locales/messages.pl.xlf index a52b15599..321cfbecd 100644 --- a/apps/client/src/locales/messages.pl.xlf +++ b/apps/client/src/locales/messages.pl.xlf @@ -591,7 +591,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 563 + 567 @@ -919,7 +919,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 511 + 515 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -939,7 +939,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 522 + 526 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -951,7 +951,7 @@ Mapowanie Symboli apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 375 + 379 @@ -967,7 +967,7 @@ Konfiguracja Scrapera apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 400 + 404 @@ -975,7 +975,7 @@ Notatka apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 547 + 551 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -1191,11 +1191,11 @@ Url apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 482 + 486 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 534 + 538 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -1391,7 +1391,7 @@ Poziom Odniesienia (Benchmark) apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 369 + 371 apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts @@ -2247,7 +2247,7 @@ Ustawienia Regionalne apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 437 + 441 apps/client/src/app/components/user-account-settings/user-account-settings.html @@ -3033,6 +3033,10 @@ Markets Rynki + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html + 373 + apps/client/src/app/components/footer/footer.component.html 11 @@ -5636,7 +5640,7 @@ Test apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 500 + 504 @@ -5920,7 +5924,7 @@ Gromadzenie Danych apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 593 + 597 apps/client/src/app/components/admin-overview/admin-overview.html @@ -6140,6 +6144,14 @@ 333 + + Include in + Include in + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html + 369 + + Oops! There was an error setting up biometric authentication. Ups! Wystąpił błąd podczas konfigurowania uwierzytelniania biometrycznego. @@ -6589,7 +6601,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 598 + 602 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6641,7 +6653,7 @@ Zamknij apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 600 + 604 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -7183,7 +7195,7 @@ Zapisz apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 609 + 613 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -7307,7 +7319,7 @@ Domyślna cena rynkowa apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 409 + 413 @@ -7315,7 +7327,7 @@ Tryb apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 450 + 454 @@ -7323,7 +7335,7 @@ Selektor apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 466 + 470 @@ -7331,7 +7343,7 @@ Nagłówki żądań HTTP apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 422 + 426 diff --git a/apps/client/src/locales/messages.pt.xlf b/apps/client/src/locales/messages.pt.xlf index 3867d6fbe..dc8804544 100644 --- a/apps/client/src/locales/messages.pt.xlf +++ b/apps/client/src/locales/messages.pt.xlf @@ -450,7 +450,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 563 + 567 @@ -786,7 +786,7 @@ Referência apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 369 + 371 apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts @@ -1166,7 +1166,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 511 + 515 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -1186,7 +1186,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 522 + 526 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -1530,7 +1530,7 @@ Localidade apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 437 + 441 apps/client/src/app/components/user-account-settings/user-account-settings.html @@ -1900,6 +1900,10 @@ Markets Mercados + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html + 373 + apps/client/src/app/components/footer/footer.component.html 11 @@ -2062,7 +2066,7 @@ Nota apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 547 + 551 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -3030,7 +3034,7 @@ Mapeamento de Símbolo apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 375 + 379 @@ -3750,11 +3754,11 @@ Url apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 482 + 486 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 534 + 538 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -4118,7 +4122,7 @@ Configuração do raspador apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 400 + 404 @@ -5636,7 +5640,7 @@ Teste apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 500 + 504 @@ -5920,7 +5924,7 @@ Coleta de dados apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 593 + 597 apps/client/src/app/components/admin-overview/admin-overview.html @@ -6140,6 +6144,14 @@ 333 + + Include in + Include in + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html + 369 + + Oops! There was an error setting up biometric authentication. Ops! Ocorreu um erro ao configurar a autenticação biométrica. @@ -6589,7 +6601,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 598 + 602 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6641,7 +6653,7 @@ Fechar apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 600 + 604 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -7183,7 +7195,7 @@ Guardar apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 609 + 613 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -7307,7 +7319,7 @@ Preço de mercado padrão apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 409 + 413 @@ -7315,7 +7327,7 @@ Mode apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 450 + 454 @@ -7323,7 +7335,7 @@ Selector apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 466 + 470 @@ -7331,7 +7343,7 @@ HTTP Request Headers apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 422 + 426 diff --git a/apps/client/src/locales/messages.tr.xlf b/apps/client/src/locales/messages.tr.xlf index b672a6f2c..235f670a3 100644 --- a/apps/client/src/locales/messages.tr.xlf +++ b/apps/client/src/locales/messages.tr.xlf @@ -631,7 +631,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 563 + 567 @@ -851,7 +851,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 511 + 515 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -871,7 +871,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 522 + 526 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -883,7 +883,7 @@ Sembol Eşleştirme apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 375 + 379 @@ -899,7 +899,7 @@ Veri Toplayıcı Yapılandırması apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 400 + 404 @@ -907,7 +907,7 @@ Not apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 547 + 551 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -1107,11 +1107,11 @@ Url apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 482 + 486 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 534 + 538 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -1259,7 +1259,7 @@ Karşılaştırma Ölçütü apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 369 + 371 apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts @@ -2617,6 +2617,10 @@ Markets Piyasalar + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html + 373 + apps/client/src/app/components/footer/footer.component.html 11 @@ -4380,7 +4384,7 @@ Yerel Ayarlar apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 437 + 441 apps/client/src/app/components/user-account-settings/user-account-settings.html @@ -5636,7 +5640,7 @@ Test apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 500 + 504 @@ -5920,7 +5924,7 @@ Veri Toplama apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 593 + 597 apps/client/src/app/components/admin-overview/admin-overview.html @@ -6140,6 +6144,14 @@ 333 + + Include in + Include in + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html + 369 + + Oops! There was an error setting up biometric authentication. Oops! Biyometrik kimlik doğrulama ayarlanırken bir hata oluştu. @@ -6589,7 +6601,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 598 + 602 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6641,7 +6653,7 @@ Kapat apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 600 + 604 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -7183,7 +7195,7 @@ Kaydet apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 609 + 613 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -7307,7 +7319,7 @@ Varsayılan Piyasa Fiyatı apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 409 + 413 @@ -7315,7 +7327,7 @@ Mod apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 450 + 454 @@ -7323,7 +7335,7 @@ Seçici apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 466 + 470 @@ -7331,7 +7343,7 @@ HTTP İstek Başlıkları apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 422 + 426 diff --git a/apps/client/src/locales/messages.uk.xlf b/apps/client/src/locales/messages.uk.xlf index 5677f32ca..c1f2c7bce 100644 --- a/apps/client/src/locales/messages.uk.xlf +++ b/apps/client/src/locales/messages.uk.xlf @@ -711,7 +711,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 563 + 567 @@ -1059,7 +1059,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 511 + 515 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -1079,7 +1079,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 522 + 526 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -1091,7 +1091,7 @@ Зіставлення символів apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 375 + 379 @@ -1107,7 +1107,7 @@ Конфігурація скребка apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 400 + 404 @@ -1115,7 +1115,7 @@ Тест apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 500 + 504 @@ -1123,11 +1123,11 @@ URL apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 482 + 486 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 534 + 538 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -1143,7 +1143,7 @@ Примітка apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 547 + 551 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -1299,7 +1299,7 @@ Збір даних apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 593 + 597 apps/client/src/app/components/admin-overview/admin-overview.html @@ -1683,7 +1683,7 @@ Порівняльний показник apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 369 + 371 apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts @@ -2239,7 +2239,7 @@ Зберегти apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 609 + 613 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -2798,6 +2798,14 @@ 280 + + Include in + Include in + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html + 369 + + Oops! There was an error setting up biometric authentication. Упс! Виникла помилка під час налаштування біометричної автентифікації. @@ -2851,7 +2859,7 @@ Локалізація apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 437 + 441 apps/client/src/app/components/user-account-settings/user-account-settings.html @@ -3682,6 +3690,10 @@ Markets Ринки + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html + 373 + apps/client/src/app/components/footer/footer.component.html 11 @@ -6467,7 +6479,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 598 + 602 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6527,7 +6539,7 @@ Закрити apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 600 + 604 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -7307,7 +7319,7 @@ Default Market Price apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 409 + 413 @@ -7315,7 +7327,7 @@ Mode apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 450 + 454 @@ -7323,7 +7335,7 @@ Selector apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 466 + 470 @@ -7331,7 +7343,7 @@ HTTP Request Headers apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 422 + 426 diff --git a/apps/client/src/locales/messages.xlf b/apps/client/src/locales/messages.xlf index d6f615dc8..3a6ce2f09 100644 --- a/apps/client/src/locales/messages.xlf +++ b/apps/client/src/locales/messages.xlf @@ -566,7 +566,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 563 + 567 @@ -885,7 +885,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 511 + 515 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -904,7 +904,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 522 + 526 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -915,7 +915,7 @@ Symbol Mapping apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 375 + 379 @@ -929,14 +929,14 @@ Scraper Configuration apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 400 + 404 Note apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 547 + 551 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -1128,11 +1128,11 @@ Url apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 482 + 486 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 534 + 538 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -1308,7 +1308,7 @@ Benchmark apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 369 + 371 apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts @@ -2087,7 +2087,7 @@ Locale apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 437 + 441 apps/client/src/app/components/user-account-settings/user-account-settings.html @@ -2814,6 +2814,10 @@ Markets + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html + 373 + apps/client/src/app/components/footer/footer.component.html 11 @@ -5158,7 +5162,7 @@ Test apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 500 + 504 @@ -5429,7 +5433,7 @@ Data Gathering apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 593 + 597 apps/client/src/app/components/admin-overview/admin-overview.html @@ -5601,6 +5605,13 @@ 333 + + Include in + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html + 369 + + Oops! There was an error setting up biometric authentication. @@ -5966,7 +5977,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 598 + 602 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6045,7 +6056,7 @@ Close apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 600 + 604 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6538,7 +6549,7 @@ Save apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 609 + 613 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6631,7 +6642,7 @@ Mode apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 450 + 454 @@ -6645,14 +6656,14 @@ Default Market Price apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 409 + 413 Selector apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 466 + 470 @@ -6673,7 +6684,7 @@ HTTP Request Headers apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 422 + 426 diff --git a/apps/client/src/locales/messages.zh.xlf b/apps/client/src/locales/messages.zh.xlf index 524e28259..1595ea726 100644 --- a/apps/client/src/locales/messages.zh.xlf +++ b/apps/client/src/locales/messages.zh.xlf @@ -600,7 +600,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 563 + 567 @@ -928,7 +928,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 511 + 515 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -948,7 +948,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 522 + 526 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -960,7 +960,7 @@ 代码映射 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 375 + 379 @@ -976,7 +976,7 @@ 刮削配置 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 400 + 404 @@ -984,7 +984,7 @@ 笔记 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 547 + 551 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -1200,11 +1200,11 @@ 网址 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 482 + 486 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 534 + 538 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -1400,7 +1400,7 @@ 基准 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 369 + 371 apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts @@ -2256,7 +2256,7 @@ 语言环境 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 437 + 441 apps/client/src/app/components/user-account-settings/user-account-settings.html @@ -3042,6 +3042,10 @@ Markets 市场 + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html + 373 + apps/client/src/app/components/footer/footer.component.html 11 @@ -5645,7 +5649,7 @@ 测试 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 500 + 504 @@ -5946,7 +5950,7 @@ 数据收集 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 593 + 597 apps/client/src/app/components/admin-overview/admin-overview.html @@ -6141,6 +6145,14 @@ 333 + + Include in + Include in + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html + 369 + + Oops! There was an error setting up biometric authentication. 哎呀!设置生物识别认证时发生错误。 @@ -6590,7 +6602,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 598 + 602 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6642,7 +6654,7 @@ 关闭 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 600 + 604 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -7184,7 +7196,7 @@ 保存 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 609 + 613 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -7308,7 +7320,7 @@ 默认市场价格 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 409 + 413 @@ -7316,7 +7328,7 @@ 模式 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 450 + 454 @@ -7324,7 +7336,7 @@ 选择器 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 466 + 470 @@ -7332,7 +7344,7 @@ HTTP 请求标头 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 422 + 426 From f0ea31279e84ef4cd1845f88dab91bba414dbf35 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Wed, 5 Nov 2025 19:58:55 +0100 Subject: [PATCH 88/92] Bugfix/header alignment in admin platform and tag tables (#5908) * Fix header alignment * Update changelog --- CHANGELOG.md | 2 ++ .../app/components/admin-platform/admin-platform.component.html | 2 +- .../src/app/components/admin-tag/admin-tag.component.html | 2 +- 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index bca1a8de9..a73619a2f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,6 +17,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Fixed - Fixed the style of the safe withdrawal rate selector in the _FIRE_ section (experimental) +- Improved the table headers’ alignment in the platform management of the admin control panel +- Improved the table headers’ alignment in the tag management of the admin control panel ## 2.214.0 - 2025-11-01 diff --git a/apps/client/src/app/components/admin-platform/admin-platform.component.html b/apps/client/src/app/components/admin-platform/admin-platform.component.html index 9e38d5de7..e71dcf17b 100644 --- a/apps/client/src/app/components/admin-platform/admin-platform.component.html +++ b/apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -45,7 +45,7 @@ diff --git a/apps/client/src/app/components/admin-tag/admin-tag.component.html b/apps/client/src/app/components/admin-tag/admin-tag.component.html index 5979d2778..8b1b510d7 100644 --- a/apps/client/src/app/components/admin-tag/admin-tag.component.html +++ b/apps/client/src/app/components/admin-tag/admin-tag.component.html @@ -38,7 +38,7 @@ From 45b21cada92eb26c56056470ba758886c95d68c6 Mon Sep 17 00:00:00 2001 From: David Requeno <108202767+DavidReque@users.noreply.github.com> Date: Wed, 5 Nov 2025 13:21:03 -0600 Subject: [PATCH 89/92] Task/migrate app component to standalone (#5906) * Migrate app component to standalone * Update changelog --- CHANGELOG.md | 1 + apps/client/src/app/app.component.ts | 18 ++-- apps/client/src/app/app.module.ts | 83 ----------------- .../{app-routing.module.ts => app.routes.ts} | 30 +----- apps/client/src/main.ts | 91 +++++++++++++++++-- 5 files changed, 97 insertions(+), 126 deletions(-) delete mode 100644 apps/client/src/app/app.module.ts rename apps/client/src/app/{app-routing.module.ts => app.routes.ts} (81%) diff --git a/CHANGELOG.md b/CHANGELOG.md index a73619a2f..6bbaba5ac 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 _Self-Hosting_ section content for the _Compare with..._ concept on the Frequently Asked Questions (FAQ) page - Improved the _Self-Hosting_ section content for the _Markets_ concept on the Frequently Asked Questions (FAQ) page - Changed the build executor of the client from `@nx/angular:webpack-browser` to `@nx/angular:browser-esbuild` +- Refactored the app component to standalone - Improved the language localization for German (`de`) ### Fixed diff --git a/apps/client/src/app/app.component.ts b/apps/client/src/app/app.component.ts index 5ecb7bf8b..b70850016 100644 --- a/apps/client/src/app/app.component.ts +++ b/apps/client/src/app/app.component.ts @@ -1,5 +1,3 @@ -import { GfHoldingDetailDialogComponent } from '@ghostfolio/client/components/holding-detail-dialog/holding-detail-dialog.component'; -import { HoldingDetailDialogParams } from '@ghostfolio/client/components/holding-detail-dialog/interfaces/interfaces'; import { getCssVariable } from '@ghostfolio/common/helper'; import { InfoItem, User } from '@ghostfolio/common/interfaces'; import { hasPermission, permissions } from '@ghostfolio/common/permissions'; @@ -22,7 +20,9 @@ import { ActivatedRoute, NavigationEnd, PRIMARY_OUTLET, - Router + Router, + RouterLink, + RouterOutlet } from '@angular/router'; import { DataSource } from '@prisma/client'; import { addIcons } from 'ionicons'; @@ -31,6 +31,10 @@ import { DeviceDetectorService } from 'ngx-device-detector'; import { Subject } from 'rxjs'; import { filter, takeUntil } from 'rxjs/operators'; +import { GfFooterComponent } from './components/footer/footer.component'; +import { GfHeaderComponent } from './components/header/header.component'; +import { GfHoldingDetailDialogComponent } from './components/holding-detail-dialog/holding-detail-dialog.component'; +import { HoldingDetailDialogParams } from './components/holding-detail-dialog/interfaces/interfaces'; import { NotificationService } from './core/notification/notification.service'; import { DataService } from './services/data.service'; import { ImpersonationStorageService } from './services/impersonation-storage.service'; @@ -38,13 +42,13 @@ import { TokenStorageService } from './services/token-storage.service'; import { UserService } from './services/user/user.service'; @Component({ - selector: 'gf-root', changeDetection: ChangeDetectionStrategy.OnPush, - templateUrl: './app.component.html', + imports: [GfFooterComponent, GfHeaderComponent, RouterLink, RouterOutlet], + selector: 'gf-root', styleUrls: ['./app.component.scss'], - standalone: false + templateUrl: './app.component.html' }) -export class AppComponent implements OnDestroy, OnInit { +export class GfAppComponent implements OnDestroy, OnInit { @HostBinding('class.has-info-message') get getHasMessage() { return this.hasInfoMessage; } diff --git a/apps/client/src/app/app.module.ts b/apps/client/src/app/app.module.ts deleted file mode 100644 index 63de8fca7..000000000 --- a/apps/client/src/app/app.module.ts +++ /dev/null @@ -1,83 +0,0 @@ -import { Platform } from '@angular/cdk/platform'; -import { - provideHttpClient, - withInterceptorsFromDi -} from '@angular/common/http'; -import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core'; -import { MatAutocompleteModule } from '@angular/material/autocomplete'; -import { MatChipsModule } from '@angular/material/chips'; -import { - DateAdapter, - MAT_DATE_FORMATS, - MAT_DATE_LOCALE, - MatNativeDateModule -} from '@angular/material/core'; -import { MatSnackBarModule } from '@angular/material/snack-bar'; -import { MatTooltipModule } from '@angular/material/tooltip'; -import { BrowserModule } from '@angular/platform-browser'; -import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; -import { ServiceWorkerModule } from '@angular/service-worker'; -import { provideIonicAngular } from '@ionic/angular/standalone'; -import { provideMarkdown } from 'ngx-markdown'; -import { provideNgxSkeletonLoader } from 'ngx-skeleton-loader'; -import { NgxStripeModule, STRIPE_PUBLISHABLE_KEY } from 'ngx-stripe'; - -import { environment } from '../environments/environment'; -import { CustomDateAdapter } from './adapter/custom-date-adapter'; -import { DateFormats } from './adapter/date-formats'; -import { AppRoutingModule } from './app-routing.module'; -import { AppComponent } from './app.component'; -import { GfFooterComponent } from './components/footer/footer.component'; -import { GfHeaderComponent } from './components/header/header.component'; -import { authInterceptorProviders } from './core/auth.interceptor'; -import { httpResponseInterceptorProviders } from './core/http-response.interceptor'; -import { LanguageService } from './core/language.service'; -import { GfNotificationModule } from './core/notification/notification.module'; - -export function NgxStripeFactory(): string { - return environment.stripePublicKey; -} - -@NgModule({ - bootstrap: [AppComponent], - declarations: [AppComponent], - imports: [ - AppRoutingModule, - BrowserAnimationsModule, - BrowserModule, - GfFooterComponent, - GfHeaderComponent, - GfNotificationModule, - MatAutocompleteModule, - MatChipsModule, - MatNativeDateModule, - MatSnackBarModule, - MatTooltipModule, - NgxStripeModule.forRoot(environment.stripePublicKey), - ServiceWorkerModule.register('ngsw-worker.js', { - enabled: environment.production, - registrationStrategy: 'registerImmediately' - }) - ], - providers: [ - authInterceptorProviders, - httpResponseInterceptorProviders, - LanguageService, - provideHttpClient(withInterceptorsFromDi()), - provideIonicAngular(), - provideMarkdown(), - provideNgxSkeletonLoader(), - { - provide: DateAdapter, - useClass: CustomDateAdapter, - deps: [LanguageService, MAT_DATE_LOCALE, Platform] - }, - { provide: MAT_DATE_FORMATS, useValue: DateFormats }, - { - provide: STRIPE_PUBLISHABLE_KEY, - useFactory: NgxStripeFactory - } - ], - schemas: [CUSTOM_ELEMENTS_SCHEMA] -}) -export class AppModule {} diff --git a/apps/client/src/app/app-routing.module.ts b/apps/client/src/app/app.routes.ts similarity index 81% rename from apps/client/src/app/app-routing.module.ts rename to apps/client/src/app/app.routes.ts index fb045a174..9588cee68 100644 --- a/apps/client/src/app/app-routing.module.ts +++ b/apps/client/src/app/app.routes.ts @@ -1,13 +1,10 @@ -import { publicRoutes, internalRoutes } from '@ghostfolio/common/routes/routes'; +import { internalRoutes, publicRoutes } from '@ghostfolio/common/routes/routes'; -import { NgModule } from '@angular/core'; -import { RouterModule, Routes, TitleStrategy } from '@angular/router'; +import { Routes } from '@angular/router'; import { AuthGuard } from './core/auth.guard'; -import { ModulePreloadService } from './core/module-preload.service'; -import { PageTitleStrategy } from './services/page-title.strategy'; -const routes: Routes = [ +export const routes: Routes = [ { path: publicRoutes.about.path, loadChildren: () => @@ -147,24 +144,3 @@ const routes: Routes = [ pathMatch: 'full' } ]; - -@NgModule({ - imports: [ - RouterModule.forRoot( - routes, - // Preload all lazy loaded modules with the attribute preload === true - { - anchorScrolling: 'enabled', - // enableTracing: true, // <-- debugging purposes only - preloadingStrategy: ModulePreloadService, - scrollPositionRestoration: 'top' - } - ) - ], - providers: [ - ModulePreloadService, - { provide: TitleStrategy, useClass: PageTitleStrategy } - ], - exports: [RouterModule] -}) -export class AppRoutingModule {} diff --git a/apps/client/src/main.ts b/apps/client/src/main.ts index 96d6c0582..fc8a9ef7a 100644 --- a/apps/client/src/main.ts +++ b/apps/client/src/main.ts @@ -2,11 +2,39 @@ import { locale } from '@ghostfolio/common/config'; import { InfoResponse } from '@ghostfolio/common/interfaces'; import { filterGlobalPermissions } from '@ghostfolio/common/permissions'; -import { enableProdMode } from '@angular/core'; -import { LOCALE_ID } from '@angular/core'; -import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; +import { Platform } from '@angular/cdk/platform'; +import { + provideHttpClient, + withInterceptorsFromDi +} from '@angular/common/http'; +import { enableProdMode, importProvidersFrom, LOCALE_ID } from '@angular/core'; +import { + DateAdapter, + MAT_DATE_FORMATS, + MAT_DATE_LOCALE, + MatNativeDateModule +} from '@angular/material/core'; +import { MatSnackBarModule } from '@angular/material/snack-bar'; +import { MatTooltipModule } from '@angular/material/tooltip'; +import { bootstrapApplication } from '@angular/platform-browser'; +import { provideAnimations } from '@angular/platform-browser/animations'; +import { RouterModule, TitleStrategy } from '@angular/router'; +import { ServiceWorkerModule } from '@angular/service-worker'; +import { provideIonicAngular } from '@ionic/angular/standalone'; +import { provideMarkdown } from 'ngx-markdown'; +import { provideNgxSkeletonLoader } from 'ngx-skeleton-loader'; +import { NgxStripeModule, STRIPE_PUBLISHABLE_KEY } from 'ngx-stripe'; -import { AppModule } from './app/app.module'; +import { CustomDateAdapter } from './app/adapter/custom-date-adapter'; +import { DateFormats } from './app/adapter/date-formats'; +import { GfAppComponent } from './app/app.component'; +import { routes } from './app/app.routes'; +import { authInterceptorProviders } from './app/core/auth.interceptor'; +import { httpResponseInterceptorProviders } from './app/core/http-response.interceptor'; +import { LanguageService } from './app/core/language.service'; +import { ModulePreloadService } from './app/core/module-preload.service'; +import { GfNotificationModule } from './app/core/notification/notification.module'; +import { PageTitleStrategy } from './app/services/page-title.strategy'; import { environment } from './environments/environment'; (async () => { @@ -29,9 +57,54 @@ import { environment } from './environments/environment'; enableProdMode(); } - platformBrowserDynamic() - .bootstrapModule(AppModule, { - providers: [{ provide: LOCALE_ID, useValue: locale }] - }) - .catch((error) => console.error(error)); + await bootstrapApplication(GfAppComponent, { + providers: [ + authInterceptorProviders, + httpResponseInterceptorProviders, + importProvidersFrom( + GfNotificationModule, + MatNativeDateModule, + MatSnackBarModule, + MatTooltipModule, + NgxStripeModule.forRoot(environment.stripePublicKey), + RouterModule.forRoot(routes, { + anchorScrolling: 'enabled', + preloadingStrategy: ModulePreloadService, + scrollPositionRestoration: 'top' + }), + ServiceWorkerModule.register('ngsw-worker.js', { + enabled: environment.production, + registrationStrategy: 'registerImmediately' + }) + ), + LanguageService, + ModulePreloadService, + provideAnimations(), + provideHttpClient(withInterceptorsFromDi()), + provideIonicAngular(), + provideMarkdown(), + provideNgxSkeletonLoader(), + { + deps: [LanguageService, MAT_DATE_LOCALE, Platform], + provide: DateAdapter, + useClass: CustomDateAdapter + }, + { + provide: LOCALE_ID, + useValue: locale + }, + { + provide: MAT_DATE_FORMATS, + useValue: DateFormats + }, + { + provide: STRIPE_PUBLISHABLE_KEY, + useFactory: () => environment.stripePublicKey + }, + { + provide: TitleStrategy, + useClass: PageTitleStrategy + } + ] + }); })(); From 1ae3519d7f89223568cd725a3fab44c51e061d17 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Germ=C3=A1n=20Mart=C3=ADn?= Date: Wed, 5 Nov 2025 20:26:59 +0100 Subject: [PATCH 90/92] Bugfix/assign admin role to first user signing up (#5914) * Assign admin role to first user signing up * Update changelog --- CHANGELOG.md | 1 + apps/api/src/app/user/user.controller.ts | 6 +----- apps/api/src/app/user/user.service.ts | 20 ++++++++++++++------ 3 files changed, 16 insertions(+), 11 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6bbaba5ac..59142bbbd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,6 +18,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Fixed - Fixed the style of the safe withdrawal rate selector in the _FIRE_ section (experimental) +- Assigned the `ADMIN` role to the first user signing up via a social login provider if no administrator existed - Improved the table headers’ alignment in the platform management of the admin control panel - Improved the table headers’ alignment in the tag management of the admin control panel diff --git a/apps/api/src/app/user/user.controller.ts b/apps/api/src/app/user/user.controller.ts index e545fd335..8704662f7 100644 --- a/apps/api/src/app/user/user.controller.ts +++ b/apps/api/src/app/user/user.controller.ts @@ -126,11 +126,7 @@ export class UserController { ); } - const hasAdmin = await this.userService.hasAdmin(); - - const { accessToken, id, role } = await this.userService.createUser({ - data: { role: hasAdmin ? 'USER' : 'ADMIN' } - }); + const { accessToken, id, role } = await this.userService.createUser(); return { accessToken, diff --git a/apps/api/src/app/user/user.service.ts b/apps/api/src/app/user/user.service.ts index f797270ff..65ce92cb2 100644 --- a/apps/api/src/app/user/user.service.ts +++ b/apps/api/src/app/user/user.service.ts @@ -526,15 +526,23 @@ export class UserService { }); } - public async createUser({ - data - }: { - data: Prisma.UserCreateInput; - }): Promise { - if (!data?.provider) { + public async createUser( + { + data + }: { + data: Prisma.UserCreateInput; + } = { data: {} } + ): Promise { + if (!data.provider) { data.provider = 'ANONYMOUS'; } + if (!data.role) { + const hasAdmin = await this.hasAdmin(); + + data.role = hasAdmin ? 'USER' : 'ADMIN'; + } + const user = await this.prismaService.user.create({ data: { ...data, From 21dc25119dbd55812da114c755ed045f8b2b0a5e Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Wed, 5 Nov 2025 21:03:42 +0100 Subject: [PATCH 91/92] Release 2.215.0-beta.1 (#5918) --- 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 59142bbbd..801b33652 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,7 +5,7 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## Unreleased +## 2.215.0-beta.1 - 2025-11-05 ### Changed diff --git a/package-lock.json b/package-lock.json index 6429912bb..095b9f7f3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "ghostfolio", - "version": "2.214.0", + "version": "2.215.0-beta.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "ghostfolio", - "version": "2.214.0", + "version": "2.215.0-beta.1", "hasInstallScript": true, "license": "AGPL-3.0", "dependencies": { diff --git a/package.json b/package.json index 7648cee02..ea8646565 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ghostfolio", - "version": "2.214.0", + "version": "2.215.0-beta.1", "homepage": "https://ghostfol.io", "license": "AGPL-3.0", "repository": "https://github.com/ghostfolio/ghostfolio", From 697ecfe9bd5f7be000e1aadf3013a85c821ea27f Mon Sep 17 00:00:00 2001 From: Arghya Das Date: Thu, 6 Nov 2025 01:54:52 +0530 Subject: [PATCH 92/92] Feature/add endpoint to get user by id (#5910) * Add endpoint to get user by id * Update changelog --------- Co-authored-by: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> --- CHANGELOG.md | 4 ++ apps/api/src/app/admin/admin.controller.ts | 8 ++++ apps/api/src/app/admin/admin.service.ts | 38 +++++++++++++------ .../lib/interfaces/admin-user.interface.ts | 13 +++++++ libs/common/src/lib/interfaces/index.ts | 4 ++ .../admin-user-response.interface.ts | 3 ++ .../admin-users-response.interface.ts | 14 +------ 7 files changed, 61 insertions(+), 23 deletions(-) create mode 100644 libs/common/src/lib/interfaces/admin-user.interface.ts create mode 100644 libs/common/src/lib/interfaces/responses/admin-user-response.interface.ts diff --git a/CHANGELOG.md b/CHANGELOG.md index 801b33652..79ff17256 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 ## 2.215.0-beta.1 - 2025-11-05 +### Added + +- Added the endpoint `GET /api/v1/admin/user/:id` + ### Changed - Improved the _Self-Hosting_ section content for the _Compare with..._ concept on the Frequently Asked Questions (FAQ) page diff --git a/apps/api/src/app/admin/admin.controller.ts b/apps/api/src/app/admin/admin.controller.ts index 2419b0a7d..7ed7f364b 100644 --- a/apps/api/src/app/admin/admin.controller.ts +++ b/apps/api/src/app/admin/admin.controller.ts @@ -17,6 +17,7 @@ import { getAssetProfileIdentifier } from '@ghostfolio/common/helper'; import { AdminData, AdminMarketData, + AdminUserResponse, AdminUsersResponse, EnhancedSymbolProfile, ScraperConfiguration @@ -321,4 +322,11 @@ export class AdminController { take: isNaN(take) ? undefined : take }); } + + @Get('user/:id') + @HasPermission(permissions.accessAdminControl) + @UseGuards(AuthGuard('jwt'), HasPermissionGuard) + public async getUser(@Param('id') id: string): Promise { + return this.adminService.getUser(id); + } } diff --git a/apps/api/src/app/admin/admin.service.ts b/apps/api/src/app/admin/admin.service.ts index 683e72cb8..6b29b141a 100644 --- a/apps/api/src/app/admin/admin.service.ts +++ b/apps/api/src/app/admin/admin.service.ts @@ -23,6 +23,7 @@ import { AdminMarketData, AdminMarketDataDetails, AdminMarketDataItem, + AdminUserResponse, AdminUsersResponse, AssetProfileIdentifier, EnhancedSymbolProfile, @@ -35,7 +36,8 @@ import { BadRequestException, HttpException, Injectable, - Logger + Logger, + NotFoundException } from '@nestjs/common'; import { AssetClass, @@ -507,6 +509,18 @@ export class AdminService { }; } + public async getUser(id: string): Promise { + const [user] = await this.getUsersWithAnalytics({ + where: { id } + }); + + if (!user) { + throw new NotFoundException(`User with ID ${id} not found`); + } + + return user; + } + public async getUsers({ skip, take = Number.MAX_SAFE_INTEGER @@ -516,7 +530,15 @@ export class AdminService { }): Promise { const [count, users] = await Promise.all([ this.countUsersWithAnalytics(), - this.getUsersWithAnalytics({ skip, take }) + this.getUsersWithAnalytics({ + skip, + take, + where: { + NOT: { + analytics: null + } + } + }) ]); return { count, users }; @@ -814,17 +836,17 @@ export class AdminService { private async getUsersWithAnalytics({ skip, - take + take, + where }: { skip?: number; take?: number; + where?: Prisma.UserWhereInput; }): Promise { let orderBy: Prisma.Enumerable = [ { createdAt: 'desc' } ]; - let where: Prisma.UserWhereInput; - if (this.configurationService.get('ENABLE_FEATURE_SUBSCRIPTION')) { orderBy = [ { @@ -833,12 +855,6 @@ export class AdminService { } } ]; - - where = { - NOT: { - analytics: null - } - }; } const usersWithAnalytics = await this.prismaService.user.findMany({ diff --git a/libs/common/src/lib/interfaces/admin-user.interface.ts b/libs/common/src/lib/interfaces/admin-user.interface.ts new file mode 100644 index 000000000..872abca90 --- /dev/null +++ b/libs/common/src/lib/interfaces/admin-user.interface.ts @@ -0,0 +1,13 @@ +import { Role } from '@prisma/client'; + +export interface AdminUser { + accountCount: number; + activityCount: number; + country: string; + createdAt: Date; + dailyApiRequests: number; + engagement: number; + id: string; + lastActivity: Date; + role: Role; +} diff --git a/libs/common/src/lib/interfaces/index.ts b/libs/common/src/lib/interfaces/index.ts index 06ecf32e8..899813f30 100644 --- a/libs/common/src/lib/interfaces/index.ts +++ b/libs/common/src/lib/interfaces/index.ts @@ -7,6 +7,7 @@ import type { AdminMarketData, AdminMarketDataItem } from './admin-market-data.interface'; +import type { AdminUser } from './admin-user.interface'; import type { AssetClassSelectorOption } from './asset-class-selector-option.interface'; import type { AssetProfileIdentifier } from './asset-profile-identifier.interface'; import type { BenchmarkProperty } from './benchmark-property.interface'; @@ -38,6 +39,7 @@ import type { AccountBalancesResponse } from './responses/account-balances-respo import type { AccountsResponse } from './responses/accounts-response.interface'; import type { ActivitiesResponse } from './responses/activities-response.interface'; import type { ActivityResponse } from './responses/activity-response.interface'; +import type { AdminUserResponse } from './responses/admin-user-response.interface'; import type { AdminUsersResponse } from './responses/admin-users-response.interface'; import type { AiPromptResponse } from './responses/ai-prompt-response.interface'; import type { ApiKeyResponse } from './responses/api-key-response.interface'; @@ -92,6 +94,8 @@ export { AdminMarketData, AdminMarketDataDetails, AdminMarketDataItem, + AdminUser, + AdminUserResponse, AdminUsersResponse, AiPromptResponse, ApiKeyResponse, diff --git a/libs/common/src/lib/interfaces/responses/admin-user-response.interface.ts b/libs/common/src/lib/interfaces/responses/admin-user-response.interface.ts new file mode 100644 index 000000000..8e93fc097 --- /dev/null +++ b/libs/common/src/lib/interfaces/responses/admin-user-response.interface.ts @@ -0,0 +1,3 @@ +import { AdminUser } from '../admin-user.interface'; + +export interface AdminUserResponse extends AdminUser {} diff --git a/libs/common/src/lib/interfaces/responses/admin-users-response.interface.ts b/libs/common/src/lib/interfaces/responses/admin-users-response.interface.ts index d9f58ee18..8dd058030 100644 --- a/libs/common/src/lib/interfaces/responses/admin-users-response.interface.ts +++ b/libs/common/src/lib/interfaces/responses/admin-users-response.interface.ts @@ -1,16 +1,6 @@ -import { Role } from '@prisma/client'; +import { AdminUser } from '../admin-user.interface'; export interface AdminUsersResponse { count: number; - users: { - accountCount: number; - activityCount: number; - country: string; - createdAt: Date; - dailyApiRequests: number; - engagement: number; - id: string; - lastActivity: Date; - role: Role; - }[]; + users: AdminUser[]; }