diff --git a/CHANGELOG.md b/CHANGELOG.md index a23d3e6b5..e93dbe102 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,13 +7,37 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## Unreleased +### Added + +- Introduced a DTO for the query parameters of the asset profiles endpoint +- Introduced a DTO for the query parameters of the symbol lookup endpoints + ### Changed -- Restricted the _Restricted view and manage_ permission of the access to share the portfolio to the Model Context Protocol (MCP) (experimental) +- Improved the server of the Model Context Protocol (MCP) (experimental) +- Introduced a maximum length for the comment in the API endpoints +- Introduced a maximum length for the search query and the symbol in the API endpoints +- Hardened the validation of the query parameters (`accounts`, `assetClasses`, `dataSource` and `tags`) in the API endpoints with filters - Upgraded `nestjs` from version `11.1.28` to `11.2.1` ### Fixed +- Fixed the immediate expiration of a portfolio snapshot with errors +- Fixed the missing country mapping of _Congo (Dem. Rep. of the)_ and _Congo (Rep. of)_ in the _Financial Modeling Prep_ service + +## 3.66.0 - 2026-09-03 + +### Changed + +- Moved the details of the granted access from the table to the dialog on the access page (experimental) +- Restricted the _Restricted view and manage_ permission of the access to share the portfolio to the Model Context Protocol (MCP) (experimental) +- Migrated the transfer cash balance dialog to a dedicated route +- Improved the language localization for Italian (`it`) +- Upgraded `@rekog/mcp-nest` from version `2.0.0` to `2.0.2` +- Upgraded `prisma` from version `7.9.1` to `7.10.0` + +### Fixed + - Fixed the loading state of the accounts table on the accounts page - Fixed the loading state of the holdings table on the portfolio holdings page diff --git a/apps/api/src/app/account/get-all-accounts.dto.ts b/apps/api/src/app/account/get-all-accounts.dto.ts index 61a248019..efee3e683 100644 --- a/apps/api/src/app/account/get-all-accounts.dto.ts +++ b/apps/api/src/app/account/get-all-accounts.dto.ts @@ -1,9 +1,11 @@ import { FilterDto } from '@ghostfolio/api/dtos/filter.dto'; +import { SEARCH_QUERY_MAXIMUM_LENGTH } from '@ghostfolio/common/config'; -import { IsOptional, IsString } from 'class-validator'; +import { IsOptional, IsString, MaxLength } from 'class-validator'; export class GetAllAccountsDto extends FilterDto { @IsOptional() @IsString() + @MaxLength(SEARCH_QUERY_MAXIMUM_LENGTH) query?: string; } diff --git a/apps/api/src/app/endpoints/ai/ai.controller.ts b/apps/api/src/app/endpoints/ai/ai.controller.ts index 1a3fd3ba2..9691e211d 100644 --- a/apps/api/src/app/endpoints/ai/ai.controller.ts +++ b/apps/api/src/app/endpoints/ai/ai.controller.ts @@ -1,6 +1,7 @@ import { HasPermission } from '@ghostfolio/api/decorators/has-permission.decorator'; import { FilterDto } from '@ghostfolio/api/dtos/filter.dto'; import { HasPermissionGuard } from '@ghostfolio/api/guards/has-permission.guard'; +import { 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 { AiPromptResponse } from '@ghostfolio/common/interfaces'; import { permissions } from '@ghostfolio/common/permissions'; @@ -12,7 +13,8 @@ import { Inject, Param, Query, - UseGuards + UseGuards, + UseInterceptors } from '@nestjs/common'; import { REQUEST } from '@nestjs/core'; import { AuthGuard } from '@nestjs/passport'; @@ -30,6 +32,7 @@ export class AiController { @Get('prompt/:mode') @HasPermission(permissions.readAiPrompt) @UseGuards(AuthGuard('jwt'), HasPermissionGuard) + @UseInterceptors(TransformDataSourceInRequestInterceptor) public async getPrompt( @Param('mode') mode: AiPromptMode, @Query() diff --git a/apps/api/src/app/endpoints/ai/ai.module.ts b/apps/api/src/app/endpoints/ai/ai.module.ts index d5cf0e3e9..f46ed1df8 100644 --- a/apps/api/src/app/endpoints/ai/ai.module.ts +++ b/apps/api/src/app/endpoints/ai/ai.module.ts @@ -1,26 +1,8 @@ -import { AccountBalanceService } from '@ghostfolio/api/app/account-balance/account-balance.service'; -import { AccountService } from '@ghostfolio/api/app/account/account.service'; -import { ActivitiesModule } from '@ghostfolio/api/app/activities/activities.module'; -import { PortfolioCalculatorFactory } from '@ghostfolio/api/app/portfolio/calculator/portfolio-calculator.factory'; -import { CurrentRateService } from '@ghostfolio/api/app/portfolio/current-rate.service'; -import { PortfolioService } from '@ghostfolio/api/app/portfolio/portfolio.service'; -import { RulesService } from '@ghostfolio/api/app/portfolio/rules.service'; -import { RedisCacheModule } from '@ghostfolio/api/app/redis-cache/redis-cache.module'; -import { UserModule } from '@ghostfolio/api/app/user/user.module'; +import { TransformDataSourceInRequestModule } from '@ghostfolio/api/interceptors/transform-data-source-in-request/transform-data-source-in-request.module'; import { ApiModule } from '@ghostfolio/api/services/api/api.module'; -import { BenchmarkModule } from '@ghostfolio/api/services/benchmark/benchmark.module'; import { ConfigurationModule } from '@ghostfolio/api/services/configuration/configuration.module'; -import { DataProviderModule } from '@ghostfolio/api/services/data-provider/data-provider.module'; -import { ExchangeRateDataModule } from '@ghostfolio/api/services/exchange-rate-data/exchange-rate-data.module'; -import { I18nModule } from '@ghostfolio/api/services/i18n/i18n.module'; -import { ImpersonationModule } from '@ghostfolio/api/services/impersonation/impersonation.module'; -import { MarketDataModule } from '@ghostfolio/api/services/market-data/market-data.module'; -import { MarketDataService } from '@ghostfolio/api/services/market-data/market-data.service'; -import { PrismaModule } from '@ghostfolio/api/services/prisma/prisma.module'; +import { PortfolioTableModule } from '@ghostfolio/api/services/portfolio-table/portfolio-table.module'; import { PropertyModule } from '@ghostfolio/api/services/property/property.module'; -import { PortfolioSnapshotQueueModule } from '@ghostfolio/api/services/queues/portfolio-snapshot/portfolio-snapshot.module'; -import { SymbolProfileModule } from '@ghostfolio/api/services/symbol-profile/symbol-profile.module'; -import { TagModule } from '@ghostfolio/api/services/tag/tag.module'; import { Module } from '@nestjs/common'; @@ -31,32 +13,12 @@ import { AiService } from './ai.service'; controllers: [AiController], exports: [AiService], imports: [ - ActivitiesModule, ApiModule, - BenchmarkModule, ConfigurationModule, - DataProviderModule, - ExchangeRateDataModule, - I18nModule, - ImpersonationModule, - MarketDataModule, - PortfolioSnapshotQueueModule, - PrismaModule, + PortfolioTableModule, PropertyModule, - RedisCacheModule, - SymbolProfileModule, - TagModule, - UserModule + TransformDataSourceInRequestModule ], - providers: [ - AccountBalanceService, - AccountService, - AiService, - CurrentRateService, - MarketDataService, - PortfolioCalculatorFactory, - PortfolioService, - RulesService - ] + providers: [AiService] }) export class AiModule {} diff --git a/apps/api/src/app/endpoints/ai/ai.service.spec.ts b/apps/api/src/app/endpoints/ai/ai.service.spec.ts deleted file mode 100644 index 6328df195..000000000 --- a/apps/api/src/app/endpoints/ai/ai.service.spec.ts +++ /dev/null @@ -1,164 +0,0 @@ -import type { PortfolioService } from '@ghostfolio/api/app/portfolio/portfolio.service'; -import { TAG_ID_EXCLUDE_FROM_ANALYSIS } from '@ghostfolio/common/config'; -import { AccountWithValue } from '@ghostfolio/common/types'; - -import { AiService } from './ai.service'; - -// The service imports two packages which ship as an ECMAScript module only, -// which Jest cannot transform. The mocks only make the imports resolvable, -// because no test calls them. -jest.mock('@openrouter/ai-sdk-provider', () => { - return { createOpenRouter: jest.fn() }; -}); - -jest.mock('ai', () => { - return { generateText: jest.fn() }; -}); - -/** - * The markdown table is rendered by a package which ships as an ECMAScript - * module only, hence the service loads it with a dynamic import which Jest - * cannot run. The tests replace the method by a simple renderer, so that they - * can read the columns and the rows which the service gives to it. - */ -interface AiServiceWithMarkdownTable { - getMarkdownTable(parameters: { - columnDefinitions: readonly { name: string }[]; - rows: Record[]; - }): Promise; -} - -function createAccount({ - id = 'account-a-id', - isExcluded = false, - name = 'Account A' -}: { - id?: string; - isExcluded?: boolean; - name?: string; -} = {}) { - return { - id, - name, - activitiesCount: 3, - allocationInPercentage: 0.25, - balance: 1000, - currency: 'CHF', - platform: { name: 'Platform A' }, - tags: isExcluded ? [{ id: TAG_ID_EXCLUDE_FROM_ANALYSIS }] : [], - value: 2000 - } as unknown as AccountWithValue; -} - -function createAiService(accounts: AccountWithValue[]) { - const portfolioService = { - getAccountsWithAggregations: jest.fn().mockResolvedValue({ accounts }) - } as unknown as PortfolioService; - - const aiService = new AiService(null, null, null, portfolioService, null); - - jest - .spyOn( - aiService as unknown as AiServiceWithMarkdownTable, - 'getMarkdownTable' - ) - .mockImplementation(async ({ columnDefinitions, rows }) => { - const columnNames = columnDefinitions.map(({ name }) => { - return name; - }); - - return [ - columnNames.join(' | '), - ...rows.map((row) => { - return columnNames - .map((columnName) => { - return row[columnName]; - }) - .join(' | '); - }) - ].join('\n'); - }); - - return aiService; -} - -describe('AiService', () => { - // The tools of the model context protocol are the only callers, and an - // access of that type never grants the scope to read the monetary values, - // hence no table has a column with such a value - describe('getAccountsTableColumnNames', () => { - it('gives no column with a monetary value', () => { - expect(AiService.getAccountsTableColumnNames()).toEqual([ - 'Id', - 'Name', - 'Currency', - 'Platform', - 'Activities Count', - 'Allocation in Percentage', - 'Excluded from Analysis' - ]); - }); - }); - - describe('getActivitiesTableColumnNames', () => { - it('gives no column with a monetary value', () => { - expect(AiService.getActivitiesTableColumnNames()).toEqual([ - 'Date', - 'Type', - 'Name', - 'Symbol', - 'Currency', - 'Unit Price', - 'Account' - ]); - }); - }); - - describe('getAccountsTable', () => { - it('gives no cash balance and no value of an account', async () => { - const aiService = createAiService([createAccount()]); - - const result = await aiService.getAccountsTable({ userId: 'user-id' }); - - expect(result).not.toContain('Cash Balance'); - expect(result).not.toContain('1000'); - expect(result).not.toContain('2000'); - }); - - // The accountIds parameter of the tool takes the identifiers, hence the - // table has to give them - it('gives the identifier of an account', async () => { - const aiService = createAiService([createAccount()]); - - const result = await aiService.getAccountsTable({ userId: 'user-id' }); - - expect(result).toContain('account-a-id'); - }); - - it('marks an account which is excluded from the analysis', async () => { - const aiService = createAiService([ - createAccount({ isExcluded: true }), - createAccount({ id: 'account-b-id', name: 'Account B' }) - ]); - - const result = await aiService.getAccountsTable({ userId: 'user-id' }); - - const [rowOfAccountA, rowOfAccountB] = result - .split('\n') - .filter((line) => { - return line.startsWith('account-'); - }); - - expect(rowOfAccountA).toContain('true'); - expect(rowOfAccountB).toContain('false'); - }); - - it('tells that no accounts are found if the result is empty', async () => { - const aiService = createAiService([]); - - const result = await aiService.getAccountsTable({ userId: 'user-id' }); - - expect(result).toContain('No accounts found.'); - }); - }); -}); diff --git a/apps/api/src/app/endpoints/ai/ai.service.ts b/apps/api/src/app/endpoints/ai/ai.service.ts index 758499c6e..401bee7d0 100644 --- a/apps/api/src/app/endpoints/ai/ai.service.ts +++ b/apps/api/src/app/endpoints/ai/ai.service.ts @@ -1,122 +1,25 @@ -import { ActivitiesService } from '@ghostfolio/api/app/activities/activities.service'; -import { PortfolioService } from '@ghostfolio/api/app/portfolio/portfolio.service'; import { ConfigurationService } from '@ghostfolio/api/services/configuration/configuration.service'; -import { I18nService } from '@ghostfolio/api/services/i18n/i18n.service'; +import { PortfolioTableService } from '@ghostfolio/api/services/portfolio-table/portfolio-table.service'; import { PropertyService } from '@ghostfolio/api/services/property/property.service'; import { PROPERTY_API_KEY_OPENROUTER, PROPERTY_OPENROUTER_MODEL } from '@ghostfolio/common/config'; -import { DATE_FORMAT, isAccountExcluded } from '@ghostfolio/common/helper'; import { Filter } from '@ghostfolio/common/interfaces'; import type { AiPromptMode } from '@ghostfolio/common/types'; import { Injectable } from '@nestjs/common'; import { createOpenRouter } from '@openrouter/ai-sdk-provider'; -import { - AssetClass, - AssetSubClass, - Type as ActivityType -} from '@prisma/client'; import { generateText } from 'ai'; -import { format } from 'date-fns'; -import type { ColumnDescriptor } from 'tablemark'; @Injectable() export class AiService { - private static readonly ACCOUNTS_TABLE_COLUMN_DEFINITIONS: ({ - key: - | 'ACTIVITIES_COUNT' - | 'ALLOCATION_PERCENTAGE' - | 'CURRENCY' - | 'EXCLUDED_FROM_ANALYSIS' - | 'ID' - | 'NAME' - | 'PLATFORM'; - } & ColumnDescriptor)[] = [ - { key: 'ID', name: 'Id' }, - { key: 'NAME', name: 'Name' }, - { key: 'CURRENCY', name: 'Currency' }, - { key: 'PLATFORM', name: 'Platform' }, - { align: 'right', key: 'ACTIVITIES_COUNT', name: 'Activities Count' }, - { - align: 'right', - key: 'ALLOCATION_PERCENTAGE', - name: 'Allocation in Percentage' - }, - { key: 'EXCLUDED_FROM_ANALYSIS', name: 'Excluded from Analysis' } - ]; - - private static readonly ACTIVITIES_TABLE_COLUMN_DEFINITIONS: ({ - key: - | 'ACCOUNT' - | 'CURRENCY' - | 'DATE' - | 'NAME' - | 'SYMBOL' - | 'TYPE' - | 'UNIT_PRICE'; - } & ColumnDescriptor)[] = [ - { key: 'DATE', name: 'Date' }, - { key: 'TYPE', name: 'Type' }, - { key: 'NAME', name: 'Name' }, - { key: 'SYMBOL', name: 'Symbol' }, - { key: 'CURRENCY', name: 'Currency' }, - { align: 'right', key: 'UNIT_PRICE', name: 'Unit Price' }, - { key: 'ACCOUNT', name: 'Account' } - ]; - - private static readonly HOLDINGS_TABLE_COLUMN_DEFINITIONS: ({ - key: - | 'ACTIVITIES_COUNT' - | 'ALLOCATION_PERCENTAGE' - | 'ASSET_CLASS' - | 'ASSET_SUB_CLASS' - | 'CURRENCY' - | 'DATE_OF_FIRST_ACTIVITY' - | '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' }, - { key: 'DATE_OF_FIRST_ACTIVITY', name: 'Date of First Activity' }, - { align: 'right', key: 'ACTIVITIES_COUNT', name: 'Activities Count' }, - { - align: 'right', - key: 'ALLOCATION_PERCENTAGE', - name: 'Allocation in Percentage' - } - ]; - public constructor( - private readonly activitiesService: ActivitiesService, private readonly configurationService: ConfigurationService, - private readonly i18nService: I18nService, - private readonly portfolioService: PortfolioService, + private readonly portfolioTableService: PortfolioTableService, private readonly propertyService: PropertyService ) {} - public static getAccountsTableColumnNames() { - return AiService.ACCOUNTS_TABLE_COLUMN_DEFINITIONS.map(({ name }) => { - return name; - }); - } - - public static getActivitiesTableColumnNames() { - return AiService.ACTIVITIES_TABLE_COLUMN_DEFINITIONS.map(({ name }) => { - return name; - }); - } - - public static getHoldingsTableColumnNames() { - return AiService.HOLDINGS_TABLE_COLUMN_DEFINITIONS.map(({ name }) => { - return name; - }); - } - public async generateText({ prompt, requestTimeout = this.configurationService.get('REQUEST_TIMEOUT') @@ -143,191 +46,6 @@ export class AiService { }); } - public async getAccountsTable({ - filters, - userId - }: { - filters?: Filter[]; - userId: string; - }) { - const { accounts } = - await this.portfolioService.getAccountsWithAggregations({ - filters, - userId, - withExcludedAccounts: true - }); - - const accountsTableRows = accounts.map( - ({ - activitiesCount, - allocationInPercentage, - currency, - id, - name: label, - platform, - tags - }) => { - return AiService.ACCOUNTS_TABLE_COLUMN_DEFINITIONS.reduce( - (row, { key, name }) => { - switch (key) { - case 'ACTIVITIES_COUNT': - row[name] = activitiesCount.toString(); - break; - - case 'ALLOCATION_PERCENTAGE': - row[name] = `${(allocationInPercentage * 100).toFixed(3)}%`; - break; - - case 'CURRENCY': - row[name] = currency ?? ''; - break; - - case 'EXCLUDED_FROM_ANALYSIS': - row[name] = isAccountExcluded({ tags }).toString(); - break; - - case 'ID': - row[name] = id; - break; - - case 'NAME': - row[name] = label ?? ''; - break; - - case 'PLATFORM': - row[name] = platform?.name ?? ''; - break; - - default: - row[name] = ''; - break; - } - - return row; - }, - {} as Record - ); - } - ); - - const accountsSection = ['## Accounts', '']; - - if (accountsTableRows.length > 0) { - accountsSection.push( - await this.getMarkdownTable({ - columnDefinitions: AiService.ACCOUNTS_TABLE_COLUMN_DEFINITIONS, - rows: accountsTableRows - }) - ); - } else { - accountsSection.push('No accounts found.'); - } - - return accountsSection.join('\n'); - } - - public async getActivitiesTable({ - endDate, - filters, - skip = 0, - startDate, - take, - types, - userCurrency, - userId - }: { - endDate?: Date; - filters?: Filter[]; - skip?: number; - startDate?: Date; - take: number; - types?: ActivityType[]; - userCurrency: string; - userId: string; - }) { - const { activities, count } = await this.activitiesService.getActivities({ - endDate, - filters, - skip, - startDate, - take, - types, - userCurrency, - userId, - includeDrafts: true, - sortColumn: 'date', - sortDirection: 'desc', - withExcludedAccountsAndActivities: true - }); - - const activitiesTableRows = activities.map( - ({ account, assetProfile, currency, date, type, unitPrice }) => { - return AiService.ACTIVITIES_TABLE_COLUMN_DEFINITIONS.reduce( - (row, { key, name }) => { - switch (key) { - case 'ACCOUNT': - row[name] = account?.name ?? ''; - break; - - case 'CURRENCY': - row[name] = currency ?? assetProfile.currency; - break; - - case 'DATE': - row[name] = format(date, DATE_FORMAT); - break; - - case 'NAME': - row[name] = assetProfile.name ?? ''; - break; - - case 'SYMBOL': - row[name] = assetProfile.symbol; - break; - - case 'TYPE': - row[name] = type; - break; - - case 'UNIT_PRICE': - row[name] = unitPrice.toString(); - break; - - default: - row[name] = ''; - break; - } - - return row; - }, - {} as Record - ); - } - ); - - const activitiesSection = [ - '## Activities', - '', - this.getActivitiesSummary({ - count, - skip, - numberOfActivities: activities.length - }) - ]; - - if (activitiesTableRows.length > 0) { - activitiesSection.push( - '', - await this.getMarkdownTable({ - columnDefinitions: AiService.ACTIVITIES_TABLE_COLUMN_DEFINITIONS, - rows: activitiesTableRows - }) - ); - } - - return activitiesSection.join('\n'); - } - public async getPrompt({ filters, languageCode, @@ -341,98 +59,12 @@ export class AiService { userCurrency: string; userId: string; }) { - const { holdings } = await this.portfolioService.getDetails({ + const holdingsSection = await this.portfolioTableService.getHoldingsTable({ filters, - userId - }); - - const assetClassTranslations = this.getEnumTranslations({ languageCode, - id: 'assetClass', - values: Object.values(AssetClass) - }); - - const assetSubClassTranslations = this.getEnumTranslations({ - languageCode, - id: 'assetSubClass', - values: Object.values(AssetSubClass) + userId }); - const holdingsTableRows = [...holdings] - .sort((a, b) => { - return b.allocationInPercentage - a.allocationInPercentage; - }) - .map( - ({ - activitiesCount, - allocationInPercentage, - assetProfile: { - assetClass, - assetSubClass, - currency, - name: label, - symbol - }, - dateOfFirstActivity - }) => { - return AiService.HOLDINGS_TABLE_COLUMN_DEFINITIONS.reduce( - (row, { key, name }) => { - switch (key) { - case 'ACTIVITIES_COUNT': - row[name] = activitiesCount.toString(); - break; - - case 'ALLOCATION_PERCENTAGE': - row[name] = `${(allocationInPercentage * 100).toFixed(3)}%`; - break; - - case 'ASSET_CLASS': - row[name] = assetClassTranslations[assetClass] ?? ''; - break; - - case 'ASSET_SUB_CLASS': - row[name] = assetSubClassTranslations[assetSubClass] ?? ''; - break; - - case 'CURRENCY': - row[name] = currency; - break; - - case 'DATE_OF_FIRST_ACTIVITY': - row[name] = dateOfFirstActivity - ? format(dateOfFirstActivity, DATE_FORMAT) - : ''; - break; - - case 'NAME': - row[name] = label; - break; - - case 'SYMBOL': - row[name] = symbol; - break; - - default: - row[name] = ''; - break; - } - - return row; - }, - {} as Record - ); - } - ); - - const holdingsSection = [ - '## Holdings', - '', - await this.getMarkdownTable({ - columnDefinitions: AiService.HOLDINGS_TABLE_COLUMN_DEFINITIONS, - rows: holdingsTableRows - }) - ].join('\n'); - if (mode === 'portfolio') { return holdingsSection; } @@ -451,82 +83,4 @@ export class AiService { `Provide your answer in the following language: ${languageCode}.` ].join('\n'); } - - private getActivitiesSummary({ - count, - numberOfActivities, - skip - }: { - count: number; - numberOfActivities: number; - skip: number; - }) { - if (count === 0) { - return 'No activities found.'; - } - - if (numberOfActivities === 0) { - return `No activities beyond the ${count} which match the parameters, hence lower the skip parameter.`; - } - - if (numberOfActivities === count) { - return `Showing all ${count} activities, the most recent first.`; - } - - const lastActivity = skip + numberOfActivities; - - const summary = `Showing the activities ${ - skip + 1 - } to ${lastActivity} of ${count}, the most recent first.`; - - if (lastActivity === count) { - return summary; - } - - return `${summary} Get the further activities by raising the skip parameter or narrow the result with the other parameters.`; - } - - private getEnumTranslations({ - id, - languageCode, - values - }: { - id: string; - languageCode: string; - values: T[]; - }) { - return values.reduce( - (translations, value) => { - translations[value] = - this.i18nService.getTranslation({ - languageCode, - id: `${id}.${value}` - }) || value; - - return translations; - }, - {} as Record - ); - } - - private async getMarkdownTable({ - columnDefinitions, - rows - }: { - columnDefinitions: readonly ColumnDescriptor[]; - rows: Record[]; - }) { - // 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'); - - return tablemark(rows, { - columns: columnDefinitions.map(({ align, name }) => { - return { name, align: align ?? 'left' }; - }) - }); - } } diff --git a/apps/api/src/app/endpoints/asset-profiles/asset-profiles.controller.ts b/apps/api/src/app/endpoints/asset-profiles/asset-profiles.controller.ts index e1452c548..1db09f95e 100644 --- a/apps/api/src/app/endpoints/asset-profiles/asset-profiles.controller.ts +++ b/apps/api/src/app/endpoints/asset-profiles/asset-profiles.controller.ts @@ -17,7 +17,7 @@ import { } from '@ghostfolio/common/interfaces'; import { hasPermission } from '@ghostfolio/common/permissions'; import { permissions } from '@ghostfolio/common/permissions'; -import { MarketDataPreset, RequestWithUser } from '@ghostfolio/common/types'; +import { RequestWithUser } from '@ghostfolio/common/types'; import { Body, @@ -27,7 +27,6 @@ import { HttpException, Inject, Param, - ParseIntPipe, Patch, Post, Query, @@ -36,11 +35,12 @@ import { } from '@nestjs/common'; import { REQUEST } from '@nestjs/core'; import { AuthGuard } from '@nestjs/passport'; -import { AssetProfileSplit, DataSource, Prisma } from '@prisma/client'; +import { AssetProfileSplit, DataSource } from '@prisma/client'; import { parseISO } from 'date-fns'; import { StatusCodes, getReasonPhrase } from 'http-status-codes'; import { AssetProfilesService } from './asset-profiles.service'; +import { GetAssetProfilesDto } from './get-asset-profiles.dto'; @AllowDuringImpersonation() @Controller('asset-profiles') @@ -56,14 +56,17 @@ export class AssetProfilesController { @HasPermission(permissions.accessAdminControl) @UseGuards(AuthGuard('jwt'), HasPermissionGuard) public async getAssetProfiles( - @Query('assetSubClasses') filterByAssetSubClasses?: string, - @Query('dataSource') filterByDataSource?: string, - @Query('presetId') presetId?: MarketDataPreset, - @Query('query') filterBySearchQuery?: string, - @Query('skip', new ParseIntPipe({ optional: true })) skip?: number, - @Query('sortColumn') sortColumn?: string, - @Query('sortDirection') sortDirection?: Prisma.SortOrder, - @Query('take', new ParseIntPipe({ optional: true })) take?: number + @Query() + { + assetSubClasses: filterByAssetSubClasses, + dataSource: filterByDataSource, + presetId, + query: filterBySearchQuery, + skip, + sortColumn, + sortDirection, + take + }: GetAssetProfilesDto ): Promise { const filters = this.apiService.buildFiltersFromQueryParams({ filterByAssetSubClasses, diff --git a/apps/api/src/app/endpoints/asset-profiles/get-asset-profiles.dto.ts b/apps/api/src/app/endpoints/asset-profiles/get-asset-profiles.dto.ts new file mode 100644 index 000000000..562a75391 --- /dev/null +++ b/apps/api/src/app/endpoints/asset-profiles/get-asset-profiles.dto.ts @@ -0,0 +1,64 @@ +import { SEARCH_QUERY_MAXIMUM_LENGTH } from '@ghostfolio/common/config'; +import { MarketDataPreset } from '@ghostfolio/common/types'; + +import { Prisma } from '@prisma/client'; +import { Type } from 'class-transformer'; +import { + IsIn, + IsInt, + IsOptional, + IsString, + MaxLength, + Min +} from 'class-validator'; + +export class GetAssetProfilesDto { + @IsOptional() + @IsString() + assetSubClasses?: string; + + @IsOptional() + @IsString() + dataSource?: string; + + @IsIn([ + 'BENCHMARKS', + 'CURRENCIES', + 'ETF_WITHOUT_COUNTRIES', + 'ETF_WITHOUT_SECTORS', + 'NO_ACTIVITIES' + ] as MarketDataPreset[]) + @IsOptional() + presetId?: MarketDataPreset; + + @IsOptional() + @IsString() + @MaxLength(SEARCH_QUERY_MAXIMUM_LENGTH) + query?: string; + + @IsInt() + @IsOptional() + @Min(0) + @Type(() => Number) + skip?: number; + + @IsIn([ + 'activitiesCount', + 'assetClass', + 'assetSubClass', + 'dataSource', + 'symbol' + ]) + @IsOptional() + sortColumn?: string; + + @IsIn(['asc', 'desc'] as Prisma.SortOrder[]) + @IsOptional() + sortDirection?: Prisma.SortOrder; + + @IsInt() + @IsOptional() + @Min(0) + @Type(() => Number) + take?: number; +} diff --git a/apps/api/src/app/endpoints/data-providers/ghostfolio/get-lookup.dto.ts b/apps/api/src/app/endpoints/data-providers/ghostfolio/get-lookup.dto.ts new file mode 100644 index 000000000..0778d1b5b --- /dev/null +++ b/apps/api/src/app/endpoints/data-providers/ghostfolio/get-lookup.dto.ts @@ -0,0 +1,16 @@ +import { SEARCH_QUERY_MAXIMUM_LENGTH } from '@ghostfolio/common/config'; + +import { Transform, TransformFnParams } from 'class-transformer'; +import { IsBoolean, IsString, MaxLength } from 'class-validator'; + +export class GetLookupDto { + @IsBoolean() + @Transform(({ value }: TransformFnParams) => { + return value === 'true'; + }) + includeIndices? = false; + + @IsString() + @MaxLength(SEARCH_QUERY_MAXIMUM_LENGTH) + query? = ''; +} diff --git a/apps/api/src/app/endpoints/data-providers/ghostfolio/ghostfolio.controller.ts b/apps/api/src/app/endpoints/data-providers/ghostfolio/ghostfolio.controller.ts index 4bdb84ea7..cd330f691 100644 --- a/apps/api/src/app/endpoints/data-providers/ghostfolio/ghostfolio.controller.ts +++ b/apps/api/src/app/endpoints/data-providers/ghostfolio/ghostfolio.controller.ts @@ -32,6 +32,7 @@ import { getReasonPhrase, StatusCodes } from 'http-status-codes'; import { GetDividendsDto } from './get-dividends.dto'; import { GetHistoricalDto } from './get-historical.dto'; +import { GetLookupDto } from './get-lookup.dto'; import { GetQuotesDto } from './get-quotes.dto'; import { GhostfolioService } from './ghostfolio.service'; @@ -142,10 +143,8 @@ export class GhostfolioController { @UseGuards(AuthGuard('api-key'), HasPermissionGuard) @Version('2') public async lookupSymbol( - @Query('includeIndices') includeIndicesParam = 'false', - @Query('query') query = '' + @Query() { includeIndices, query }: GetLookupDto ): Promise { - const includeIndices = includeIndicesParam === 'true'; await this.validateDailyRequestLimit(); try { diff --git a/apps/api/src/app/endpoints/mcp/mcp.controller.spec.ts b/apps/api/src/app/endpoints/mcp/mcp.controller.spec.ts index b07441e73..741e2a1ae 100644 --- a/apps/api/src/app/endpoints/mcp/mcp.controller.spec.ts +++ b/apps/api/src/app/endpoints/mcp/mcp.controller.spec.ts @@ -1,285 +1,87 @@ -import { ImportValidationError } from '@ghostfolio/api/app/import/errors/import-validation.error'; -import { ImportService } from '@ghostfolio/api/app/import/import.service'; -import { UserService } from '@ghostfolio/api/app/user/user.service'; import { REQUIRES_SCOPE_KEY } from '@ghostfolio/api/decorators/requires-scope.decorator'; -import { ConfigurationService } from '@ghostfolio/api/services/configuration/configuration.service'; -import { MCP_MAX_ACTIVITIES } from '@ghostfolio/common/config'; -import { Activity } from '@ghostfolio/common/interfaces'; -import { permissions } from '@ghostfolio/common/permissions'; -import { scopes } from '@ghostfolio/common/scopes'; -import type { - ImpersonationContext, - UserWithSettings -} from '@ghostfolio/common/types'; - -import { HttpException, Logger } from '@nestjs/common'; -import { RpcException } from '@nestjs/microservices'; -import { DataSource, Type as ActivityType } from '@prisma/client'; -import { getReasonPhrase, StatusCodes } from 'http-status-codes'; +import { McpToolExceptionFilter } from '@ghostfolio/api/filters/mcp-tool-exception.filter'; +import { AccessGuard } from '@ghostfolio/api/guards/access.guard'; +import { Scope, scopes } from '@ghostfolio/common/scopes'; import { - GhostfolioMcpController, - IMPORT_ACTIVITIES_PARAMETERS -} from './mcp.controller'; - -// The controller reads the columns of the tables from the AiService, which -// imports two packages which ship as an ECMAScript module only, which Jest -// cannot transform. The mocks only make the imports resolvable, because no -// test calls them. -jest.mock('@openrouter/ai-sdk-provider', () => { - return { createOpenRouter: jest.fn() }; -}); - -jest.mock('ai', () => { - return { generateText: jest.fn() }; -}); + EXCEPTION_FILTERS_METADATA, + GUARDS_METADATA +} from '@nestjs/common/constants'; +import { MCP_TOOL_METADATA_KEY, ToolMetadata } from '@rekog/mcp-nest'; + +import { GhostfolioMcpController } from './mcp.controller'; + +/** + * Gives the metadata which a decorator sets on the method of a tool. The + * prototype is read by the name of the method, hence the type of the metadata + * is given by the caller. + */ +function getMetadataOfMethod(metadataKey: string, methodName: string) { + const methodsByName = GhostfolioMcpController.prototype as unknown as Record< + string, + object + >; + + return Reflect.getMetadata(metadataKey, methodsByName[methodName]) as T; +} -function createActivity(overrides: Record = {}) { - return { - currency: 'USD', - date: '2024-01-01', - fee: 0, - quantity: 1, - symbol: 'AAPL', - type: ActivityType.BUY, - unitPrice: 100, - ...overrides - }; +function getToolMethodNames() { + return Object.getOwnPropertyNames(GhostfolioMcpController.prototype).filter( + (methodName) => { + return Boolean( + getMetadataOfMethod(MCP_TOOL_METADATA_KEY, methodName) + ); + } + ); } describe('GhostfolioMcpController', () => { - const impersonation = { userId: 'user-id' } as ImpersonationContext; - - let configuration: Record; - let configurationService: ConfigurationService; - let controller: GhostfolioMcpController; - let importService: ImportService; - let userService: UserService; + // A tool without the decorator of the scope would be open to every access, + // hence a new tool has to declare its scope + it('Requires a scope of access for each tool', () => { + const toolMethodNames = getToolMethodNames(); - function setupUser(userPermissions: string[]) { - jest.spyOn(userService, 'user').mockResolvedValue({ - permissions: userPermissions - } as UserWithSettings); - } + expect(toolMethodNames.length).toBeGreaterThan(0); - beforeEach(() => { - configuration = { - DATA_SOURCES_GHOSTFOLIO_DATA_PROVIDER: [], - ENABLE_FEATURE_SUBSCRIPTION: false - }; - - configurationService = { - get: jest.fn().mockImplementation((key: string) => { - return configuration[key]; - }) - } as unknown as ConfigurationService; - - importService = { - import: jest.fn().mockResolvedValue([]) - } as unknown as ImportService; + const toolMethodNamesWithoutScope = toolMethodNames.filter((methodName) => { + return !getMetadataOfMethod(REQUIRES_SCOPE_KEY, methodName) + ?.length; + }); - userService = { user: jest.fn() } as unknown as UserService; + expect(toolMethodNamesWithoutScope).toEqual([]); + }); - controller = new GhostfolioMcpController( - undefined, - undefined, - configurationService, - importService, - userService + // The decorator RequiresScope sets the same metadata as the decorator + // RequiresScopeOfAccess, but applies AuthGuard('jwt'), which a request of + // an access cannot pass, hence the guards tell the two decorators apart + it('Applies the guard of the access to each tool', () => { + const toolMethodNames = getToolMethodNames(); + + expect(toolMethodNames.length).toBeGreaterThan(0); + + const toolMethodNamesWithoutGuardOfAccess = toolMethodNames.filter( + (methodName) => { + return !getMetadataOfMethod( + GUARDS_METADATA, + methodName + )?.includes(AccessGuard); + } ); - }); - afterEach(() => { - jest.restoreAllMocks(); + expect(toolMethodNamesWithoutGuardOfAccess).toEqual([]); }); - describe('Import activities', () => { - it('Requires the scope to create an activity', () => { - expect( - Reflect.getMetadata( - REQUIRES_SCOPE_KEY, - GhostfolioMcpController.prototype.importActivities - ) - ).toEqual([scopes.activityCreate]); - }); - - it('Refuses a user without the permission to create an activity', async () => { - setupUser([]); - - await expect( - controller.importActivities(impersonation, { - activities: [createActivity()] - }) - ).rejects.toThrow(HttpException); - - expect(importService.import).not.toHaveBeenCalled(); - }); - - it('Gives the number of the imported and of the skipped activities', async () => { - setupUser([permissions.createActivity]); - - jest - .spyOn(importService, 'import') - .mockResolvedValue([{ id: 'activity-id' } as Activity]); - - expect( - await controller.importActivities(impersonation, { - activities: [createActivity(), createActivity({ quantity: 2 })] - }) - ).toEqual({ - content: [ - { - text: 'Imported activities: 1\nSkipped duplicate activities: 1', - type: 'text' - } - ] - }); - }); - - it('Resolves the mask of the data source of the Ghostfolio data provider', async () => { - setupUser([permissions.createActivity]); - - configuration.DATA_SOURCES_GHOSTFOLIO_DATA_PROVIDER = [DataSource.YAHOO]; - configuration.ENABLE_FEATURE_SUBSCRIPTION = true; - - await controller.importActivities(impersonation, { - activities: [createActivity({ dataSource: DataSource.GHOSTFOLIO })] - }); - - expect(importService.import).toHaveBeenCalledWith( - expect.objectContaining({ - activitiesDto: [ - expect.objectContaining({ dataSource: DataSource.YAHOO }) - ] - }) - ); - }); - - it('Keeps the data source if the subscription is not enabled', async () => { - setupUser([permissions.createActivity]); - - configuration.DATA_SOURCES_GHOSTFOLIO_DATA_PROVIDER = [DataSource.YAHOO]; - configuration.ENABLE_FEATURE_SUBSCRIPTION = false; - - await controller.importActivities(impersonation, { - activities: [createActivity({ dataSource: DataSource.GHOSTFOLIO })] - }); - - expect(importService.import).toHaveBeenCalledWith( - expect.objectContaining({ - activitiesDto: [ - expect.objectContaining({ dataSource: DataSource.GHOSTFOLIO }) - ] - }) - ); - }); - - it('Passes on the message of a validation only', async () => { - setupUser([permissions.createActivity]); - - jest - .spyOn(importService, 'import') - .mockRejectedValue( - new ImportValidationError('activities.0.symbol ("X") is not valid') - ); - - await expect( - controller.importActivities(impersonation, { - activities: [createActivity()] - }) - ).rejects.toThrow( - new RpcException('activities.0.symbol ("X") is not valid') - ); - }); - - it('Hides the message of an unexpected error and writes it to the log', async () => { - setupUser([permissions.createActivity]); - - const error = new Error( - 'Unique constraint failed on the fields: (dataSource)' - ); - - const logError = jest - .spyOn(Logger.prototype, 'error') - .mockImplementation(); - - jest.spyOn(importService, 'import').mockRejectedValue(error); - - await expect( - controller.importActivities(impersonation, { - activities: [createActivity()] - }) - ).rejects.toThrow( - new RpcException(getReasonPhrase(StatusCodes.INTERNAL_SERVER_ERROR)) - ); - - expect(logError).toHaveBeenCalledWith(error); - }); - - it('Does not write the message of a validation to the log', async () => { - setupUser([permissions.createActivity]); - - const logError = jest - .spyOn(Logger.prototype, 'error') - .mockImplementation(); - - jest - .spyOn(importService, 'import') - .mockRejectedValue( - new ImportValidationError('activities.0.accountId ("X") is not valid') - ); - - await expect( - controller.importActivities(impersonation, { - activities: [createActivity({ accountId: 'X' })] - }) - ).rejects.toThrow(RpcException); - - expect(logError).not.toHaveBeenCalled(); - }); + it('Requires the scope to create an activity for the tool to import activities', () => { + expect( + getMetadataOfMethod(REQUIRES_SCOPE_KEY, 'importActivities') + ).toEqual([scopes.activityCreate]); }); - describe('Parameters of the tool to import activities', () => { - function parse(activities: unknown[]) { - return IMPORT_ACTIVITIES_PARAMETERS.safeParse({ activities }).success; - } - - it('Refuses a currency in lower case', () => { - expect(parse([createActivity({ currency: 'usd' })])).toBe(false); - }); - - it('Accepts a currency in upper case', () => { - expect(parse([createActivity({ currency: 'USD' })])).toBe(true); - }); - - it('Refuses a date at or before the epoch', () => { - expect(parse([createActivity({ date: '0000-01-01' })])).toBe(false); - }); - - it('Refuses an empty symbol', () => { - expect(parse([createActivity({ symbol: '' })])).toBe(false); - }); - - it('Refuses an empty identifier of an account', () => { - expect(parse([createActivity({ accountId: '' })])).toBe(false); - }); - - it('Removes a tag, because the tool takes no tag', () => { - expect( - IMPORT_ACTIVITIES_PARAMETERS.parse({ - activities: [createActivity({ tags: ['tag-id'] })] - }).activities[0] - ).not.toHaveProperty('tags'); - }); - - it(`Refuses more than ${MCP_MAX_ACTIVITIES} activities`, () => { - expect( - parse( - Array.from({ length: MCP_MAX_ACTIVITIES + 1 }, () => { - return createActivity(); - }) - ) - ).toBe(false); - }); + // The tools have no try and catch, hence the filter is the only guarantee + // that an unexpected exception does not expose internals + it('Applies the filter of the exceptions of the tools', () => { + expect( + Reflect.getMetadata(EXCEPTION_FILTERS_METADATA, GhostfolioMcpController) + ).toEqual([McpToolExceptionFilter]); }); }); diff --git a/apps/api/src/app/endpoints/mcp/mcp.controller.ts b/apps/api/src/app/endpoints/mcp/mcp.controller.ts index baf68659b..150347a9b 100644 --- a/apps/api/src/app/endpoints/mcp/mcp.controller.ts +++ b/apps/api/src/app/endpoints/mcp/mcp.controller.ts @@ -1,156 +1,27 @@ -import { AiService } from '@ghostfolio/api/app/endpoints/ai/ai.service'; -import { ImportValidationError } from '@ghostfolio/api/app/import/errors/import-validation.error'; -import { ImportService } from '@ghostfolio/api/app/import/import.service'; -import { UserService } from '@ghostfolio/api/app/user/user.service'; import { Impersonation } from '@ghostfolio/api/decorators/impersonation.decorator'; import { RequiresScopeOfAccess } from '@ghostfolio/api/decorators/requires-scope-of-access.decorator'; -import { DATE_RANGE_PATTERN } from '@ghostfolio/api/dtos/date-range-filter.dto'; import { McpToolExceptionFilter } from '@ghostfolio/api/filters/mcp-tool-exception.filter'; -import { getUnmaskedGhostfolioDataSource } from '@ghostfolio/api/helper/data-source.helper'; -import { ApiService } from '@ghostfolio/api/services/api/api.service'; -import { ConfigurationService } from '@ghostfolio/api/services/configuration/configuration.service'; -import { getIntervalFromDateRange } from '@ghostfolio/common/calculation-helper'; -import { - DATE_RANGES, - DEFAULT_LANGUAGE_CODE, - MCP_MAX_ACCOUNTS, - MCP_MAX_ACTIVITIES -} from '@ghostfolio/common/config'; -import { - isValidCurrencyCode, - isValidDateAfter1970 -} from '@ghostfolio/common/helper'; -import { Activity } from '@ghostfolio/common/interfaces'; -import { hasPermission, permissions } from '@ghostfolio/common/permissions'; +import { PortfolioTableService } from '@ghostfolio/api/services/portfolio-table/portfolio-table.service'; +import { MCP_MAX_ACTIVITIES } from '@ghostfolio/common/config'; import { scopes } from '@ghostfolio/common/scopes'; import type { ImpersonationContext } from '@ghostfolio/common/types'; -import { HttpException, Logger, UseFilters } from '@nestjs/common'; -import { Payload, RpcException } from '@nestjs/microservices'; -import { AssetClass, DataSource, Type as ActivityType } from '@prisma/client'; +import { UseFilters } from '@nestjs/common'; +import { Payload } from '@nestjs/microservices'; import { McpController, Tool } from '@rekog/mcp-nest'; -import { getReasonPhrase, StatusCodes } from 'http-status-codes'; import { z } from 'zod'; -const GET_ACCOUNTS_PARAMETERS = z.object({ - accountIds: z - .array(z.string().min(1)) - .min(1) - .max(MCP_MAX_ACCOUNTS) - .optional() - .describe( - `The identifiers of the accounts to get, at most ${MCP_MAX_ACCOUNTS}` - ), - assetClasses: z - .array(z.enum(AssetClass)) - .min(1) - .optional() - .describe('The asset classes of the accounts to get'), - holding: z - .object({ - dataSource: z - .enum(DataSource) - .describe('The data source of the asset profile'), - symbol: z.string().describe('The symbol of the asset profile') - }) - .optional() - .describe('The asset profile of the accounts to get') -}); - -const GET_ACTIVITIES_PARAMETERS = z.object({ - activityTypes: z - .array(z.enum(ActivityType)) - .min(1) - .optional() - .describe('The types of the activities to get'), - assetClasses: z - .array(z.enum(AssetClass)) - .min(1) - .optional() - .describe('The asset classes of the activities to get'), - holding: z - .object({ - dataSource: z - .enum(DataSource) - .describe('The data source of the asset profile'), - symbol: z.string().describe('The symbol of the asset profile') - }) - .optional() - .describe('The asset profile of the activities to get'), - range: z - .string() - .regex(DATE_RANGE_PATTERN) - .optional() - .describe( - `The date range of the activities to get, either ${DATE_RANGES.join( - ', ' - )} or a calendar year like 2024` - ), - skip: z - .number() - .int() - .min(0) - .optional() - .describe('The number of activities to skip'), - take: z - .number() - .int() - .min(1) - .max(MCP_MAX_ACTIVITIES) - .optional() - .describe(`The number of activities to get, at most ${MCP_MAX_ACTIVITIES}`) -}); - -export const IMPORT_ACTIVITIES_PARAMETERS = z.object({ - activities: z - .array( - z.object({ - accountId: z - .string() - .min(1) - .optional() - .describe('The identifier of the account of the activity'), - comment: z.string().optional().describe('The comment of the activity'), - currency: z - .string() - .refine(isValidCurrencyCode) - .describe( - 'The currency of the fee and of the unit price, as an ISO 4217 code in upper case' - ), - dataSource: z - .enum(DataSource) - .optional() - .describe('The data source of the asset profile'), - date: z - .string() - .refine(isValidDateAfter1970) - .describe( - 'The date of the activity, as an ISO 8601 date or date and time' - ), - fee: z.number().min(0).describe('The fee of the activity'), - quantity: z.number().min(0).describe('The quantity of the activity'), - symbol: z.string().min(1).describe('The symbol of the asset profile'), - type: z.enum(ActivityType).describe('The type of the activity'), - unitPrice: z.number().min(0).describe('The unit price of the activity') - }) - ) - .min(1) - .max(MCP_MAX_ACTIVITIES) - .describe(`The activities to import, at most ${MCP_MAX_ACTIVITIES}`) -}); +import { + GET_ACCOUNTS_PARAMETERS, + GET_ACTIVITIES_PARAMETERS, + IMPORT_ACTIVITIES_PARAMETERS +} from './mcp.schemas'; +import { McpService } from './mcp.service'; @McpController() @UseFilters(McpToolExceptionFilter) export class GhostfolioMcpController { - private readonly logger = new Logger(GhostfolioMcpController.name); - - public constructor( - private readonly aiService: AiService, - private readonly apiService: ApiService, - private readonly configurationService: ConfigurationService, - private readonly importService: ImportService, - private readonly userService: UserService - ) {} + public constructor(private readonly mcpService: McpService) {} @RequiresScopeOfAccess(scopes.accountRead) @Tool({ @@ -159,7 +30,7 @@ export class GhostfolioMcpController { readOnlyHint: true, title: 'Get accounts' }, - description: `Gives the accounts of the portfolio with these columns: ${AiService.getAccountsTableColumnNames().join( + description: `Gives the accounts of the portfolio with these columns: ${PortfolioTableService.getAccountsTableColumnNames().join( ', ' )}. The allocation in percentage is relative to the accounts of the result, hence the parameters change it.`, name: 'get-accounts', @@ -167,23 +38,9 @@ export class GhostfolioMcpController { }) public async getAccounts( @Impersonation() { userId }: ImpersonationContext, - @Payload() - { - accountIds, - assetClasses, - holding - }: z.infer + @Payload() parameters: z.infer ) { - const filters = this.apiService.buildFiltersFromQueryParams({ - filterByAccounts: accountIds?.join(','), - filterByAssetClasses: assetClasses?.join(','), - filterByDataSource: holding?.dataSource, - filterBySymbol: holding?.symbol - }); - - const table = await this.aiService.getAccountsTable({ filters, userId }); - - return { content: [{ text: table, type: 'text' as const }] }; + return this.mcpService.getAccounts({ ...parameters, userId }); } @RequiresScopeOfAccess(scopes.activityRead) @@ -193,52 +50,21 @@ export class GhostfolioMcpController { readOnlyHint: true, title: 'Get activities' }, - description: `Gives the activities of the portfolio, the most recent first, with these columns: ${AiService.getActivitiesTableColumnNames().join( + description: `Gives the activities of the portfolio, the most recent first, with these columns: ${PortfolioTableService.getActivitiesTableColumnNames().join( ', ' )}. At most ${MCP_MAX_ACTIVITIES} activities are given per call, hence narrow the result with the parameters or get the further activities with the skip parameter.`, name: 'get-activities', parameters: GET_ACTIVITIES_PARAMETERS }) public async getActivities( - @Impersonation() - { userId, userSettings }: ImpersonationContext, - @Payload() - { - activityTypes, - assetClasses, - holding, - range, - skip, - take - }: z.infer + @Impersonation() { userId, userSettings }: ImpersonationContext, + @Payload() parameters: z.infer ) { - let endDate: Date | undefined; - let startDate: Date | undefined; - - if (range) { - ({ endDate, startDate } = getIntervalFromDateRange({ - dateRange: range - })); - } - - const filters = this.apiService.buildFiltersFromQueryParams({ - filterByAssetClasses: assetClasses?.join(','), - filterByDataSource: holding?.dataSource, - filterBySymbol: holding?.symbol - }); - - const table = await this.aiService.getActivitiesTable({ - endDate, - filters, - skip, - startDate, + return this.mcpService.getActivities({ + ...parameters, userId, - take: take ?? MCP_MAX_ACTIVITIES, - types: activityTypes, userCurrency: userSettings.baseCurrency }); - - return { content: [{ text: table, type: 'text' as const }] }; } @RequiresScopeOfAccess(scopes.portfolioRead) @@ -248,22 +74,13 @@ export class GhostfolioMcpController { readOnlyHint: true, title: 'Get portfolio' }, - description: `Gives the holdings of the portfolio with these columns: ${AiService.getHoldingsTableColumnNames().join( + description: `Gives the holdings of the portfolio with these columns: ${PortfolioTableService.getHoldingsTableColumnNames().join( ', ' )}.`, name: 'get-portfolio' }) - public async getPortfolio( - @Impersonation() { userId, userSettings }: ImpersonationContext - ) { - const prompt = await this.aiService.getPrompt({ - userId, - languageCode: DEFAULT_LANGUAGE_CODE, - mode: 'portfolio', - userCurrency: userSettings.baseCurrency - }); - - return { content: [{ text: prompt, type: 'text' as const }] }; + public async getPortfolio(@Impersonation() { userId }: ImpersonationContext) { + return this.mcpService.getPortfolio({ userId }); } /** @@ -286,67 +103,8 @@ export class GhostfolioMcpController { }) public async importActivities( @Impersonation() { userId }: ImpersonationContext, - @Payload() { activities }: z.infer + @Payload() parameters: z.infer ) { - const user = await this.userService.user({ id: userId }); - - if (!hasPermission(user?.permissions, permissions.createActivity)) { - throw new HttpException( - getReasonPhrase(StatusCodes.FORBIDDEN), - StatusCodes.FORBIDDEN - ); - } - - const ghostfolioDataSources = this.configurationService.get( - 'ENABLE_FEATURE_SUBSCRIPTION' - ) - ? this.configurationService.get('DATA_SOURCES_GHOSTFOLIO_DATA_PROVIDER') - : []; - - const activitiesDto = activities.map((activity) => { - return { - ...activity, - dataSource: getUnmaskedGhostfolioDataSource({ - ghostfolioDataSources, - dataSource: activity.dataSource - }) - }; - }); - - let importedActivities: Activity[]; - - try { - importedActivities = await this.importService.import({ - activitiesDto, - user, - accountsWithBalancesDto: [], - assetProfilesWithMarketDataDto: [], - platformsDto: [], - tagsDto: [] - }); - } catch (error) { - // The message of a validation names the activity which is not valid and - // is written for the caller, hence it is passed on - if (error instanceof ImportValidationError) { - throw new RpcException(error.message); - } - - // Every other message can carry internals of the application, hence it - // is written to the log and the reason phrase is passed on instead - this.logger.error(error); - - throw new RpcException( - getReasonPhrase(StatusCodes.INTERNAL_SERVER_ERROR) - ); - } - - const text = [ - `Imported activities: ${importedActivities.length}`, - `Skipped duplicate activities: ${ - activities.length - importedActivities.length - }` - ].join('\n'); - - return { content: [{ text, type: 'text' as const }] }; + return this.mcpService.importActivities({ ...parameters, userId }); } } diff --git a/apps/api/src/app/endpoints/mcp/mcp.module.ts b/apps/api/src/app/endpoints/mcp/mcp.module.ts index e2fbce79f..b782736c8 100644 --- a/apps/api/src/app/endpoints/mcp/mcp.module.ts +++ b/apps/api/src/app/endpoints/mcp/mcp.module.ts @@ -1,10 +1,10 @@ -import { AiModule } from '@ghostfolio/api/app/endpoints/ai/ai.module'; import { ImportModule } from '@ghostfolio/api/app/import/import.module'; import { UserModule } from '@ghostfolio/api/app/user/user.module'; import { environment } from '@ghostfolio/api/environments/environment'; import { ApiModule } from '@ghostfolio/api/services/api/api.module'; import { ConfigurationModule } from '@ghostfolio/api/services/configuration/configuration.module'; import { ConfigurationService } from '@ghostfolio/api/services/configuration/configuration.service'; +import { PortfolioTableModule } from '@ghostfolio/api/services/portfolio-table/portfolio-table.module'; import { MCP_ENDPOINT } from '@ghostfolio/common/config'; import { Module } from '@nestjs/common'; @@ -15,11 +15,19 @@ import { } from '@rekog/mcp-nest'; import { GhostfolioMcpController } from './mcp.controller'; +import { McpService } from './mcp.service'; @Module({ controllers: [GhostfolioMcpController], - imports: [AiModule, ApiModule, ConfigurationModule, ImportModule, UserModule], + imports: [ + ApiModule, + ConfigurationModule, + ImportModule, + PortfolioTableModule, + UserModule + ], providers: [ + McpService, { inject: [ConfigurationService], provide: MCP_STRATEGY, diff --git a/apps/api/src/app/endpoints/mcp/mcp.schemas.spec.ts b/apps/api/src/app/endpoints/mcp/mcp.schemas.spec.ts new file mode 100644 index 000000000..2d38923b9 --- /dev/null +++ b/apps/api/src/app/endpoints/mcp/mcp.schemas.spec.ts @@ -0,0 +1,48 @@ +import { MCP_MAX_ACTIVITIES } from '@ghostfolio/common/config'; + +import { IMPORT_ACTIVITIES_PARAMETERS } from './mcp.schemas'; +import { createActivity } from './mcp.test-utils'; + +describe('IMPORT_ACTIVITIES_PARAMETERS', () => { + function parse(activities: unknown[]) { + return IMPORT_ACTIVITIES_PARAMETERS.safeParse({ activities }).success; + } + + it('Refuses a currency in lower case', () => { + expect(parse([createActivity({ currency: 'usd' })])).toBe(false); + }); + + it('Accepts a currency in upper case', () => { + expect(parse([createActivity({ currency: 'USD' })])).toBe(true); + }); + + it('Refuses a date at or before the epoch', () => { + expect(parse([createActivity({ date: '0000-01-01' })])).toBe(false); + }); + + it('Refuses an empty symbol', () => { + expect(parse([createActivity({ symbol: '' })])).toBe(false); + }); + + it('Refuses an empty identifier of an account', () => { + expect(parse([createActivity({ accountId: '' })])).toBe(false); + }); + + it('Removes a tag, because the tool takes no tag', () => { + expect( + IMPORT_ACTIVITIES_PARAMETERS.parse({ + activities: [{ ...createActivity(), tags: ['tag-id'] }] + }).activities[0] + ).not.toHaveProperty('tags'); + }); + + it(`Refuses more than ${MCP_MAX_ACTIVITIES} activities`, () => { + expect( + parse( + Array.from({ length: MCP_MAX_ACTIVITIES + 1 }, () => { + return createActivity(); + }) + ) + ).toBe(false); + }); +}); diff --git a/apps/api/src/app/endpoints/mcp/mcp.schemas.ts b/apps/api/src/app/endpoints/mcp/mcp.schemas.ts new file mode 100644 index 000000000..44568890a --- /dev/null +++ b/apps/api/src/app/endpoints/mcp/mcp.schemas.ts @@ -0,0 +1,115 @@ +import { DATE_RANGE_PATTERN } from '@ghostfolio/api/dtos/date-range-filter.dto'; +import { + DATE_RANGES, + MCP_MAX_ACCOUNTS, + MCP_MAX_ACTIVITIES +} from '@ghostfolio/common/config'; +import { + isValidCurrencyCode, + isValidDateAfter1970 +} from '@ghostfolio/common/helper'; + +import { AssetClass, DataSource, Type as ActivityType } from '@prisma/client'; +import { z } from 'zod'; + +const HOLDING_PARAMETER = z.object({ + dataSource: z + .enum(DataSource) + .describe('The data source of the asset profile'), + symbol: z.string().describe('The symbol of the asset profile') +}); + +export const GET_ACCOUNTS_PARAMETERS = z.object({ + accountIds: z + .array(z.string().min(1)) + .min(1) + .max(MCP_MAX_ACCOUNTS) + .optional() + .describe( + `The identifiers of the accounts to get, at most ${MCP_MAX_ACCOUNTS}` + ), + assetClasses: z + .array(z.enum(AssetClass)) + .min(1) + .optional() + .describe('The asset classes of the accounts to get'), + holding: HOLDING_PARAMETER.optional().describe( + 'The asset profile of the accounts to get' + ) +}); + +export const GET_ACTIVITIES_PARAMETERS = z.object({ + activityTypes: z + .array(z.enum(ActivityType)) + .min(1) + .optional() + .describe('The types of the activities to get'), + assetClasses: z + .array(z.enum(AssetClass)) + .min(1) + .optional() + .describe('The asset classes of the activities to get'), + holding: HOLDING_PARAMETER.optional().describe( + 'The asset profile of the activities to get' + ), + range: z + .string() + .regex(DATE_RANGE_PATTERN) + .optional() + .describe( + `The date range of the activities to get, either ${DATE_RANGES.join( + ', ' + )} or a calendar year like 2024` + ), + skip: z + .number() + .int() + .min(0) + .optional() + .describe('The number of activities to skip'), + take: z + .number() + .int() + .min(1) + .max(MCP_MAX_ACTIVITIES) + .default(MCP_MAX_ACTIVITIES) + .describe(`The number of activities to get, at most ${MCP_MAX_ACTIVITIES}`) +}); + +export const IMPORT_ACTIVITIES_PARAMETERS = z.object({ + activities: z + .array( + z.object({ + accountId: z + .string() + .min(1) + .optional() + .describe('The identifier of the account of the activity'), + comment: z.string().optional().describe('The comment of the activity'), + currency: z + .string() + .refine(isValidCurrencyCode) + .describe( + 'The currency of the fee and of the unit price, as an ISO 4217 code in upper case' + ), + dataSource: z + .enum(DataSource) + .optional() + .describe('The data source of the asset profile'), + date: z + .string() + .refine(isValidDateAfter1970) + .describe( + 'The date of the activity, as an ISO 8601 date or date and time' + ), + fee: z.number().min(0).describe('The fee of the activity'), + quantity: z.number().min(0).describe('The quantity of the activity'), + symbol: z.string().min(1).describe('The symbol of the asset profile'), + type: z.enum(ActivityType).describe('The type of the activity'), + unitPrice: z.number().min(0).describe('The unit price of the activity') + }) + ) + .min(1) + .max(MCP_MAX_ACTIVITIES) + .describe(`The activities to import, at most ${MCP_MAX_ACTIVITIES}`) +}); diff --git a/apps/api/src/app/endpoints/mcp/mcp.service.spec.ts b/apps/api/src/app/endpoints/mcp/mcp.service.spec.ts new file mode 100644 index 000000000..ac074c791 --- /dev/null +++ b/apps/api/src/app/endpoints/mcp/mcp.service.spec.ts @@ -0,0 +1,279 @@ +import { ImportValidationError } from '@ghostfolio/api/app/import/errors/import-validation.error'; +import { ImportService } from '@ghostfolio/api/app/import/import.service'; +import { UserService } from '@ghostfolio/api/app/user/user.service'; +import { ApiService } from '@ghostfolio/api/services/api/api.service'; +import { ConfigurationService } from '@ghostfolio/api/services/configuration/configuration.service'; +import { PortfolioTableService } from '@ghostfolio/api/services/portfolio-table/portfolio-table.service'; +import { + DEFAULT_LANGUAGE_CODE, + MCP_MAX_ACTIVITIES +} from '@ghostfolio/common/config'; +import { Activity, Filter } from '@ghostfolio/common/interfaces'; +import { permissions } from '@ghostfolio/common/permissions'; +import type { UserWithSettings } from '@ghostfolio/common/types'; + +import { HttpException } from '@nestjs/common'; +import { AssetClass, DataSource, Type as ActivityType } from '@prisma/client'; + +import { McpService } from './mcp.service'; +import { createActivity } from './mcp.test-utils'; + +describe('McpService', () => { + const filters: Filter[] = [{ id: 'account-id', type: 'ACCOUNT' }]; + const userCurrency = 'USD'; + const userId = 'user-id'; + + let apiService: ApiService; + let configuration: Record; + let configurationService: ConfigurationService; + let importService: ImportService; + let mcpService: McpService; + let portfolioTableService: PortfolioTableService; + let userService: UserService; + + function setupUser(userPermissions: string[]) { + jest.spyOn(userService, 'user').mockResolvedValue({ + permissions: userPermissions + } as UserWithSettings); + } + + beforeEach(() => { + configuration = { + DATA_SOURCES_GHOSTFOLIO_DATA_PROVIDER: [], + ENABLE_FEATURE_SUBSCRIPTION: false + }; + + configurationService = { + get: jest.fn().mockImplementation((key: string) => { + return configuration[key]; + }) + } as unknown as ConfigurationService; + + apiService = { + buildFiltersFromQueryParams: jest.fn().mockReturnValue(filters) + } as unknown as ApiService; + + importService = { + import: jest.fn().mockResolvedValue([]) + } as unknown as ImportService; + + portfolioTableService = { + getAccountsTable: jest.fn().mockResolvedValue('## Accounts'), + getActivitiesTable: jest.fn().mockResolvedValue('## Activities'), + getHoldingsTable: jest.fn().mockResolvedValue('## Holdings') + } as unknown as PortfolioTableService; + + userService = { user: jest.fn() } as unknown as UserService; + + mcpService = new McpService( + apiService, + configurationService, + importService, + portfolioTableService, + userService + ); + }); + + afterEach(() => { + jest.restoreAllMocks(); + }); + + describe('getAccounts', () => { + it('Maps the parameters of the tool to the filters', async () => { + await mcpService.getAccounts({ + userId, + accountIds: ['account-id'], + assetClasses: [AssetClass.EQUITY], + holding: { dataSource: DataSource.YAHOO, symbol: 'AAPL' } + }); + + expect(apiService.buildFiltersFromQueryParams).toHaveBeenCalledWith({ + filterByAccounts: ['account-id'], + filterByAssetClasses: [AssetClass.EQUITY], + filterByDataSource: DataSource.YAHOO, + filterBySymbol: 'AAPL' + }); + }); + + it('Gives the table of the accounts of the filters', async () => { + expect(await mcpService.getAccounts({ userId })).toEqual({ + content: [{ text: '## Accounts', type: 'text' }] + }); + + expect(portfolioTableService.getAccountsTable).toHaveBeenCalledWith({ + filters, + userId + }); + }); + }); + + describe('getActivities', () => { + function getActivities( + parameters: Partial[0]> = {} + ) { + return mcpService.getActivities({ + userCurrency, + userId, + take: MCP_MAX_ACTIVITIES, + ...parameters + }); + } + + it('Maps the parameters of the tool to the filters', async () => { + await getActivities({ + assetClasses: [AssetClass.EQUITY], + holding: { dataSource: DataSource.YAHOO, symbol: 'AAPL' } + }); + + expect(apiService.buildFiltersFromQueryParams).toHaveBeenCalledWith({ + filterByAssetClasses: [AssetClass.EQUITY], + filterByDataSource: DataSource.YAHOO, + filterBySymbol: 'AAPL' + }); + }); + + it('Changes the range into the start date and the end date', async () => { + await getActivities({ range: '2024' }); + + expect(portfolioTableService.getActivitiesTable).toHaveBeenCalledWith( + expect.objectContaining({ + endDate: new Date('2024-12-31T23:59:59.999Z'), + startDate: new Date('2023-12-31T23:59:59.999Z') + }) + ); + }); + + it('Gives no date if the range is absent', async () => { + await getActivities(); + + expect(portfolioTableService.getActivitiesTable).toHaveBeenCalledWith( + expect.objectContaining({ endDate: undefined, startDate: undefined }) + ); + }); + + it('Gives the table of the activities of the filters', async () => { + expect( + await getActivities({ activityTypes: [ActivityType.BUY], skip: 10 }) + ).toEqual({ content: [{ text: '## Activities', type: 'text' }] }); + + expect(portfolioTableService.getActivitiesTable).toHaveBeenCalledWith({ + filters, + userCurrency, + userId, + endDate: undefined, + skip: 10, + startDate: undefined, + take: MCP_MAX_ACTIVITIES, + types: [ActivityType.BUY] + }); + }); + }); + + describe('getPortfolio', () => { + it('Gives the table of the holdings in the default language', async () => { + expect(await mcpService.getPortfolio({ userId })).toEqual({ + content: [{ text: '## Holdings', type: 'text' }] + }); + + expect(portfolioTableService.getHoldingsTable).toHaveBeenCalledWith({ + userId, + languageCode: DEFAULT_LANGUAGE_CODE + }); + }); + }); + + describe('importActivities', () => { + it('Refuses a user without the permission to create an activity', async () => { + setupUser([]); + + await expect( + mcpService.importActivities({ + userId, + activities: [createActivity()] + }) + ).rejects.toThrow(HttpException); + + expect(importService.import).not.toHaveBeenCalled(); + }); + + it('Gives the number of the imported and of the skipped activities', async () => { + setupUser([permissions.createActivity]); + + jest + .spyOn(importService, 'import') + .mockResolvedValue([{ id: 'activity-id' } as Activity]); + + expect( + await mcpService.importActivities({ + userId, + activities: [createActivity(), createActivity({ quantity: 2 })] + }) + ).toEqual({ + content: [ + { + text: 'Imported activities: 1\nSkipped duplicate activities: 1', + type: 'text' + } + ] + }); + }); + + it('Resolves the mask of the data source of the Ghostfolio data provider', async () => { + setupUser([permissions.createActivity]); + + configuration.DATA_SOURCES_GHOSTFOLIO_DATA_PROVIDER = [DataSource.YAHOO]; + configuration.ENABLE_FEATURE_SUBSCRIPTION = true; + + await mcpService.importActivities({ + userId, + activities: [createActivity({ dataSource: DataSource.GHOSTFOLIO })] + }); + + expect(importService.import).toHaveBeenCalledWith( + expect.objectContaining({ + activitiesDto: [ + expect.objectContaining({ dataSource: DataSource.YAHOO }) + ] + }) + ); + }); + + it('Keeps the data source if the subscription is not enabled', async () => { + setupUser([permissions.createActivity]); + + configuration.DATA_SOURCES_GHOSTFOLIO_DATA_PROVIDER = [DataSource.YAHOO]; + configuration.ENABLE_FEATURE_SUBSCRIPTION = false; + + await mcpService.importActivities({ + userId, + activities: [createActivity({ dataSource: DataSource.GHOSTFOLIO })] + }); + + expect(importService.import).toHaveBeenCalledWith( + expect.objectContaining({ + activitiesDto: [ + expect.objectContaining({ dataSource: DataSource.GHOSTFOLIO }) + ] + }) + ); + }); + + // The McpToolExceptionFilter maps the error, hence the tool passes it on + it('Passes on an error of the import', async () => { + setupUser([permissions.createActivity]); + + const error = new ImportValidationError( + 'activities.0.symbol ("X") is not valid' + ); + + jest.spyOn(importService, 'import').mockRejectedValue(error); + + await expect( + mcpService.importActivities({ + userId, + activities: [createActivity()] + }) + ).rejects.toBe(error); + }); + }); +}); diff --git a/apps/api/src/app/endpoints/mcp/mcp.service.ts b/apps/api/src/app/endpoints/mcp/mcp.service.ts new file mode 100644 index 000000000..3cd95aaa0 --- /dev/null +++ b/apps/api/src/app/endpoints/mcp/mcp.service.ts @@ -0,0 +1,176 @@ +import { ImportService } from '@ghostfolio/api/app/import/import.service'; +import { UserService } from '@ghostfolio/api/app/user/user.service'; +import { getUnmaskedGhostfolioDataSource } from '@ghostfolio/api/helper/data-source.helper'; +import { ApiService } from '@ghostfolio/api/services/api/api.service'; +import { ConfigurationService } from '@ghostfolio/api/services/configuration/configuration.service'; +import { PortfolioTableService } from '@ghostfolio/api/services/portfolio-table/portfolio-table.service'; +import { getIntervalFromDateRange } from '@ghostfolio/common/calculation-helper'; +import { DEFAULT_LANGUAGE_CODE } from '@ghostfolio/common/config'; +import { hasPermission, permissions } from '@ghostfolio/common/permissions'; + +import { HttpException, Injectable } from '@nestjs/common'; +import { getReasonPhrase, StatusCodes } from 'http-status-codes'; +import { z } from 'zod'; + +import { + GET_ACCOUNTS_PARAMETERS, + GET_ACTIVITIES_PARAMETERS, + IMPORT_ACTIVITIES_PARAMETERS +} from './mcp.schemas'; + +@Injectable() +export class McpService { + public constructor( + private readonly apiService: ApiService, + private readonly configurationService: ConfigurationService, + private readonly importService: ImportService, + private readonly portfolioTableService: PortfolioTableService, + private readonly userService: UserService + ) {} + + public async getAccounts({ + accountIds, + assetClasses, + holding, + userId + }: z.infer & { userId: string }) { + const filters = this.apiService.buildFiltersFromQueryParams({ + filterByAccounts: accountIds, + filterByAssetClasses: assetClasses, + filterByDataSource: holding?.dataSource, + filterBySymbol: holding?.symbol + }); + + const table = await this.portfolioTableService.getAccountsTable({ + filters, + userId + }); + + return this.getTextResult(table); + } + + public async getActivities({ + activityTypes, + assetClasses, + holding, + range, + skip, + take, + userCurrency, + userId + }: z.infer & { + userCurrency: string; + userId: string; + }) { + let endDate: Date | undefined; + let startDate: Date | undefined; + + if (range) { + ({ endDate, startDate } = getIntervalFromDateRange({ + dateRange: range + })); + } + + const filters = this.apiService.buildFiltersFromQueryParams({ + filterByAssetClasses: assetClasses, + filterByDataSource: holding?.dataSource, + filterBySymbol: holding?.symbol + }); + + const table = await this.portfolioTableService.getActivitiesTable({ + endDate, + filters, + skip, + startDate, + take, + userCurrency, + userId, + types: activityTypes + }); + + return this.getTextResult(table); + } + + public async getPortfolio({ userId }: { userId: string }) { + const table = await this.portfolioTableService.getHoldingsTable({ + userId, + languageCode: DEFAULT_LANGUAGE_CODE + }); + + return this.getTextResult(table); + } + + public async importActivities({ + activities, + userId + }: z.infer & { userId: string }) { + const user = await this.getUserWithPermission({ + userId, + permission: permissions.createActivity + }); + + const ghostfolioDataSources = this.configurationService.get( + 'ENABLE_FEATURE_SUBSCRIPTION' + ) + ? this.configurationService.get('DATA_SOURCES_GHOSTFOLIO_DATA_PROVIDER') + : []; + + const activitiesDto = activities.map((activity) => { + return { + ...activity, + dataSource: getUnmaskedGhostfolioDataSource({ + ghostfolioDataSources, + dataSource: activity.dataSource + }) + }; + }); + + // The filter passes on the message of a CallerFacingError, which is + // written for the caller, and hides the message of every other error + const importedActivities = await this.importService.import({ + activitiesDto, + user, + accountsWithBalancesDto: [], + assetProfilesWithMarketDataDto: [], + platformsDto: [], + tagsDto: [] + }); + + const text = [ + `Imported activities: ${importedActivities.length}`, + `Skipped duplicate activities: ${ + activities.length - importedActivities.length + }` + ].join('\n'); + + return this.getTextResult(text); + } + + private getTextResult(text: string) { + return { content: [{ text, type: 'text' as const }] }; + } + + /** + * Gives the user of the access, if the role of the user has the permission. + * The scope of the access is evaluated separately by the ScopeGuard, hence a + * tool which changes data has to call this. + */ + private async getUserWithPermission({ + permission, + userId + }: { + permission: string; + userId: string; + }) { + const user = await this.userService.user({ id: userId }); + + if (!hasPermission(user?.permissions, permission)) { + throw new HttpException( + getReasonPhrase(StatusCodes.FORBIDDEN), + StatusCodes.FORBIDDEN + ); + } + + return user; + } +} diff --git a/apps/api/src/app/endpoints/mcp/mcp.test-utils.ts b/apps/api/src/app/endpoints/mcp/mcp.test-utils.ts new file mode 100644 index 000000000..84895a64f --- /dev/null +++ b/apps/api/src/app/endpoints/mcp/mcp.test-utils.ts @@ -0,0 +1,18 @@ +import { Type as ActivityType } from '@prisma/client'; + +import { ActivityToImport } from './types/activity-to-import.type'; + +export function createActivity( + overrides: Partial = {} +): ActivityToImport { + return { + currency: 'USD', + date: '2024-01-01', + fee: 0, + quantity: 1, + symbol: 'AAPL', + type: ActivityType.BUY, + unitPrice: 100, + ...overrides + }; +} diff --git a/apps/api/src/app/endpoints/mcp/types/activity-to-import.type.ts b/apps/api/src/app/endpoints/mcp/types/activity-to-import.type.ts new file mode 100644 index 000000000..06375d200 --- /dev/null +++ b/apps/api/src/app/endpoints/mcp/types/activity-to-import.type.ts @@ -0,0 +1,7 @@ +import { z } from 'zod'; + +import { IMPORT_ACTIVITIES_PARAMETERS } from '../mcp.schemas'; + +export type ActivityToImport = z.infer< + typeof IMPORT_ACTIVITIES_PARAMETERS +>['activities'][number]; diff --git a/apps/api/src/app/import/errors/import-validation.error.ts b/apps/api/src/app/import/errors/import-validation.error.ts index a228c9933..4e96ce233 100644 --- a/apps/api/src/app/import/errors/import-validation.error.ts +++ b/apps/api/src/app/import/errors/import-validation.error.ts @@ -1,4 +1,6 @@ -export class ImportValidationError extends Error { +import { CallerFacingError } from '@ghostfolio/api/errors/caller-facing.error'; + +export class ImportValidationError extends CallerFacingError { public constructor(message: string) { super(message); diff --git a/apps/api/src/app/portfolio/get-holdings.dto.ts b/apps/api/src/app/portfolio/get-holdings.dto.ts index b776bfe0d..6e3d9669e 100644 --- a/apps/api/src/app/portfolio/get-holdings.dto.ts +++ b/apps/api/src/app/portfolio/get-holdings.dto.ts @@ -1,7 +1,8 @@ import { DateRangeFilterDto } from '@ghostfolio/api/dtos/date-range-filter.dto'; +import { SEARCH_QUERY_MAXIMUM_LENGTH } from '@ghostfolio/common/config'; import { HoldingType } from '@ghostfolio/common/types'; -import { IsIn, IsOptional, IsString } from 'class-validator'; +import { IsIn, IsOptional, IsString, MaxLength } from 'class-validator'; export class GetHoldingsDto extends DateRangeFilterDto { @IsIn(['ACTIVE', 'CLOSED'] as HoldingType[]) @@ -10,5 +11,6 @@ export class GetHoldingsDto extends DateRangeFilterDto { @IsOptional() @IsString() + @MaxLength(SEARCH_QUERY_MAXIMUM_LENGTH) query?: string; } diff --git a/apps/api/src/app/symbol/get-lookup.dto.ts b/apps/api/src/app/symbol/get-lookup.dto.ts new file mode 100644 index 000000000..0778d1b5b --- /dev/null +++ b/apps/api/src/app/symbol/get-lookup.dto.ts @@ -0,0 +1,16 @@ +import { SEARCH_QUERY_MAXIMUM_LENGTH } from '@ghostfolio/common/config'; + +import { Transform, TransformFnParams } from 'class-transformer'; +import { IsBoolean, IsString, MaxLength } from 'class-validator'; + +export class GetLookupDto { + @IsBoolean() + @Transform(({ value }: TransformFnParams) => { + return value === 'true'; + }) + includeIndices? = false; + + @IsString() + @MaxLength(SEARCH_QUERY_MAXIMUM_LENGTH) + query? = ''; +} diff --git a/apps/api/src/app/symbol/symbol.controller.ts b/apps/api/src/app/symbol/symbol.controller.ts index d28362175..9d8abb47b 100644 --- a/apps/api/src/app/symbol/symbol.controller.ts +++ b/apps/api/src/app/symbol/symbol.controller.ts @@ -27,6 +27,7 @@ import { isValid, parseISO } from 'date-fns'; import { StatusCodes, getReasonPhrase } from 'http-status-codes'; import { isEmpty } from 'lodash'; +import { GetLookupDto } from './get-lookup.dto'; import { SymbolService } from './symbol.service'; @Controller('symbol') @@ -43,11 +44,8 @@ export class SymbolController { @UseGuards(AuthGuard('jwt'), HasPermissionGuard) @UseInterceptors(TransformDataSourceInResponseInterceptor) public async lookupSymbol( - @Query('includeIndices') includeIndicesParam = 'false', - @Query('query') query = '' + @Query() { includeIndices, query }: GetLookupDto ): Promise { - const includeIndices = includeIndicesParam === 'true'; - try { return this.symbolService.lookup({ includeIndices, diff --git a/apps/api/src/app/user/user.service.ts b/apps/api/src/app/user/user.service.ts index 082aeb779..d53b3891a 100644 --- a/apps/api/src/app/user/user.service.ts +++ b/apps/api/src/app/user/user.service.ts @@ -275,7 +275,7 @@ export class UserService { } try { - const { isBlocked } = await this.throttlerStorage.increment( + const { totalHits } = await this.throttlerStorage.increment( `${THROTTLE_DAILY_KEY}-${user.id}`, THROTTLE_DAILY_TTL, maxDailyRequests, @@ -283,7 +283,7 @@ export class UserService { THROTTLE_DAILY_KEY ); - return isBlocked; + return totalHits > maxDailyRequests; } catch (error) { this.logger.error(error); diff --git a/apps/api/src/dtos/filter.dto.ts b/apps/api/src/dtos/filter.dto.ts index cb26d582b..09206984a 100644 --- a/apps/api/src/dtos/filter.dto.ts +++ b/apps/api/src/dtos/filter.dto.ts @@ -1,23 +1,44 @@ -import { IsOptional, IsString } from 'class-validator'; +import { SYMBOL_MAXIMUM_LENGTH } from '@ghostfolio/common/config'; + +import { AssetClass, DataSource } from '@prisma/client'; +import { Transform, TransformFnParams } from 'class-transformer'; +import { + IsEnum, + IsOptional, + IsString, + IsUUID, + MaxLength +} from 'class-validator'; +import { isString } from 'lodash'; export class FilterDto { @IsOptional() - @IsString() - accounts?: string; + @IsUUID(undefined, { each: true }) + @Transform(({ value }: TransformFnParams) => { + return isString(value) ? value.split(',') : value; + }) + accounts?: string[]; + @IsEnum(AssetClass, { each: true }) @IsOptional() - @IsString() - assetClasses?: string; + @Transform(({ value }: TransformFnParams) => { + return isString(value) ? value.split(',') : value; + }) + assetClasses?: AssetClass[]; + @IsEnum(DataSource) @IsOptional() - @IsString() - dataSource?: string; + dataSource?: DataSource; @IsOptional() @IsString() + @MaxLength(SYMBOL_MAXIMUM_LENGTH) symbol?: string; @IsOptional() - @IsString() - tags?: string; + @IsUUID(undefined, { each: true }) + @Transform(({ value }: TransformFnParams) => { + return isString(value) ? value.split(',') : value; + }) + tags?: string[]; } diff --git a/apps/api/src/errors/caller-facing.error.ts b/apps/api/src/errors/caller-facing.error.ts new file mode 100644 index 000000000..5b7687a19 --- /dev/null +++ b/apps/api/src/errors/caller-facing.error.ts @@ -0,0 +1,12 @@ +/** + * An error whose message is written for the caller. A filter passes such a + * message on, while it hides the message of every other error, because that + * message can carry internals of the application. + */ +export class CallerFacingError extends Error { + public constructor(message: string) { + super(message); + + this.name = 'CallerFacingError'; + } +} diff --git a/apps/api/src/filters/mcp-tool-exception.filter.spec.ts b/apps/api/src/filters/mcp-tool-exception.filter.spec.ts new file mode 100644 index 000000000..23eb6ff92 --- /dev/null +++ b/apps/api/src/filters/mcp-tool-exception.filter.spec.ts @@ -0,0 +1,83 @@ +import { ImportValidationError } from '@ghostfolio/api/app/import/errors/import-validation.error'; +import { PortfolioSnapshotComputationError } from '@ghostfolio/api/app/portfolio/errors/portfolio-snapshot-computation.error'; + +import { ForbiddenException, Logger } from '@nestjs/common'; +import { getReasonPhrase, StatusCodes } from 'http-status-codes'; +import { firstValueFrom } from 'rxjs'; + +import { McpToolExceptionFilter } from './mcp-tool-exception.filter'; + +describe('McpToolExceptionFilter', () => { + let filter: McpToolExceptionFilter; + let logError: jest.SpyInstance; + + async function getErrorOfException(exception: unknown) { + try { + await firstValueFrom(filter.catch(exception)); + } catch (error) { + return error; + } + + throw new Error('The filter gave no error'); + } + + beforeEach(() => { + filter = new McpToolExceptionFilter(); + + logError = jest.spyOn(Logger.prototype, 'error').mockImplementation(); + }); + + afterEach(() => { + jest.restoreAllMocks(); + }); + + it('Passes on the message of an error which is written for the caller', async () => { + const exception = new ImportValidationError( + 'activities.0.symbol ("X") is not valid' + ); + + expect(await getErrorOfException(exception)).toEqual({ + message: 'activities.0.symbol ("X") is not valid', + status: 'error' + }); + + expect(logError).not.toHaveBeenCalled(); + }); + + it('Hides the message of an unexpected error and writes it to the log', async () => { + const exception = new Error( + 'Unique constraint failed on the fields: (dataSource)' + ); + + expect(await getErrorOfException(exception)).toEqual({ + message: getReasonPhrase(StatusCodes.INTERNAL_SERVER_ERROR), + status: 'error' + }); + + expect(logError).toHaveBeenCalledWith(exception); + }); + + // An access without the scope of a tool causes a refused call at each + // attempt, which would fill the log + it('Gives the reason phrase of the status of an HttpException and writes no log', async () => { + expect(await getErrorOfException(new ForbiddenException())).toEqual({ + message: getReasonPhrase(StatusCodes.FORBIDDEN), + status: 'error' + }); + + expect(logError).not.toHaveBeenCalled(); + }); + + it('Gives the reason phrase of a service which is not available if a snapshot cannot be computed', async () => { + const exception = new PortfolioSnapshotComputationError( + 'The snapshot cannot be computed' + ); + + expect(await getErrorOfException(exception)).toEqual({ + message: getReasonPhrase(StatusCodes.SERVICE_UNAVAILABLE), + status: 'error' + }); + + expect(logError).toHaveBeenCalledWith(exception); + }); +}); diff --git a/apps/api/src/filters/mcp-tool-exception.filter.ts b/apps/api/src/filters/mcp-tool-exception.filter.ts index 7525c6559..6630c1c1c 100644 --- a/apps/api/src/filters/mcp-tool-exception.filter.ts +++ b/apps/api/src/filters/mcp-tool-exception.filter.ts @@ -1,4 +1,5 @@ import { PortfolioSnapshotComputationError } from '@ghostfolio/api/app/portfolio/errors/portfolio-snapshot-computation.error'; +import { CallerFacingError } from '@ghostfolio/api/errors/caller-facing.error'; import { Catch, @@ -6,7 +7,6 @@ import { Logger, RpcExceptionFilter } from '@nestjs/common'; -import { RpcException } from '@nestjs/microservices'; import { getReasonPhrase, StatusCodes } from 'http-status-codes'; import { Observable, throwError } from 'rxjs'; @@ -20,24 +20,32 @@ export class McpToolExceptionFilter implements RpcExceptionFilter { private readonly logger = new Logger(McpToolExceptionFilter.name); public catch(exception: unknown): Observable { - this.logger.error(exception); - - if (exception instanceof RpcException) { + // The message of this exception is written for the caller, hence it is + // passed on and is not written to the log + if (exception instanceof CallerFacingError) { return throwError(() => { - return exception.getError(); + return { message: exception.message, status: 'error' }; }); } - return throwError(() => { - return { message: this.getMessage(exception), status: 'error' }; - }); - } + const statusCode = this.getStatus(exception); + + // An exception which the caller causes, for example a refused call, is + // expected, hence only an exception of the application is written to the + // log + if (statusCode >= StatusCodes.INTERNAL_SERVER_ERROR) { + this.logger.error(exception); + } - private getMessage(exception: unknown) { // The message of an exception can carry internals, for example the // property names of a data transfer object of a failed validation, hence // the reason phrase of the status is passed on instead - return this.getReasonPhraseOfStatus(this.getStatus(exception)); + return throwError(() => { + return { + message: this.getReasonPhraseOfStatus(statusCode), + status: 'error' + }; + }); } private getReasonPhraseOfStatus(statusCode: number) { diff --git a/apps/api/src/helper/interfaces/table-column-definition.interface.ts b/apps/api/src/helper/interfaces/table-column-definition.interface.ts new file mode 100644 index 000000000..569616623 --- /dev/null +++ b/apps/api/src/helper/interfaces/table-column-definition.interface.ts @@ -0,0 +1,6 @@ +import type { ColumnDescriptor } from 'tablemark'; + +export interface TableColumnDefinition extends ColumnDescriptor { + getValue: (item: T, context: C) => string; + name: string; +} diff --git a/apps/api/src/helper/interfaces/table-parameters.interface.ts b/apps/api/src/helper/interfaces/table-parameters.interface.ts new file mode 100644 index 000000000..7ab9d7800 --- /dev/null +++ b/apps/api/src/helper/interfaces/table-parameters.interface.ts @@ -0,0 +1,7 @@ +import { TableColumnDefinition } from './table-column-definition.interface'; + +export interface TableParameters { + columnDefinitions: readonly TableColumnDefinition[]; + context?: C; + rows: readonly T[]; +} diff --git a/apps/api/src/helper/markdown-table.helper.spec.ts b/apps/api/src/helper/markdown-table.helper.spec.ts new file mode 100644 index 000000000..fa1161738 --- /dev/null +++ b/apps/api/src/helper/markdown-table.helper.spec.ts @@ -0,0 +1,77 @@ +import { TableColumnDefinition } from './interfaces/table-column-definition.interface'; +import { getTableInput } from './markdown-table.helper'; + +interface Holding { + name: string; + quantity: number; +} + +interface HoldingContext { + currency: string; +} + +describe('getTableInput', () => { + const holdings: Holding[] = [ + { name: 'Apple', quantity: 2 }, + { name: 'Microsoft', quantity: 30 } + ]; + + const columnDefinitions: TableColumnDefinition[] = [ + { + getValue: ({ name }) => { + return name; + }, + name: 'Name' + }, + { + align: 'right', + getValue: ({ quantity }) => { + return quantity.toString(); + }, + name: 'Quantity' + }, + { + getValue: (_, { currency }) => { + return currency; + }, + name: 'Currency' + } + ]; + + function getInput(rows: Holding[] = holdings) { + return getTableInput({ + columnDefinitions, + rows, + context: { currency: 'USD' } + }); + } + + it('Gives a column for each definition, in the sequence of the definitions', () => { + expect(getInput().columns).toEqual([ + { align: 'left', name: 'Name' }, + { align: 'right', name: 'Quantity' }, + { align: 'left', name: 'Currency' } + ]); + }); + + it('Gives a row for each row, with the name of the column as the key', () => { + expect(getInput().rows).toEqual([ + { Currency: 'USD', Name: 'Apple', Quantity: '2' }, + { Currency: 'USD', Name: 'Microsoft', Quantity: '30' } + ]); + }); + + it('Gives the keys of a row in the sequence of the columns', () => { + const [firstRow] = getInput().rows; + + expect(Object.keys(firstRow)).toEqual( + getInput().columns.map(({ name }) => { + return name; + }) + ); + }); + + it('Gives no row if there is no row', () => { + expect(getInput([]).rows).toEqual([]); + }); +}); diff --git a/apps/api/src/helper/markdown-table.helper.ts b/apps/api/src/helper/markdown-table.helper.ts new file mode 100644 index 000000000..3bc8a7a8c --- /dev/null +++ b/apps/api/src/helper/markdown-table.helper.ts @@ -0,0 +1,44 @@ +import { TableParameters } from './interfaces/table-parameters.interface'; + +/** + * Gives the columns and the rows in the form which the renderer takes, with + * one column per definition, which gives the title of the column and reads + * the value of a row + */ +export function getTableInput({ + columnDefinitions, + context, + rows +}: TableParameters) { + return { + columns: columnDefinitions.map(({ align, name }) => { + return { name, align: align ?? 'left' }; + }), + rows: rows.map((row) => { + return columnDefinitions.reduce( + (tableRow, { getValue, name }) => { + tableRow[name] = getValue(row, context); + + return tableRow; + }, + {} as Record + ); + }) + }; +} + +export async function getMarkdownTable( + parameters: TableParameters +) { + const { columns, rows } = getTableInput(parameters); + + // 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'); + + return tablemark(rows, { columns }); +} diff --git a/apps/api/src/services/api/api.service.ts b/apps/api/src/services/api/api.service.ts index 11074870e..9dddff85e 100644 --- a/apps/api/src/services/api/api.service.ts +++ b/apps/api/src/services/api/api.service.ts @@ -14,23 +14,23 @@ export class ApiService { filterBySymbol, filterByTags }: { - filterByAccounts?: string; - filterByAssetClasses?: string; + filterByAccounts?: string[]; + filterByAssetClasses?: string[]; filterByAssetSubClasses?: string; filterByDataSource?: string; filterByHoldingType?: string; filterBySearchQuery?: string; filterBySymbol?: string; - filterByTags?: string; + filterByTags?: string[]; }): Filter[] { - const accountIds = filterByAccounts?.split(',') ?? []; - const assetClasses = filterByAssetClasses?.split(',') ?? []; + const accountIds = filterByAccounts ?? []; + const assetClasses = filterByAssetClasses ?? []; const assetSubClasses = filterByAssetSubClasses?.split(',') ?? []; const dataSource = filterByDataSource; const holdingType = filterByHoldingType; const searchQuery = filterBySearchQuery?.toLowerCase(); const symbol = filterBySymbol; - const tagIds = filterByTags?.split(',') ?? []; + const tagIds = filterByTags ?? []; const filters = [ ...accountIds.map((accountId) => { @@ -96,11 +96,11 @@ export class ApiService { userSettings: UserSettings; }): Filter[] { return this.buildFiltersFromQueryParams({ - filterByAccounts: userSettings?.['filters.accounts']?.[0], - filterByAssetClasses: userSettings?.['filters.assetClasses']?.[0], + filterByAccounts: userSettings?.['filters.accounts'], + filterByAssetClasses: userSettings?.['filters.assetClasses'], filterByDataSource: userSettings?.['filters.dataSource'], filterBySymbol: userSettings?.['filters.symbol'], - filterByTags: userSettings?.['filters.tags']?.[0] + filterByTags: userSettings?.['filters.tags'] }); } } diff --git a/apps/api/src/services/data-provider/financial-modeling-prep/financial-modeling-prep.service.ts b/apps/api/src/services/data-provider/financial-modeling-prep/financial-modeling-prep.service.ts index ced4db38a..7c840b5fc 100644 --- a/apps/api/src/services/data-provider/financial-modeling-prep/financial-modeling-prep.service.ts +++ b/apps/api/src/services/data-provider/financial-modeling-prep/financial-modeling-prep.service.ts @@ -54,6 +54,8 @@ export class FinancialModelingPrepService implements DataProviderInterface, OnModuleInit { private static countriesMapping = { + 'Congo (Dem. Rep. of the)': 'CD', + 'Congo (Rep. of)': 'CG', 'Czech Republic': 'CZ', 'Korea (the Republic of)': 'KR', Macau: 'MO', diff --git a/apps/api/src/services/portfolio-table/interfaces/holdings-table-context.interface.ts b/apps/api/src/services/portfolio-table/interfaces/holdings-table-context.interface.ts new file mode 100644 index 000000000..4364b492e --- /dev/null +++ b/apps/api/src/services/portfolio-table/interfaces/holdings-table-context.interface.ts @@ -0,0 +1,6 @@ +import { AssetClass, AssetSubClass } from '@prisma/client'; + +export interface HoldingsTableContext { + assetClassTranslations: Record; + assetSubClassTranslations: Record; +} diff --git a/apps/api/src/services/portfolio-table/portfolio-table.module.ts b/apps/api/src/services/portfolio-table/portfolio-table.module.ts new file mode 100644 index 000000000..4411bf9c8 --- /dev/null +++ b/apps/api/src/services/portfolio-table/portfolio-table.module.ts @@ -0,0 +1,14 @@ +import { ActivitiesModule } from '@ghostfolio/api/app/activities/activities.module'; +import { PortfolioModule } from '@ghostfolio/api/app/portfolio/portfolio.module'; +import { I18nModule } from '@ghostfolio/api/services/i18n/i18n.module'; + +import { Module } from '@nestjs/common'; + +import { PortfolioTableService } from './portfolio-table.service'; + +@Module({ + exports: [PortfolioTableService], + imports: [ActivitiesModule, I18nModule, PortfolioModule], + providers: [PortfolioTableService] +}) +export class PortfolioTableModule {} diff --git a/apps/api/src/services/portfolio-table/portfolio-table.service.spec.ts b/apps/api/src/services/portfolio-table/portfolio-table.service.spec.ts new file mode 100644 index 000000000..2d9287051 --- /dev/null +++ b/apps/api/src/services/portfolio-table/portfolio-table.service.spec.ts @@ -0,0 +1,272 @@ +import type { PortfolioService } from '@ghostfolio/api/app/portfolio/portfolio.service'; +import type { TableParameters } from '@ghostfolio/api/helper/interfaces/table-parameters.interface'; +import type { I18nService } from '@ghostfolio/api/services/i18n/i18n.service'; +import { + DEFAULT_LANGUAGE_CODE, + TAG_ID_EXCLUDE_FROM_ANALYSIS +} from '@ghostfolio/common/config'; +import { PortfolioPosition } from '@ghostfolio/common/interfaces'; +import { AccountWithValue } from '@ghostfolio/common/types'; + +import { AssetClass, AssetSubClass } from '@prisma/client'; + +import { PortfolioTableService } from './portfolio-table.service'; + +/** + * The markdown table is rendered by a package which ships as an ECMAScript + * module only, which Jest cannot run. The mock keeps the mapping of the + * columns and of the rows and writes them in the same shape as the renderer + */ +jest.mock('@ghostfolio/api/helper/markdown-table.helper', () => { + const { getTableInput } = jest.requireActual< + typeof import('@ghostfolio/api/helper/markdown-table.helper') + >('@ghostfolio/api/helper/markdown-table.helper'); + + return { + getTableInput, + getMarkdownTable: jest.fn( + (parameters: TableParameters) => { + const { columns, rows } = getTableInput(parameters); + + const names = columns.map(({ name }) => { + return name; + }); + + return Promise.resolve( + [ + names, + names.map(() => { + return '---'; + }), + ...rows.map((row) => { + return names.map((name) => { + return row[name]; + }); + }) + ] + .map((cells) => { + return `| ${cells.join(' | ')} |`; + }) + .join('\n') + ); + } + ) + }; +}); + +function createAccount({ + id = 'account-a-id', + isExcluded = false, + name = 'Account A' +}: { + id?: string; + isExcluded?: boolean; + name?: string; +} = {}) { + return { + id, + name, + activitiesCount: 3, + allocationInPercentage: 0.25, + balance: 1000, + currency: 'CHF', + platform: { name: 'Platform A' }, + tags: isExcluded ? [{ id: TAG_ID_EXCLUDE_FROM_ANALYSIS }] : [], + value: 2000 + } as unknown as AccountWithValue; +} + +function createHolding({ + allocationInPercentage = 0.75, + assetClass = AssetClass.EQUITY, + assetSubClass = AssetSubClass.STOCK, + symbol = 'AAPL' +}: { + allocationInPercentage?: number; + assetClass?: AssetClass; + assetSubClass?: AssetSubClass; + symbol?: string; +} = {}) { + return { + allocationInPercentage, + activitiesCount: 3, + assetProfile: { + assetClass, + assetSubClass, + symbol, + currency: 'CHF', + name: `Name of ${symbol}` + }, + dateOfFirstActivity: new Date('2024-01-01'), + grossPerformance: 100, + netPerformance: 90, + quantity: 5, + valueInBaseCurrency: 2000 + } as unknown as PortfolioPosition; +} + +function createPortfolioTableService({ + accounts = [], + holdings = [] +}: { + accounts?: AccountWithValue[]; + holdings?: PortfolioPosition[]; +} = {}) { + // The mock gives the identifier of the translation, so that a test can tell + // the translation of the asset class from that of the asset sub class + const i18nService = { + getTranslation: jest.fn(({ id }: { id: string }) => { + return `translation of ${id}`; + }) + } as unknown as I18nService; + + const portfolioService = { + getAccountsWithAggregations: jest.fn().mockResolvedValue({ accounts }), + getDetails: jest.fn().mockResolvedValue({ holdings }) + } as unknown as PortfolioService; + + return new PortfolioTableService(null, i18nService, portfolioService); +} + +describe('PortfolioTableService', () => { + // The tools of the model context protocol are the only callers, and an + // access of that type never grants the scope to read the monetary values, + // hence no table has a column with such a value + describe('getAccountsTableColumnNames', () => { + it('gives no column with a monetary value', () => { + expect(PortfolioTableService.getAccountsTableColumnNames()).toEqual([ + 'Id', + 'Name', + 'Currency', + 'Platform', + 'Activities Count', + 'Allocation in Percentage', + 'Excluded from Analysis' + ]); + }); + }); + + describe('getActivitiesTableColumnNames', () => { + it('gives no column with a monetary value', () => { + expect(PortfolioTableService.getActivitiesTableColumnNames()).toEqual([ + 'Date', + 'Type', + 'Name', + 'Symbol', + 'Currency', + 'Unit Price', + 'Account' + ]); + }); + }); + + describe('getHoldingsTableColumnNames', () => { + it('gives no column with a monetary value', () => { + expect(PortfolioTableService.getHoldingsTableColumnNames()).toEqual([ + 'Name', + 'Symbol', + 'Currency', + 'Asset Class', + 'Asset Sub Class', + 'Date of First Activity', + 'Activities Count', + 'Allocation in Percentage' + ]); + }); + }); + + describe('getAccountsTable', () => { + it('gives no cash balance and no value of an account', async () => { + const portfolioTableService = createPortfolioTableService({ + accounts: [createAccount()] + }); + + const result = await portfolioTableService.getAccountsTable({ + userId: 'user-id' + }); + + expect(result).not.toContain('Cash Balance'); + expect(result).not.toContain('1000'); + expect(result).not.toContain('2000'); + }); + + // The accountIds parameter of the tool takes the identifiers, hence the + // table has to give them + it('gives the identifier of an account', async () => { + const portfolioTableService = createPortfolioTableService({ + accounts: [createAccount()] + }); + + const result = await portfolioTableService.getAccountsTable({ + userId: 'user-id' + }); + + expect(result).toContain('account-a-id'); + }); + + it('marks an account which is excluded from the analysis', async () => { + const portfolioTableService = createPortfolioTableService({ + accounts: [ + createAccount({ isExcluded: true }), + createAccount({ id: 'account-b-id', name: 'Account B' }) + ] + }); + + const result = await portfolioTableService.getAccountsTable({ + userId: 'user-id' + }); + + const [rowOfAccountA, rowOfAccountB] = result + .split('\n') + .filter((line) => { + return line.startsWith('| account-'); + }); + + expect(rowOfAccountA).toContain('true'); + expect(rowOfAccountB).toContain('false'); + }); + + it('tells that no accounts are found if the result is empty', async () => { + const portfolioTableService = createPortfolioTableService(); + + const result = await portfolioTableService.getAccountsTable({ + userId: 'user-id' + }); + + expect(result).toContain('No accounts found.'); + }); + }); + describe('getHoldingsTable', () => { + function getHoldingsTable(holdings: PortfolioPosition[]) { + return createPortfolioTableService({ holdings }).getHoldingsTable({ + languageCode: DEFAULT_LANGUAGE_CODE, + userId: 'user-id' + }); + } + + it('gives the translation of the asset class and of the asset sub class', async () => { + const result = await getHoldingsTable([createHolding()]); + + const [row] = result.split('\n').filter((line) => { + return line.startsWith('| Name of AAPL'); + }); + + expect(row).toContain('translation of assetClass.EQUITY'); + expect(row).toContain('translation of assetSubClass.STOCK'); + }); + + it('gives the holding with the largest allocation first', async () => { + const result = await getHoldingsTable([ + createHolding({ allocationInPercentage: 0.25, symbol: 'MSFT' }), + createHolding({ allocationInPercentage: 0.75, symbol: 'AAPL' }) + ]); + + const [firstRow, secondRow] = result.split('\n').filter((line) => { + return line.startsWith('| Name of'); + }); + + expect(firstRow).toContain('AAPL'); + expect(secondRow).toContain('MSFT'); + }); + }); +}); diff --git a/apps/api/src/services/portfolio-table/portfolio-table.service.ts b/apps/api/src/services/portfolio-table/portfolio-table.service.ts new file mode 100644 index 000000000..f8cc3cfc6 --- /dev/null +++ b/apps/api/src/services/portfolio-table/portfolio-table.service.ts @@ -0,0 +1,399 @@ +import { ActivitiesService } from '@ghostfolio/api/app/activities/activities.service'; +import { PortfolioService } from '@ghostfolio/api/app/portfolio/portfolio.service'; +import { TableColumnDefinition } from '@ghostfolio/api/helper/interfaces/table-column-definition.interface'; +import { getMarkdownTable } from '@ghostfolio/api/helper/markdown-table.helper'; +import { I18nService } from '@ghostfolio/api/services/i18n/i18n.service'; +import { DATE_FORMAT, isAccountExcluded } from '@ghostfolio/common/helper'; +import { Activity, Filter } from '@ghostfolio/common/interfaces'; +import { AccountWithValue } from '@ghostfolio/common/types'; + +import { Injectable } from '@nestjs/common'; +import { + AssetClass, + AssetSubClass, + Type as ActivityType +} from '@prisma/client'; +import { format } from 'date-fns'; + +import { HoldingsTableColumnDefinition } from './types/holdings-table-column-definition.type'; + +function getAllocationInPercentage(allocationInPercentage: number) { + return `${(allocationInPercentage * 100).toFixed(3)}%`; +} + +/** + * Renders the accounts, the activities and the holdings of a portfolio as a + * markdown table. No table has a column with a quantity or with a monetary + * value, except the unit price of an activity. + */ +@Injectable() +export class PortfolioTableService { + private static readonly ACCOUNTS_TABLE_COLUMN_DEFINITIONS: TableColumnDefinition[] = + [ + { + getValue: ({ id }) => { + return id; + }, + name: 'Id' + }, + { + getValue: ({ name }) => { + return name ?? ''; + }, + name: 'Name' + }, + { + getValue: ({ currency }) => { + return currency ?? ''; + }, + name: 'Currency' + }, + { + getValue: ({ platform }) => { + return platform?.name ?? ''; + }, + name: 'Platform' + }, + { + align: 'right', + getValue: ({ activitiesCount }) => { + return activitiesCount.toString(); + }, + name: 'Activities Count' + }, + { + align: 'right', + getValue: ({ allocationInPercentage }) => { + return getAllocationInPercentage(allocationInPercentage); + }, + name: 'Allocation in Percentage' + }, + { + getValue: ({ tags }) => { + return isAccountExcluded({ tags }).toString(); + }, + name: 'Excluded from Analysis' + } + ]; + + private static readonly ACTIVITIES_TABLE_COLUMN_DEFINITIONS: TableColumnDefinition[] = + [ + { + getValue: ({ date }) => { + return format(date, DATE_FORMAT); + }, + name: 'Date' + }, + { + getValue: ({ type }) => { + return type; + }, + name: 'Type' + }, + { + getValue: ({ assetProfile }) => { + return assetProfile.name ?? ''; + }, + name: 'Name' + }, + { + getValue: ({ assetProfile }) => { + return assetProfile.symbol; + }, + name: 'Symbol' + }, + { + getValue: ({ assetProfile, currency }) => { + return currency ?? assetProfile.currency; + }, + name: 'Currency' + }, + { + align: 'right', + getValue: ({ unitPrice }) => { + return unitPrice.toString(); + }, + name: 'Unit Price' + }, + { + getValue: ({ account }) => { + return account?.name ?? ''; + }, + name: 'Account' + } + ]; + + private static readonly HOLDINGS_TABLE_COLUMN_DEFINITIONS: HoldingsTableColumnDefinition[] = + [ + { + getValue: ({ assetProfile }) => { + return assetProfile.name; + }, + name: 'Name' + }, + { + getValue: ({ assetProfile }) => { + return assetProfile.symbol; + }, + name: 'Symbol' + }, + { + getValue: ({ assetProfile }) => { + return assetProfile.currency; + }, + name: 'Currency' + }, + { + getValue: ({ assetProfile }, { assetClassTranslations }) => { + return assetClassTranslations[assetProfile.assetClass] ?? ''; + }, + name: 'Asset Class' + }, + { + getValue: ({ assetProfile }, { assetSubClassTranslations }) => { + return assetSubClassTranslations[assetProfile.assetSubClass] ?? ''; + }, + name: 'Asset Sub Class' + }, + { + getValue: ({ dateOfFirstActivity }) => { + return dateOfFirstActivity + ? format(dateOfFirstActivity, DATE_FORMAT) + : ''; + }, + name: 'Date of First Activity' + }, + { + align: 'right', + getValue: ({ activitiesCount }) => { + return activitiesCount.toString(); + }, + name: 'Activities Count' + }, + { + align: 'right', + getValue: ({ allocationInPercentage }) => { + return getAllocationInPercentage(allocationInPercentage); + }, + name: 'Allocation in Percentage' + } + ]; + + public constructor( + private readonly activitiesService: ActivitiesService, + private readonly i18nService: I18nService, + private readonly portfolioService: PortfolioService + ) {} + + public static getAccountsTableColumnNames() { + return PortfolioTableService.ACCOUNTS_TABLE_COLUMN_DEFINITIONS.map( + ({ name }) => { + return name; + } + ); + } + + public static getActivitiesTableColumnNames() { + return PortfolioTableService.ACTIVITIES_TABLE_COLUMN_DEFINITIONS.map( + ({ name }) => { + return name; + } + ); + } + + public static getHoldingsTableColumnNames() { + return PortfolioTableService.HOLDINGS_TABLE_COLUMN_DEFINITIONS.map( + ({ name }) => { + return name; + } + ); + } + + public async getAccountsTable({ + filters, + userId + }: { + filters?: Filter[]; + userId: string; + }) { + const { accounts } = + await this.portfolioService.getAccountsWithAggregations({ + filters, + userId, + withExcludedAccounts: true + }); + + const accountsSection = ['## Accounts', '']; + + if (accounts.length > 0) { + accountsSection.push( + await getMarkdownTable({ + columnDefinitions: + PortfolioTableService.ACCOUNTS_TABLE_COLUMN_DEFINITIONS, + rows: accounts + }) + ); + } else { + accountsSection.push('No accounts found.'); + } + + return accountsSection.join('\n'); + } + + public async getActivitiesTable({ + endDate, + filters, + skip = 0, + startDate, + take, + types, + userCurrency, + userId + }: { + endDate?: Date; + filters?: Filter[]; + skip?: number; + startDate?: Date; + take: number; + types?: ActivityType[]; + userCurrency: string; + userId: string; + }) { + const { activities, count } = await this.activitiesService.getActivities({ + endDate, + filters, + skip, + startDate, + take, + types, + userCurrency, + userId, + includeDrafts: true, + sortColumn: 'date', + sortDirection: 'desc', + withExcludedAccountsAndActivities: true + }); + + const activitiesSection = [ + '## Activities', + '', + this.getActivitiesSummary({ + count, + skip, + numberOfActivities: activities.length + }) + ]; + + if (activities.length > 0) { + activitiesSection.push( + '', + await getMarkdownTable({ + columnDefinitions: + PortfolioTableService.ACTIVITIES_TABLE_COLUMN_DEFINITIONS, + rows: activities + }) + ); + } + + return activitiesSection.join('\n'); + } + + public async getHoldingsTable({ + filters, + languageCode, + userId + }: { + filters?: Filter[]; + languageCode: string; + userId: string; + }) { + const { holdings } = await this.portfolioService.getDetails({ + filters, + userId + }); + + const assetClassTranslations = this.getEnumTranslations({ + languageCode, + id: 'assetClass', + values: Object.values(AssetClass) + }); + + const assetSubClassTranslations = this.getEnumTranslations({ + languageCode, + id: 'assetSubClass', + values: Object.values(AssetSubClass) + }); + + const sortedHoldings = [...holdings].sort((a, b) => { + return b.allocationInPercentage - a.allocationInPercentage; + }); + + return [ + '## Holdings', + '', + await getMarkdownTable({ + columnDefinitions: + PortfolioTableService.HOLDINGS_TABLE_COLUMN_DEFINITIONS, + context: { assetClassTranslations, assetSubClassTranslations }, + rows: sortedHoldings + }) + ].join('\n'); + } + + private getActivitiesSummary({ + count, + numberOfActivities, + skip + }: { + count: number; + numberOfActivities: number; + skip: number; + }) { + if (count === 0) { + return 'No activities found.'; + } + + if (numberOfActivities === 0) { + return `No activities beyond the ${count} which match the parameters, hence lower the skip parameter.`; + } + + if (numberOfActivities === count) { + return `Showing all ${count} activities, the most recent first.`; + } + + const lastActivity = skip + numberOfActivities; + + const summary = `Showing the activities ${ + skip + 1 + } to ${lastActivity} of ${count}, the most recent first.`; + + if (lastActivity === count) { + return summary; + } + + return `${summary} Get the further activities by raising the skip parameter or narrow the result with the other parameters.`; + } + + private getEnumTranslations({ + id, + languageCode, + values + }: { + id: string; + languageCode: string; + values: T[]; + }) { + return values.reduce( + (translations, value) => { + translations[value] = + this.i18nService.getTranslation({ + languageCode, + id: `${id}.${value}` + }) || value; + + return translations; + }, + {} as Record + ); + } +} diff --git a/apps/api/src/services/portfolio-table/types/holdings-table-column-definition.type.ts b/apps/api/src/services/portfolio-table/types/holdings-table-column-definition.type.ts new file mode 100644 index 000000000..a8ad63fe6 --- /dev/null +++ b/apps/api/src/services/portfolio-table/types/holdings-table-column-definition.type.ts @@ -0,0 +1,9 @@ +import { TableColumnDefinition } from '@ghostfolio/api/helper/interfaces/table-column-definition.interface'; +import { PortfolioPosition } from '@ghostfolio/common/interfaces'; + +import { HoldingsTableContext } from '../interfaces/holdings-table-context.interface'; + +export type HoldingsTableColumnDefinition = TableColumnDefinition< + PortfolioPosition, + HoldingsTableContext +>; diff --git a/apps/api/src/services/queues/portfolio-snapshot/portfolio-snapshot.processor.ts b/apps/api/src/services/queues/portfolio-snapshot/portfolio-snapshot.processor.ts index 06b87f733..a6fdcdd97 100644 --- a/apps/api/src/services/queues/portfolio-snapshot/portfolio-snapshot.processor.ts +++ b/apps/api/src/services/queues/portfolio-snapshot/portfolio-snapshot.processor.ts @@ -82,9 +82,7 @@ export class PortfolioSnapshotProcessor { const expiration = addMilliseconds( new Date(), - (snapshot?.errors?.length ?? 0) === 0 - ? this.configurationService.get('CACHE_QUOTES_TTL') - : 0 + this.configurationService.get('CACHE_QUOTES_TTL') ); await this.redisCacheService.set( @@ -101,7 +99,9 @@ export class PortfolioSnapshotProcessor { return snapshot; } catch (error) { - this.logger.error(error.message); + this.logger.error( + `Portfolio snapshot calculation of user '${job.data.userId}' has failed: ${error.message}` + ); throw new Error(error); } diff --git a/apps/client/src/app/components/access-table/access-table.component.html b/apps/client/src/app/components/access-table/access-table.component.html index fc324fb87..b8c2f8422 100644 --- a/apps/client/src/app/components/access-table/access-table.component.html +++ b/apps/client/src/app/components/access-table/access-table.component.html @@ -45,36 +45,6 @@ - - Details - - @if (element.type === 'PUBLIC') { - - @if (user()?.settings?.isExperimentalFeatures) { -
- GET {{ baseUrl }}/api/v1/public/{{ - element.id - }}/portfolio -
- } - } @else if (element.type === 'MCP' && hasPermissionToEnableMcp) { -
- {{ baseUrl }}{{ mcpEndpoint }} -
-
- Authorization: Bearer {{ element.id }} -
- } - -
- @@ -113,14 +83,6 @@ } - @if (element.type === 'MCP' && hasPermissionToEnableMcp) { - - } @if ( (!isReceivedAccess() && user()?.settings?.isExperimentalFeatures) || element.type === 'PUBLIC' || diff --git a/apps/client/src/app/components/access-table/access-table.component.ts b/apps/client/src/app/components/access-table/access-table.component.ts index baf4247e3..9b666b3b6 100644 --- a/apps/client/src/app/components/access-table/access-table.component.ts +++ b/apps/client/src/app/components/access-table/access-table.component.ts @@ -1,4 +1,3 @@ -import { MCP_ENDPOINT } from '@ghostfolio/common/config'; import { ConfirmationDialogType } from '@ghostfolio/common/enums'; import { getDateFormatString } from '@ghostfolio/common/helper'; import { Access, User } from '@ghostfolio/common/interfaces'; @@ -32,7 +31,6 @@ import { copyOutline, createOutline, ellipsisHorizontal, - linkOutline, removeCircleOutline, trashOutline } from 'ionicons/icons'; @@ -81,14 +79,7 @@ export class GfAccessTableComponent { protected readonly dataSource = new MatTableDataSource(); protected readonly displayedColumns = computed(() => { - const columns = [ - 'alias', - 'grantee', - 'type', - 'lastUsedAt', - 'expiresAt', - 'details' - ]; + const columns = ['alias', 'grantee', 'type', 'lastUsedAt', 'expiresAt']; if (this.showActions()) { columns.push('actions'); @@ -109,8 +100,6 @@ export class GfAccessTableComponent { return !this.accesses(); }); - protected readonly mcpEndpoint = MCP_ENDPOINT; - private readonly clipboard = inject(Clipboard); private readonly dataService = inject(DataService); private readonly notificationService = inject(NotificationService); @@ -121,7 +110,6 @@ export class GfAccessTableComponent { copyOutline, createOutline, ellipsisHorizontal, - linkOutline, removeCircleOutline, trashOutline }); @@ -142,18 +130,6 @@ export class GfAccessTableComponent { return `${this.baseUrl}/${languageCode}/${publicRoutes.public.path}/${aId}`; } - protected onCopyIdToClipboard(aId: string) { - this.clipboard.copy(aId); - - this.snackBar.open( - '✅ ' + $localize`Identifier has been copied to the clipboard`, - undefined, - { - duration: ms('3 seconds') - } - ); - } - protected onCopyUrlToClipboard(aId: string) { this.clipboard.copy(this.getPublicUrl(aId)); diff --git a/apps/client/src/app/components/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 3b9f942a7..b2b2293e1 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 @@ -2,6 +2,7 @@ import { AdminMarketDataService } from '@ghostfolio/client/components/admin-mark import { UserService } from '@ghostfolio/client/services/user/user.service'; import { ASSET_CLASS_MAPPING, + COMMENT_MAXIMUM_LENGTH, PROPERTY_IS_DATA_GATHERING_ENABLED } from '@ghostfolio/common/config'; import { UpdateAssetProfileDto } from '@ghostfolio/common/dtos'; @@ -229,6 +230,7 @@ export class GfAssetProfileDialogComponent implements OnInit { protected readonly canDeleteAssetProfile = canDeleteAssetProfile; protected canEditAssetProfile = true; + protected readonly COMMENT_MAXIMUM_LENGTH = COMMENT_MAXIMUM_LENGTH; protected countries: { [code: string]: { name: string; value: number }; 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 7e4a0c2f1..6e1336de0 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 @@ -467,6 +467,7 @@ cdkTextareaAutosize formControlName="comment" matInput + [maxlength]="COMMENT_MAXIMUM_LENGTH" (keyup.enter)="$event.stopPropagation()" > diff --git a/apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.component.ts b/apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.component.ts index 8c2bb0353..98275e5e7 100644 --- a/apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.component.ts +++ b/apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.component.ts @@ -1,5 +1,5 @@ import { UserService } from '@ghostfolio/client/services/user/user.service'; -import { DEFAULT_LOCALE } from '@ghostfolio/common/config'; +import { DEFAULT_LOCALE, MCP_ENDPOINT } from '@ghostfolio/common/config'; import { CreateAccessDto, UpdateAccessDto } from '@ghostfolio/common/dtos'; import { canApplyFiltersToAccess } from '@ghostfolio/common/helper'; import { Filter, PortfolioPosition } from '@ghostfolio/common/interfaces'; @@ -27,6 +27,7 @@ import { } from '@ghostfolio/ui/portfolio-filter-form'; import { DataService } from '@ghostfolio/ui/services'; +import { JsonPipe } from '@angular/common'; import type { HttpErrorResponse } from '@angular/common/http'; import { ChangeDetectionStrategy, @@ -69,6 +70,7 @@ import { CreateOrUpdateAccessDialogParams } from './interfaces/interfaces'; FormsModule, GfAccessLevelIconComponent, GfPortfolioFilterFormComponent, + JsonPipe, MatButtonModule, MatDatepickerModule, MatDialogModule, @@ -88,6 +90,7 @@ export class GfCreateOrUpdateAccessDialogComponent implements OnInit { public tags: Filter[] = []; protected accessForm: FormGroup; + protected readonly baseUrl = window.location.origin; protected minExpiresAt: Date; protected readonly mode: 'create' | 'update'; protected readonly today = startOfDay(new Date()); @@ -222,6 +225,10 @@ export class GfCreateOrUpdateAccessDialogComponent implements OnInit { this.loadHoldings(); } + protected get accessId() { + return this.data.access?.id; + } + protected get accessLevel(): AccessLevel { return this.accessForm?.get('accessLevel')?.value as AccessLevel; } @@ -234,10 +241,32 @@ export class GfCreateOrUpdateAccessDialogComponent implements OnInit { return this.accessType === 'PUBLIC'; } + protected get mcpConfiguration() { + return { + headers: { + Authorization: `Bearer ${this.accessId}` + }, + type: 'http', + url: `${this.baseUrl}${MCP_ENDPOINT}` + }; + } + protected get showExpiresAtErrorMessage() { return this.accessForm?.get('expiresAt')?.invalid === true; } + protected get showMcpDetails() { + return this.canGrantMcpAccess && this.isMcpAccess && this.mode === 'update'; + } + + protected get showPublicDetails() { + return ( + this.hasExperimentalFeatures && + this.isPublicAccess && + this.mode === 'update' + ); + } + protected onCancel() { this.dialogRef.close(); } @@ -250,6 +279,10 @@ export class GfCreateOrUpdateAccessDialogComponent implements OnInit { } } + private get isMcpAccess() { + return this.accessType === 'MCP'; + } + private async createAccess() { const filters = this.getFilters(); @@ -343,7 +376,7 @@ export class GfCreateOrUpdateAccessDialogComponent implements OnInit { } private async updateAccess() { - const accessId = this.data.access?.id; + const accessId = this.accessId; if (!accessId) { return; diff --git a/apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html b/apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html index 21c0cd3a8..31391beb0 100644 --- a/apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html +++ b/apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html @@ -133,6 +133,18 @@ [tags]="tags" /> } + @if (showMcpDetails || showPublicDetails) { +

Details

+ @if (showMcpDetails) { +
{{ mcpConfiguration | json }}
+ } @else if (showPublicDetails) { +
+ GET {{ baseUrl }}/api/v1/public/{{ accessId }}/portfolio +
+ } + }
diff --git a/apps/client/src/app/pages/accounts/accounts-page.routes.ts b/apps/client/src/app/pages/accounts/accounts-page.routes.ts index fd58d660c..74ebb3a77 100644 --- a/apps/client/src/app/pages/accounts/accounts-page.routes.ts +++ b/apps/client/src/app/pages/accounts/accounts-page.routes.ts @@ -6,7 +6,8 @@ import { Routes } from '@angular/router'; import { GfAccountDialogHostComponent } from './account-dialog-host/account-dialog-host.component'; import { GfAccountsPageComponent } from './accounts-page.component'; -const { create, detail, update } = internalRoutes.accounts.subRoutes; +const { create, detail, transferCashBalance, update } = + internalRoutes.accounts.subRoutes; export const routes: Routes = [ { @@ -18,6 +19,12 @@ export const routes: Routes = [ path: create.path, title: create.title }, + { + component: GfAccountDialogHostComponent, + data: { mode: 'transferCashBalance' }, + path: transferCashBalance.path, + title: transferCashBalance.title + }, { children: [ { diff --git a/apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.component.ts b/apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.component.ts index 4339f570b..ab3854b93 100644 --- a/apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.component.ts +++ b/apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.component.ts @@ -1,6 +1,9 @@ import { ImpersonationStorageService } from '@ghostfolio/client/services/impersonation-storage.service'; import { UserService } from '@ghostfolio/client/services/user/user.service'; -import { TAG_ID_DRAFT } from '@ghostfolio/common/config'; +import { + COMMENT_MAXIMUM_LENGTH, + TAG_ID_DRAFT +} from '@ghostfolio/common/config'; import { CreateAccountDto, UpdateAccountDto } from '@ghostfolio/common/dtos'; import { getStringOrNull } from '@ghostfolio/common/helper'; import { hasPermission, permissions } from '@ghostfolio/common/permissions'; @@ -62,6 +65,8 @@ import { CreateOrUpdateAccountDialogParams } from './interfaces/interfaces'; templateUrl: 'create-or-update-account-dialog.html' }) export class GfCreateOrUpdateAccountDialogComponent { + protected readonly COMMENT_MAXIMUM_LENGTH = COMMENT_MAXIMUM_LENGTH; + protected accountForm: FormGroup; protected currencies: string[] = []; protected filteredPlatforms: Observable | undefined; diff --git a/apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html b/apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html index 86a034b53..5119790c9 100644 --- a/apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html +++ b/apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -91,6 +91,7 @@ cdkTextareaAutosize formControlName="comment" matInput + [maxlength]="COMMENT_MAXIMUM_LENGTH" (keyup.enter)="$event.stopPropagation()" > diff --git a/apps/client/src/app/pages/accounts/transfer-balance/transfer-balance-dialog.component.ts b/apps/client/src/app/pages/accounts/transfer-balance/transfer-balance-dialog.component.ts index 75f6f076a..cdfa7181c 100644 --- a/apps/client/src/app/pages/accounts/transfer-balance/transfer-balance-dialog.component.ts +++ b/apps/client/src/app/pages/accounts/transfer-balance/transfer-balance-dialog.component.ts @@ -99,13 +99,13 @@ export class GfTransferBalanceDialogComponent { } protected onSubmit() { - const account: TransferBalanceDto = { + const transferBalance: TransferBalanceDto = { accountIdFrom: this.transferBalanceForm.controls.fromAccount.value ?? '', accountIdTo: this.transferBalanceForm.controls.toAccount.value ?? '', balance: Number(this.transferBalanceForm.controls.balance.value) }; - this.dialogRef.close({ account }); + this.dialogRef.close(transferBalance); } private getAccountById(aId: string | null) { diff --git a/apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.component.ts b/apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.component.ts index a5758fb2c..853787f80 100644 --- a/apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.component.ts +++ b/apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.component.ts @@ -1,6 +1,10 @@ import { ImpersonationStorageService } from '@ghostfolio/client/services/impersonation-storage.service'; import { UserService } from '@ghostfolio/client/services/user/user.service'; -import { ASSET_CLASS_MAPPING, DEFAULT_LOCALE } from '@ghostfolio/common/config'; +import { + ASSET_CLASS_MAPPING, + COMMENT_MAXIMUM_LENGTH, + DEFAULT_LOCALE +} from '@ghostfolio/common/config'; import { CreateOrderDto, UpdateOrderDto } from '@ghostfolio/common/dtos'; import { getDateFormatString, @@ -79,6 +83,7 @@ import { ActivityType } from './types/activity-type.type'; templateUrl: 'create-or-update-activity-dialog.html' }) export class GfCreateOrUpdateActivityDialogComponent { + protected readonly COMMENT_MAXIMUM_LENGTH = COMMENT_MAXIMUM_LENGTH; protected readonly DEFAULT_LOCALE = DEFAULT_LOCALE; protected activityForm: FormGroup; diff --git a/apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html b/apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html index e797db911..f9494efdc 100644 --- a/apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html +++ b/apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -255,6 +255,7 @@ cdkTextareaAutosize formControlName="comment" matInput + [maxlength]="COMMENT_MAXIMUM_LENGTH" (keyup.enter)="$event.stopPropagation()" > diff --git a/apps/client/src/locales/messages.ca.xlf b/apps/client/src/locales/messages.ca.xlf index a3f7eb482..d2bf5f425 100644 --- a/apps/client/src/locales/messages.ca.xlf +++ b/apps/client/src/locales/messages.ca.xlf @@ -26,7 +26,7 @@ libs/common/src/lib/routes/routes.ts - 306 + 311 @@ -34,7 +34,7 @@ Internacionalització libs/common/src/lib/routes/routes.ts - 149 + 154 @@ -54,7 +54,7 @@ libs/common/src/lib/routes/routes.ts - 116 + 121 @@ -115,31 +115,31 @@ kebab-case libs/common/src/lib/routes/routes.ts - 226 + 231 libs/common/src/lib/routes/routes.ts - 227 + 232 libs/common/src/lib/routes/routes.ts - 232 + 237 libs/common/src/lib/routes/routes.ts - 240 + 245 libs/common/src/lib/routes/routes.ts - 248 + 253 libs/common/src/lib/routes/routes.ts - 256 + 261 libs/common/src/lib/routes/routes.ts - 264 + 269 @@ -148,11 +148,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 238 + 243 libs/common/src/lib/routes/routes.ts - 241 + 246 @@ -161,11 +161,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 254 + 259 libs/common/src/lib/routes/routes.ts - 257 + 262 @@ -174,19 +174,19 @@ kebab-case libs/common/src/lib/routes/routes.ts - 284 + 289 libs/common/src/lib/routes/routes.ts - 285 + 290 libs/common/src/lib/routes/routes.ts - 289 + 294 libs/common/src/lib/routes/routes.ts - 295 + 300 @@ -195,11 +195,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 304 + 309 libs/common/src/lib/routes/routes.ts - 305 + 310 @@ -208,11 +208,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 309 + 314 libs/common/src/lib/routes/routes.ts - 310 + 315 @@ -221,11 +221,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 319 + 324 libs/common/src/lib/routes/routes.ts - 320 + 325 @@ -234,11 +234,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 329 + 334 libs/common/src/lib/routes/routes.ts - 330 + 335 @@ -247,31 +247,31 @@ kebab-case libs/common/src/lib/routes/routes.ts - 334 + 339 libs/common/src/lib/routes/routes.ts - 335 + 340 libs/common/src/lib/routes/routes.ts - 340 + 345 libs/common/src/lib/routes/routes.ts - 348 + 353 libs/common/src/lib/routes/routes.ts - 356 + 361 libs/common/src/lib/routes/routes.ts - 364 + 369 libs/common/src/lib/routes/routes.ts - 372 + 377 @@ -342,8 +342,8 @@ Details Detalls - apps/client/src/app/components/access-table/access-table.component.html - 49 + apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html + 137 @@ -351,7 +351,7 @@ Revocar apps/client/src/app/components/access-table/access-table.component.html - 138 + 100 @@ -375,7 +375,7 @@ Realment vol revocar aquest accés? apps/client/src/app/components/access-table/access-table.component.ts - 177 + 153 @@ -425,6 +425,10 @@ apps/client/src/app/pages/accounts/transfer-balance/transfer-balance-dialog.html 7 + + libs/common/src/lib/routes/routes.ts + 99 + libs/ui/src/lib/accounts-table/accounts-table.component.html 10 @@ -599,7 +603,7 @@ Editar apps/client/src/app/components/access-table/access-table.component.html - 104 + 74 apps/client/src/app/components/admin-market-data/admin-market-data.html @@ -627,7 +631,7 @@ Suprimir apps/client/src/app/components/access-table/access-table.component.html - 135 + 97 apps/client/src/app/components/admin-market-data/admin-market-data.html @@ -679,7 +683,7 @@ Realment vol suprimir aquest compte? libs/ui/src/lib/accounts-table/accounts-table.component.ts - 183 + 185 @@ -735,7 +739,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 495 + 496 @@ -851,7 +855,7 @@ Splits apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 518 + 519 @@ -891,7 +895,7 @@ Find an account... libs/ui/src/lib/assistant/assistant.component.ts - 448 + 450 @@ -899,11 +903,11 @@ Data apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 527 + 528 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 566 + 567 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -995,7 +999,7 @@ An error occurred while converting the data source to . apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 526 + 528 @@ -1039,7 +1043,7 @@ Data Gathering Frequency apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 476 + 477 @@ -1075,7 +1079,7 @@ Apply current market price apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html - 220 + 221 @@ -1139,7 +1143,7 @@ El preu de mercat actual és apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 854 + 856 @@ -1255,7 +1259,7 @@ Update Activity libs/common/src/lib/routes/routes.ts - 176 + 181 @@ -1287,7 +1291,7 @@ Configuració del Proveïdor de Dades apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 634 + 635 @@ -1331,7 +1335,7 @@ Asset profile has been saved apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 752 + 754 @@ -1347,7 +1351,7 @@ apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html - 251 + 252 libs/ui/src/lib/accounts-table/accounts-table.component.html @@ -1390,14 +1394,6 @@ 18 - - Copy identifier to clipboard - Copy identifier to clipboard - - apps/client/src/app/components/access-table/access-table.component.html - 120 - - Name, symbol or ISIN Nom, símbol o ISIN @@ -1503,7 +1499,7 @@ Update Account libs/common/src/lib/routes/routes.ts - 101 + 106 @@ -1523,7 +1519,7 @@ Find a holding... libs/ui/src/lib/assistant/assistant.component.ts - 449 + 451 @@ -1563,7 +1559,7 @@ Afegir apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 621 + 622 apps/client/src/app/components/admin-overview/admin-overview.html @@ -1627,7 +1623,7 @@ The data of this asset profile is moved to () and this asset profile is deleted. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 959 + 961 @@ -1643,7 +1639,7 @@ Current year apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 265 + 267 @@ -1783,11 +1779,11 @@ Could not validate form apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 728 + 730 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 731 + 733 @@ -1827,7 +1823,7 @@ libs/common/src/lib/routes/routes.ts - 202 + 207 @@ -2007,7 +2003,7 @@ en Actiiu apps/client/src/app/components/home-holdings/home-holdings.component.ts - 73 + 77 @@ -2015,7 +2011,7 @@ Finalitzat apps/client/src/app/components/home-holdings/home-holdings.component.ts - 74 + 78 @@ -2023,7 +2019,7 @@ Taula apps/client/src/app/components/home-holdings/home-holdings.component.ts - 62 + 66 @@ -2031,7 +2027,7 @@ Gràfic apps/client/src/app/components/home-holdings/home-holdings.component.ts - 67 + 71 @@ -2047,7 +2043,7 @@ Split Ratio apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 532 + 533 @@ -2055,7 +2051,7 @@ Por apps/client/src/app/components/markets/markets.component.ts - 57 + 61 libs/ui/src/lib/i18n.ts @@ -2067,7 +2063,7 @@ Cobdícia apps/client/src/app/components/markets/markets.component.ts - 58 + 62 libs/ui/src/lib/i18n.ts @@ -2087,7 +2083,7 @@ An error occurred while merging this asset profile into (). apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 942 + 944 @@ -2183,7 +2179,7 @@ Current week apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 257 + 259 @@ -2595,7 +2591,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 366 + 368 @@ -2603,11 +2599,11 @@ YTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 265 + 267 libs/ui/src/lib/assistant/assistant.component.ts - 378 + 380 @@ -2615,11 +2611,11 @@ 1 any apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 269 + 271 libs/ui/src/lib/assistant/assistant.component.ts - 388 + 390 @@ -2635,11 +2631,11 @@ 5 anys apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 273 + 275 libs/ui/src/lib/assistant/assistant.component.ts - 410 + 412 @@ -2655,19 +2651,11 @@ Màx apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 277 + 279 libs/ui/src/lib/assistant/assistant.component.ts - 416 - - - - Identifier has been copied to the clipboard - Identifier has been copied to the clipboard - - apps/client/src/app/components/access-table/access-table.component.ts - 149 + 418 @@ -2675,7 +2663,7 @@ Vaja! No s’ha pogut concedir l’accés. apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.component.ts - 256 + 311 @@ -2727,7 +2715,7 @@ ID d’usuari apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html - 116 + 113 apps/client/src/app/components/user-account-settings/user-account-settings.html @@ -2839,7 +2827,7 @@ Jump to a page... libs/ui/src/lib/assistant/assistant.component.ts - 450 + 452 @@ -2855,7 +2843,7 @@ Clone Activity libs/common/src/lib/routes/routes.ts - 164 + 169 @@ -3147,7 +3135,7 @@ Daily apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 245 + 247 @@ -3179,7 +3167,7 @@ libs/common/src/lib/routes/routes.ts - 270 + 275 @@ -3195,7 +3183,7 @@ libs/common/src/lib/routes/routes.ts - 235 + 240 @@ -3211,7 +3199,7 @@ libs/common/src/lib/routes/routes.ts - 243 + 248 @@ -3227,7 +3215,7 @@ libs/common/src/lib/routes/routes.ts - 259 + 264 @@ -3299,19 +3287,19 @@ libs/common/src/lib/routes/routes.ts - 104 + 109 libs/ui/src/lib/assistant/assistant.html - 84 + 85 Oops, cash balance transfer has failed. Vaja, la transferència del saldo en efectiu ha fallat. - apps/client/src/app/pages/accounts/accounts-page.component.ts - 199 + apps/client/src/app/pages/accounts/account-dialog-host/account-dialog-host.component.ts + 365 @@ -3335,7 +3323,7 @@ ID del compte apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 108 + 109 @@ -3471,11 +3459,11 @@ libs/common/src/lib/routes/routes.ts - 143 + 148 libs/common/src/lib/routes/routes.ts - 220 + 225 @@ -3587,7 +3575,7 @@ libs/common/src/lib/routes/routes.ts - 275 + 280 @@ -3595,11 +3583,11 @@ Could not parse scraper configuration apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 676 + 678 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 679 + 681 @@ -3651,7 +3639,7 @@ libs/common/src/lib/routes/routes.ts - 301 + 306 @@ -3671,7 +3659,7 @@ libs/common/src/lib/routes/routes.ts - 290 + 295 @@ -3683,7 +3671,7 @@ libs/common/src/lib/routes/routes.ts - 298 + 303 @@ -3692,11 +3680,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 293 + 298 libs/common/src/lib/routes/routes.ts - 296 + 301 @@ -3876,15 +3864,15 @@ libs/common/src/lib/routes/routes.ts - 125 + 130 libs/common/src/lib/routes/routes.ts - 217 + 222 libs/ui/src/lib/assistant/assistant.html - 110 + 111 @@ -3892,7 +3880,7 @@ This action cannot be undone. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 961 + 963 @@ -3912,7 +3900,7 @@ libs/common/src/lib/routes/routes.ts - 135 + 140 @@ -3944,15 +3932,15 @@ libs/common/src/lib/routes/routes.ts - 130 + 135 libs/common/src/lib/routes/routes.ts - 311 + 316 libs/common/src/lib/routes/routes.ts - 359 + 364 @@ -4452,7 +4440,7 @@ Add Activity libs/common/src/lib/routes/routes.ts - 169 + 174 @@ -4508,7 +4496,7 @@ Do you really want to merge this asset profile into it? apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 965 + 967 @@ -4652,7 +4640,7 @@ libs/common/src/lib/routes/routes.ts - 179 + 184 libs/ui/src/lib/accounts-table/accounts-table.component.html @@ -4876,7 +4864,7 @@ Shares After apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 590 + 591 @@ -4904,7 +4892,7 @@ Do you really want to convert this asset profile to ()? apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 809 + 811 @@ -4920,7 +4908,7 @@ libs/common/src/lib/routes/routes.ts - 184 + 189 @@ -4936,7 +4924,7 @@ Per plataforma apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 39 + 41 @@ -4944,7 +4932,7 @@ Per Moneda apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 58 + 60 @@ -4952,7 +4940,7 @@ Per classe d’actiu apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 80 + 82 @@ -4960,7 +4948,7 @@ Per Holding apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 102 + 104 @@ -4968,7 +4956,7 @@ Per sectors apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 125 + 127 @@ -4976,7 +4964,7 @@ Per continent apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 148 + 150 @@ -4984,7 +4972,7 @@ Per Mercat apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 170 + 172 @@ -4992,7 +4980,7 @@ Regions apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 193 + 195 apps/client/src/app/pages/public/public-page.html @@ -5020,7 +5008,7 @@ Mercats desenvolupats apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 216 + 218 apps/client/src/app/pages/public/public-page.html @@ -5040,7 +5028,7 @@ Mercats emergents apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 226 + 228 apps/client/src/app/pages/public/public-page.html @@ -5052,7 +5040,7 @@ Altres Mercats apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 236 + 238 apps/client/src/app/pages/public/public-page.html @@ -5064,7 +5052,7 @@ Per País apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 261 + 263 @@ -5072,7 +5060,7 @@ Per compte apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 283 + 285 @@ -5080,7 +5068,7 @@ Pel proveïdor d’ETF apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 303 + 305 @@ -5088,7 +5076,7 @@ Per ETF Holding apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 328 + 330 @@ -5096,7 +5084,7 @@ Aproximació basada en les participacions principals de cada ETF apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 335 + 337 @@ -5108,7 +5096,7 @@ libs/common/src/lib/routes/routes.ts - 189 + 194 @@ -5328,7 +5316,7 @@ libs/common/src/lib/routes/routes.ts - 321 + 326 @@ -5352,7 +5340,7 @@ Do you really want to remove this received access? apps/client/src/app/components/access-table/access-table.component.ts - 176 + 152 @@ -5376,7 +5364,7 @@ Hourly apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 249 + 251 @@ -5516,11 +5504,11 @@ Could not save asset profile apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 762 + 764 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 765 + 767 @@ -5580,7 +5568,7 @@ libs/common/src/lib/routes/routes.ts - 331 + 336 @@ -5612,7 +5600,7 @@ libs/common/src/lib/routes/routes.ts - 379 + 384 @@ -5621,11 +5609,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 370 + 375 libs/common/src/lib/routes/routes.ts - 374 + 379 @@ -5961,7 +5949,7 @@ libs/common/src/lib/routes/routes.ts - 382 + 387 @@ -6117,7 +6105,7 @@ Setmana fins avui libs/ui/src/lib/assistant/assistant.component.ts - 370 + 372 @@ -6125,11 +6113,11 @@ WTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 257 + 259 libs/ui/src/lib/assistant/assistant.component.ts - 370 + 372 @@ -6137,7 +6125,7 @@ Mes fins a la data libs/ui/src/lib/assistant/assistant.component.ts - 374 + 376 @@ -6145,11 +6133,11 @@ MTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 261 + 263 libs/ui/src/lib/assistant/assistant.component.ts - 374 + 376 @@ -6165,7 +6153,7 @@ Any fins a la data libs/ui/src/lib/assistant/assistant.component.ts - 378 + 380 @@ -6173,7 +6161,7 @@ any apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 269 + 271 apps/client/src/app/pages/resources/personal-finance-tools/product-page.html @@ -6185,7 +6173,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 388 + 390 @@ -6193,11 +6181,11 @@ anys apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 273 + 275 libs/ui/src/lib/assistant/assistant.component.ts - 410 + 412 @@ -6209,7 +6197,7 @@ libs/ui/src/lib/assistant/assistant.html - 140 + 141 @@ -6217,7 +6205,7 @@ Interval de dates libs/ui/src/lib/assistant/assistant.html - 170 + 171 @@ -6225,7 +6213,7 @@ Restableix els filtres libs/ui/src/lib/assistant/assistant.html - 204 + 205 @@ -6233,7 +6221,7 @@ Aplicar filtres libs/ui/src/lib/assistant/assistant.html - 217 + 218 @@ -6241,7 +6229,7 @@ Portfolio Filters apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html - 128 + 125 @@ -6337,7 +6325,7 @@ This asset profile cannot be merged into (). apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 920 + 922 @@ -6425,7 +6413,7 @@ Compte apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.component.ts - 102 + 109 libs/common/src/lib/routes/routes.ts @@ -6469,7 +6457,7 @@ apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html - 266 + 268 libs/ui/src/lib/i18n.ts @@ -6501,7 +6489,7 @@ apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html - 285 + 287 libs/ui/src/lib/i18n.ts @@ -6625,7 +6613,7 @@ libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 460 + 462 @@ -6777,7 +6765,7 @@ Comissió apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html - 238 + 239 libs/ui/src/lib/activities-table/activities-table.component.html @@ -6993,7 +6981,7 @@ No hi ha dades disponibles apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 247 + 249 apps/client/src/app/pages/public/public-page.html @@ -7005,11 +6993,11 @@ libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 462 + 464 libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 476 + 478 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -7241,15 +7229,15 @@ Error apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 844 + 846 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 921 + 923 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 943 + 945 @@ -7273,7 +7261,7 @@ Oops! Could not update access. apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.component.ts - 354 + 409 @@ -7313,11 +7301,11 @@ apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html - 143 + 152 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 117 + 118 apps/client/src/app/pages/accounts/transfer-balance/transfer-balance-dialog.html @@ -7325,7 +7313,7 @@ apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html - 321 + 323 apps/client/src/app/pages/register/user-account-registration-dialog/user-account-registration-dialog.html @@ -7369,7 +7357,7 @@ apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html - 145 + 154 apps/client/src/app/components/user-account-membership/user-account-membership.component.ts @@ -7381,11 +7369,11 @@ apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 119 + 120 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html - 323 + 325 libs/ui/src/lib/i18n.ts @@ -7413,7 +7401,7 @@ Copy link to clipboard apps/client/src/app/components/access-table/access-table.component.html - 112 + 82 @@ -7633,7 +7621,7 @@ Shares Before apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 603 + 604 @@ -7693,7 +7681,7 @@ Oops! Could not find any assets. libs/ui/src/lib/symbol-autocomplete/symbol-autocomplete.component.html - 43 + 44 @@ -7749,7 +7737,7 @@ libs/common/src/lib/routes/routes.ts - 343 + 348 @@ -7765,7 +7753,7 @@ libs/common/src/lib/routes/routes.ts - 351 + 356 @@ -7774,11 +7762,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 346 + 351 libs/common/src/lib/routes/routes.ts - 349 + 354 @@ -7787,11 +7775,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 338 + 343 libs/common/src/lib/routes/routes.ts - 341 + 346 @@ -7831,7 +7819,7 @@ Do you really want to delete the API key? apps/client/src/app/components/admin-settings/admin-settings.component.ts - 148 + 151 @@ -7959,15 +7947,15 @@ apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html - 158 + 167 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 128 + 129 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html - 332 + 334 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html @@ -8015,7 +8003,7 @@ Please enter your Ghostfolio API key. apps/client/src/app/components/admin-settings/admin-settings.component.ts - 167 + 170 @@ -8039,7 +8027,7 @@ Link has been copied to the clipboard apps/client/src/app/components/access-table/access-table.component.ts - 161 + 137 @@ -8047,7 +8035,7 @@ Lazy apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 294 + 296 @@ -8055,7 +8043,7 @@ Instant apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 298 + 300 @@ -8063,7 +8051,7 @@ Default Market Price apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 644 + 645 @@ -8079,7 +8067,7 @@ Do you really want to convert the data source to ? apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 529 + 531 @@ -8095,7 +8083,7 @@ HTTP Request Headers apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 657 + 658 @@ -8103,7 +8091,7 @@ end of day apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 294 + 296 @@ -8111,7 +8099,7 @@ real-time apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 298 + 300 @@ -8239,7 +8227,7 @@ Additional requests are granted while you are setting up your instance apps/client/src/app/components/admin-settings/admin-settings.component.ts - 87 + 88 @@ -8308,11 +8296,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 262 + 267 libs/common/src/lib/routes/routes.ts - 265 + 270 @@ -8324,7 +8312,7 @@ libs/common/src/lib/routes/routes.ts - 267 + 272 @@ -8340,7 +8328,7 @@ () is already in use. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 963 + 965 @@ -8348,7 +8336,7 @@ An error occurred while updating to (). apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 807 + 809 @@ -8436,7 +8424,7 @@ libs/common/src/lib/routes/routes.ts - 140 + 145 @@ -8481,11 +8469,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 230 + 235 libs/common/src/lib/routes/routes.ts - 233 + 238 @@ -8605,7 +8593,7 @@ Quick Links libs/ui/src/lib/assistant/assistant.html - 58 + 59 @@ -8621,7 +8609,7 @@ libs/common/src/lib/routes/routes.ts - 281 + 286 @@ -8629,7 +8617,7 @@ Open Source Alternative to libs/common/src/lib/routes/routes.ts - 376 + 381 @@ -8662,15 +8650,15 @@ kebab-case libs/common/src/lib/routes/routes.ts - 362 + 367 libs/common/src/lib/routes/routes.ts - 365 + 370 libs/common/src/lib/routes/routes.ts - 373 + 378 @@ -8679,11 +8667,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 354 + 359 libs/common/src/lib/routes/routes.ts - 357 + 362 @@ -8763,7 +8751,7 @@ Current month apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 261 + 263 @@ -8908,11 +8896,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 386 + 391 libs/common/src/lib/routes/routes.ts - 387 + 392 @@ -8944,7 +8932,7 @@ Stocks apps/client/src/app/components/markets/markets.component.ts - 53 + 57 apps/client/src/app/pages/features/features-page.html @@ -8956,7 +8944,7 @@ Cryptocurrencies apps/client/src/app/components/markets/markets.component.ts - 54 + 58 apps/client/src/app/pages/features/features-page.html @@ -9084,7 +9072,7 @@ No results found... libs/ui/src/lib/assistant/assistant.html - 51 + 52 diff --git a/apps/client/src/locales/messages.de.xlf b/apps/client/src/locales/messages.de.xlf index 1a2a3ff38..8e857aaf4 100644 --- a/apps/client/src/locales/messages.de.xlf +++ b/apps/client/src/locales/messages.de.xlf @@ -77,8 +77,8 @@ Details Details - apps/client/src/app/components/access-table/access-table.component.html - 49 + apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html + 137 @@ -86,7 +86,7 @@ Widerrufen apps/client/src/app/components/access-table/access-table.component.html - 138 + 100 @@ -110,7 +110,7 @@ Möchtest du diese Zugangsberechtigung wirklich widerrufen? apps/client/src/app/components/access-table/access-table.component.ts - 177 + 153 @@ -242,7 +242,7 @@ Bearbeiten apps/client/src/app/components/access-table/access-table.component.html - 104 + 74 apps/client/src/app/components/admin-market-data/admin-market-data.html @@ -270,7 +270,7 @@ Löschen apps/client/src/app/components/access-table/access-table.component.html - 135 + 97 apps/client/src/app/components/admin-market-data/admin-market-data.html @@ -322,7 +322,7 @@ Möchtest du dieses Konto wirklich löschen? libs/ui/src/lib/accounts-table/accounts-table.component.ts - 183 + 185 @@ -434,7 +434,7 @@ libs/ui/src/lib/assistant/assistant.html - 140 + 141 @@ -446,7 +446,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 495 + 496 @@ -462,7 +462,7 @@ Splits apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 518 + 519 @@ -494,7 +494,7 @@ Finde ein Konto... libs/ui/src/lib/assistant/assistant.component.ts - 448 + 450 @@ -502,11 +502,11 @@ Datum apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 527 + 528 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 566 + 567 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -686,7 +686,7 @@ Konto bearbeiten libs/common/src/lib/routes/routes.ts - 101 + 106 @@ -702,7 +702,7 @@ Hinzufügen apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 621 + 622 apps/client/src/app/components/admin-overview/admin-overview.html @@ -862,7 +862,7 @@ libs/common/src/lib/routes/routes.ts - 116 + 121 @@ -894,7 +894,7 @@ Split-Verhältnis apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 532 + 533 @@ -910,7 +910,7 @@ Beim Zusammenführen dieses Anlageprofils mit () ist ein Fehler aufgetreten. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 942 + 944 @@ -1206,7 +1206,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 366 + 368 @@ -1214,11 +1214,11 @@ YTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 265 + 267 libs/ui/src/lib/assistant/assistant.component.ts - 378 + 380 @@ -1226,11 +1226,11 @@ 1J apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 269 + 271 libs/ui/src/lib/assistant/assistant.component.ts - 388 + 390 @@ -1246,11 +1246,11 @@ 5J apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 273 + 275 libs/ui/src/lib/assistant/assistant.component.ts - 410 + 412 @@ -1266,19 +1266,11 @@ Max apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 277 + 279 libs/ui/src/lib/assistant/assistant.component.ts - 416 - - - - Identifier has been copied to the clipboard - Identifizierungszeichen wurde in die Zwischenablage kopiert - - apps/client/src/app/components/access-table/access-table.component.ts - 149 + 418 @@ -1314,7 +1306,7 @@ libs/common/src/lib/routes/routes.ts - 270 + 275 @@ -1330,7 +1322,7 @@ libs/common/src/lib/routes/routes.ts - 259 + 264 @@ -1498,7 +1490,7 @@ Benutzer ID apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html - 116 + 113 apps/client/src/app/components/user-account-settings/user-account-settings.html @@ -1590,11 +1582,11 @@ libs/common/src/lib/routes/routes.ts - 104 + 109 libs/ui/src/lib/assistant/assistant.html - 84 + 85 @@ -1690,7 +1682,7 @@ Konto ID apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 108 + 109 @@ -1826,7 +1818,7 @@ libs/common/src/lib/routes/routes.ts - 275 + 280 @@ -1870,7 +1862,7 @@ libs/common/src/lib/routes/routes.ts - 301 + 306 @@ -1898,7 +1890,7 @@ libs/common/src/lib/routes/routes.ts - 306 + 311 @@ -1934,11 +1926,11 @@ libs/common/src/lib/routes/routes.ts - 143 + 148 libs/common/src/lib/routes/routes.ts - 220 + 225 @@ -1970,15 +1962,15 @@ libs/common/src/lib/routes/routes.ts - 130 + 135 libs/common/src/lib/routes/routes.ts - 311 + 316 libs/common/src/lib/routes/routes.ts - 359 + 364 @@ -1994,7 +1986,7 @@ libs/common/src/lib/routes/routes.ts - 184 + 189 @@ -2002,7 +1994,7 @@ Nach Konto apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 283 + 285 @@ -2010,7 +2002,7 @@ Nach Währung apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 58 + 60 @@ -2018,7 +2010,7 @@ Nach Anlageklasse apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 80 + 82 @@ -2026,7 +2018,7 @@ Nach Position apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 102 + 104 @@ -2034,7 +2026,7 @@ Nach Sektor apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 125 + 127 @@ -2042,7 +2034,7 @@ Nach Kontinent apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 148 + 150 @@ -2050,7 +2042,7 @@ Nach Land apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 261 + 263 @@ -2058,7 +2050,7 @@ Regionen apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 193 + 195 apps/client/src/app/pages/public/public-page.html @@ -2082,7 +2074,7 @@ libs/common/src/lib/routes/routes.ts - 189 + 194 @@ -2146,15 +2138,15 @@ libs/common/src/lib/routes/routes.ts - 125 + 130 libs/common/src/lib/routes/routes.ts - 217 + 222 libs/ui/src/lib/assistant/assistant.html - 110 + 111 @@ -2170,7 +2162,7 @@ Aktuelle Woche apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 257 + 259 @@ -2205,14 +2197,6 @@ 5 - - Copy identifier to clipboard - Identifizierungszeichen in die Zwischenablage kopieren - - apps/client/src/app/components/access-table/access-table.component.html - 120 - - Name, symbol or ISIN Name, Symbol oder ISIN @@ -2290,7 +2274,7 @@ apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html - 251 + 252 libs/ui/src/lib/accounts-table/accounts-table.component.html @@ -2346,7 +2330,7 @@ libs/common/src/lib/routes/routes.ts - 179 + 184 libs/ui/src/lib/accounts-table/accounts-table.component.html @@ -2406,7 +2390,7 @@ libs/common/src/lib/routes/routes.ts - 321 + 326 @@ -2430,7 +2414,7 @@ libs/common/src/lib/routes/routes.ts - 202 + 207 @@ -2466,7 +2450,7 @@ libs/common/src/lib/routes/routes.ts - 331 + 336 @@ -2510,7 +2494,7 @@ libs/common/src/lib/routes/routes.ts - 382 + 387 @@ -2778,7 +2762,7 @@ Entwickelte Länder apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 216 + 218 apps/client/src/app/pages/public/public-page.html @@ -2798,7 +2782,7 @@ Schwellenländer apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 226 + 228 apps/client/src/app/pages/public/public-page.html @@ -2810,7 +2794,7 @@ Übrige Länder apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 236 + 238 apps/client/src/app/pages/public/public-page.html @@ -2890,7 +2874,7 @@ Aktuellen Marktpreis übernehmen apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html - 220 + 221 @@ -2906,7 +2890,7 @@ Angst apps/client/src/app/components/markets/markets.component.ts - 57 + 61 libs/ui/src/lib/i18n.ts @@ -2918,7 +2902,7 @@ Gier apps/client/src/app/components/markets/markets.component.ts - 58 + 62 libs/ui/src/lib/i18n.ts @@ -2966,11 +2950,11 @@ Das Formular konnte nicht validiert werden apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 728 + 730 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 731 + 733 @@ -3102,7 +3086,7 @@ Konto apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.component.ts - 102 + 109 libs/common/src/lib/routes/routes.ts @@ -3138,7 +3122,7 @@ apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html - 266 + 268 libs/ui/src/lib/i18n.ts @@ -3266,7 +3250,7 @@ libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 460 + 462 @@ -3274,7 +3258,7 @@ Keine Daten verfügbar apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 247 + 249 apps/client/src/app/pages/public/public-page.html @@ -3286,11 +3270,11 @@ libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 462 + 464 libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 476 + 478 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -3418,7 +3402,7 @@ Möchtest du dieses Anlageprofil wirklich in () umwandeln? apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 809 + 811 @@ -3434,7 +3418,7 @@ Häufigkeit der Datensynchronisierung apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 476 + 477 @@ -3530,7 +3514,7 @@ apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html - 285 + 287 libs/ui/src/lib/i18n.ts @@ -3598,7 +3582,7 @@ Diese Aktion kann nicht rückgängig gemacht werden. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 961 + 963 @@ -3618,7 +3602,7 @@ libs/common/src/lib/routes/routes.ts - 135 + 140 @@ -3906,7 +3890,7 @@ Stündlich apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 249 + 251 @@ -4018,11 +4002,11 @@ Das Anlageprofil konnte nicht gespeichert werden apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 762 + 764 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 765 + 767 @@ -4138,7 +4122,7 @@ Dieses Anlageprofil kann nicht mit () zusammengeführt werden. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 920 + 922 @@ -4198,7 +4182,7 @@ Möchtest du diese erhaltene Zugangsberechtigung wirklich entfernen? apps/client/src/app/components/access-table/access-table.component.ts - 176 + 152 @@ -4214,7 +4198,7 @@ Nach ETF-Anbieter apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 303 + 305 @@ -4238,7 +4222,7 @@ Die Daten dieses Anlageprofils werden nach () verschoben und dieses Anlageprofil wird gelöscht. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 959 + 961 @@ -4254,7 +4238,7 @@ Aktuelles Jahr apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 265 + 267 @@ -4306,7 +4290,7 @@ Das Anlageprofil wurde gespeichert apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 752 + 754 @@ -4338,7 +4322,7 @@ Nach Plattform apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 39 + 41 @@ -4434,7 +4418,7 @@ Anteile nachher apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 590 + 591 @@ -4538,7 +4522,7 @@ libs/common/src/lib/routes/routes.ts - 235 + 240 @@ -4554,7 +4538,7 @@ libs/common/src/lib/routes/routes.ts - 243 + 248 @@ -4674,7 +4658,7 @@ Aktivität bearbeiten libs/common/src/lib/routes/routes.ts - 176 + 181 @@ -4706,7 +4690,7 @@ Scraper Konfiguration apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 634 + 635 @@ -4726,7 +4710,7 @@ libs/common/src/lib/routes/routes.ts - 379 + 384 @@ -4998,7 +4982,7 @@ Beim Umwandeln der Datenquelle in ist ein Fehler aufgetreten. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 526 + 528 @@ -5022,7 +5006,7 @@ Nach Markt apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 170 + 172 @@ -5270,11 +5254,11 @@ Die Scraper Konfiguration konnte nicht geparsed werden apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 676 + 678 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 679 + 681 @@ -5574,7 +5558,7 @@ Aktivität hinzufügen libs/common/src/lib/routes/routes.ts - 169 + 174 @@ -5623,19 +5607,19 @@ kebab-case libs/common/src/lib/routes/routes.ts - 284 + 289 libs/common/src/lib/routes/routes.ts - 285 + 290 libs/common/src/lib/routes/routes.ts - 289 + 294 libs/common/src/lib/routes/routes.ts - 295 + 300 @@ -5644,11 +5628,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 304 + 309 libs/common/src/lib/routes/routes.ts - 305 + 310 @@ -5657,31 +5641,31 @@ kebab-case libs/common/src/lib/routes/routes.ts - 226 + 231 libs/common/src/lib/routes/routes.ts - 227 + 232 libs/common/src/lib/routes/routes.ts - 232 + 237 libs/common/src/lib/routes/routes.ts - 240 + 245 libs/common/src/lib/routes/routes.ts - 248 + 253 libs/common/src/lib/routes/routes.ts - 256 + 261 libs/common/src/lib/routes/routes.ts - 264 + 269 @@ -5690,11 +5674,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 254 + 259 libs/common/src/lib/routes/routes.ts - 257 + 262 @@ -5703,11 +5687,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 238 + 243 libs/common/src/lib/routes/routes.ts - 241 + 246 @@ -5716,11 +5700,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 309 + 314 libs/common/src/lib/routes/routes.ts - 310 + 315 @@ -5729,11 +5713,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 319 + 324 libs/common/src/lib/routes/routes.ts - 320 + 325 @@ -5742,11 +5726,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 329 + 334 libs/common/src/lib/routes/routes.ts - 330 + 335 @@ -5755,31 +5739,31 @@ kebab-case libs/common/src/lib/routes/routes.ts - 334 + 339 libs/common/src/lib/routes/routes.ts - 335 + 340 libs/common/src/lib/routes/routes.ts - 340 + 345 libs/common/src/lib/routes/routes.ts - 348 + 353 libs/common/src/lib/routes/routes.ts - 356 + 361 libs/common/src/lib/routes/routes.ts - 364 + 369 libs/common/src/lib/routes/routes.ts - 372 + 377 @@ -5852,11 +5836,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 370 + 375 libs/common/src/lib/routes/routes.ts - 374 + 379 @@ -5924,7 +5908,7 @@ Möchtest du dieses Anlageprofil wirklich damit zusammenführen? apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 965 + 967 @@ -6008,7 +5992,7 @@ Gebühr apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html - 238 + 239 libs/ui/src/lib/activities-table/activities-table.component.html @@ -6066,6 +6050,10 @@ apps/client/src/app/pages/accounts/transfer-balance/transfer-balance-dialog.html 7 + + libs/common/src/lib/routes/routes.ts + 99 + libs/ui/src/lib/accounts-table/accounts-table.component.html 10 @@ -6359,8 +6347,8 @@ Oops, cash balance transfer has failed. Ups, der Cash-Bestand Transfer ist fehlgeschlagen. - apps/client/src/app/pages/accounts/accounts-page.component.ts - 199 + apps/client/src/app/pages/accounts/account-dialog-host/account-dialog-host.component.ts + 365 @@ -6416,7 +6404,7 @@ Portfolio Filter apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html - 128 + 125 @@ -6476,7 +6464,7 @@ Der aktuelle Marktpreis ist apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 854 + 856 @@ -6492,7 +6480,7 @@ Zeitraum libs/ui/src/lib/assistant/assistant.html - 170 + 171 @@ -6520,7 +6508,7 @@ Ups! Der Zugang konnte nicht gewährt werden. apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.component.ts - 256 + 311 @@ -6616,7 +6604,7 @@ Seit Wochenbeginn libs/ui/src/lib/assistant/assistant.component.ts - 370 + 372 @@ -6624,11 +6612,11 @@ WTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 257 + 259 libs/ui/src/lib/assistant/assistant.component.ts - 370 + 372 @@ -6636,7 +6624,7 @@ Seit Monatsbeginn libs/ui/src/lib/assistant/assistant.component.ts - 374 + 376 @@ -6644,11 +6632,11 @@ MTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 261 + 263 libs/ui/src/lib/assistant/assistant.component.ts - 374 + 376 @@ -6664,7 +6652,7 @@ Seit Jahresbeginn libs/ui/src/lib/assistant/assistant.component.ts - 378 + 380 @@ -6696,7 +6684,7 @@ Filter zurücksetzen libs/ui/src/lib/assistant/assistant.html - 204 + 205 @@ -6704,7 +6692,7 @@ Jahr apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 269 + 271 apps/client/src/app/pages/resources/personal-finance-tools/product-page.html @@ -6716,7 +6704,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 388 + 390 @@ -6724,11 +6712,11 @@ Jahre apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 273 + 275 libs/ui/src/lib/assistant/assistant.component.ts - 410 + 412 @@ -6736,7 +6724,7 @@ Filter anwenden libs/ui/src/lib/assistant/assistant.html - 217 + 218 @@ -6756,7 +6744,7 @@ Finde eine Position... libs/ui/src/lib/assistant/assistant.component.ts - 449 + 451 @@ -6776,7 +6764,7 @@ libs/common/src/lib/routes/routes.ts - 290 + 295 @@ -6788,7 +6776,7 @@ libs/common/src/lib/routes/routes.ts - 298 + 303 @@ -6797,11 +6785,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 293 + 298 libs/common/src/lib/routes/routes.ts - 296 + 301 @@ -6809,7 +6797,7 @@ Täglich apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 245 + 247 @@ -6833,7 +6821,7 @@ Aktiv apps/client/src/app/components/home-holdings/home-holdings.component.ts - 73 + 77 @@ -6841,7 +6829,7 @@ Abgeschlossen apps/client/src/app/components/home-holdings/home-holdings.component.ts - 74 + 78 @@ -6917,7 +6905,7 @@ Internationalisierung libs/common/src/lib/routes/routes.ts - 149 + 154 @@ -6933,7 +6921,7 @@ Springe zu einer Seite... libs/ui/src/lib/assistant/assistant.component.ts - 450 + 452 @@ -6957,7 +6945,7 @@ Nach ETF Position apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 328 + 330 @@ -6965,7 +6953,7 @@ Annäherung auf Basis der grössten Positionen pro ETF apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 335 + 337 @@ -6981,7 +6969,7 @@ Aktivität kopieren libs/common/src/lib/routes/routes.ts - 164 + 169 @@ -7029,7 +7017,7 @@ Tabelle apps/client/src/app/components/home-holdings/home-holdings.component.ts - 62 + 66 @@ -7037,7 +7025,7 @@ Diagramm apps/client/src/app/components/home-holdings/home-holdings.component.ts - 67 + 71 @@ -7265,15 +7253,15 @@ Fehler apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 844 + 846 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 921 + 923 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 943 + 945 @@ -7297,7 +7285,7 @@ Ups! Der Zugang konnte nicht bearbeitet werden. apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.component.ts - 354 + 409 @@ -7337,11 +7325,11 @@ apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html - 143 + 152 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 117 + 118 apps/client/src/app/pages/accounts/transfer-balance/transfer-balance-dialog.html @@ -7349,7 +7337,7 @@ apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html - 321 + 323 apps/client/src/app/pages/register/user-account-registration-dialog/user-account-registration-dialog.html @@ -7393,7 +7381,7 @@ apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html - 145 + 154 apps/client/src/app/components/user-account-membership/user-account-membership.component.ts @@ -7405,11 +7393,11 @@ apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 119 + 120 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html - 323 + 325 libs/ui/src/lib/i18n.ts @@ -7437,7 +7425,7 @@ Link in die Zwischenablage kopieren apps/client/src/app/components/access-table/access-table.component.html - 112 + 82 @@ -7657,7 +7645,7 @@ Anteile vorher apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 603 + 604 @@ -7717,7 +7705,7 @@ Ups! Es konnten leider keine Assets gefunden werden. libs/ui/src/lib/symbol-autocomplete/symbol-autocomplete.component.html - 43 + 44 @@ -7773,7 +7761,7 @@ libs/common/src/lib/routes/routes.ts - 343 + 348 @@ -7789,7 +7777,7 @@ libs/common/src/lib/routes/routes.ts - 351 + 356 @@ -7798,11 +7786,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 346 + 351 libs/common/src/lib/routes/routes.ts - 349 + 354 @@ -7811,11 +7799,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 338 + 343 libs/common/src/lib/routes/routes.ts - 341 + 346 @@ -7855,7 +7843,7 @@ Möchtest du den API-Schlüssel wirklich löschen? apps/client/src/app/components/admin-settings/admin-settings.component.ts - 148 + 151 @@ -7983,15 +7971,15 @@ apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html - 158 + 167 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 128 + 129 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html - 332 + 334 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html @@ -8039,7 +8027,7 @@ Bitte gebe deinen Ghostfolio API-Schlüssel ein. apps/client/src/app/components/admin-settings/admin-settings.component.ts - 167 + 170 @@ -8063,7 +8051,7 @@ Link wurde in die Zwischenablage kopiert apps/client/src/app/components/access-table/access-table.component.ts - 161 + 137 @@ -8071,7 +8059,7 @@ Verzögert apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 294 + 296 @@ -8079,7 +8067,7 @@ Sofort apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 298 + 300 @@ -8087,7 +8075,7 @@ Standardmarktpreis apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 644 + 645 @@ -8103,7 +8091,7 @@ Möchtest du die Datenquelle wirklich in umwandeln? apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 529 + 531 @@ -8119,7 +8107,7 @@ HTTP Request-Headers apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 657 + 658 @@ -8127,7 +8115,7 @@ Tagesende apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 294 + 296 @@ -8135,7 +8123,7 @@ in Echtzeit apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 298 + 300 @@ -8263,7 +8251,7 @@ Während du deine Instanz einrichtest, stehen dir zusätzliche Anfragen zur Verfügung. apps/client/src/app/components/admin-settings/admin-settings.component.ts - 87 + 88 @@ -8332,11 +8320,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 262 + 267 libs/common/src/lib/routes/routes.ts - 265 + 270 @@ -8348,7 +8336,7 @@ libs/common/src/lib/routes/routes.ts - 267 + 272 @@ -8364,7 +8352,7 @@ () wird bereits verwendet. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 963 + 965 @@ -8372,7 +8360,7 @@ Bei der Änderung zu () ist ein Fehler aufgetreten. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 807 + 809 @@ -8436,7 +8424,7 @@ libs/common/src/lib/routes/routes.ts - 140 + 145 @@ -8481,11 +8469,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 230 + 235 libs/common/src/lib/routes/routes.ts - 233 + 238 @@ -8605,7 +8593,7 @@ Schnellzugriff libs/ui/src/lib/assistant/assistant.html - 58 + 59 @@ -8621,7 +8609,7 @@ libs/common/src/lib/routes/routes.ts - 281 + 286 @@ -8629,7 +8617,7 @@ Open Source Alternative zu libs/common/src/lib/routes/routes.ts - 376 + 381 @@ -8662,15 +8650,15 @@ kebab-case libs/common/src/lib/routes/routes.ts - 362 + 367 libs/common/src/lib/routes/routes.ts - 365 + 370 libs/common/src/lib/routes/routes.ts - 373 + 378 @@ -8679,11 +8667,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 354 + 359 libs/common/src/lib/routes/routes.ts - 357 + 362 @@ -8763,7 +8751,7 @@ Aktueller Monat apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 261 + 263 @@ -8908,11 +8896,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 386 + 391 libs/common/src/lib/routes/routes.ts - 387 + 392 @@ -8944,7 +8932,7 @@ Aktien apps/client/src/app/components/markets/markets.component.ts - 53 + 57 apps/client/src/app/pages/features/features-page.html @@ -8956,7 +8944,7 @@ Kryptowährungen apps/client/src/app/components/markets/markets.component.ts - 54 + 58 apps/client/src/app/pages/features/features-page.html @@ -9084,7 +9072,7 @@ Keine Ergebnisse gefunden... libs/ui/src/lib/assistant/assistant.html - 51 + 52 diff --git a/apps/client/src/locales/messages.es.xlf b/apps/client/src/locales/messages.es.xlf index 80b316bfc..8c38c0e39 100644 --- a/apps/client/src/locales/messages.es.xlf +++ b/apps/client/src/locales/messages.es.xlf @@ -78,8 +78,8 @@ Details Detalles - apps/client/src/app/components/access-table/access-table.component.html - 49 + apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html + 137 @@ -87,7 +87,7 @@ Revocar apps/client/src/app/components/access-table/access-table.component.html - 138 + 100 @@ -111,7 +111,7 @@ ¿Seguro que quieres revocar el acceso concedido? apps/client/src/app/components/access-table/access-table.component.ts - 177 + 153 @@ -243,7 +243,7 @@ Editar apps/client/src/app/components/access-table/access-table.component.html - 104 + 74 apps/client/src/app/components/admin-market-data/admin-market-data.html @@ -271,7 +271,7 @@ Eliminar apps/client/src/app/components/access-table/access-table.component.html - 135 + 97 apps/client/src/app/components/admin-market-data/admin-market-data.html @@ -323,7 +323,7 @@ ¿Seguro que quieres eliminar esta cuenta? libs/ui/src/lib/accounts-table/accounts-table.component.ts - 183 + 185 @@ -435,7 +435,7 @@ libs/ui/src/lib/assistant/assistant.html - 140 + 141 @@ -447,7 +447,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 495 + 496 @@ -463,7 +463,7 @@ Desdoblamientos apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 518 + 519 @@ -495,7 +495,7 @@ Buscar una cuenta... libs/ui/src/lib/assistant/assistant.component.ts - 448 + 450 @@ -503,11 +503,11 @@ Fecha apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 527 + 528 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 566 + 567 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -671,7 +671,7 @@ Actualizar cuenta libs/common/src/lib/routes/routes.ts - 101 + 106 @@ -687,7 +687,7 @@ Añadir apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 621 + 622 apps/client/src/app/components/admin-overview/admin-overview.html @@ -847,7 +847,7 @@ libs/common/src/lib/routes/routes.ts - 116 + 121 @@ -879,7 +879,7 @@ Relación de desdoblamiento apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 532 + 533 @@ -895,7 +895,7 @@ An error occurred while merging this asset profile into (). apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 942 + 944 @@ -1191,7 +1191,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 366 + 368 @@ -1199,11 +1199,11 @@ YTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 265 + 267 libs/ui/src/lib/assistant/assistant.component.ts - 378 + 380 @@ -1211,11 +1211,11 @@ 1 año apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 269 + 271 libs/ui/src/lib/assistant/assistant.component.ts - 388 + 390 @@ -1231,11 +1231,11 @@ 5 años apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 273 + 275 libs/ui/src/lib/assistant/assistant.component.ts - 410 + 412 @@ -1251,19 +1251,11 @@ Máximo apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 277 + 279 libs/ui/src/lib/assistant/assistant.component.ts - 416 - - - - Identifier has been copied to the clipboard - Identifier has been copied to the clipboard - - apps/client/src/app/components/access-table/access-table.component.ts - 149 + 418 @@ -1299,7 +1291,7 @@ libs/common/src/lib/routes/routes.ts - 270 + 275 @@ -1315,7 +1307,7 @@ libs/common/src/lib/routes/routes.ts - 259 + 264 @@ -1483,7 +1475,7 @@ ID de usuario apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html - 116 + 113 apps/client/src/app/components/user-account-settings/user-account-settings.html @@ -1575,11 +1567,11 @@ libs/common/src/lib/routes/routes.ts - 104 + 109 libs/ui/src/lib/assistant/assistant.html - 84 + 85 @@ -1675,7 +1667,7 @@ ID de cuenta apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 108 + 109 @@ -1811,7 +1803,7 @@ libs/common/src/lib/routes/routes.ts - 275 + 280 @@ -1855,7 +1847,7 @@ libs/common/src/lib/routes/routes.ts - 301 + 306 @@ -1883,7 +1875,7 @@ libs/common/src/lib/routes/routes.ts - 306 + 311 @@ -1919,11 +1911,11 @@ libs/common/src/lib/routes/routes.ts - 143 + 148 libs/common/src/lib/routes/routes.ts - 220 + 225 @@ -1955,15 +1947,15 @@ libs/common/src/lib/routes/routes.ts - 130 + 135 libs/common/src/lib/routes/routes.ts - 311 + 316 libs/common/src/lib/routes/routes.ts - 359 + 364 @@ -1979,7 +1971,7 @@ libs/common/src/lib/routes/routes.ts - 184 + 189 @@ -1987,7 +1979,7 @@ Por cuenta apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 283 + 285 @@ -1995,7 +1987,7 @@ Por divisa apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 58 + 60 @@ -2003,7 +1995,7 @@ Por tipo de activo apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 80 + 82 @@ -2011,7 +2003,7 @@ Por posiciones apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 102 + 104 @@ -2019,7 +2011,7 @@ Por sector apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 125 + 127 @@ -2027,7 +2019,7 @@ Por continente apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 148 + 150 @@ -2035,7 +2027,7 @@ Por país apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 261 + 263 @@ -2043,7 +2035,7 @@ Regiones apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 193 + 195 apps/client/src/app/pages/public/public-page.html @@ -2067,7 +2059,7 @@ libs/common/src/lib/routes/routes.ts - 189 + 194 @@ -2131,15 +2123,15 @@ libs/common/src/lib/routes/routes.ts - 125 + 130 libs/common/src/lib/routes/routes.ts - 217 + 222 libs/ui/src/lib/assistant/assistant.html - 110 + 111 @@ -2155,7 +2147,7 @@ Semana actual apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 257 + 259 @@ -2190,14 +2182,6 @@ 5 - - Copy identifier to clipboard - Copy identifier to clipboard - - apps/client/src/app/components/access-table/access-table.component.html - 120 - - Name, symbol or ISIN Nombre, símbolo o ISIN @@ -2275,7 +2259,7 @@ apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html - 251 + 252 libs/ui/src/lib/accounts-table/accounts-table.component.html @@ -2331,7 +2315,7 @@ libs/common/src/lib/routes/routes.ts - 179 + 184 libs/ui/src/lib/accounts-table/accounts-table.component.html @@ -2391,7 +2375,7 @@ libs/common/src/lib/routes/routes.ts - 321 + 326 @@ -2415,7 +2399,7 @@ libs/common/src/lib/routes/routes.ts - 202 + 207 @@ -2451,7 +2435,7 @@ libs/common/src/lib/routes/routes.ts - 331 + 336 @@ -2495,7 +2479,7 @@ libs/common/src/lib/routes/routes.ts - 382 + 387 @@ -2707,7 +2691,7 @@ Mercados desarrollados apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 216 + 218 apps/client/src/app/pages/public/public-page.html @@ -2735,7 +2719,7 @@ Otros mercados apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 236 + 238 apps/client/src/app/pages/public/public-page.html @@ -2747,7 +2731,7 @@ Mercados emergentes apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 226 + 228 apps/client/src/app/pages/public/public-page.html @@ -2867,7 +2851,7 @@ Aplicar el precio de mercado actual apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html - 220 + 221 @@ -2891,7 +2875,7 @@ Miedo apps/client/src/app/components/markets/markets.component.ts - 57 + 61 libs/ui/src/lib/i18n.ts @@ -2903,7 +2887,7 @@ Codicia apps/client/src/app/components/markets/markets.component.ts - 58 + 62 libs/ui/src/lib/i18n.ts @@ -2963,11 +2947,11 @@ No se pudo validar el formulario apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 728 + 730 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 731 + 733 @@ -3087,7 +3071,7 @@ Cuenta apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.component.ts - 102 + 109 libs/common/src/lib/routes/routes.ts @@ -3123,7 +3107,7 @@ apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html - 266 + 268 libs/ui/src/lib/i18n.ts @@ -3251,7 +3235,7 @@ libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 460 + 462 @@ -3259,7 +3243,7 @@ Sin datos disponibles apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 247 + 249 apps/client/src/app/pages/public/public-page.html @@ -3271,11 +3255,11 @@ libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 462 + 464 libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 476 + 478 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -3403,7 +3387,7 @@ ¿Seguro que quieres convertir este perfil de activo a ()? apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 809 + 811 @@ -3419,7 +3403,7 @@ Frecuencia de recopilación de datos apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 476 + 477 @@ -3515,7 +3499,7 @@ apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html - 285 + 287 libs/ui/src/lib/i18n.ts @@ -3583,7 +3567,7 @@ This action cannot be undone. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 961 + 963 @@ -3603,7 +3587,7 @@ libs/common/src/lib/routes/routes.ts - 135 + 140 @@ -3891,7 +3875,7 @@ Horaria apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 249 + 251 @@ -4003,11 +3987,11 @@ No se pudo guardar el perfil del activo apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 762 + 764 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 765 + 767 @@ -4123,7 +4107,7 @@ This asset profile cannot be merged into (). apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 920 + 922 @@ -4175,7 +4159,7 @@ Do you really want to remove this received access? apps/client/src/app/components/access-table/access-table.component.ts - 176 + 152 @@ -4191,7 +4175,7 @@ Por proveedor de ETF apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 303 + 305 @@ -4215,7 +4199,7 @@ The data of this asset profile is moved to () and this asset profile is deleted. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 959 + 961 @@ -4231,7 +4215,7 @@ Año actual apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 265 + 267 @@ -4283,7 +4267,7 @@ Perfil del activo guardado apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 752 + 754 @@ -4315,7 +4299,7 @@ Por plataforma apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 39 + 41 @@ -4411,7 +4395,7 @@ Acciones después apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 590 + 591 @@ -4515,7 +4499,7 @@ libs/common/src/lib/routes/routes.ts - 235 + 240 @@ -4531,7 +4515,7 @@ libs/common/src/lib/routes/routes.ts - 243 + 248 @@ -4651,7 +4635,7 @@ Actualizar operación libs/common/src/lib/routes/routes.ts - 176 + 181 @@ -4683,7 +4667,7 @@ Configuración del scraper apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 634 + 635 @@ -4703,7 +4687,7 @@ libs/common/src/lib/routes/routes.ts - 379 + 384 @@ -4975,7 +4959,7 @@ Se produjo un error al convertir la fuente de datos a . apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 526 + 528 @@ -4999,7 +4983,7 @@ Por mercado apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 170 + 172 @@ -5247,11 +5231,11 @@ No se pudo analizar la configuración del scraper apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 676 + 678 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 679 + 681 @@ -5551,7 +5535,7 @@ Añadir operación libs/common/src/lib/routes/routes.ts - 169 + 174 @@ -5600,19 +5584,19 @@ kebab-case libs/common/src/lib/routes/routes.ts - 284 + 289 libs/common/src/lib/routes/routes.ts - 285 + 290 libs/common/src/lib/routes/routes.ts - 289 + 294 libs/common/src/lib/routes/routes.ts - 295 + 300 @@ -5621,11 +5605,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 304 + 309 libs/common/src/lib/routes/routes.ts - 305 + 310 @@ -5634,31 +5618,31 @@ kebab-case libs/common/src/lib/routes/routes.ts - 226 + 231 libs/common/src/lib/routes/routes.ts - 227 + 232 libs/common/src/lib/routes/routes.ts - 232 + 237 libs/common/src/lib/routes/routes.ts - 240 + 245 libs/common/src/lib/routes/routes.ts - 248 + 253 libs/common/src/lib/routes/routes.ts - 256 + 261 libs/common/src/lib/routes/routes.ts - 264 + 269 @@ -5667,11 +5651,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 254 + 259 libs/common/src/lib/routes/routes.ts - 257 + 262 @@ -5680,11 +5664,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 238 + 243 libs/common/src/lib/routes/routes.ts - 241 + 246 @@ -5693,11 +5677,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 309 + 314 libs/common/src/lib/routes/routes.ts - 310 + 315 @@ -5706,11 +5690,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 319 + 324 libs/common/src/lib/routes/routes.ts - 320 + 325 @@ -5719,11 +5703,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 329 + 334 libs/common/src/lib/routes/routes.ts - 330 + 335 @@ -5732,31 +5716,31 @@ kebab-case libs/common/src/lib/routes/routes.ts - 334 + 339 libs/common/src/lib/routes/routes.ts - 335 + 340 libs/common/src/lib/routes/routes.ts - 340 + 345 libs/common/src/lib/routes/routes.ts - 348 + 353 libs/common/src/lib/routes/routes.ts - 356 + 361 libs/common/src/lib/routes/routes.ts - 364 + 369 libs/common/src/lib/routes/routes.ts - 372 + 377 @@ -5829,11 +5813,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 370 + 375 libs/common/src/lib/routes/routes.ts - 374 + 379 @@ -5901,7 +5885,7 @@ Do you really want to merge this asset profile into it? apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 965 + 967 @@ -5985,7 +5969,7 @@ Comisión apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html - 238 + 239 libs/ui/src/lib/activities-table/activities-table.component.html @@ -6043,6 +6027,10 @@ apps/client/src/app/pages/accounts/transfer-balance/transfer-balance-dialog.html 7 + + libs/common/src/lib/routes/routes.ts + 99 + libs/ui/src/lib/accounts-table/accounts-table.component.html 10 @@ -6336,8 +6324,8 @@ Oops, cash balance transfer has failed. ¡Vaya! La transferencia del saldo de efectivo ha fallado. - apps/client/src/app/pages/accounts/accounts-page.component.ts - 199 + apps/client/src/app/pages/accounts/account-dialog-host/account-dialog-host.component.ts + 365 @@ -6393,7 +6381,7 @@ Filtros de cartera apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html - 128 + 125 @@ -6453,7 +6441,7 @@ El precio actual de mercado es apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 854 + 856 @@ -6469,7 +6457,7 @@ Rango de fechas libs/ui/src/lib/assistant/assistant.html - 170 + 171 @@ -6497,7 +6485,7 @@ ¡Vaya! No se pudo otorgar acceso. apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.component.ts - 256 + 311 @@ -6593,7 +6581,7 @@ Semana hasta la fecha libs/ui/src/lib/assistant/assistant.component.ts - 370 + 372 @@ -6601,11 +6589,11 @@ WTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 257 + 259 libs/ui/src/lib/assistant/assistant.component.ts - 370 + 372 @@ -6613,7 +6601,7 @@ Mes hasta la fecha libs/ui/src/lib/assistant/assistant.component.ts - 374 + 376 @@ -6621,11 +6609,11 @@ MTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 261 + 263 libs/ui/src/lib/assistant/assistant.component.ts - 374 + 376 @@ -6641,7 +6629,7 @@ Año hasta la fecha libs/ui/src/lib/assistant/assistant.component.ts - 378 + 380 @@ -6673,7 +6661,7 @@ Reiniciar filtros libs/ui/src/lib/assistant/assistant.html - 204 + 205 @@ -6681,7 +6669,7 @@ año apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 269 + 271 apps/client/src/app/pages/resources/personal-finance-tools/product-page.html @@ -6693,7 +6681,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 388 + 390 @@ -6701,11 +6689,11 @@ años apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 273 + 275 libs/ui/src/lib/assistant/assistant.component.ts - 410 + 412 @@ -6713,7 +6701,7 @@ Aplicar filtros libs/ui/src/lib/assistant/assistant.html - 217 + 218 @@ -6733,7 +6721,7 @@ Buscar una posición... libs/ui/src/lib/assistant/assistant.component.ts - 449 + 451 @@ -6753,7 +6741,7 @@ libs/common/src/lib/routes/routes.ts - 290 + 295 @@ -6765,7 +6753,7 @@ libs/common/src/lib/routes/routes.ts - 298 + 303 @@ -6774,11 +6762,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 293 + 298 libs/common/src/lib/routes/routes.ts - 296 + 301 @@ -6786,7 +6774,7 @@ Diaria apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 245 + 247 @@ -6810,7 +6798,7 @@ Activo apps/client/src/app/components/home-holdings/home-holdings.component.ts - 73 + 77 @@ -6818,7 +6806,7 @@ Cerrado apps/client/src/app/components/home-holdings/home-holdings.component.ts - 74 + 78 @@ -6894,7 +6882,7 @@ Internacionalización libs/common/src/lib/routes/routes.ts - 149 + 154 @@ -6910,7 +6898,7 @@ Saltar a una página... libs/ui/src/lib/assistant/assistant.component.ts - 450 + 452 @@ -6934,7 +6922,7 @@ Por tenencia de ETF apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 328 + 330 @@ -6942,7 +6930,7 @@ Aproximación basada en las principales posiciones de cada ETF apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 335 + 337 @@ -6958,7 +6946,7 @@ Clonar operación libs/common/src/lib/routes/routes.ts - 164 + 169 @@ -7006,7 +6994,7 @@ Tabla apps/client/src/app/components/home-holdings/home-holdings.component.ts - 62 + 66 @@ -7014,7 +7002,7 @@ Gráfico apps/client/src/app/components/home-holdings/home-holdings.component.ts - 67 + 71 @@ -7242,15 +7230,15 @@ Error apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 844 + 846 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 921 + 923 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 943 + 945 @@ -7274,7 +7262,7 @@ ¡Vaya! No se pudo actualizar el acceso. apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.component.ts - 354 + 409 @@ -7314,11 +7302,11 @@ apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html - 143 + 152 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 117 + 118 apps/client/src/app/pages/accounts/transfer-balance/transfer-balance-dialog.html @@ -7326,7 +7314,7 @@ apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html - 321 + 323 apps/client/src/app/pages/register/user-account-registration-dialog/user-account-registration-dialog.html @@ -7370,7 +7358,7 @@ apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html - 145 + 154 apps/client/src/app/components/user-account-membership/user-account-membership.component.ts @@ -7382,11 +7370,11 @@ apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 119 + 120 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html - 323 + 325 libs/ui/src/lib/i18n.ts @@ -7414,7 +7402,7 @@ Copiar enlace al portapapeles apps/client/src/app/components/access-table/access-table.component.html - 112 + 82 @@ -7634,7 +7622,7 @@ Acciones antes apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 603 + 604 @@ -7694,7 +7682,7 @@ ¡Vaya! No se pudieron encontrar activos. libs/ui/src/lib/symbol-autocomplete/symbol-autocomplete.component.html - 43 + 44 @@ -7750,7 +7738,7 @@ libs/common/src/lib/routes/routes.ts - 343 + 348 @@ -7766,7 +7754,7 @@ libs/common/src/lib/routes/routes.ts - 351 + 356 @@ -7775,11 +7763,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 346 + 351 libs/common/src/lib/routes/routes.ts - 349 + 354 @@ -7788,11 +7776,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 338 + 343 libs/common/src/lib/routes/routes.ts - 341 + 346 @@ -7832,7 +7820,7 @@ ¿Seguro que quieres eliminar la clave API? apps/client/src/app/components/admin-settings/admin-settings.component.ts - 148 + 151 @@ -7960,15 +7948,15 @@ apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html - 158 + 167 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 128 + 129 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html - 332 + 334 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html @@ -8016,7 +8004,7 @@ Por favor, ingresa tu clave API de Ghostfolio. apps/client/src/app/components/admin-settings/admin-settings.component.ts - 167 + 170 @@ -8040,7 +8028,7 @@ El enlace ha sido copiado al portapapeles apps/client/src/app/components/access-table/access-table.component.ts - 161 + 137 @@ -8048,7 +8036,7 @@ Bajo demanda apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 294 + 296 @@ -8056,7 +8044,7 @@ Instantáneo apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 298 + 300 @@ -8064,7 +8052,7 @@ Precio de mercado por defecto apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 644 + 645 @@ -8080,7 +8068,7 @@ ¿Seguro que quieres convertir la fuente de datos a ? apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 529 + 531 @@ -8096,7 +8084,7 @@ Encabezados de solicitud HTTP apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 657 + 658 @@ -8104,7 +8092,7 @@ final del día apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 294 + 296 @@ -8112,7 +8100,7 @@ en tiempo real apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 298 + 300 @@ -8240,7 +8228,7 @@ Additional requests are granted while you are setting up your instance apps/client/src/app/components/admin-settings/admin-settings.component.ts - 87 + 88 @@ -8309,11 +8297,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 262 + 267 libs/common/src/lib/routes/routes.ts - 265 + 270 @@ -8325,7 +8313,7 @@ libs/common/src/lib/routes/routes.ts - 267 + 272 @@ -8341,7 +8329,7 @@ () ya está en uso. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 963 + 965 @@ -8349,7 +8337,7 @@ Ocurrió un error al actualizar a (). apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 807 + 809 @@ -8437,7 +8425,7 @@ libs/common/src/lib/routes/routes.ts - 140 + 145 @@ -8482,11 +8470,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 230 + 235 libs/common/src/lib/routes/routes.ts - 233 + 238 @@ -8606,7 +8594,7 @@ Enlaces rápidos libs/ui/src/lib/assistant/assistant.html - 58 + 59 @@ -8622,7 +8610,7 @@ libs/common/src/lib/routes/routes.ts - 281 + 286 @@ -8630,7 +8618,7 @@ Alternativa de software de código abierto a libs/common/src/lib/routes/routes.ts - 376 + 381 @@ -8663,15 +8651,15 @@ kebab-case libs/common/src/lib/routes/routes.ts - 362 + 367 libs/common/src/lib/routes/routes.ts - 365 + 370 libs/common/src/lib/routes/routes.ts - 373 + 378 @@ -8680,11 +8668,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 354 + 359 libs/common/src/lib/routes/routes.ts - 357 + 362 @@ -8764,7 +8752,7 @@ Mes actual apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 261 + 263 @@ -8909,11 +8897,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 386 + 391 libs/common/src/lib/routes/routes.ts - 387 + 392 @@ -8945,7 +8933,7 @@ Acciones apps/client/src/app/components/markets/markets.component.ts - 53 + 57 apps/client/src/app/pages/features/features-page.html @@ -8957,7 +8945,7 @@ Criptomonedas apps/client/src/app/components/markets/markets.component.ts - 54 + 58 apps/client/src/app/pages/features/features-page.html @@ -9085,7 +9073,7 @@ No se encontraron resultados... libs/ui/src/lib/assistant/assistant.html - 51 + 52 diff --git a/apps/client/src/locales/messages.fr.xlf b/apps/client/src/locales/messages.fr.xlf index 85b4f6983..92acbf502 100644 --- a/apps/client/src/locales/messages.fr.xlf +++ b/apps/client/src/locales/messages.fr.xlf @@ -69,8 +69,8 @@ Details Détails - apps/client/src/app/components/access-table/access-table.component.html - 49 + apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html + 137 @@ -78,7 +78,7 @@ Révoquer apps/client/src/app/components/access-table/access-table.component.html - 138 + 100 @@ -102,7 +102,7 @@ Voulez-vous vraiment révoquer cet accès ? apps/client/src/app/components/access-table/access-table.component.ts - 177 + 153 @@ -306,7 +306,7 @@ Modifier apps/client/src/app/components/access-table/access-table.component.html - 104 + 74 apps/client/src/app/components/admin-market-data/admin-market-data.html @@ -334,7 +334,7 @@ Supprimer apps/client/src/app/components/access-table/access-table.component.html - 135 + 97 apps/client/src/app/components/admin-market-data/admin-market-data.html @@ -386,7 +386,7 @@ Voulez-vous vraiment supprimer ce compte ? libs/ui/src/lib/accounts-table/accounts-table.component.ts - 183 + 185 @@ -498,7 +498,7 @@ libs/ui/src/lib/assistant/assistant.html - 140 + 141 @@ -510,7 +510,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 495 + 496 @@ -526,7 +526,7 @@ Splits apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 518 + 519 @@ -558,7 +558,7 @@ Rechercher un compte... libs/ui/src/lib/assistant/assistant.component.ts - 448 + 450 @@ -566,11 +566,11 @@ Date apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 527 + 528 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 566 + 567 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -654,7 +654,7 @@ Fréquence de collecte des données apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 476 + 477 @@ -690,7 +690,7 @@ Appliquer le prix actuel du marché apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html - 220 + 221 @@ -826,7 +826,7 @@ apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html - 251 + 252 libs/ui/src/lib/accounts-table/accounts-table.component.html @@ -914,7 +914,7 @@ Update Account libs/common/src/lib/routes/routes.ts - 101 + 106 @@ -954,7 +954,7 @@ Ajouter apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 621 + 622 apps/client/src/app/components/admin-overview/admin-overview.html @@ -1038,11 +1038,11 @@ Le formulaire n’a pas pu être validé apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 728 + 730 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 731 + 733 @@ -1074,7 +1074,7 @@ libs/common/src/lib/routes/routes.ts - 202 + 207 @@ -1126,7 +1126,7 @@ libs/common/src/lib/routes/routes.ts - 116 + 121 @@ -1158,7 +1158,7 @@ Split Ratio apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 532 + 533 @@ -1166,7 +1166,7 @@ Peur apps/client/src/app/components/markets/markets.component.ts - 57 + 61 libs/ui/src/lib/i18n.ts @@ -1178,7 +1178,7 @@ Avidité apps/client/src/app/components/markets/markets.component.ts - 58 + 62 libs/ui/src/lib/i18n.ts @@ -1198,7 +1198,7 @@ An error occurred while merging this asset profile into (). apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 942 + 944 @@ -1478,7 +1478,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 366 + 368 @@ -1486,11 +1486,11 @@ CDA apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 265 + 267 libs/ui/src/lib/assistant/assistant.component.ts - 378 + 380 @@ -1498,11 +1498,11 @@ 1A apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 269 + 271 libs/ui/src/lib/assistant/assistant.component.ts - 388 + 390 @@ -1518,11 +1518,11 @@ 5A apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 273 + 275 libs/ui/src/lib/assistant/assistant.component.ts - 410 + 412 @@ -1538,19 +1538,11 @@ Max apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 277 + 279 libs/ui/src/lib/assistant/assistant.component.ts - 416 - - - - Identifier has been copied to the clipboard - Identifier has been copied to the clipboard - - apps/client/src/app/components/access-table/access-table.component.ts - 149 + 418 @@ -1622,7 +1614,7 @@ libs/common/src/lib/routes/routes.ts - 270 + 275 @@ -1638,7 +1630,7 @@ libs/common/src/lib/routes/routes.ts - 259 + 264 @@ -1878,7 +1870,7 @@ ID d’utilisateur apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html - 116 + 113 apps/client/src/app/components/user-account-settings/user-account-settings.html @@ -1970,11 +1962,11 @@ libs/common/src/lib/routes/routes.ts - 104 + 109 libs/ui/src/lib/assistant/assistant.html - 84 + 85 @@ -1998,7 +1990,7 @@ ID du compte apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 108 + 109 @@ -2158,7 +2150,7 @@ libs/common/src/lib/routes/routes.ts - 275 + 280 @@ -2202,7 +2194,7 @@ libs/common/src/lib/routes/routes.ts - 301 + 306 @@ -2230,7 +2222,7 @@ libs/common/src/lib/routes/routes.ts - 306 + 311 @@ -2254,15 +2246,15 @@ libs/common/src/lib/routes/routes.ts - 125 + 130 libs/common/src/lib/routes/routes.ts - 217 + 222 libs/ui/src/lib/assistant/assistant.html - 110 + 111 @@ -2270,7 +2262,7 @@ This action cannot be undone. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 961 + 963 @@ -2290,7 +2282,7 @@ libs/common/src/lib/routes/routes.ts - 135 + 140 @@ -2322,15 +2314,15 @@ libs/common/src/lib/routes/routes.ts - 130 + 135 libs/common/src/lib/routes/routes.ts - 311 + 316 libs/common/src/lib/routes/routes.ts - 359 + 364 @@ -2378,7 +2370,7 @@ libs/common/src/lib/routes/routes.ts - 179 + 184 libs/ui/src/lib/accounts-table/accounts-table.component.html @@ -2398,7 +2390,7 @@ Semaine en cours apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 257 + 259 @@ -2433,14 +2425,6 @@ 5 - - Copy identifier to clipboard - Copy identifier to clipboard - - apps/client/src/app/components/access-table/access-table.component.html - 120 - - Name, symbol or ISIN Nom, symbole, ou ISIN @@ -2546,7 +2530,7 @@ Do you really want to convert this asset profile to ()? apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 809 + 811 @@ -2578,7 +2562,7 @@ libs/common/src/lib/routes/routes.ts - 184 + 189 @@ -2594,7 +2578,7 @@ Par Compte apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 283 + 285 @@ -2602,7 +2586,7 @@ Par Devise apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 58 + 60 @@ -2610,7 +2594,7 @@ Par Classe d’Actifs apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 80 + 82 @@ -2618,7 +2602,7 @@ Par Position apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 102 + 104 @@ -2626,7 +2610,7 @@ Par Secteur apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 125 + 127 @@ -2634,7 +2618,7 @@ Par Continent apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 148 + 150 @@ -2642,7 +2626,7 @@ Par Pays apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 261 + 263 @@ -2650,7 +2634,7 @@ Régions apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 193 + 195 apps/client/src/app/pages/public/public-page.html @@ -2678,7 +2662,7 @@ Marchés développés apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 216 + 218 apps/client/src/app/pages/public/public-page.html @@ -2698,7 +2682,7 @@ Marchés émergents apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 226 + 228 apps/client/src/app/pages/public/public-page.html @@ -2710,7 +2694,7 @@ Autres marchés apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 236 + 238 apps/client/src/app/pages/public/public-page.html @@ -2726,7 +2710,7 @@ libs/common/src/lib/routes/routes.ts - 189 + 194 @@ -2870,7 +2854,7 @@ libs/common/src/lib/routes/routes.ts - 321 + 326 @@ -2958,7 +2942,7 @@ libs/common/src/lib/routes/routes.ts - 331 + 336 @@ -3022,7 +3006,7 @@ libs/common/src/lib/routes/routes.ts - 382 + 387 @@ -3082,11 +3066,11 @@ libs/common/src/lib/routes/routes.ts - 143 + 148 libs/common/src/lib/routes/routes.ts - 220 + 225 @@ -3286,7 +3270,7 @@ Compte apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.component.ts - 102 + 109 libs/common/src/lib/routes/routes.ts @@ -3322,7 +3306,7 @@ apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html - 266 + 268 libs/ui/src/lib/i18n.ts @@ -3354,7 +3338,7 @@ apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html - 285 + 287 libs/ui/src/lib/i18n.ts @@ -3398,7 +3382,7 @@ libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 460 + 462 @@ -3582,7 +3566,7 @@ Pas de données disponibles apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 247 + 249 apps/client/src/app/pages/public/public-page.html @@ -3594,11 +3578,11 @@ libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 462 + 464 libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 476 + 478 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -3890,7 +3874,7 @@ Toutes les heures apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 249 + 251 @@ -4002,11 +3986,11 @@ Le profil d’actif n’a pas pu être enregistré apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 762 + 764 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 765 + 767 @@ -4122,7 +4106,7 @@ This asset profile cannot be merged into (). apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 920 + 922 @@ -4174,7 +4158,7 @@ Do you really want to remove this received access? apps/client/src/app/components/access-table/access-table.component.ts - 176 + 152 @@ -4190,7 +4174,7 @@ Par Émetteur d’ETF apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 303 + 305 @@ -4214,7 +4198,7 @@ The data of this asset profile is moved to () and this asset profile is deleted. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 959 + 961 @@ -4230,7 +4214,7 @@ Année en cours apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 265 + 267 @@ -4282,7 +4266,7 @@ Le profil d’actif a été enregistré apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 752 + 754 @@ -4314,7 +4298,7 @@ Par Plateforme apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 39 + 41 @@ -4410,7 +4394,7 @@ Shares After apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 590 + 591 @@ -4514,7 +4498,7 @@ libs/common/src/lib/routes/routes.ts - 235 + 240 @@ -4530,7 +4514,7 @@ libs/common/src/lib/routes/routes.ts - 243 + 248 @@ -4650,7 +4634,7 @@ Update Activity libs/common/src/lib/routes/routes.ts - 176 + 181 @@ -4682,7 +4666,7 @@ Configuration du Scraper apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 634 + 635 @@ -4702,7 +4686,7 @@ libs/common/src/lib/routes/routes.ts - 379 + 384 @@ -4974,7 +4958,7 @@ An error occurred while converting the data source to . apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 526 + 528 @@ -4998,7 +4982,7 @@ par marché apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 170 + 172 @@ -5246,11 +5230,11 @@ La configuration du scraper n’a pas pu être analysée apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 676 + 678 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 679 + 681 @@ -5550,7 +5534,7 @@ Add Activity libs/common/src/lib/routes/routes.ts - 169 + 174 @@ -5599,19 +5583,19 @@ kebab-case libs/common/src/lib/routes/routes.ts - 284 + 289 libs/common/src/lib/routes/routes.ts - 285 + 290 libs/common/src/lib/routes/routes.ts - 289 + 294 libs/common/src/lib/routes/routes.ts - 295 + 300 @@ -5620,11 +5604,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 304 + 309 libs/common/src/lib/routes/routes.ts - 305 + 310 @@ -5633,31 +5617,31 @@ kebab-case libs/common/src/lib/routes/routes.ts - 226 + 231 libs/common/src/lib/routes/routes.ts - 227 + 232 libs/common/src/lib/routes/routes.ts - 232 + 237 libs/common/src/lib/routes/routes.ts - 240 + 245 libs/common/src/lib/routes/routes.ts - 248 + 253 libs/common/src/lib/routes/routes.ts - 256 + 261 libs/common/src/lib/routes/routes.ts - 264 + 269 @@ -5666,11 +5650,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 254 + 259 libs/common/src/lib/routes/routes.ts - 257 + 262 @@ -5679,11 +5663,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 238 + 243 libs/common/src/lib/routes/routes.ts - 241 + 246 @@ -5692,11 +5676,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 309 + 314 libs/common/src/lib/routes/routes.ts - 310 + 315 @@ -5705,11 +5689,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 319 + 324 libs/common/src/lib/routes/routes.ts - 320 + 325 @@ -5718,11 +5702,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 329 + 334 libs/common/src/lib/routes/routes.ts - 330 + 335 @@ -5731,31 +5715,31 @@ kebab-case libs/common/src/lib/routes/routes.ts - 334 + 339 libs/common/src/lib/routes/routes.ts - 335 + 340 libs/common/src/lib/routes/routes.ts - 340 + 345 libs/common/src/lib/routes/routes.ts - 348 + 353 libs/common/src/lib/routes/routes.ts - 356 + 361 libs/common/src/lib/routes/routes.ts - 364 + 369 libs/common/src/lib/routes/routes.ts - 372 + 377 @@ -5828,11 +5812,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 370 + 375 libs/common/src/lib/routes/routes.ts - 374 + 379 @@ -5900,7 +5884,7 @@ Do you really want to merge this asset profile into it? apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 965 + 967 @@ -5984,7 +5968,7 @@ Frais apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html - 238 + 239 libs/ui/src/lib/activities-table/activities-table.component.html @@ -6042,6 +6026,10 @@ apps/client/src/app/pages/accounts/transfer-balance/transfer-balance-dialog.html 7 + + libs/common/src/lib/routes/routes.ts + 99 + libs/ui/src/lib/accounts-table/accounts-table.component.html 10 @@ -6335,8 +6323,8 @@ Oops, cash balance transfer has failed. Oops, échec du transfert de la cash balance. - apps/client/src/app/pages/accounts/accounts-page.component.ts - 199 + apps/client/src/app/pages/accounts/account-dialog-host/account-dialog-host.component.ts + 365 @@ -6392,7 +6380,7 @@ Filtres du Portefeuille apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html - 128 + 125 @@ -6452,7 +6440,7 @@ Le prix actuel du marché est apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 854 + 856 @@ -6468,7 +6456,7 @@ Intervalle de Date libs/ui/src/lib/assistant/assistant.html - 170 + 171 @@ -6496,7 +6484,7 @@ Oops! Impossible d’accorder l’accès. apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.component.ts - 256 + 311 @@ -6592,7 +6580,7 @@ Week to date libs/ui/src/lib/assistant/assistant.component.ts - 370 + 372 @@ -6600,11 +6588,11 @@ WTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 257 + 259 libs/ui/src/lib/assistant/assistant.component.ts - 370 + 372 @@ -6612,7 +6600,7 @@ Month to date libs/ui/src/lib/assistant/assistant.component.ts - 374 + 376 @@ -6620,11 +6608,11 @@ MTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 261 + 263 libs/ui/src/lib/assistant/assistant.component.ts - 374 + 376 @@ -6640,7 +6628,7 @@ Year to date libs/ui/src/lib/assistant/assistant.component.ts - 378 + 380 @@ -6672,7 +6660,7 @@ Réinitialiser les Filtres libs/ui/src/lib/assistant/assistant.html - 204 + 205 @@ -6680,7 +6668,7 @@ année apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 269 + 271 apps/client/src/app/pages/resources/personal-finance-tools/product-page.html @@ -6692,7 +6680,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 388 + 390 @@ -6700,11 +6688,11 @@ années apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 273 + 275 libs/ui/src/lib/assistant/assistant.component.ts - 410 + 412 @@ -6712,7 +6700,7 @@ Appliquer les Filtres libs/ui/src/lib/assistant/assistant.html - 217 + 218 @@ -6732,7 +6720,7 @@ Rechercher une position... libs/ui/src/lib/assistant/assistant.component.ts - 449 + 451 @@ -6752,7 +6740,7 @@ libs/common/src/lib/routes/routes.ts - 290 + 295 @@ -6764,7 +6752,7 @@ libs/common/src/lib/routes/routes.ts - 298 + 303 @@ -6773,11 +6761,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 293 + 298 libs/common/src/lib/routes/routes.ts - 296 + 301 @@ -6785,7 +6773,7 @@ Tous les jours apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 245 + 247 @@ -6809,7 +6797,7 @@ Actif apps/client/src/app/components/home-holdings/home-holdings.component.ts - 73 + 77 @@ -6817,7 +6805,7 @@ Clôturé apps/client/src/app/components/home-holdings/home-holdings.component.ts - 74 + 78 @@ -6893,7 +6881,7 @@ Internationalisation libs/common/src/lib/routes/routes.ts - 149 + 154 @@ -6909,7 +6897,7 @@ Aller à une page... libs/ui/src/lib/assistant/assistant.component.ts - 450 + 452 @@ -6933,7 +6921,7 @@ Par détention ETF apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 328 + 330 @@ -6941,7 +6929,7 @@ Approximation basée sur les principaux titres de chaque ETF apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 335 + 337 @@ -6957,7 +6945,7 @@ Clone Activity libs/common/src/lib/routes/routes.ts - 164 + 169 @@ -7005,7 +6993,7 @@ Table apps/client/src/app/components/home-holdings/home-holdings.component.ts - 62 + 66 @@ -7013,7 +7001,7 @@ Tableau apps/client/src/app/components/home-holdings/home-holdings.component.ts - 67 + 71 @@ -7241,15 +7229,15 @@ Erreur apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 844 + 846 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 921 + 923 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 943 + 945 @@ -7273,7 +7261,7 @@ Oops! Could not update access. apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.component.ts - 354 + 409 @@ -7313,11 +7301,11 @@ apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html - 143 + 152 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 117 + 118 apps/client/src/app/pages/accounts/transfer-balance/transfer-balance-dialog.html @@ -7325,7 +7313,7 @@ apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html - 321 + 323 apps/client/src/app/pages/register/user-account-registration-dialog/user-account-registration-dialog.html @@ -7369,7 +7357,7 @@ apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html - 145 + 154 apps/client/src/app/components/user-account-membership/user-account-membership.component.ts @@ -7381,11 +7369,11 @@ apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 119 + 120 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html - 323 + 325 libs/ui/src/lib/i18n.ts @@ -7413,7 +7401,7 @@ Copier le lien dans le presse-papiers apps/client/src/app/components/access-table/access-table.component.html - 112 + 82 @@ -7633,7 +7621,7 @@ Shares Before apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 603 + 604 @@ -7693,7 +7681,7 @@ Oups! Aucun actif n’a été trouvé. libs/ui/src/lib/symbol-autocomplete/symbol-autocomplete.component.html - 43 + 44 @@ -7749,7 +7737,7 @@ libs/common/src/lib/routes/routes.ts - 343 + 348 @@ -7765,7 +7753,7 @@ libs/common/src/lib/routes/routes.ts - 351 + 356 @@ -7774,11 +7762,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 346 + 351 libs/common/src/lib/routes/routes.ts - 349 + 354 @@ -7787,11 +7775,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 338 + 343 libs/common/src/lib/routes/routes.ts - 341 + 346 @@ -7831,7 +7819,7 @@ Voulez-vous vraiment supprimer la clé API? apps/client/src/app/components/admin-settings/admin-settings.component.ts - 148 + 151 @@ -7959,15 +7947,15 @@ apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html - 158 + 167 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 128 + 129 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html - 332 + 334 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html @@ -8015,7 +8003,7 @@ Veuillez saisir votre clé API Ghostfolio. apps/client/src/app/components/admin-settings/admin-settings.component.ts - 167 + 170 @@ -8039,7 +8027,7 @@ Le lien a été copié dans le presse-papiers apps/client/src/app/components/access-table/access-table.component.ts - 161 + 137 @@ -8047,7 +8035,7 @@ Paresseux apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 294 + 296 @@ -8055,7 +8043,7 @@ Instantané apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 298 + 300 @@ -8063,7 +8051,7 @@ Prix du marché par défaut apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 644 + 645 @@ -8079,7 +8067,7 @@ Do you really want to convert the data source to ? apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 529 + 531 @@ -8095,7 +8083,7 @@ En-têtes de requête HTTP apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 657 + 658 @@ -8103,7 +8091,7 @@ fin de journée apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 294 + 296 @@ -8111,7 +8099,7 @@ temps réel apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 298 + 300 @@ -8239,7 +8227,7 @@ Additional requests are granted while you are setting up your instance apps/client/src/app/components/admin-settings/admin-settings.component.ts - 87 + 88 @@ -8308,11 +8296,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 262 + 267 libs/common/src/lib/routes/routes.ts - 265 + 270 @@ -8324,7 +8312,7 @@ libs/common/src/lib/routes/routes.ts - 267 + 272 @@ -8340,7 +8328,7 @@ () est déjà utilisé. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 963 + 965 @@ -8348,7 +8336,7 @@ Une erreur s’est produite lors de la mise à jour vers (). apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 807 + 809 @@ -8436,7 +8424,7 @@ libs/common/src/lib/routes/routes.ts - 140 + 145 @@ -8481,11 +8469,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 230 + 235 libs/common/src/lib/routes/routes.ts - 233 + 238 @@ -8605,7 +8593,7 @@ Liens rapides libs/ui/src/lib/assistant/assistant.html - 58 + 59 @@ -8621,7 +8609,7 @@ libs/common/src/lib/routes/routes.ts - 281 + 286 @@ -8629,7 +8617,7 @@ Solutions open source alternatives à libs/common/src/lib/routes/routes.ts - 376 + 381 @@ -8662,15 +8650,15 @@ kebab-case libs/common/src/lib/routes/routes.ts - 362 + 367 libs/common/src/lib/routes/routes.ts - 365 + 370 libs/common/src/lib/routes/routes.ts - 373 + 378 @@ -8679,11 +8667,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 354 + 359 libs/common/src/lib/routes/routes.ts - 357 + 362 @@ -8763,7 +8751,7 @@ Mois en cours apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 261 + 263 @@ -8908,11 +8896,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 386 + 391 libs/common/src/lib/routes/routes.ts - 387 + 392 @@ -8944,7 +8932,7 @@ Actions apps/client/src/app/components/markets/markets.component.ts - 53 + 57 apps/client/src/app/pages/features/features-page.html @@ -8956,7 +8944,7 @@ Crypto-monnaies apps/client/src/app/components/markets/markets.component.ts - 54 + 58 apps/client/src/app/pages/features/features-page.html @@ -9084,7 +9072,7 @@ Aucun résultat trouvé... libs/ui/src/lib/assistant/assistant.html - 51 + 52 diff --git a/apps/client/src/locales/messages.it.xlf b/apps/client/src/locales/messages.it.xlf index c082eeee9..ec8acc223 100644 --- a/apps/client/src/locales/messages.it.xlf +++ b/apps/client/src/locales/messages.it.xlf @@ -40,7 +40,7 @@ please - please + per favore apps/client/src/app/pages/pricing/pricing-page.html 333 @@ -78,8 +78,8 @@ Details Dettagli - apps/client/src/app/components/access-table/access-table.component.html - 49 + apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html + 137 @@ -87,12 +87,12 @@ Revoca apps/client/src/app/components/access-table/access-table.component.html - 138 + 100 with - with + con apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html 87 @@ -100,7 +100,7 @@ Any person who has the link can view the data. - Any person who has the link can view the data. + Chiunque abbia il link può visualizzare i dati. apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html 42 @@ -111,7 +111,7 @@ Vuoi davvero revocare l’accesso concesso? apps/client/src/app/components/access-table/access-table.component.ts - 177 + 153 @@ -243,7 +243,7 @@ Modifica apps/client/src/app/components/access-table/access-table.component.html - 104 + 74 apps/client/src/app/components/admin-market-data/admin-market-data.html @@ -271,7 +271,7 @@ Elimina apps/client/src/app/components/access-table/access-table.component.html - 135 + 97 apps/client/src/app/components/admin-market-data/admin-market-data.html @@ -323,12 +323,12 @@ Vuoi davvero eliminare questo account? libs/ui/src/lib/accounts-table/accounts-table.component.ts - 183 + 185 Paid - Paid + Pagamento effettuato apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts 136 @@ -368,7 +368,7 @@ Unknown - Unknown + Sconosciuto libs/ui/src/lib/i18n.ts 89 @@ -384,7 +384,7 @@ View and manage - View and manage + Visualizza e gestisci libs/ui/src/lib/access-level-icon/access-level-icon.component.html 9 @@ -420,7 +420,7 @@ and is driven by the efforts of its contributors - and is driven by the efforts of its contributors + ed è sostenuto dall’impegno dei suoi contributori apps/client/src/app/pages/about/overview/about-overview-page.html 50 @@ -428,14 +428,14 @@ Asset Profiles - Profilo dell’asset + Profili degli asset apps/client/src/app/components/admin-settings/admin-settings.component.html 131 libs/ui/src/lib/assistant/assistant.html - 140 + 141 @@ -447,7 +447,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 495 + 496 @@ -463,7 +463,7 @@ Splits apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 518 + 519 @@ -492,10 +492,10 @@ Find an account... - Find an account... + Trova un account... libs/ui/src/lib/assistant/assistant.component.ts - 448 + 450 @@ -503,11 +503,11 @@ Data apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 527 + 528 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 566 + 567 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -528,7 +528,7 @@ Watch the Ghostfol.io Trailer on YouTube - Watch the Ghostfol.io Trailer on YouTube + Guarda il trailer di Ghostfol.io su YouTube apps/client/src/app/pages/landing/landing-page.html 19 @@ -644,7 +644,7 @@ Explore our guides to help you get started with investing and managing your finances. - Explore our guides to help you get started with investing and managing your finances. + Esplora le nostre guide per iniziare a investire e a gestire le tue finanze. apps/client/src/app/pages/resources/overview/resources-overview.component.ts 21 @@ -668,10 +668,10 @@ Update Account - Update Account + Aggiorna account libs/common/src/lib/routes/routes.ts - 101 + 106 @@ -687,7 +687,7 @@ Aggiungi apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 621 + 622 apps/client/src/app/components/admin-overview/admin-overview.html @@ -740,7 +740,7 @@ No auto-renewal on membership. - No auto-renewal on membership. + Nessun rinnovo automatico dell’abbonamento. apps/client/src/app/components/user-account-membership/user-account-membership.html 77 @@ -820,7 +820,7 @@ Creation - Creation + Creazione apps/client/src/app/components/admin-overview/admin-overview.html 191 @@ -847,7 +847,7 @@ libs/common/src/lib/routes/routes.ts - 116 + 121 @@ -876,15 +876,15 @@ Split Ratio - Split Ratio + Rapporto di frazionamento apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 532 + 533 Last Used - Last Used + Ultimo utilizzo apps/client/src/app/components/access-table/access-table.component.html 31 @@ -892,10 +892,10 @@ An error occurred while merging this asset profile into (). - An error occurred while merging this asset profile into (). + Si è verificato un errore durante l’unione di questo profilo di asset in (). apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 942 + 944 @@ -936,7 +936,7 @@ Find quick answers to commonly asked questions about Ghostfolio in our Frequently Asked Questions (FAQ) section. - Find quick answers to commonly asked questions about Ghostfolio in our Frequently Asked Questions (FAQ) section. + Trova risposte rapide alle domande più frequenti su Ghostfolio nella nostra sezione FAQ. apps/client/src/app/pages/resources/overview/resources-overview.component.ts 16 @@ -992,7 +992,7 @@ Energy - Energy + Energia libs/ui/src/lib/i18n.ts 96 @@ -1191,7 +1191,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 366 + 368 @@ -1199,11 +1199,11 @@ anno corrente apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 265 + 267 libs/ui/src/lib/assistant/assistant.component.ts - 378 + 380 @@ -1211,16 +1211,16 @@ 1 anno apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 269 + 271 libs/ui/src/lib/assistant/assistant.component.ts - 388 + 390 Ghostfolio in Numbers: Monthly Active Users (MAU) - Ghostfolio in Numbers: Monthly Active Users (MAU) + Ghostfolio in cifre: utenti attivi mensili (MAU) apps/client/src/app/pages/landing/landing-page.html 63 @@ -1231,16 +1231,16 @@ 5 anni apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 273 + 275 libs/ui/src/lib/assistant/assistant.component.ts - 410 + 412 Performance with currency effect - Performance with currency effect + Performance con effetto valuta apps/client/src/app/pages/portfolio/analysis/analysis-page.html 125 @@ -1251,19 +1251,11 @@ Massimo apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 277 + 279 libs/ui/src/lib/assistant/assistant.component.ts - 416 - - - - Identifier has been copied to the clipboard - Identifier has been copied to the clipboard - - apps/client/src/app/components/access-table/access-table.component.ts - 149 + 418 @@ -1299,7 +1291,7 @@ libs/common/src/lib/routes/routes.ts - 270 + 275 @@ -1315,7 +1307,7 @@ libs/common/src/lib/routes/routes.ts - 259 + 264 @@ -1340,7 +1332,7 @@ Add Account - Add Account + Aggiungi account libs/common/src/lib/routes/routes.ts 87 @@ -1356,7 +1348,7 @@ Consumer Defensive - Consumer Defensive + Beni di consumo difensivi libs/ui/src/lib/i18n.ts 95 @@ -1408,7 +1400,7 @@ Utilities - Utilities + Servizi di pubblica utilità libs/ui/src/lib/i18n.ts 103 @@ -1483,7 +1475,7 @@ ID utente apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html - 116 + 113 apps/client/src/app/components/user-account-settings/user-account-settings.html @@ -1575,11 +1567,11 @@ libs/common/src/lib/routes/routes.ts - 104 + 109 libs/ui/src/lib/assistant/assistant.html - 84 + 85 @@ -1675,7 +1667,7 @@ ID account apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 108 + 109 @@ -1811,7 +1803,7 @@ libs/common/src/lib/routes/routes.ts - 275 + 280 @@ -1855,7 +1847,7 @@ libs/common/src/lib/routes/routes.ts - 301 + 306 @@ -1883,7 +1875,7 @@ libs/common/src/lib/routes/routes.ts - 306 + 311 @@ -1919,11 +1911,11 @@ libs/common/src/lib/routes/routes.ts - 143 + 148 libs/common/src/lib/routes/routes.ts - 220 + 225 @@ -1955,15 +1947,15 @@ libs/common/src/lib/routes/routes.ts - 130 + 135 libs/common/src/lib/routes/routes.ts - 311 + 316 libs/common/src/lib/routes/routes.ts - 359 + 364 @@ -1979,7 +1971,7 @@ libs/common/src/lib/routes/routes.ts - 184 + 189 @@ -1987,7 +1979,7 @@ Per account apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 283 + 285 @@ -1995,7 +1987,7 @@ Per valuta apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 58 + 60 @@ -2003,7 +1995,7 @@ Per classe asset apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 80 + 82 @@ -2011,7 +2003,7 @@ Per partecipazione apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 102 + 104 @@ -2019,7 +2011,7 @@ Per settore apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 125 + 127 @@ -2027,7 +2019,7 @@ Per continente apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 148 + 150 @@ -2035,7 +2027,7 @@ Per paese apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 261 + 263 @@ -2043,7 +2035,7 @@ Regioni apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 193 + 195 apps/client/src/app/pages/public/public-page.html @@ -2067,7 +2059,7 @@ libs/common/src/lib/routes/routes.ts - 189 + 194 @@ -2131,15 +2123,15 @@ libs/common/src/lib/routes/routes.ts - 125 + 130 libs/common/src/lib/routes/routes.ts - 217 + 222 libs/ui/src/lib/assistant/assistant.html - 110 + 111 @@ -2155,7 +2147,7 @@ Current week apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 257 + 259 @@ -2190,14 +2182,6 @@ 5 - - Copy identifier to clipboard - Copy identifier to clipboard - - apps/client/src/app/components/access-table/access-table.component.html - 120 - - Name, symbol or ISIN Nome, simbolo o ISIN @@ -2275,7 +2259,7 @@ apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html - 251 + 252 libs/ui/src/lib/accounts-table/accounts-table.component.html @@ -2331,7 +2315,7 @@ libs/common/src/lib/routes/routes.ts - 179 + 184 libs/ui/src/lib/accounts-table/accounts-table.component.html @@ -2391,7 +2375,7 @@ libs/common/src/lib/routes/routes.ts - 321 + 326 @@ -2415,7 +2399,7 @@ libs/common/src/lib/routes/routes.ts - 202 + 207 @@ -2451,7 +2435,7 @@ libs/common/src/lib/routes/routes.ts - 331 + 336 @@ -2495,7 +2479,7 @@ libs/common/src/lib/routes/routes.ts - 382 + 387 @@ -2707,7 +2691,7 @@ Mercati sviluppati apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 216 + 218 apps/client/src/app/pages/public/public-page.html @@ -2735,7 +2719,7 @@ Altri mercati apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 236 + 238 apps/client/src/app/pages/public/public-page.html @@ -2747,7 +2731,7 @@ Mercati emergenti apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 226 + 228 apps/client/src/app/pages/public/public-page.html @@ -2867,7 +2851,7 @@ Apply current market price apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html - 220 + 221 @@ -2891,7 +2875,7 @@ Paura apps/client/src/app/components/markets/markets.component.ts - 57 + 61 libs/ui/src/lib/i18n.ts @@ -2903,7 +2887,7 @@ Avidità apps/client/src/app/components/markets/markets.component.ts - 58 + 62 libs/ui/src/lib/i18n.ts @@ -2963,11 +2947,11 @@ Could not validate form apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 728 + 730 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 731 + 733 @@ -3087,7 +3071,7 @@ Account apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.component.ts - 102 + 109 libs/common/src/lib/routes/routes.ts @@ -3123,7 +3107,7 @@ apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html - 266 + 268 libs/ui/src/lib/i18n.ts @@ -3251,7 +3235,7 @@ libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 460 + 462 @@ -3259,7 +3243,7 @@ Nessun dato disponibile apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 247 + 249 apps/client/src/app/pages/public/public-page.html @@ -3271,11 +3255,11 @@ libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 462 + 464 libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 476 + 478 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -3403,7 +3387,7 @@ Do you really want to convert this asset profile to ()? apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 809 + 811 @@ -3419,7 +3403,7 @@ Data Gathering Frequency apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 476 + 477 @@ -3515,7 +3499,7 @@ apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html - 285 + 287 libs/ui/src/lib/i18n.ts @@ -3583,7 +3567,7 @@ This action cannot be undone. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 961 + 963 @@ -3603,7 +3587,7 @@ libs/common/src/lib/routes/routes.ts - 135 + 140 @@ -3891,7 +3875,7 @@ Hourly apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 249 + 251 @@ -4003,11 +3987,11 @@ Could not save asset profile apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 762 + 764 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 765 + 767 @@ -4123,7 +4107,7 @@ This asset profile cannot be merged into (). apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 920 + 922 @@ -4175,7 +4159,7 @@ Do you really want to remove this received access? apps/client/src/app/components/access-table/access-table.component.ts - 176 + 152 @@ -4191,7 +4175,7 @@ Per fornitore di ETF apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 303 + 305 @@ -4215,7 +4199,7 @@ The data of this asset profile is moved to () and this asset profile is deleted. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 959 + 961 @@ -4231,7 +4215,7 @@ Current year apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 265 + 267 @@ -4283,7 +4267,7 @@ Asset profile has been saved apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 752 + 754 @@ -4315,7 +4299,7 @@ Per piattaforma apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 39 + 41 @@ -4411,7 +4395,7 @@ Shares After apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 590 + 591 @@ -4515,7 +4499,7 @@ libs/common/src/lib/routes/routes.ts - 235 + 240 @@ -4531,7 +4515,7 @@ libs/common/src/lib/routes/routes.ts - 243 + 248 @@ -4651,7 +4635,7 @@ Update Activity libs/common/src/lib/routes/routes.ts - 176 + 181 @@ -4683,7 +4667,7 @@ Configurazione dello scraper apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 634 + 635 @@ -4703,7 +4687,7 @@ libs/common/src/lib/routes/routes.ts - 379 + 384 @@ -4975,7 +4959,7 @@ An error occurred while converting the data source to . apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 526 + 528 @@ -4999,7 +4983,7 @@ Per mercato apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 170 + 172 @@ -5247,11 +5231,11 @@ Could not parse scraper configuration apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 676 + 678 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 679 + 681 @@ -5551,7 +5535,7 @@ Add Activity libs/common/src/lib/routes/routes.ts - 169 + 174 @@ -5600,19 +5584,19 @@ kebab-case libs/common/src/lib/routes/routes.ts - 284 + 289 libs/common/src/lib/routes/routes.ts - 285 + 290 libs/common/src/lib/routes/routes.ts - 289 + 294 libs/common/src/lib/routes/routes.ts - 295 + 300 @@ -5621,11 +5605,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 304 + 309 libs/common/src/lib/routes/routes.ts - 305 + 310 @@ -5634,31 +5618,31 @@ kebab-case libs/common/src/lib/routes/routes.ts - 226 + 231 libs/common/src/lib/routes/routes.ts - 227 + 232 libs/common/src/lib/routes/routes.ts - 232 + 237 libs/common/src/lib/routes/routes.ts - 240 + 245 libs/common/src/lib/routes/routes.ts - 248 + 253 libs/common/src/lib/routes/routes.ts - 256 + 261 libs/common/src/lib/routes/routes.ts - 264 + 269 @@ -5667,11 +5651,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 254 + 259 libs/common/src/lib/routes/routes.ts - 257 + 262 @@ -5680,11 +5664,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 238 + 243 libs/common/src/lib/routes/routes.ts - 241 + 246 @@ -5693,11 +5677,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 309 + 314 libs/common/src/lib/routes/routes.ts - 310 + 315 @@ -5706,11 +5690,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 319 + 324 libs/common/src/lib/routes/routes.ts - 320 + 325 @@ -5719,11 +5703,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 329 + 334 libs/common/src/lib/routes/routes.ts - 330 + 335 @@ -5732,31 +5716,31 @@ kebab-case libs/common/src/lib/routes/routes.ts - 334 + 339 libs/common/src/lib/routes/routes.ts - 335 + 340 libs/common/src/lib/routes/routes.ts - 340 + 345 libs/common/src/lib/routes/routes.ts - 348 + 353 libs/common/src/lib/routes/routes.ts - 356 + 361 libs/common/src/lib/routes/routes.ts - 364 + 369 libs/common/src/lib/routes/routes.ts - 372 + 377 @@ -5829,11 +5813,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 370 + 375 libs/common/src/lib/routes/routes.ts - 374 + 379 @@ -5901,7 +5885,7 @@ Do you really want to merge this asset profile into it? apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 965 + 967 @@ -5985,7 +5969,7 @@ Commissione apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html - 238 + 239 libs/ui/src/lib/activities-table/activities-table.component.html @@ -6043,6 +6027,10 @@ apps/client/src/app/pages/accounts/transfer-balance/transfer-balance-dialog.html 7 + + libs/common/src/lib/routes/routes.ts + 99 + libs/ui/src/lib/accounts-table/accounts-table.component.html 10 @@ -6336,8 +6324,8 @@ Oops, cash balance transfer has failed. Ops, il trasferimento del saldo di cassa è fallito. - apps/client/src/app/pages/accounts/accounts-page.component.ts - 199 + apps/client/src/app/pages/accounts/account-dialog-host/account-dialog-host.component.ts + 365 @@ -6393,7 +6381,7 @@ Portfolio Filters apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html - 128 + 125 @@ -6453,7 +6441,7 @@ L’attuale prezzo di mercato è apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 854 + 856 @@ -6469,7 +6457,7 @@ Intervallo di date libs/ui/src/lib/assistant/assistant.html - 170 + 171 @@ -6497,7 +6485,7 @@ Ops! Impossibile abilitare l’accesso. apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.component.ts - 256 + 311 @@ -6593,7 +6581,7 @@ Da inizio settimana libs/ui/src/lib/assistant/assistant.component.ts - 370 + 372 @@ -6601,11 +6589,11 @@ Settimana corrente apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 257 + 259 libs/ui/src/lib/assistant/assistant.component.ts - 370 + 372 @@ -6613,7 +6601,7 @@ Da inizio mese libs/ui/src/lib/assistant/assistant.component.ts - 374 + 376 @@ -6621,11 +6609,11 @@ Mese corrente apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 261 + 263 libs/ui/src/lib/assistant/assistant.component.ts - 374 + 376 @@ -6641,7 +6629,7 @@ Da inizio anno libs/ui/src/lib/assistant/assistant.component.ts - 378 + 380 @@ -6673,7 +6661,7 @@ Reset Filtri libs/ui/src/lib/assistant/assistant.html - 204 + 205 @@ -6681,7 +6669,7 @@ anno apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 269 + 271 apps/client/src/app/pages/resources/personal-finance-tools/product-page.html @@ -6693,7 +6681,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 388 + 390 @@ -6701,11 +6689,11 @@ anni apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 273 + 275 libs/ui/src/lib/assistant/assistant.component.ts - 410 + 412 @@ -6713,7 +6701,7 @@ Applica i Filtri libs/ui/src/lib/assistant/assistant.html - 217 + 218 @@ -6733,7 +6721,7 @@ Find a holding... libs/ui/src/lib/assistant/assistant.component.ts - 449 + 451 @@ -6753,7 +6741,7 @@ libs/common/src/lib/routes/routes.ts - 290 + 295 @@ -6765,7 +6753,7 @@ libs/common/src/lib/routes/routes.ts - 298 + 303 @@ -6774,11 +6762,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 293 + 298 libs/common/src/lib/routes/routes.ts - 296 + 301 @@ -6786,7 +6774,7 @@ Daily apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 245 + 247 @@ -6810,7 +6798,7 @@ Attivo apps/client/src/app/components/home-holdings/home-holdings.component.ts - 73 + 77 @@ -6818,7 +6806,7 @@ Chiuso apps/client/src/app/components/home-holdings/home-holdings.component.ts - 74 + 78 @@ -6894,7 +6882,7 @@ Internazionalizzazione libs/common/src/lib/routes/routes.ts - 149 + 154 @@ -6910,7 +6898,7 @@ Jump to a page... libs/ui/src/lib/assistant/assistant.component.ts - 450 + 452 @@ -6934,7 +6922,7 @@ Per ETF posseduti apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 328 + 330 @@ -6942,7 +6930,7 @@ Approssimato in base ai principali ETF posseduti apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 335 + 337 @@ -6958,7 +6946,7 @@ Clone Activity libs/common/src/lib/routes/routes.ts - 164 + 169 @@ -7006,7 +6994,7 @@ Tabella apps/client/src/app/components/home-holdings/home-holdings.component.ts - 62 + 66 @@ -7014,7 +7002,7 @@ Grafico apps/client/src/app/components/home-holdings/home-holdings.component.ts - 67 + 71 @@ -7242,15 +7230,15 @@ Errore apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 844 + 846 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 921 + 923 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 943 + 945 @@ -7274,7 +7262,7 @@ Oops! Could not update access. apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.component.ts - 354 + 409 @@ -7314,11 +7302,11 @@ apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html - 143 + 152 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 117 + 118 apps/client/src/app/pages/accounts/transfer-balance/transfer-balance-dialog.html @@ -7326,7 +7314,7 @@ apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html - 321 + 323 apps/client/src/app/pages/register/user-account-registration-dialog/user-account-registration-dialog.html @@ -7370,7 +7358,7 @@ apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html - 145 + 154 apps/client/src/app/components/user-account-membership/user-account-membership.component.ts @@ -7382,11 +7370,11 @@ apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 119 + 120 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html - 323 + 325 libs/ui/src/lib/i18n.ts @@ -7414,7 +7402,7 @@ Copia link negli appunti apps/client/src/app/components/access-table/access-table.component.html - 112 + 82 @@ -7634,7 +7622,7 @@ Shares Before apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 603 + 604 @@ -7694,7 +7682,7 @@ Oops! Non ho trovato alcun asset. libs/ui/src/lib/symbol-autocomplete/symbol-autocomplete.component.html - 43 + 44 @@ -7750,7 +7738,7 @@ libs/common/src/lib/routes/routes.ts - 343 + 348 @@ -7766,7 +7754,7 @@ libs/common/src/lib/routes/routes.ts - 351 + 356 @@ -7775,11 +7763,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 346 + 351 libs/common/src/lib/routes/routes.ts - 349 + 354 @@ -7788,11 +7776,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 338 + 343 libs/common/src/lib/routes/routes.ts - 341 + 346 @@ -7832,7 +7820,7 @@ Vuoi davvero eliminare l’API key? apps/client/src/app/components/admin-settings/admin-settings.component.ts - 148 + 151 @@ -7960,15 +7948,15 @@ apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html - 158 + 167 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 128 + 129 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html - 332 + 334 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html @@ -8016,7 +8004,7 @@ Inserisci la tua API key di Ghostfolio. apps/client/src/app/components/admin-settings/admin-settings.component.ts - 167 + 170 @@ -8040,7 +8028,7 @@ Il link è stato copiato negli appunti apps/client/src/app/components/access-table/access-table.component.ts - 161 + 137 @@ -8048,7 +8036,7 @@ Pigro apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 294 + 296 @@ -8056,7 +8044,7 @@ Istantaneo apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 298 + 300 @@ -8064,7 +8052,7 @@ Prezzo di mercato predefinito apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 644 + 645 @@ -8080,7 +8068,7 @@ Do you really want to convert the data source to ? apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 529 + 531 @@ -8096,7 +8084,7 @@ Intestazioni della richiesta HTTP apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 657 + 658 @@ -8104,7 +8092,7 @@ fine giornata apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 294 + 296 @@ -8112,7 +8100,7 @@ in tempo reale apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 298 + 300 @@ -8240,7 +8228,7 @@ Additional requests are granted while you are setting up your instance apps/client/src/app/components/admin-settings/admin-settings.component.ts - 87 + 88 @@ -8309,11 +8297,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 262 + 267 libs/common/src/lib/routes/routes.ts - 265 + 270 @@ -8325,7 +8313,7 @@ libs/common/src/lib/routes/routes.ts - 267 + 272 @@ -8341,7 +8329,7 @@ () e gia in uso. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 963 + 965 @@ -8349,7 +8337,7 @@ Si è verificato un errore durante l’aggiornamento di (). apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 807 + 809 @@ -8437,7 +8425,7 @@ libs/common/src/lib/routes/routes.ts - 140 + 145 @@ -8482,11 +8470,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 230 + 235 libs/common/src/lib/routes/routes.ts - 233 + 238 @@ -8606,7 +8594,7 @@ Collegamenti rapidi libs/ui/src/lib/assistant/assistant.html - 58 + 59 @@ -8622,7 +8610,7 @@ libs/common/src/lib/routes/routes.ts - 281 + 286 @@ -8630,7 +8618,7 @@ L’alternativa open source a libs/common/src/lib/routes/routes.ts - 376 + 381 @@ -8663,15 +8651,15 @@ kebab-case libs/common/src/lib/routes/routes.ts - 362 + 367 libs/common/src/lib/routes/routes.ts - 365 + 370 libs/common/src/lib/routes/routes.ts - 373 + 378 @@ -8680,11 +8668,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 354 + 359 libs/common/src/lib/routes/routes.ts - 357 + 362 @@ -8764,7 +8752,7 @@ Current month apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 261 + 263 @@ -8909,11 +8897,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 386 + 391 libs/common/src/lib/routes/routes.ts - 387 + 392 @@ -8945,7 +8933,7 @@ Azioni apps/client/src/app/components/markets/markets.component.ts - 53 + 57 apps/client/src/app/pages/features/features-page.html @@ -8957,7 +8945,7 @@ criptovalute apps/client/src/app/components/markets/markets.component.ts - 54 + 58 apps/client/src/app/pages/features/features-page.html @@ -9085,7 +9073,7 @@ No results found... libs/ui/src/lib/assistant/assistant.html - 51 + 52 @@ -9414,7 +9402,7 @@ Support Ghostfolio - Support Ghostfolio + Supporta Ghostfolio apps/client/src/app/pages/about/overview/about-overview-page.html 170 diff --git a/apps/client/src/locales/messages.ja.xlf b/apps/client/src/locales/messages.ja.xlf index e4d860323..46d3ee8b6 100644 --- a/apps/client/src/locales/messages.ja.xlf +++ b/apps/client/src/locales/messages.ja.xlf @@ -8,31 +8,31 @@ kebab-case libs/common/src/lib/routes/routes.ts - 226 + 231 libs/common/src/lib/routes/routes.ts - 227 + 232 libs/common/src/lib/routes/routes.ts - 232 + 237 libs/common/src/lib/routes/routes.ts - 240 + 245 libs/common/src/lib/routes/routes.ts - 248 + 253 libs/common/src/lib/routes/routes.ts - 256 + 261 libs/common/src/lib/routes/routes.ts - 264 + 269 @@ -41,19 +41,19 @@ kebab-case libs/common/src/lib/routes/routes.ts - 284 + 289 libs/common/src/lib/routes/routes.ts - 285 + 290 libs/common/src/lib/routes/routes.ts - 289 + 294 libs/common/src/lib/routes/routes.ts - 295 + 300 @@ -62,11 +62,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 304 + 309 libs/common/src/lib/routes/routes.ts - 305 + 310 @@ -75,11 +75,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 238 + 243 libs/common/src/lib/routes/routes.ts - 241 + 246 @@ -88,11 +88,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 309 + 314 libs/common/src/lib/routes/routes.ts - 310 + 315 @@ -101,11 +101,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 319 + 324 libs/common/src/lib/routes/routes.ts - 320 + 325 @@ -114,11 +114,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 254 + 259 libs/common/src/lib/routes/routes.ts - 257 + 262 @@ -127,11 +127,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 329 + 334 libs/common/src/lib/routes/routes.ts - 330 + 335 @@ -140,31 +140,31 @@ kebab-case libs/common/src/lib/routes/routes.ts - 334 + 339 libs/common/src/lib/routes/routes.ts - 335 + 340 libs/common/src/lib/routes/routes.ts - 340 + 345 libs/common/src/lib/routes/routes.ts - 348 + 353 libs/common/src/lib/routes/routes.ts - 356 + 361 libs/common/src/lib/routes/routes.ts - 364 + 369 libs/common/src/lib/routes/routes.ts - 372 + 377 @@ -279,8 +279,8 @@ Details 詳細 - apps/client/src/app/components/access-table/access-table.component.html - 49 + apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html + 137 @@ -288,7 +288,7 @@ 取り消し apps/client/src/app/components/access-table/access-table.component.html - 138 + 100 @@ -312,7 +312,7 @@ 付与したアクセス権を取り消してもよろしいですか? apps/client/src/app/components/access-table/access-table.component.ts - 177 + 153 @@ -362,6 +362,10 @@ apps/client/src/app/pages/accounts/transfer-balance/transfer-balance-dialog.html 7 + + libs/common/src/lib/routes/routes.ts + 99 + libs/ui/src/lib/accounts-table/accounts-table.component.html 10 @@ -536,7 +540,7 @@ 編集 apps/client/src/app/components/access-table/access-table.component.html - 104 + 74 apps/client/src/app/components/admin-market-data/admin-market-data.html @@ -564,7 +568,7 @@ 削除 apps/client/src/app/components/access-table/access-table.component.html - 135 + 97 apps/client/src/app/components/admin-market-data/admin-market-data.html @@ -616,7 +620,7 @@ このアカウントを削除してもよろしいですか? libs/ui/src/lib/accounts-table/accounts-table.component.ts - 183 + 185 @@ -644,7 +648,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 495 + 496 @@ -752,7 +756,7 @@ 株式分割 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 518 + 519 @@ -784,7 +788,7 @@ アカウントを検索... libs/ui/src/lib/assistant/assistant.component.ts - 448 + 450 @@ -792,11 +796,11 @@ 日付 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 527 + 528 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 566 + 567 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -880,7 +884,7 @@ データソースを に変換中にエラーが発生しました。 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 526 + 528 @@ -936,7 +940,7 @@ データ収集頻度 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 476 + 477 @@ -972,7 +976,7 @@ 現在の市場価格を適用 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html - 220 + 221 @@ -1156,7 +1160,7 @@ Update Activity libs/common/src/lib/routes/routes.ts - 176 + 181 @@ -1188,7 +1192,7 @@ スクレイパーの設定 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 634 + 635 @@ -1204,7 +1208,7 @@ apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html - 251 + 252 libs/ui/src/lib/accounts-table/accounts-table.component.html @@ -1247,14 +1251,6 @@ 18 - - Copy identifier to clipboard - Copy identifier to clipboard - - apps/client/src/app/components/access-table/access-table.component.html - 120 - - Name, symbol or ISIN 名称、シンボル、またはISIN @@ -1360,7 +1356,7 @@ Update Account libs/common/src/lib/routes/routes.ts - 101 + 106 @@ -1400,7 +1396,7 @@ 追加 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 621 + 622 apps/client/src/app/components/admin-overview/admin-overview.html @@ -1468,7 +1464,7 @@ 資産プロファイルを保存しました apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 752 + 754 @@ -1500,7 +1496,7 @@ The data of this asset profile is moved to () and this asset profile is deleted. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 959 + 961 @@ -1516,7 +1512,7 @@ 現在の年 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 265 + 267 @@ -1656,11 +1652,11 @@ フォームを検証できませんでした apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 728 + 730 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 731 + 733 @@ -1700,7 +1696,7 @@ libs/common/src/lib/routes/routes.ts - 202 + 207 @@ -1752,7 +1748,7 @@ libs/common/src/lib/routes/routes.ts - 116 + 121 @@ -1784,7 +1780,7 @@ Split Ratio apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 532 + 533 @@ -1792,7 +1788,7 @@ 恐怖 apps/client/src/app/components/markets/markets.component.ts - 57 + 61 libs/ui/src/lib/i18n.ts @@ -1804,7 +1800,7 @@ Greed apps/client/src/app/components/markets/markets.component.ts - 58 + 62 libs/ui/src/lib/i18n.ts @@ -1824,7 +1820,7 @@ An error occurred while merging this asset profile into (). apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 942 + 944 @@ -1920,7 +1916,7 @@ 今週 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 257 + 259 @@ -2396,7 +2392,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 366 + 368 @@ -2404,11 +2400,11 @@ YTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 265 + 267 libs/ui/src/lib/assistant/assistant.component.ts - 378 + 380 @@ -2416,11 +2412,11 @@ 1年 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 269 + 271 libs/ui/src/lib/assistant/assistant.component.ts - 388 + 390 @@ -2436,11 +2432,11 @@ 5年 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 273 + 275 libs/ui/src/lib/assistant/assistant.component.ts - 410 + 412 @@ -2456,19 +2452,11 @@ マックス apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 277 + 279 libs/ui/src/lib/assistant/assistant.component.ts - 416 - - - - Identifier has been copied to the clipboard - Identifier has been copied to the clipboard - - apps/client/src/app/components/access-table/access-table.component.ts - 149 + 418 @@ -2780,7 +2768,7 @@ ユーザーID apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html - 116 + 113 apps/client/src/app/components/user-account-settings/user-account-settings.html @@ -2868,7 +2856,7 @@ libs/common/src/lib/routes/routes.ts - 270 + 275 @@ -2884,7 +2872,7 @@ libs/common/src/lib/routes/routes.ts - 235 + 240 @@ -2900,7 +2888,7 @@ libs/common/src/lib/routes/routes.ts - 243 + 248 @@ -2916,7 +2904,7 @@ libs/common/src/lib/routes/routes.ts - 259 + 264 @@ -2988,19 +2976,19 @@ libs/common/src/lib/routes/routes.ts - 104 + 109 libs/ui/src/lib/assistant/assistant.html - 84 + 85 Oops, cash balance transfer has failed. おっと、現金残高の振替に失敗しました。 - apps/client/src/app/pages/accounts/accounts-page.component.ts - 199 + apps/client/src/app/pages/accounts/account-dialog-host/account-dialog-host.component.ts + 365 @@ -3024,7 +3012,7 @@ 口座ID apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 108 + 109 @@ -3148,11 +3136,11 @@ libs/common/src/lib/routes/routes.ts - 143 + 148 libs/common/src/lib/routes/routes.ts - 220 + 225 @@ -3264,7 +3252,7 @@ libs/common/src/lib/routes/routes.ts - 275 + 280 @@ -3272,11 +3260,11 @@ スクレイパー設定を解析できませんでした apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 676 + 678 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 679 + 681 @@ -3328,7 +3316,7 @@ libs/common/src/lib/routes/routes.ts - 301 + 306 @@ -3356,7 +3344,7 @@ libs/common/src/lib/routes/routes.ts - 306 + 311 @@ -3536,15 +3524,15 @@ libs/common/src/lib/routes/routes.ts - 125 + 130 libs/common/src/lib/routes/routes.ts - 217 + 222 libs/ui/src/lib/assistant/assistant.html - 110 + 111 @@ -3552,7 +3540,7 @@ This action cannot be undone. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 961 + 963 @@ -3572,7 +3560,7 @@ libs/common/src/lib/routes/routes.ts - 135 + 140 @@ -3604,15 +3592,15 @@ libs/common/src/lib/routes/routes.ts - 130 + 135 libs/common/src/lib/routes/routes.ts - 311 + 316 libs/common/src/lib/routes/routes.ts - 359 + 364 @@ -4112,7 +4100,7 @@ Add Activity libs/common/src/lib/routes/routes.ts - 169 + 174 @@ -4160,7 +4148,7 @@ Do you really want to merge this asset profile into it? apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 965 + 967 @@ -4304,7 +4292,7 @@ libs/common/src/lib/routes/routes.ts - 179 + 184 libs/ui/src/lib/accounts-table/accounts-table.component.html @@ -4528,7 +4516,7 @@ Shares After apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 590 + 591 @@ -4556,7 +4544,7 @@ Do you really want to convert this asset profile to ()? apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 809 + 811 @@ -4572,7 +4560,7 @@ libs/common/src/lib/routes/routes.ts - 184 + 189 @@ -4588,7 +4576,7 @@ プラットフォーム別 apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 39 + 41 @@ -4596,7 +4584,7 @@ 通貨別 apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 58 + 60 @@ -4604,7 +4592,7 @@ 資産クラス別 apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 80 + 82 @@ -4612,7 +4600,7 @@ 保有資産別 apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 102 + 104 @@ -4620,7 +4608,7 @@ セクター別 apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 125 + 127 @@ -4628,7 +4616,7 @@ 大陸別 apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 148 + 150 @@ -4636,7 +4624,7 @@ 市場別 apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 170 + 172 @@ -4644,7 +4632,7 @@ 地域 apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 193 + 195 apps/client/src/app/pages/public/public-page.html @@ -4672,7 +4660,7 @@ 先進国市場 apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 216 + 218 apps/client/src/app/pages/public/public-page.html @@ -4692,7 +4680,7 @@ 新興国市場 apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 226 + 228 apps/client/src/app/pages/public/public-page.html @@ -4704,7 +4692,7 @@ その他の市場 apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 236 + 238 apps/client/src/app/pages/public/public-page.html @@ -4716,7 +4704,7 @@ 口座別 apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 283 + 285 @@ -4724,7 +4712,7 @@ ETFプロバイダー別 apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 303 + 305 @@ -4732,7 +4720,7 @@ 国別 apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 261 + 263 @@ -4744,7 +4732,7 @@ libs/common/src/lib/routes/routes.ts - 189 + 194 @@ -4912,7 +4900,7 @@ libs/common/src/lib/routes/routes.ts - 321 + 326 @@ -4936,7 +4924,7 @@ Do you really want to remove this received access? apps/client/src/app/components/access-table/access-table.component.ts - 176 + 152 @@ -4960,7 +4948,7 @@ 時間ごと apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 249 + 251 @@ -5116,11 +5104,11 @@ 資産プロフィールを保存できませんでした apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 762 + 764 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 765 + 767 @@ -5172,7 +5160,7 @@ libs/common/src/lib/routes/routes.ts - 331 + 336 @@ -5204,7 +5192,7 @@ libs/common/src/lib/routes/routes.ts - 379 + 384 @@ -5213,11 +5201,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 370 + 375 libs/common/src/lib/routes/routes.ts - 374 + 379 @@ -5553,7 +5541,7 @@ libs/common/src/lib/routes/routes.ts - 382 + 387 @@ -5705,7 +5693,7 @@ libs/ui/src/lib/assistant/assistant.html - 140 + 141 @@ -5713,7 +5701,7 @@ ポートフォリオフィルター apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html - 128 + 125 @@ -5809,7 +5797,7 @@ This asset profile cannot be merged into (). apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 920 + 922 @@ -5889,7 +5877,7 @@ 口座 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.component.ts - 102 + 109 libs/common/src/lib/routes/routes.ts @@ -5933,7 +5921,7 @@ apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html - 266 + 268 libs/ui/src/lib/i18n.ts @@ -5965,7 +5953,7 @@ apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html - 285 + 287 libs/ui/src/lib/i18n.ts @@ -6081,7 +6069,7 @@ libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 460 + 462 @@ -6225,7 +6213,7 @@ 手数料 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html - 238 + 239 libs/ui/src/lib/activities-table/activities-table.component.html @@ -6441,7 +6429,7 @@ データがありません apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 247 + 249 apps/client/src/app/pages/public/public-page.html @@ -6453,11 +6441,11 @@ libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 462 + 464 libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 476 + 478 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -6477,7 +6465,7 @@ 日付範囲 libs/ui/src/lib/assistant/assistant.html - 170 + 171 @@ -6485,7 +6473,7 @@ 現在の市場価格は apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 854 + 856 @@ -6501,7 +6489,7 @@ おっと!アクセスを許可できませんでした。 apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.component.ts - 256 + 311 @@ -6617,7 +6605,7 @@ 年初来 libs/ui/src/lib/assistant/assistant.component.ts - 378 + 380 @@ -6625,7 +6613,7 @@ 週初来 libs/ui/src/lib/assistant/assistant.component.ts - 370 + 372 @@ -6633,7 +6621,7 @@ 月初来 libs/ui/src/lib/assistant/assistant.component.ts - 374 + 376 @@ -6641,11 +6629,11 @@ MTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 261 + 263 libs/ui/src/lib/assistant/assistant.component.ts - 374 + 376 @@ -6661,11 +6649,11 @@ WTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 257 + 259 libs/ui/src/lib/assistant/assistant.component.ts - 370 + 372 @@ -6697,7 +6685,7 @@ フィルターをリセット libs/ui/src/lib/assistant/assistant.html - 204 + 205 @@ -6705,7 +6693,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 269 + 271 apps/client/src/app/pages/resources/personal-finance-tools/product-page.html @@ -6717,7 +6705,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 388 + 390 @@ -6725,11 +6713,11 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 273 + 275 libs/ui/src/lib/assistant/assistant.component.ts - 410 + 412 @@ -6737,7 +6725,7 @@ フィルターを適用 libs/ui/src/lib/assistant/assistant.html - 217 + 218 @@ -6746,11 +6734,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 293 + 298 libs/common/src/lib/routes/routes.ts - 296 + 301 @@ -6762,7 +6750,7 @@ libs/common/src/lib/routes/routes.ts - 298 + 303 @@ -6782,7 +6770,7 @@ 保有資産を検索... libs/ui/src/lib/assistant/assistant.component.ts - 449 + 451 @@ -6802,7 +6790,7 @@ libs/common/src/lib/routes/routes.ts - 290 + 295 @@ -6810,7 +6798,7 @@ 毎日 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 245 + 247 @@ -6834,7 +6822,7 @@ クローズ済み apps/client/src/app/components/home-holdings/home-holdings.component.ts - 74 + 78 @@ -6842,7 +6830,7 @@ アクティブ apps/client/src/app/components/home-holdings/home-holdings.component.ts - 73 + 77 @@ -6918,7 +6906,7 @@ 国際化 libs/common/src/lib/routes/routes.ts - 149 + 154 @@ -6942,7 +6930,7 @@ ページにジャンプ... libs/ui/src/lib/assistant/assistant.component.ts - 450 + 452 @@ -6958,7 +6946,7 @@ Approximation based on the top holdings of each ETF apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 335 + 337 @@ -6966,7 +6954,7 @@ By ETF Holding apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 328 + 330 @@ -6982,7 +6970,7 @@ Clone Activity libs/common/src/lib/routes/routes.ts - 164 + 169 @@ -7030,7 +7018,7 @@ Chart apps/client/src/app/components/home-holdings/home-holdings.component.ts - 67 + 71 @@ -7038,7 +7026,7 @@ Table apps/client/src/app/components/home-holdings/home-holdings.component.ts - 62 + 66 @@ -7266,15 +7254,15 @@ Error apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 844 + 846 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 921 + 923 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 943 + 945 @@ -7306,11 +7294,11 @@ apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html - 143 + 152 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 117 + 118 apps/client/src/app/pages/accounts/transfer-balance/transfer-balance-dialog.html @@ -7318,7 +7306,7 @@ apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html - 321 + 323 apps/client/src/app/pages/register/user-account-registration-dialog/user-account-registration-dialog.html @@ -7386,7 +7374,7 @@ apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html - 145 + 154 apps/client/src/app/components/user-account-membership/user-account-membership.component.ts @@ -7398,11 +7386,11 @@ apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 119 + 120 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html - 323 + 325 libs/ui/src/lib/i18n.ts @@ -7422,7 +7410,7 @@ Oops! Could not update access. apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.component.ts - 354 + 409 @@ -7494,7 +7482,7 @@ Copy link to clipboard apps/client/src/app/components/access-table/access-table.component.html - 112 + 82 @@ -7658,7 +7646,7 @@ Shares Before apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 603 + 604 @@ -7718,7 +7706,7 @@ Oops! Could not find any assets. libs/ui/src/lib/symbol-autocomplete/symbol-autocomplete.component.html - 43 + 44 @@ -7774,7 +7762,7 @@ libs/common/src/lib/routes/routes.ts - 343 + 348 @@ -7783,11 +7771,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 338 + 343 libs/common/src/lib/routes/routes.ts - 341 + 346 @@ -7803,7 +7791,7 @@ libs/common/src/lib/routes/routes.ts - 351 + 356 @@ -7812,11 +7800,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 346 + 351 libs/common/src/lib/routes/routes.ts - 349 + 354 @@ -7848,7 +7836,7 @@ Do you really want to delete the API key? apps/client/src/app/components/admin-settings/admin-settings.component.ts - 148 + 151 @@ -7984,15 +7972,15 @@ apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html - 158 + 167 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 128 + 129 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html - 332 + 334 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html @@ -8040,7 +8028,7 @@ Please enter your Ghostfolio API key. apps/client/src/app/components/admin-settings/admin-settings.component.ts - 167 + 170 @@ -8064,7 +8052,7 @@ Link has been copied to the clipboard apps/client/src/app/components/access-table/access-table.component.ts - 161 + 137 @@ -8080,7 +8068,7 @@ Do you really want to convert the data source to ? apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 529 + 531 @@ -8088,7 +8076,7 @@ Default Market Price apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 644 + 645 @@ -8104,7 +8092,7 @@ Instant apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 298 + 300 @@ -8112,7 +8100,7 @@ Lazy apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 294 + 296 @@ -8120,7 +8108,7 @@ HTTP Request Headers apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 657 + 658 @@ -8128,7 +8116,7 @@ real-time apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 298 + 300 @@ -8136,7 +8124,7 @@ end of day apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 294 + 296 @@ -8248,7 +8236,7 @@ Additional requests are granted while you are setting up your instance apps/client/src/app/components/admin-settings/admin-settings.component.ts - 87 + 88 @@ -8328,7 +8316,7 @@ libs/common/src/lib/routes/routes.ts - 267 + 272 @@ -8337,11 +8325,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 262 + 267 libs/common/src/lib/routes/routes.ts - 265 + 270 @@ -8365,7 +8353,7 @@ () is already in use. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 963 + 965 @@ -8373,7 +8361,7 @@ An error occurred while updating to (). apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 807 + 809 @@ -8437,7 +8425,7 @@ libs/common/src/lib/routes/routes.ts - 140 + 145 @@ -8482,11 +8470,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 230 + 235 libs/common/src/lib/routes/routes.ts - 233 + 238 @@ -8606,7 +8594,7 @@ Quick Links libs/ui/src/lib/assistant/assistant.html - 58 + 59 @@ -8622,7 +8610,7 @@ libs/common/src/lib/routes/routes.ts - 281 + 286 @@ -8630,7 +8618,7 @@ Open Source Alternative to libs/common/src/lib/routes/routes.ts - 376 + 381 @@ -8663,15 +8651,15 @@ kebab-case libs/common/src/lib/routes/routes.ts - 362 + 367 libs/common/src/lib/routes/routes.ts - 365 + 370 libs/common/src/lib/routes/routes.ts - 373 + 378 @@ -8680,11 +8668,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 354 + 359 libs/common/src/lib/routes/routes.ts - 357 + 362 @@ -8764,7 +8752,7 @@ Current month apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 261 + 263 @@ -8909,11 +8897,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 386 + 391 libs/common/src/lib/routes/routes.ts - 387 + 392 @@ -8945,7 +8933,7 @@ Cryptocurrencies apps/client/src/app/components/markets/markets.component.ts - 54 + 58 apps/client/src/app/pages/features/features-page.html @@ -8957,7 +8945,7 @@ Stocks apps/client/src/app/components/markets/markets.component.ts - 53 + 57 apps/client/src/app/pages/features/features-page.html @@ -8989,7 +8977,7 @@ No results found... libs/ui/src/lib/assistant/assistant.html - 51 + 52 diff --git a/apps/client/src/locales/messages.ko.xlf b/apps/client/src/locales/messages.ko.xlf index e057f9fe6..56a4ab453 100644 --- a/apps/client/src/locales/messages.ko.xlf +++ b/apps/client/src/locales/messages.ko.xlf @@ -8,31 +8,31 @@ kebab-case libs/common/src/lib/routes/routes.ts - 226 + 231 libs/common/src/lib/routes/routes.ts - 227 + 232 libs/common/src/lib/routes/routes.ts - 232 + 237 libs/common/src/lib/routes/routes.ts - 240 + 245 libs/common/src/lib/routes/routes.ts - 248 + 253 libs/common/src/lib/routes/routes.ts - 256 + 261 libs/common/src/lib/routes/routes.ts - 264 + 269 @@ -41,19 +41,19 @@ kebab-case libs/common/src/lib/routes/routes.ts - 284 + 289 libs/common/src/lib/routes/routes.ts - 285 + 290 libs/common/src/lib/routes/routes.ts - 289 + 294 libs/common/src/lib/routes/routes.ts - 295 + 300 @@ -62,11 +62,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 304 + 309 libs/common/src/lib/routes/routes.ts - 305 + 310 @@ -75,11 +75,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 238 + 243 libs/common/src/lib/routes/routes.ts - 241 + 246 @@ -88,11 +88,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 309 + 314 libs/common/src/lib/routes/routes.ts - 310 + 315 @@ -101,11 +101,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 319 + 324 libs/common/src/lib/routes/routes.ts - 320 + 325 @@ -114,11 +114,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 254 + 259 libs/common/src/lib/routes/routes.ts - 257 + 262 @@ -127,11 +127,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 329 + 334 libs/common/src/lib/routes/routes.ts - 330 + 335 @@ -140,31 +140,31 @@ kebab-case libs/common/src/lib/routes/routes.ts - 334 + 339 libs/common/src/lib/routes/routes.ts - 335 + 340 libs/common/src/lib/routes/routes.ts - 340 + 345 libs/common/src/lib/routes/routes.ts - 348 + 353 libs/common/src/lib/routes/routes.ts - 356 + 361 libs/common/src/lib/routes/routes.ts - 364 + 369 libs/common/src/lib/routes/routes.ts - 372 + 377 @@ -279,8 +279,8 @@ Details 상세 - apps/client/src/app/components/access-table/access-table.component.html - 49 + apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html + 137 @@ -288,7 +288,7 @@ 회수 apps/client/src/app/components/access-table/access-table.component.html - 138 + 100 @@ -312,7 +312,7 @@ 이 부여된 접근 권한을 정말로 회수하시겠습니까? apps/client/src/app/components/access-table/access-table.component.ts - 177 + 153 @@ -362,6 +362,10 @@ apps/client/src/app/pages/accounts/transfer-balance/transfer-balance-dialog.html 7 + + libs/common/src/lib/routes/routes.ts + 99 + libs/ui/src/lib/accounts-table/accounts-table.component.html 10 @@ -536,7 +540,7 @@ 편집 apps/client/src/app/components/access-table/access-table.component.html - 104 + 74 apps/client/src/app/components/admin-market-data/admin-market-data.html @@ -564,7 +568,7 @@ 삭제 apps/client/src/app/components/access-table/access-table.component.html - 135 + 97 apps/client/src/app/components/admin-market-data/admin-market-data.html @@ -616,7 +620,7 @@ 이 계좌를 정말 삭제하시겠습니까? libs/ui/src/lib/accounts-table/accounts-table.component.ts - 183 + 185 @@ -644,7 +648,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 495 + 496 @@ -752,7 +756,7 @@ Splits apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 518 + 519 @@ -784,7 +788,7 @@ 계좌 검색... libs/ui/src/lib/assistant/assistant.component.ts - 448 + 450 @@ -792,11 +796,11 @@ 날짜 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 527 + 528 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 566 + 567 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -880,7 +884,7 @@ An error occurred while converting the data source to . apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 526 + 528 @@ -936,7 +940,7 @@ 데이터 수집 빈도 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 476 + 477 @@ -972,7 +976,7 @@ Apply current market price apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html - 220 + 221 @@ -1156,7 +1160,7 @@ Update Activity libs/common/src/lib/routes/routes.ts - 176 + 181 @@ -1188,7 +1192,7 @@ 스크래퍼 설정 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 634 + 635 @@ -1204,7 +1208,7 @@ apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html - 251 + 252 libs/ui/src/lib/accounts-table/accounts-table.component.html @@ -1247,14 +1251,6 @@ 18 - - Copy identifier to clipboard - Copy identifier to clipboard - - apps/client/src/app/components/access-table/access-table.component.html - 120 - - Name, symbol or ISIN 이름, 심볼 또는 ISIN @@ -1360,7 +1356,7 @@ Update Account libs/common/src/lib/routes/routes.ts - 101 + 106 @@ -1400,7 +1396,7 @@ 추가 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 621 + 622 apps/client/src/app/components/admin-overview/admin-overview.html @@ -1468,7 +1464,7 @@ 자산 정보가 저장되었습니다. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 752 + 754 @@ -1500,7 +1496,7 @@ The data of this asset profile is moved to () and this asset profile is deleted. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 959 + 961 @@ -1516,7 +1512,7 @@ 올해 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 265 + 267 @@ -1656,11 +1652,11 @@ 양식 유효성 검사에 실패했습니다. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 728 + 730 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 731 + 733 @@ -1700,7 +1696,7 @@ libs/common/src/lib/routes/routes.ts - 202 + 207 @@ -1752,7 +1748,7 @@ libs/common/src/lib/routes/routes.ts - 116 + 121 @@ -1784,7 +1780,7 @@ Split Ratio apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 532 + 533 @@ -1792,7 +1788,7 @@ 두려움 apps/client/src/app/components/markets/markets.component.ts - 57 + 61 libs/ui/src/lib/i18n.ts @@ -1804,7 +1800,7 @@ 탐욕 apps/client/src/app/components/markets/markets.component.ts - 58 + 62 libs/ui/src/lib/i18n.ts @@ -1824,7 +1820,7 @@ An error occurred while merging this asset profile into (). apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 942 + 944 @@ -1920,7 +1916,7 @@ 이번주 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 257 + 259 @@ -2396,7 +2392,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 366 + 368 @@ -2404,11 +2400,11 @@ 연초 대비 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 265 + 267 libs/ui/src/lib/assistant/assistant.component.ts - 378 + 380 @@ -2416,11 +2412,11 @@ 1년 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 269 + 271 libs/ui/src/lib/assistant/assistant.component.ts - 388 + 390 @@ -2436,11 +2432,11 @@ 5년 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 273 + 275 libs/ui/src/lib/assistant/assistant.component.ts - 410 + 412 @@ -2456,19 +2452,11 @@ 맥스 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 277 + 279 libs/ui/src/lib/assistant/assistant.component.ts - 416 - - - - Identifier has been copied to the clipboard - Identifier has been copied to the clipboard - - apps/client/src/app/components/access-table/access-table.component.ts - 149 + 418 @@ -2780,7 +2768,7 @@ 사용자 ID apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html - 116 + 113 apps/client/src/app/components/user-account-settings/user-account-settings.html @@ -2868,7 +2856,7 @@ libs/common/src/lib/routes/routes.ts - 270 + 275 @@ -2884,7 +2872,7 @@ libs/common/src/lib/routes/routes.ts - 235 + 240 @@ -2900,7 +2888,7 @@ libs/common/src/lib/routes/routes.ts - 243 + 248 @@ -2916,7 +2904,7 @@ libs/common/src/lib/routes/routes.ts - 259 + 264 @@ -2988,19 +2976,19 @@ libs/common/src/lib/routes/routes.ts - 104 + 109 libs/ui/src/lib/assistant/assistant.html - 84 + 85 Oops, cash balance transfer has failed. 죄송합니다. 현금 잔액 이체가 실패했습니다. - apps/client/src/app/pages/accounts/accounts-page.component.ts - 199 + apps/client/src/app/pages/accounts/account-dialog-host/account-dialog-host.component.ts + 365 @@ -3024,7 +3012,7 @@ 계좌 ID apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 108 + 109 @@ -3148,11 +3136,11 @@ libs/common/src/lib/routes/routes.ts - 143 + 148 libs/common/src/lib/routes/routes.ts - 220 + 225 @@ -3264,7 +3252,7 @@ libs/common/src/lib/routes/routes.ts - 275 + 280 @@ -3272,11 +3260,11 @@ 스크래퍼 설정을 파싱할 수 없습니다. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 676 + 678 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 679 + 681 @@ -3328,7 +3316,7 @@ libs/common/src/lib/routes/routes.ts - 301 + 306 @@ -3356,7 +3344,7 @@ libs/common/src/lib/routes/routes.ts - 306 + 311 @@ -3536,15 +3524,15 @@ libs/common/src/lib/routes/routes.ts - 125 + 130 libs/common/src/lib/routes/routes.ts - 217 + 222 libs/ui/src/lib/assistant/assistant.html - 110 + 111 @@ -3552,7 +3540,7 @@ This action cannot be undone. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 961 + 963 @@ -3572,7 +3560,7 @@ libs/common/src/lib/routes/routes.ts - 135 + 140 @@ -3604,15 +3592,15 @@ libs/common/src/lib/routes/routes.ts - 130 + 135 libs/common/src/lib/routes/routes.ts - 311 + 316 libs/common/src/lib/routes/routes.ts - 359 + 364 @@ -4104,7 +4092,7 @@ Add Activity libs/common/src/lib/routes/routes.ts - 169 + 174 @@ -4152,7 +4140,7 @@ Do you really want to merge this asset profile into it? apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 965 + 967 @@ -4296,7 +4284,7 @@ libs/common/src/lib/routes/routes.ts - 179 + 184 libs/ui/src/lib/accounts-table/accounts-table.component.html @@ -4520,7 +4508,7 @@ Shares After apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 590 + 591 @@ -4548,7 +4536,7 @@ Do you really want to convert this asset profile to ()? apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 809 + 811 @@ -4564,7 +4552,7 @@ libs/common/src/lib/routes/routes.ts - 184 + 189 @@ -4580,7 +4568,7 @@ 플랫폼별 apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 39 + 41 @@ -4588,7 +4576,7 @@ 통화별 apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 58 + 60 @@ -4596,7 +4584,7 @@ 자산군별 apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 80 + 82 @@ -4604,7 +4592,7 @@ 보유 종목별 apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 102 + 104 @@ -4612,7 +4600,7 @@ 부문별 apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 125 + 127 @@ -4620,7 +4608,7 @@ 대륙별 apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 148 + 150 @@ -4628,7 +4616,7 @@ 시장별 apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 170 + 172 @@ -4636,7 +4624,7 @@ 지역 apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 193 + 195 apps/client/src/app/pages/public/public-page.html @@ -4664,7 +4652,7 @@ 선진시장 apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 216 + 218 apps/client/src/app/pages/public/public-page.html @@ -4684,7 +4672,7 @@ 신흥시장 apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 226 + 228 apps/client/src/app/pages/public/public-page.html @@ -4696,7 +4684,7 @@ 기타 시장 apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 236 + 238 apps/client/src/app/pages/public/public-page.html @@ -4708,7 +4696,7 @@ 계좌별 apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 283 + 285 @@ -4716,7 +4704,7 @@ ETF 제공자별 apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 303 + 305 @@ -4724,7 +4712,7 @@ 국가별 apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 261 + 263 @@ -4736,7 +4724,7 @@ libs/common/src/lib/routes/routes.ts - 189 + 194 @@ -4904,7 +4892,7 @@ libs/common/src/lib/routes/routes.ts - 321 + 326 @@ -4928,7 +4916,7 @@ Do you really want to remove this received access? apps/client/src/app/components/access-table/access-table.component.ts - 176 + 152 @@ -4952,7 +4940,7 @@ 매시간 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 249 + 251 @@ -5108,11 +5096,11 @@ 자산 정보를 저장할 수 없습니다. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 762 + 764 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 765 + 767 @@ -5164,7 +5152,7 @@ libs/common/src/lib/routes/routes.ts - 331 + 336 @@ -5196,7 +5184,7 @@ libs/common/src/lib/routes/routes.ts - 379 + 384 @@ -5205,11 +5193,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 370 + 375 libs/common/src/lib/routes/routes.ts - 374 + 379 @@ -5545,7 +5533,7 @@ libs/common/src/lib/routes/routes.ts - 382 + 387 @@ -5697,7 +5685,7 @@ libs/ui/src/lib/assistant/assistant.html - 140 + 141 @@ -5705,7 +5693,7 @@ 포트폴리오 필터 apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html - 128 + 125 @@ -5801,7 +5789,7 @@ This asset profile cannot be merged into (). apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 920 + 922 @@ -5881,7 +5869,7 @@ 계좌 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.component.ts - 102 + 109 libs/common/src/lib/routes/routes.ts @@ -5925,7 +5913,7 @@ apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html - 266 + 268 libs/ui/src/lib/i18n.ts @@ -5957,7 +5945,7 @@ apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html - 285 + 287 libs/ui/src/lib/i18n.ts @@ -6073,7 +6061,7 @@ libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 460 + 462 @@ -6225,7 +6213,7 @@ 수수료 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html - 238 + 239 libs/ui/src/lib/activities-table/activities-table.component.html @@ -6441,7 +6429,7 @@ 사용 가능한 데이터가 없습니다. apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 247 + 249 apps/client/src/app/pages/public/public-page.html @@ -6453,11 +6441,11 @@ libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 462 + 464 libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 476 + 478 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -6477,7 +6465,7 @@ 기간 libs/ui/src/lib/assistant/assistant.html - 170 + 171 @@ -6485,7 +6473,7 @@ 현재 시장가격은 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 854 + 856 @@ -6501,7 +6489,7 @@ 이런! 액세스 권한을 부여할 수 없습니다. apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.component.ts - 256 + 311 @@ -6617,7 +6605,7 @@ 연초 현재 libs/ui/src/lib/assistant/assistant.component.ts - 378 + 380 @@ -6625,7 +6613,7 @@ 이번주 현재까지 libs/ui/src/lib/assistant/assistant.component.ts - 370 + 372 @@ -6633,7 +6621,7 @@ 월간 누계 libs/ui/src/lib/assistant/assistant.component.ts - 374 + 376 @@ -6641,11 +6629,11 @@ MTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 261 + 263 libs/ui/src/lib/assistant/assistant.component.ts - 374 + 376 @@ -6661,11 +6649,11 @@ WTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 257 + 259 libs/ui/src/lib/assistant/assistant.component.ts - 370 + 372 @@ -6697,7 +6685,7 @@ 필터 재설정 libs/ui/src/lib/assistant/assistant.html - 204 + 205 @@ -6705,7 +6693,7 @@ 년도 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 269 + 271 apps/client/src/app/pages/resources/personal-finance-tools/product-page.html @@ -6717,7 +6705,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 388 + 390 @@ -6725,11 +6713,11 @@ 연령 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 273 + 275 libs/ui/src/lib/assistant/assistant.component.ts - 410 + 412 @@ -6737,7 +6725,7 @@ 필터 적용 libs/ui/src/lib/assistant/assistant.html - 217 + 218 @@ -6746,11 +6734,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 293 + 298 libs/common/src/lib/routes/routes.ts - 296 + 301 @@ -6762,7 +6750,7 @@ libs/common/src/lib/routes/routes.ts - 298 + 303 @@ -6782,7 +6770,7 @@ 보유 종목 검색... libs/ui/src/lib/assistant/assistant.component.ts - 449 + 451 @@ -6802,7 +6790,7 @@ libs/common/src/lib/routes/routes.ts - 290 + 295 @@ -6810,7 +6798,7 @@ 매일 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 245 + 247 @@ -6834,7 +6822,7 @@ 닫은 apps/client/src/app/components/home-holdings/home-holdings.component.ts - 74 + 78 @@ -6842,7 +6830,7 @@ 활동적인 apps/client/src/app/components/home-holdings/home-holdings.component.ts - 73 + 77 @@ -6918,7 +6906,7 @@ 국제화 libs/common/src/lib/routes/routes.ts - 149 + 154 @@ -6942,7 +6930,7 @@ 페이지 이동... libs/ui/src/lib/assistant/assistant.component.ts - 450 + 452 @@ -6958,7 +6946,7 @@ 각 ETF의 상위 보유 종목을 기준으로 한 근사치 apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 335 + 337 @@ -6966,7 +6954,7 @@ ETF 보유 종목별 apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 328 + 330 @@ -6982,7 +6970,7 @@ Clone Activity libs/common/src/lib/routes/routes.ts - 164 + 169 @@ -7030,7 +7018,7 @@ 차트 apps/client/src/app/components/home-holdings/home-holdings.component.ts - 67 + 71 @@ -7038,7 +7026,7 @@ 테이블 apps/client/src/app/components/home-holdings/home-holdings.component.ts - 62 + 66 @@ -7266,15 +7254,15 @@ 오류 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 844 + 846 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 921 + 923 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 943 + 945 @@ -7306,11 +7294,11 @@ apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html - 143 + 152 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 117 + 118 apps/client/src/app/pages/accounts/transfer-balance/transfer-balance-dialog.html @@ -7318,7 +7306,7 @@ apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html - 321 + 323 apps/client/src/app/pages/register/user-account-registration-dialog/user-account-registration-dialog.html @@ -7386,7 +7374,7 @@ apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html - 145 + 154 apps/client/src/app/components/user-account-membership/user-account-membership.component.ts @@ -7398,11 +7386,11 @@ apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 119 + 120 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html - 323 + 325 libs/ui/src/lib/i18n.ts @@ -7422,7 +7410,7 @@ 이런! 액세스를 업데이트할 수 없습니다. apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.component.ts - 354 + 409 @@ -7494,7 +7482,7 @@ 링크를 클립보드에 복사 apps/client/src/app/components/access-table/access-table.component.html - 112 + 82 @@ -7658,7 +7646,7 @@ Shares Before apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 603 + 604 @@ -7718,7 +7706,7 @@ 이런! 자산을 찾을 수 없습니다. libs/ui/src/lib/symbol-autocomplete/symbol-autocomplete.component.html - 43 + 44 @@ -7774,7 +7762,7 @@ libs/common/src/lib/routes/routes.ts - 343 + 348 @@ -7783,11 +7771,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 338 + 343 libs/common/src/lib/routes/routes.ts - 341 + 346 @@ -7803,7 +7791,7 @@ libs/common/src/lib/routes/routes.ts - 351 + 356 @@ -7812,11 +7800,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 346 + 351 libs/common/src/lib/routes/routes.ts - 349 + 354 @@ -7848,7 +7836,7 @@ API 키를 정말로 삭제하시겠습니까? apps/client/src/app/components/admin-settings/admin-settings.component.ts - 148 + 151 @@ -7984,15 +7972,15 @@ apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html - 158 + 167 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 128 + 129 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html - 332 + 334 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html @@ -8040,7 +8028,7 @@ Ghostfolio API 키를 입력하세요. apps/client/src/app/components/admin-settings/admin-settings.component.ts - 167 + 170 @@ -8064,7 +8052,7 @@ 링크가 클립보드에 복사되었습니다. apps/client/src/app/components/access-table/access-table.component.ts - 161 + 137 @@ -8080,7 +8068,7 @@ Do you really want to convert the data source to ? apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 529 + 531 @@ -8088,7 +8076,7 @@ 기본 시장 가격 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 644 + 645 @@ -8104,7 +8092,7 @@ 즉각적인 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 298 + 300 @@ -8112,7 +8100,7 @@ 게으른 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 294 + 296 @@ -8120,7 +8108,7 @@ HTTP 요청 헤더 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 657 + 658 @@ -8128,7 +8116,7 @@ 실시간 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 298 + 300 @@ -8136,7 +8124,7 @@ 하루의 끝 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 294 + 296 @@ -8248,7 +8236,7 @@ Additional requests are granted while you are setting up your instance apps/client/src/app/components/admin-settings/admin-settings.component.ts - 87 + 88 @@ -8328,7 +8316,7 @@ libs/common/src/lib/routes/routes.ts - 267 + 272 @@ -8337,11 +8325,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 262 + 267 libs/common/src/lib/routes/routes.ts - 265 + 270 @@ -8365,7 +8353,7 @@ ()은(는) 이미 사용 중입니다. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 963 + 965 @@ -8373,7 +8361,7 @@ ()로 업데이트하는 동안 오류가 발생했습니다. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 807 + 809 @@ -8437,7 +8425,7 @@ libs/common/src/lib/routes/routes.ts - 140 + 145 @@ -8482,11 +8470,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 230 + 235 libs/common/src/lib/routes/routes.ts - 233 + 238 @@ -8606,7 +8594,7 @@ 빠른 링크 libs/ui/src/lib/assistant/assistant.html - 58 + 59 @@ -8622,7 +8610,7 @@ libs/common/src/lib/routes/routes.ts - 281 + 286 @@ -8630,7 +8618,7 @@ 오픈 소스 대안 libs/common/src/lib/routes/routes.ts - 376 + 381 @@ -8663,15 +8651,15 @@ kebab-case libs/common/src/lib/routes/routes.ts - 362 + 367 libs/common/src/lib/routes/routes.ts - 365 + 370 libs/common/src/lib/routes/routes.ts - 373 + 378 @@ -8680,11 +8668,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 354 + 359 libs/common/src/lib/routes/routes.ts - 357 + 362 @@ -8764,7 +8752,7 @@ 이번 달 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 261 + 263 @@ -8909,11 +8897,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 386 + 391 libs/common/src/lib/routes/routes.ts - 387 + 392 @@ -8945,7 +8933,7 @@ 암호화폐 apps/client/src/app/components/markets/markets.component.ts - 54 + 58 apps/client/src/app/pages/features/features-page.html @@ -8957,7 +8945,7 @@ 주식 apps/client/src/app/components/markets/markets.component.ts - 53 + 57 apps/client/src/app/pages/features/features-page.html @@ -8989,7 +8977,7 @@ 검색된 결과가 없습니다... libs/ui/src/lib/assistant/assistant.html - 51 + 52 diff --git a/apps/client/src/locales/messages.nl.xlf b/apps/client/src/locales/messages.nl.xlf index 181142518..546958de4 100644 --- a/apps/client/src/locales/messages.nl.xlf +++ b/apps/client/src/locales/messages.nl.xlf @@ -77,8 +77,8 @@ Details Details - apps/client/src/app/components/access-table/access-table.component.html - 49 + apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html + 137 @@ -86,7 +86,7 @@ Intrekken apps/client/src/app/components/access-table/access-table.component.html - 138 + 100 @@ -110,7 +110,7 @@ Wil je deze verleende toegang echt intrekken? apps/client/src/app/components/access-table/access-table.component.ts - 177 + 153 @@ -242,7 +242,7 @@ Bewerken apps/client/src/app/components/access-table/access-table.component.html - 104 + 74 apps/client/src/app/components/admin-market-data/admin-market-data.html @@ -270,7 +270,7 @@ Verwijderen apps/client/src/app/components/access-table/access-table.component.html - 135 + 97 apps/client/src/app/components/admin-market-data/admin-market-data.html @@ -322,7 +322,7 @@ Wil je deze rekening echt verwijderen? libs/ui/src/lib/accounts-table/accounts-table.component.ts - 183 + 185 @@ -434,7 +434,7 @@ libs/ui/src/lib/assistant/assistant.html - 140 + 141 @@ -446,7 +446,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 495 + 496 @@ -462,7 +462,7 @@ Splits apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 518 + 519 @@ -494,7 +494,7 @@ Zoek een account... libs/ui/src/lib/assistant/assistant.component.ts - 448 + 450 @@ -502,11 +502,11 @@ Datum apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 527 + 528 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 566 + 567 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -670,7 +670,7 @@ Update Account libs/common/src/lib/routes/routes.ts - 101 + 106 @@ -686,7 +686,7 @@ Toevoegen apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 621 + 622 apps/client/src/app/components/admin-overview/admin-overview.html @@ -846,7 +846,7 @@ libs/common/src/lib/routes/routes.ts - 116 + 121 @@ -878,7 +878,7 @@ Split Ratio apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 532 + 533 @@ -894,7 +894,7 @@ An error occurred while merging this asset profile into (). apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 942 + 944 @@ -1190,7 +1190,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 366 + 368 @@ -1198,11 +1198,11 @@ YTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 265 + 267 libs/ui/src/lib/assistant/assistant.component.ts - 378 + 380 @@ -1210,11 +1210,11 @@ 1J apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 269 + 271 libs/ui/src/lib/assistant/assistant.component.ts - 388 + 390 @@ -1230,11 +1230,11 @@ 5J apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 273 + 275 libs/ui/src/lib/assistant/assistant.component.ts - 410 + 412 @@ -1250,19 +1250,11 @@ Max apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 277 + 279 libs/ui/src/lib/assistant/assistant.component.ts - 416 - - - - Identifier has been copied to the clipboard - Identifier has been copied to the clipboard - - apps/client/src/app/components/access-table/access-table.component.ts - 149 + 418 @@ -1298,7 +1290,7 @@ libs/common/src/lib/routes/routes.ts - 270 + 275 @@ -1314,7 +1306,7 @@ libs/common/src/lib/routes/routes.ts - 259 + 264 @@ -1482,7 +1474,7 @@ Gebruikers-ID apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html - 116 + 113 apps/client/src/app/components/user-account-settings/user-account-settings.html @@ -1574,11 +1566,11 @@ libs/common/src/lib/routes/routes.ts - 104 + 109 libs/ui/src/lib/assistant/assistant.html - 84 + 85 @@ -1674,7 +1666,7 @@ Rekening-ID apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 108 + 109 @@ -1810,7 +1802,7 @@ libs/common/src/lib/routes/routes.ts - 275 + 280 @@ -1854,7 +1846,7 @@ libs/common/src/lib/routes/routes.ts - 301 + 306 @@ -1882,7 +1874,7 @@ libs/common/src/lib/routes/routes.ts - 306 + 311 @@ -1918,11 +1910,11 @@ libs/common/src/lib/routes/routes.ts - 143 + 148 libs/common/src/lib/routes/routes.ts - 220 + 225 @@ -1954,15 +1946,15 @@ libs/common/src/lib/routes/routes.ts - 130 + 135 libs/common/src/lib/routes/routes.ts - 311 + 316 libs/common/src/lib/routes/routes.ts - 359 + 364 @@ -1978,7 +1970,7 @@ libs/common/src/lib/routes/routes.ts - 184 + 189 @@ -1986,7 +1978,7 @@ Per rekening apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 283 + 285 @@ -1994,7 +1986,7 @@ Per valuta apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 58 + 60 @@ -2002,7 +1994,7 @@ Per asset klasse apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 80 + 82 @@ -2010,7 +2002,7 @@ Per positie apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 102 + 104 @@ -2018,7 +2010,7 @@ Per sector apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 125 + 127 @@ -2026,7 +2018,7 @@ Per continent apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 148 + 150 @@ -2034,7 +2026,7 @@ Per land apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 261 + 263 @@ -2042,7 +2034,7 @@ Regio’s apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 193 + 195 apps/client/src/app/pages/public/public-page.html @@ -2066,7 +2058,7 @@ libs/common/src/lib/routes/routes.ts - 189 + 194 @@ -2130,15 +2122,15 @@ libs/common/src/lib/routes/routes.ts - 125 + 130 libs/common/src/lib/routes/routes.ts - 217 + 222 libs/ui/src/lib/assistant/assistant.html - 110 + 111 @@ -2154,7 +2146,7 @@ Huidige week apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 257 + 259 @@ -2189,14 +2181,6 @@ 5 - - Copy identifier to clipboard - Copy identifier to clipboard - - apps/client/src/app/components/access-table/access-table.component.html - 120 - - Name, symbol or ISIN Naam, symbool of ISIN @@ -2274,7 +2258,7 @@ apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html - 251 + 252 libs/ui/src/lib/accounts-table/accounts-table.component.html @@ -2330,7 +2314,7 @@ libs/common/src/lib/routes/routes.ts - 179 + 184 libs/ui/src/lib/accounts-table/accounts-table.component.html @@ -2390,7 +2374,7 @@ libs/common/src/lib/routes/routes.ts - 321 + 326 @@ -2414,7 +2398,7 @@ libs/common/src/lib/routes/routes.ts - 202 + 207 @@ -2450,7 +2434,7 @@ libs/common/src/lib/routes/routes.ts - 331 + 336 @@ -2494,7 +2478,7 @@ libs/common/src/lib/routes/routes.ts - 382 + 387 @@ -2706,7 +2690,7 @@ Ontwikkelde markten apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 216 + 218 apps/client/src/app/pages/public/public-page.html @@ -2734,7 +2718,7 @@ Andere markten apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 236 + 238 apps/client/src/app/pages/public/public-page.html @@ -2746,7 +2730,7 @@ Opkomende markten apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 226 + 228 apps/client/src/app/pages/public/public-page.html @@ -2866,7 +2850,7 @@ Huidige marktprijs toepassen apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html - 220 + 221 @@ -2890,7 +2874,7 @@ Angst apps/client/src/app/components/markets/markets.component.ts - 57 + 61 libs/ui/src/lib/i18n.ts @@ -2902,7 +2886,7 @@ Hebzucht apps/client/src/app/components/markets/markets.component.ts - 58 + 62 libs/ui/src/lib/i18n.ts @@ -2962,11 +2946,11 @@ Het formulier kon niet worden gevalideerd. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 728 + 730 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 731 + 733 @@ -3086,7 +3070,7 @@ Account apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.component.ts - 102 + 109 libs/common/src/lib/routes/routes.ts @@ -3122,7 +3106,7 @@ apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html - 266 + 268 libs/ui/src/lib/i18n.ts @@ -3250,7 +3234,7 @@ libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 460 + 462 @@ -3258,7 +3242,7 @@ Geen gegevens beschikbaar apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 247 + 249 apps/client/src/app/pages/public/public-page.html @@ -3270,11 +3254,11 @@ libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 462 + 464 libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 476 + 478 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -3402,7 +3386,7 @@ Do you really want to convert this asset profile to ()? apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 809 + 811 @@ -3418,7 +3402,7 @@ Frequentie van gegevensverzameling apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 476 + 477 @@ -3514,7 +3498,7 @@ apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html - 285 + 287 libs/ui/src/lib/i18n.ts @@ -3582,7 +3566,7 @@ This action cannot be undone. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 961 + 963 @@ -3602,7 +3586,7 @@ libs/common/src/lib/routes/routes.ts - 135 + 140 @@ -3890,7 +3874,7 @@ Elk uur apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 249 + 251 @@ -4002,11 +3986,11 @@ Kon het assetprofiel niet opslaan apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 762 + 764 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 765 + 767 @@ -4122,7 +4106,7 @@ This asset profile cannot be merged into (). apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 920 + 922 @@ -4174,7 +4158,7 @@ Do you really want to remove this received access? apps/client/src/app/components/access-table/access-table.component.ts - 176 + 152 @@ -4190,7 +4174,7 @@ Per ETF-aanbieder apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 303 + 305 @@ -4214,7 +4198,7 @@ The data of this asset profile is moved to () and this asset profile is deleted. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 959 + 961 @@ -4230,7 +4214,7 @@ Huidig jaar apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 265 + 267 @@ -4282,7 +4266,7 @@ Het activaprofiel is opgeslagen. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 752 + 754 @@ -4314,7 +4298,7 @@ Per platform apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 39 + 41 @@ -4410,7 +4394,7 @@ Shares After apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 590 + 591 @@ -4514,7 +4498,7 @@ libs/common/src/lib/routes/routes.ts - 235 + 240 @@ -4530,7 +4514,7 @@ libs/common/src/lib/routes/routes.ts - 243 + 248 @@ -4650,7 +4634,7 @@ Update Activity libs/common/src/lib/routes/routes.ts - 176 + 181 @@ -4682,7 +4666,7 @@ Scraper instellingen apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 634 + 635 @@ -4702,7 +4686,7 @@ libs/common/src/lib/routes/routes.ts - 379 + 384 @@ -4974,7 +4958,7 @@ An error occurred while converting the data source to . apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 526 + 528 @@ -4998,7 +4982,7 @@ Per markt apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 170 + 172 @@ -5246,11 +5230,11 @@ De scraperconfiguratie kon niet worden geparseerd apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 676 + 678 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 679 + 681 @@ -5550,7 +5534,7 @@ Add Activity libs/common/src/lib/routes/routes.ts - 169 + 174 @@ -5599,19 +5583,19 @@ kebab-case libs/common/src/lib/routes/routes.ts - 284 + 289 libs/common/src/lib/routes/routes.ts - 285 + 290 libs/common/src/lib/routes/routes.ts - 289 + 294 libs/common/src/lib/routes/routes.ts - 295 + 300 @@ -5620,11 +5604,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 304 + 309 libs/common/src/lib/routes/routes.ts - 305 + 310 @@ -5633,31 +5617,31 @@ kebab-case libs/common/src/lib/routes/routes.ts - 226 + 231 libs/common/src/lib/routes/routes.ts - 227 + 232 libs/common/src/lib/routes/routes.ts - 232 + 237 libs/common/src/lib/routes/routes.ts - 240 + 245 libs/common/src/lib/routes/routes.ts - 248 + 253 libs/common/src/lib/routes/routes.ts - 256 + 261 libs/common/src/lib/routes/routes.ts - 264 + 269 @@ -5666,11 +5650,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 254 + 259 libs/common/src/lib/routes/routes.ts - 257 + 262 @@ -5679,11 +5663,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 238 + 243 libs/common/src/lib/routes/routes.ts - 241 + 246 @@ -5692,11 +5676,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 309 + 314 libs/common/src/lib/routes/routes.ts - 310 + 315 @@ -5705,11 +5689,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 319 + 324 libs/common/src/lib/routes/routes.ts - 320 + 325 @@ -5718,11 +5702,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 329 + 334 libs/common/src/lib/routes/routes.ts - 330 + 335 @@ -5731,31 +5715,31 @@ kebab-case libs/common/src/lib/routes/routes.ts - 334 + 339 libs/common/src/lib/routes/routes.ts - 335 + 340 libs/common/src/lib/routes/routes.ts - 340 + 345 libs/common/src/lib/routes/routes.ts - 348 + 353 libs/common/src/lib/routes/routes.ts - 356 + 361 libs/common/src/lib/routes/routes.ts - 364 + 369 libs/common/src/lib/routes/routes.ts - 372 + 377 @@ -5828,11 +5812,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 370 + 375 libs/common/src/lib/routes/routes.ts - 374 + 379 @@ -5900,7 +5884,7 @@ Do you really want to merge this asset profile into it? apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 965 + 967 @@ -5984,7 +5968,7 @@ Kosten apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html - 238 + 239 libs/ui/src/lib/activities-table/activities-table.component.html @@ -6042,6 +6026,10 @@ apps/client/src/app/pages/accounts/transfer-balance/transfer-balance-dialog.html 7 + + libs/common/src/lib/routes/routes.ts + 99 + libs/ui/src/lib/accounts-table/accounts-table.component.html 10 @@ -6335,8 +6323,8 @@ Oops, cash balance transfer has failed. Oeps, geldoverdracht is mislukt. - apps/client/src/app/pages/accounts/accounts-page.component.ts - 199 + apps/client/src/app/pages/accounts/account-dialog-host/account-dialog-host.component.ts + 365 @@ -6392,7 +6380,7 @@ Portefeuillefilters apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html - 128 + 125 @@ -6452,7 +6440,7 @@ De huidige markt waarde is apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 854 + 856 @@ -6468,7 +6456,7 @@ Datumbereik libs/ui/src/lib/assistant/assistant.html - 170 + 171 @@ -6496,7 +6484,7 @@ Oeps! Kan geen toegang verlenen. apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.component.ts - 256 + 311 @@ -6592,7 +6580,7 @@ Week tot nu toe libs/ui/src/lib/assistant/assistant.component.ts - 370 + 372 @@ -6600,11 +6588,11 @@ Week tot nu toe apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 257 + 259 libs/ui/src/lib/assistant/assistant.component.ts - 370 + 372 @@ -6612,7 +6600,7 @@ Maand tot nu toe libs/ui/src/lib/assistant/assistant.component.ts - 374 + 376 @@ -6620,11 +6608,11 @@ MTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 261 + 263 libs/ui/src/lib/assistant/assistant.component.ts - 374 + 376 @@ -6640,7 +6628,7 @@ Jaar tot nu toe libs/ui/src/lib/assistant/assistant.component.ts - 378 + 380 @@ -6672,7 +6660,7 @@ Filters Herstellen libs/ui/src/lib/assistant/assistant.html - 204 + 205 @@ -6680,7 +6668,7 @@ jaar apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 269 + 271 apps/client/src/app/pages/resources/personal-finance-tools/product-page.html @@ -6692,7 +6680,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 388 + 390 @@ -6700,11 +6688,11 @@ jaren apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 273 + 275 libs/ui/src/lib/assistant/assistant.component.ts - 410 + 412 @@ -6712,7 +6700,7 @@ Filters Toepassen libs/ui/src/lib/assistant/assistant.html - 217 + 218 @@ -6732,7 +6720,7 @@ Zoek een positie... libs/ui/src/lib/assistant/assistant.component.ts - 449 + 451 @@ -6752,7 +6740,7 @@ libs/common/src/lib/routes/routes.ts - 290 + 295 @@ -6764,7 +6752,7 @@ libs/common/src/lib/routes/routes.ts - 298 + 303 @@ -6773,11 +6761,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 293 + 298 libs/common/src/lib/routes/routes.ts - 296 + 301 @@ -6785,7 +6773,7 @@ Dagelijks apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 245 + 247 @@ -6809,7 +6797,7 @@ Actief apps/client/src/app/components/home-holdings/home-holdings.component.ts - 73 + 77 @@ -6817,7 +6805,7 @@ Gesloten apps/client/src/app/components/home-holdings/home-holdings.component.ts - 74 + 78 @@ -6893,7 +6881,7 @@ Internationalizering libs/common/src/lib/routes/routes.ts - 149 + 154 @@ -6909,7 +6897,7 @@ Ga naar een pagina... libs/ui/src/lib/assistant/assistant.component.ts - 450 + 452 @@ -6933,7 +6921,7 @@ Per Aangehouden ETF apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 328 + 330 @@ -6941,7 +6929,7 @@ Benadering op basis van de grootste belegingen binnen iedere ETF apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 335 + 337 @@ -6957,7 +6945,7 @@ Clone Activity libs/common/src/lib/routes/routes.ts - 164 + 169 @@ -7005,7 +6993,7 @@ Tabel apps/client/src/app/components/home-holdings/home-holdings.component.ts - 62 + 66 @@ -7013,7 +7001,7 @@ Grafiek apps/client/src/app/components/home-holdings/home-holdings.component.ts - 67 + 71 @@ -7241,15 +7229,15 @@ Fout apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 844 + 846 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 921 + 923 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 943 + 945 @@ -7273,7 +7261,7 @@ Oops! Kan de toegang niet updaten. apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.component.ts - 354 + 409 @@ -7313,11 +7301,11 @@ apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html - 143 + 152 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 117 + 118 apps/client/src/app/pages/accounts/transfer-balance/transfer-balance-dialog.html @@ -7325,7 +7313,7 @@ apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html - 321 + 323 apps/client/src/app/pages/register/user-account-registration-dialog/user-account-registration-dialog.html @@ -7369,7 +7357,7 @@ apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html - 145 + 154 apps/client/src/app/components/user-account-membership/user-account-membership.component.ts @@ -7381,11 +7369,11 @@ apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 119 + 120 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html - 323 + 325 libs/ui/src/lib/i18n.ts @@ -7413,7 +7401,7 @@ Kopieer link naar klembord apps/client/src/app/components/access-table/access-table.component.html - 112 + 82 @@ -7633,7 +7621,7 @@ Shares Before apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 603 + 604 @@ -7693,7 +7681,7 @@ Oeps! Kan geen activa vinden. libs/ui/src/lib/symbol-autocomplete/symbol-autocomplete.component.html - 43 + 44 @@ -7749,7 +7737,7 @@ libs/common/src/lib/routes/routes.ts - 343 + 348 @@ -7765,7 +7753,7 @@ libs/common/src/lib/routes/routes.ts - 351 + 356 @@ -7774,11 +7762,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 346 + 351 libs/common/src/lib/routes/routes.ts - 349 + 354 @@ -7787,11 +7775,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 338 + 343 libs/common/src/lib/routes/routes.ts - 341 + 346 @@ -7831,7 +7819,7 @@ Wilt u de API-sleutel echt verwijderen? apps/client/src/app/components/admin-settings/admin-settings.component.ts - 148 + 151 @@ -7959,15 +7947,15 @@ apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html - 158 + 167 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 128 + 129 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html - 332 + 334 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html @@ -8015,7 +8003,7 @@ Voer uw Ghostfolio API-sleutel in. apps/client/src/app/components/admin-settings/admin-settings.component.ts - 167 + 170 @@ -8039,7 +8027,7 @@ Link is gekopieerd naar klemboord apps/client/src/app/components/access-table/access-table.component.ts - 161 + 137 @@ -8047,7 +8035,7 @@ Lui apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 294 + 296 @@ -8055,7 +8043,7 @@ Direct apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 298 + 300 @@ -8063,7 +8051,7 @@ Standaard Marktprijs apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 644 + 645 @@ -8079,7 +8067,7 @@ Do you really want to convert the data source to ? apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 529 + 531 @@ -8095,7 +8083,7 @@ HTTP Verzoek Headers apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 657 + 658 @@ -8103,7 +8091,7 @@ eind van de dag apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 294 + 296 @@ -8111,7 +8099,7 @@ real-time apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 298 + 300 @@ -8239,7 +8227,7 @@ Additional requests are granted while you are setting up your instance apps/client/src/app/components/admin-settings/admin-settings.component.ts - 87 + 88 @@ -8308,11 +8296,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 262 + 267 libs/common/src/lib/routes/routes.ts - 265 + 270 @@ -8324,7 +8312,7 @@ libs/common/src/lib/routes/routes.ts - 267 + 272 @@ -8340,7 +8328,7 @@ () is al in gebruik. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 963 + 965 @@ -8348,7 +8336,7 @@ Er is een fout opgetreden tijdens het updaten naar (). apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 807 + 809 @@ -8436,7 +8424,7 @@ libs/common/src/lib/routes/routes.ts - 140 + 145 @@ -8481,11 +8469,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 230 + 235 libs/common/src/lib/routes/routes.ts - 233 + 238 @@ -8605,7 +8593,7 @@ Snelle koppelingen libs/ui/src/lib/assistant/assistant.html - 58 + 59 @@ -8621,7 +8609,7 @@ libs/common/src/lib/routes/routes.ts - 281 + 286 @@ -8629,7 +8617,7 @@ Open Source alternatief voor libs/common/src/lib/routes/routes.ts - 376 + 381 @@ -8662,15 +8650,15 @@ kebab-case libs/common/src/lib/routes/routes.ts - 362 + 367 libs/common/src/lib/routes/routes.ts - 365 + 370 libs/common/src/lib/routes/routes.ts - 373 + 378 @@ -8679,11 +8667,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 354 + 359 libs/common/src/lib/routes/routes.ts - 357 + 362 @@ -8763,7 +8751,7 @@ Huidige maand apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 261 + 263 @@ -8908,11 +8896,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 386 + 391 libs/common/src/lib/routes/routes.ts - 387 + 392 @@ -8944,7 +8932,7 @@ Aandelen apps/client/src/app/components/markets/markets.component.ts - 53 + 57 apps/client/src/app/pages/features/features-page.html @@ -8956,7 +8944,7 @@ Cryptovaluta apps/client/src/app/components/markets/markets.component.ts - 54 + 58 apps/client/src/app/pages/features/features-page.html @@ -9084,7 +9072,7 @@ Geen resultaten gevonden... libs/ui/src/lib/assistant/assistant.html - 51 + 52 diff --git a/apps/client/src/locales/messages.pl.xlf b/apps/client/src/locales/messages.pl.xlf index ef7ef8c5b..bb274372f 100644 --- a/apps/client/src/locales/messages.pl.xlf +++ b/apps/client/src/locales/messages.pl.xlf @@ -7,31 +7,31 @@ kebab-case libs/common/src/lib/routes/routes.ts - 226 + 231 libs/common/src/lib/routes/routes.ts - 227 + 232 libs/common/src/lib/routes/routes.ts - 232 + 237 libs/common/src/lib/routes/routes.ts - 240 + 245 libs/common/src/lib/routes/routes.ts - 248 + 253 libs/common/src/lib/routes/routes.ts - 256 + 261 libs/common/src/lib/routes/routes.ts - 264 + 269 @@ -40,19 +40,19 @@ kebab-case libs/common/src/lib/routes/routes.ts - 284 + 289 libs/common/src/lib/routes/routes.ts - 285 + 290 libs/common/src/lib/routes/routes.ts - 289 + 294 libs/common/src/lib/routes/routes.ts - 295 + 300 @@ -61,11 +61,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 304 + 309 libs/common/src/lib/routes/routes.ts - 305 + 310 @@ -74,11 +74,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 238 + 243 libs/common/src/lib/routes/routes.ts - 241 + 246 @@ -87,11 +87,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 309 + 314 libs/common/src/lib/routes/routes.ts - 310 + 315 @@ -100,11 +100,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 319 + 324 libs/common/src/lib/routes/routes.ts - 320 + 325 @@ -113,11 +113,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 254 + 259 libs/common/src/lib/routes/routes.ts - 257 + 262 @@ -126,11 +126,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 329 + 334 libs/common/src/lib/routes/routes.ts - 330 + 335 @@ -139,31 +139,31 @@ kebab-case libs/common/src/lib/routes/routes.ts - 334 + 339 libs/common/src/lib/routes/routes.ts - 335 + 340 libs/common/src/lib/routes/routes.ts - 340 + 345 libs/common/src/lib/routes/routes.ts - 348 + 353 libs/common/src/lib/routes/routes.ts - 356 + 361 libs/common/src/lib/routes/routes.ts - 364 + 369 libs/common/src/lib/routes/routes.ts - 372 + 377 @@ -278,8 +278,8 @@ Details Szczegóły - apps/client/src/app/components/access-table/access-table.component.html - 49 + apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html + 137 @@ -287,7 +287,7 @@ Cofnij apps/client/src/app/components/access-table/access-table.component.html - 138 + 100 @@ -311,7 +311,7 @@ Czy na pewno chcesz cofnąć przyznany dostęp? apps/client/src/app/components/access-table/access-table.component.ts - 177 + 153 @@ -353,6 +353,10 @@ apps/client/src/app/pages/accounts/transfer-balance/transfer-balance-dialog.html 7 + + libs/common/src/lib/routes/routes.ts + 99 + libs/ui/src/lib/accounts-table/accounts-table.component.html 10 @@ -527,7 +531,7 @@ Edytuj apps/client/src/app/components/access-table/access-table.component.html - 104 + 74 apps/client/src/app/components/admin-market-data/admin-market-data.html @@ -555,7 +559,7 @@ Usuń apps/client/src/app/components/access-table/access-table.component.html - 135 + 97 apps/client/src/app/components/admin-market-data/admin-market-data.html @@ -607,7 +611,7 @@ Czy na pewno chcesz usunąć to konto? libs/ui/src/lib/accounts-table/accounts-table.component.ts - 183 + 185 @@ -635,7 +639,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 495 + 496 @@ -743,7 +747,7 @@ Splits apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 518 + 519 @@ -775,7 +779,7 @@ Find an account... libs/ui/src/lib/assistant/assistant.component.ts - 448 + 450 @@ -783,11 +787,11 @@ Data apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 527 + 528 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 566 + 567 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -871,7 +875,7 @@ An error occurred while converting the data source to . apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 526 + 528 @@ -927,7 +931,7 @@ Data Gathering Frequency apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 476 + 477 @@ -963,7 +967,7 @@ Apply current market price apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html - 220 + 221 @@ -1123,7 +1127,7 @@ Update Activity libs/common/src/lib/routes/routes.ts - 176 + 181 @@ -1155,7 +1159,7 @@ Konfiguracja Scrapera apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 634 + 635 @@ -1171,7 +1175,7 @@ apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html - 251 + 252 libs/ui/src/lib/accounts-table/accounts-table.component.html @@ -1214,14 +1218,6 @@ 18 - - Copy identifier to clipboard - Copy identifier to clipboard - - apps/client/src/app/components/access-table/access-table.component.html - 120 - - Name, symbol or ISIN Nazwa, symbol lub ISIN @@ -1327,7 +1323,7 @@ Update Account libs/common/src/lib/routes/routes.ts - 101 + 106 @@ -1367,7 +1363,7 @@ Dodaj apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 621 + 622 apps/client/src/app/components/admin-overview/admin-overview.html @@ -1435,7 +1431,7 @@ Profil zasobu został zapisany apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 752 + 754 @@ -1467,7 +1463,7 @@ The data of this asset profile is moved to () and this asset profile is deleted. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 959 + 961 @@ -1483,7 +1479,7 @@ Obecny rok apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 265 + 267 @@ -1623,11 +1619,11 @@ Could not validate form apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 728 + 730 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 731 + 733 @@ -1667,7 +1663,7 @@ libs/common/src/lib/routes/routes.ts - 202 + 207 @@ -1719,7 +1715,7 @@ libs/common/src/lib/routes/routes.ts - 116 + 121 @@ -1751,7 +1747,7 @@ Split Ratio apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 532 + 533 @@ -1759,7 +1755,7 @@ Zagrożenie apps/client/src/app/components/markets/markets.component.ts - 57 + 61 libs/ui/src/lib/i18n.ts @@ -1771,7 +1767,7 @@ Zachłanność apps/client/src/app/components/markets/markets.component.ts - 58 + 62 libs/ui/src/lib/i18n.ts @@ -1791,7 +1787,7 @@ An error occurred while merging this asset profile into (). apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 942 + 944 @@ -1887,7 +1883,7 @@ Obecny tydzień apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 257 + 259 @@ -2363,7 +2359,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 366 + 368 @@ -2371,11 +2367,11 @@ Liczony od początku roku (year-to-date) apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 265 + 267 libs/ui/src/lib/assistant/assistant.component.ts - 378 + 380 @@ -2383,11 +2379,11 @@ 1 rok apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 269 + 271 libs/ui/src/lib/assistant/assistant.component.ts - 388 + 390 @@ -2403,11 +2399,11 @@ 5 lat apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 273 + 275 libs/ui/src/lib/assistant/assistant.component.ts - 410 + 412 @@ -2423,19 +2419,11 @@ Maksimum apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 277 + 279 libs/ui/src/lib/assistant/assistant.component.ts - 416 - - - - Identifier has been copied to the clipboard - Identifier has been copied to the clipboard - - apps/client/src/app/components/access-table/access-table.component.ts - 149 + 418 @@ -2747,7 +2735,7 @@ ID Użytkownika apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html - 116 + 113 apps/client/src/app/components/user-account-settings/user-account-settings.html @@ -2835,7 +2823,7 @@ libs/common/src/lib/routes/routes.ts - 270 + 275 @@ -2851,7 +2839,7 @@ libs/common/src/lib/routes/routes.ts - 235 + 240 @@ -2867,7 +2855,7 @@ libs/common/src/lib/routes/routes.ts - 243 + 248 @@ -2883,7 +2871,7 @@ libs/common/src/lib/routes/routes.ts - 259 + 264 @@ -2955,19 +2943,19 @@ libs/common/src/lib/routes/routes.ts - 104 + 109 libs/ui/src/lib/assistant/assistant.html - 84 + 85 Oops, cash balance transfer has failed. Ups, transfer salda nie powiódł się. - apps/client/src/app/pages/accounts/accounts-page.component.ts - 199 + apps/client/src/app/pages/accounts/account-dialog-host/account-dialog-host.component.ts + 365 @@ -2991,7 +2979,7 @@ ID konta apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 108 + 109 @@ -3115,11 +3103,11 @@ libs/common/src/lib/routes/routes.ts - 143 + 148 libs/common/src/lib/routes/routes.ts - 220 + 225 @@ -3231,7 +3219,7 @@ libs/common/src/lib/routes/routes.ts - 275 + 280 @@ -3239,11 +3227,11 @@ Nie udało się przetworzyć konfiguracji scrapera apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 676 + 678 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 679 + 681 @@ -3295,7 +3283,7 @@ libs/common/src/lib/routes/routes.ts - 301 + 306 @@ -3323,7 +3311,7 @@ libs/common/src/lib/routes/routes.ts - 306 + 311 @@ -3503,15 +3491,15 @@ libs/common/src/lib/routes/routes.ts - 125 + 130 libs/common/src/lib/routes/routes.ts - 217 + 222 libs/ui/src/lib/assistant/assistant.html - 110 + 111 @@ -3519,7 +3507,7 @@ This action cannot be undone. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 961 + 963 @@ -3539,7 +3527,7 @@ libs/common/src/lib/routes/routes.ts - 135 + 140 @@ -3571,15 +3559,15 @@ libs/common/src/lib/routes/routes.ts - 130 + 135 libs/common/src/lib/routes/routes.ts - 311 + 316 libs/common/src/lib/routes/routes.ts - 359 + 364 @@ -4071,7 +4059,7 @@ Add Activity libs/common/src/lib/routes/routes.ts - 169 + 174 @@ -4119,7 +4107,7 @@ Do you really want to merge this asset profile into it? apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 965 + 967 @@ -4263,7 +4251,7 @@ libs/common/src/lib/routes/routes.ts - 179 + 184 libs/ui/src/lib/accounts-table/accounts-table.component.html @@ -4487,7 +4475,7 @@ Shares After apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 590 + 591 @@ -4515,7 +4503,7 @@ Do you really want to convert this asset profile to ()? apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 809 + 811 @@ -4531,7 +4519,7 @@ libs/common/src/lib/routes/routes.ts - 184 + 189 @@ -4547,7 +4535,7 @@ Wg. platformy apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 39 + 41 @@ -4555,7 +4543,7 @@ Wg. waluty apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 58 + 60 @@ -4563,7 +4551,7 @@ Wg. klasy aktywów apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 80 + 82 @@ -4571,7 +4559,7 @@ Wg. inwestycji apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 102 + 104 @@ -4579,7 +4567,7 @@ Wg. sektora apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 125 + 127 @@ -4587,7 +4575,7 @@ Wg. kontynentu apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 148 + 150 @@ -4595,7 +4583,7 @@ Wg. rynku apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 170 + 172 @@ -4603,7 +4591,7 @@ Regiony apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 193 + 195 apps/client/src/app/pages/public/public-page.html @@ -4631,7 +4619,7 @@ Rynki Rozwinięte apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 216 + 218 apps/client/src/app/pages/public/public-page.html @@ -4651,7 +4639,7 @@ Rynki Wschodzące apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 226 + 228 apps/client/src/app/pages/public/public-page.html @@ -4663,7 +4651,7 @@ Inne Rynki apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 236 + 238 apps/client/src/app/pages/public/public-page.html @@ -4675,7 +4663,7 @@ Wg. kont apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 283 + 285 @@ -4683,7 +4671,7 @@ Wg. Dostawcy ETF apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 303 + 305 @@ -4691,7 +4679,7 @@ Wg. kraju apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 261 + 263 @@ -4703,7 +4691,7 @@ libs/common/src/lib/routes/routes.ts - 189 + 194 @@ -4871,7 +4859,7 @@ libs/common/src/lib/routes/routes.ts - 321 + 326 @@ -4895,7 +4883,7 @@ Do you really want to remove this received access? apps/client/src/app/components/access-table/access-table.component.ts - 176 + 152 @@ -4919,7 +4907,7 @@ Hourly apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 249 + 251 @@ -5075,11 +5063,11 @@ Could not save asset profile apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 762 + 764 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 765 + 767 @@ -5131,7 +5119,7 @@ libs/common/src/lib/routes/routes.ts - 331 + 336 @@ -5163,7 +5151,7 @@ libs/common/src/lib/routes/routes.ts - 379 + 384 @@ -5172,11 +5160,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 370 + 375 libs/common/src/lib/routes/routes.ts - 374 + 379 @@ -5500,7 +5488,7 @@ libs/common/src/lib/routes/routes.ts - 382 + 387 @@ -5644,7 +5632,7 @@ libs/ui/src/lib/assistant/assistant.html - 140 + 141 @@ -5724,7 +5712,7 @@ This asset profile cannot be merged into (). apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 920 + 922 @@ -5804,7 +5792,7 @@ Konto apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.component.ts - 102 + 109 libs/common/src/lib/routes/routes.ts @@ -5848,7 +5836,7 @@ apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html - 266 + 268 libs/ui/src/lib/i18n.ts @@ -5880,7 +5868,7 @@ apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html - 285 + 287 libs/ui/src/lib/i18n.ts @@ -5996,7 +5984,7 @@ libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 460 + 462 @@ -6148,7 +6136,7 @@ Opłata apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html - 238 + 239 libs/ui/src/lib/activities-table/activities-table.component.html @@ -6364,7 +6352,7 @@ Brak danych apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 247 + 249 apps/client/src/app/pages/public/public-page.html @@ -6376,11 +6364,11 @@ libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 462 + 464 libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 476 + 478 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -6392,7 +6380,7 @@ Portfolio Filters apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html - 128 + 125 @@ -6452,7 +6440,7 @@ Obecna cena rynkowa wynosi apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 854 + 856 @@ -6468,7 +6456,7 @@ Zakres Dat libs/ui/src/lib/assistant/assistant.html - 170 + 171 @@ -6496,7 +6484,7 @@ Ups! Nie udało się przyznać dostępu. apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.component.ts - 256 + 311 @@ -6592,7 +6580,7 @@ Dotychczasowy tydzień libs/ui/src/lib/assistant/assistant.component.ts - 370 + 372 @@ -6600,11 +6588,11 @@ WTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 257 + 259 libs/ui/src/lib/assistant/assistant.component.ts - 370 + 372 @@ -6612,7 +6600,7 @@ Od początku miesiąca libs/ui/src/lib/assistant/assistant.component.ts - 374 + 376 @@ -6620,11 +6608,11 @@ MTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 261 + 263 libs/ui/src/lib/assistant/assistant.component.ts - 374 + 376 @@ -6640,7 +6628,7 @@ Od początku roku libs/ui/src/lib/assistant/assistant.component.ts - 378 + 380 @@ -6672,7 +6660,7 @@ Resetuj Filtry libs/ui/src/lib/assistant/assistant.html - 204 + 205 @@ -6680,7 +6668,7 @@ rok apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 269 + 271 apps/client/src/app/pages/resources/personal-finance-tools/product-page.html @@ -6692,7 +6680,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 388 + 390 @@ -6700,11 +6688,11 @@ lata apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 273 + 275 libs/ui/src/lib/assistant/assistant.component.ts - 410 + 412 @@ -6712,7 +6700,7 @@ Zastosuj Filtry libs/ui/src/lib/assistant/assistant.html - 217 + 218 @@ -6732,7 +6720,7 @@ Find a holding... libs/ui/src/lib/assistant/assistant.component.ts - 449 + 451 @@ -6752,7 +6740,7 @@ libs/common/src/lib/routes/routes.ts - 290 + 295 @@ -6764,7 +6752,7 @@ libs/common/src/lib/routes/routes.ts - 298 + 303 @@ -6773,11 +6761,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 293 + 298 libs/common/src/lib/routes/routes.ts - 296 + 301 @@ -6785,7 +6773,7 @@ Daily apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 245 + 247 @@ -6809,7 +6797,7 @@ Aktywne apps/client/src/app/components/home-holdings/home-holdings.component.ts - 73 + 77 @@ -6817,7 +6805,7 @@ Zamknięte apps/client/src/app/components/home-holdings/home-holdings.component.ts - 74 + 78 @@ -6893,7 +6881,7 @@ Internacjonalizacja libs/common/src/lib/routes/routes.ts - 149 + 154 @@ -6909,7 +6897,7 @@ Jump to a page... libs/ui/src/lib/assistant/assistant.component.ts - 450 + 452 @@ -6933,7 +6921,7 @@ Wg. Holdingu ETF apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 328 + 330 @@ -6941,7 +6929,7 @@ Przybliżenie oparte na najwyższych aktywach każdego funduszu ETF apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 335 + 337 @@ -6957,7 +6945,7 @@ Clone Activity libs/common/src/lib/routes/routes.ts - 164 + 169 @@ -7005,7 +6993,7 @@ Tabela apps/client/src/app/components/home-holdings/home-holdings.component.ts - 62 + 66 @@ -7013,7 +7001,7 @@ Wykres apps/client/src/app/components/home-holdings/home-holdings.component.ts - 67 + 71 @@ -7241,15 +7229,15 @@ Błąd apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 844 + 846 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 921 + 923 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 943 + 945 @@ -7273,7 +7261,7 @@ Ups! Nie udało się zaktualizować dostępu. apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.component.ts - 354 + 409 @@ -7313,11 +7301,11 @@ apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html - 143 + 152 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 117 + 118 apps/client/src/app/pages/accounts/transfer-balance/transfer-balance-dialog.html @@ -7325,7 +7313,7 @@ apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html - 321 + 323 apps/client/src/app/pages/register/user-account-registration-dialog/user-account-registration-dialog.html @@ -7369,7 +7357,7 @@ apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html - 145 + 154 apps/client/src/app/components/user-account-membership/user-account-membership.component.ts @@ -7381,11 +7369,11 @@ apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 119 + 120 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html - 323 + 325 libs/ui/src/lib/i18n.ts @@ -7413,7 +7401,7 @@ Kopiuj link do schowka apps/client/src/app/components/access-table/access-table.component.html - 112 + 82 @@ -7633,7 +7621,7 @@ Shares Before apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 603 + 604 @@ -7693,7 +7681,7 @@ Ups! Nie znaleziono żadnych aktywów. libs/ui/src/lib/symbol-autocomplete/symbol-autocomplete.component.html - 43 + 44 @@ -7749,7 +7737,7 @@ libs/common/src/lib/routes/routes.ts - 343 + 348 @@ -7765,7 +7753,7 @@ libs/common/src/lib/routes/routes.ts - 351 + 356 @@ -7774,11 +7762,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 346 + 351 libs/common/src/lib/routes/routes.ts - 349 + 354 @@ -7787,11 +7775,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 338 + 343 libs/common/src/lib/routes/routes.ts - 341 + 346 @@ -7831,7 +7819,7 @@ Czy na pewno chcesz usunąć klucz API?? apps/client/src/app/components/admin-settings/admin-settings.component.ts - 148 + 151 @@ -7959,15 +7947,15 @@ apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html - 158 + 167 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 128 + 129 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html - 332 + 334 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html @@ -8015,7 +8003,7 @@ Wprowadź swój klucz API Ghostfolio. apps/client/src/app/components/admin-settings/admin-settings.component.ts - 167 + 170 @@ -8039,7 +8027,7 @@ Link został skopiowany do schowka apps/client/src/app/components/access-table/access-table.component.ts - 161 + 137 @@ -8047,7 +8035,7 @@ Leniwy apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 294 + 296 @@ -8055,7 +8043,7 @@ Natychmiastowy apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 298 + 300 @@ -8063,7 +8051,7 @@ Domyślna cena rynkowa apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 644 + 645 @@ -8079,7 +8067,7 @@ Do you really want to convert the data source to ? apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 529 + 531 @@ -8095,7 +8083,7 @@ Nagłówki żądań HTTP apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 657 + 658 @@ -8103,7 +8091,7 @@ koniec dnia apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 294 + 296 @@ -8111,7 +8099,7 @@ w czasie rzeczywistym apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 298 + 300 @@ -8239,7 +8227,7 @@ Additional requests are granted while you are setting up your instance apps/client/src/app/components/admin-settings/admin-settings.component.ts - 87 + 88 @@ -8308,11 +8296,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 262 + 267 libs/common/src/lib/routes/routes.ts - 265 + 270 @@ -8324,7 +8312,7 @@ libs/common/src/lib/routes/routes.ts - 267 + 272 @@ -8340,7 +8328,7 @@ () jest już w użyciu. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 963 + 965 @@ -8348,7 +8336,7 @@ Wystąpił błąd podczas aktualizacji do (). apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 807 + 809 @@ -8436,7 +8424,7 @@ libs/common/src/lib/routes/routes.ts - 140 + 145 @@ -8481,11 +8469,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 230 + 235 libs/common/src/lib/routes/routes.ts - 233 + 238 @@ -8605,7 +8593,7 @@ Szybkie linki libs/ui/src/lib/assistant/assistant.html - 58 + 59 @@ -8621,7 +8609,7 @@ libs/common/src/lib/routes/routes.ts - 281 + 286 @@ -8629,7 +8617,7 @@ Alternatywa Open Source dla libs/common/src/lib/routes/routes.ts - 376 + 381 @@ -8662,15 +8650,15 @@ kebab-case libs/common/src/lib/routes/routes.ts - 362 + 367 libs/common/src/lib/routes/routes.ts - 365 + 370 libs/common/src/lib/routes/routes.ts - 373 + 378 @@ -8679,11 +8667,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 354 + 359 libs/common/src/lib/routes/routes.ts - 357 + 362 @@ -8763,7 +8751,7 @@ Bieżący miesiąc apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 261 + 263 @@ -8908,11 +8896,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 386 + 391 libs/common/src/lib/routes/routes.ts - 387 + 392 @@ -8944,7 +8932,7 @@ Akcje apps/client/src/app/components/markets/markets.component.ts - 53 + 57 apps/client/src/app/pages/features/features-page.html @@ -8956,7 +8944,7 @@ Kryptowaluty apps/client/src/app/components/markets/markets.component.ts - 54 + 58 apps/client/src/app/pages/features/features-page.html @@ -9084,7 +9072,7 @@ Nie znaleziono wyników... libs/ui/src/lib/assistant/assistant.html - 51 + 52 diff --git a/apps/client/src/locales/messages.pt.xlf b/apps/client/src/locales/messages.pt.xlf index d45525e08..c788079e3 100644 --- a/apps/client/src/locales/messages.pt.xlf +++ b/apps/client/src/locales/messages.pt.xlf @@ -69,8 +69,8 @@ Details Detalhes - apps/client/src/app/components/access-table/access-table.component.html - 49 + apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html + 137 @@ -78,7 +78,7 @@ Revogar apps/client/src/app/components/access-table/access-table.component.html - 138 + 100 @@ -102,7 +102,7 @@ Pretende realmente revogar este acesso concedido? apps/client/src/app/components/access-table/access-table.component.ts - 177 + 153 @@ -306,7 +306,7 @@ Editar apps/client/src/app/components/access-table/access-table.component.html - 104 + 74 apps/client/src/app/components/admin-market-data/admin-market-data.html @@ -334,7 +334,7 @@ Eliminar apps/client/src/app/components/access-table/access-table.component.html - 135 + 97 apps/client/src/app/components/admin-market-data/admin-market-data.html @@ -386,7 +386,7 @@ Pretende realmente eliminar esta conta? libs/ui/src/lib/accounts-table/accounts-table.component.ts - 183 + 185 @@ -498,7 +498,7 @@ libs/ui/src/lib/assistant/assistant.html - 140 + 141 @@ -510,7 +510,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 495 + 496 @@ -526,7 +526,7 @@ Splits apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 518 + 519 @@ -558,7 +558,7 @@ Find an account... libs/ui/src/lib/assistant/assistant.component.ts - 448 + 450 @@ -566,11 +566,11 @@ Data apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 527 + 528 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 566 + 567 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -674,7 +674,7 @@ Apply current market price apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html - 220 + 221 @@ -774,7 +774,7 @@ Update Account libs/common/src/lib/routes/routes.ts - 101 + 106 @@ -790,7 +790,7 @@ Adicionar apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 621 + 622 apps/client/src/app/components/admin-overview/admin-overview.html @@ -874,11 +874,11 @@ Could not validate form apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 728 + 730 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 731 + 733 @@ -910,7 +910,7 @@ libs/common/src/lib/routes/routes.ts - 202 + 207 @@ -962,7 +962,7 @@ libs/common/src/lib/routes/routes.ts - 116 + 121 @@ -994,7 +994,7 @@ Split Ratio apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 532 + 533 @@ -1002,7 +1002,7 @@ Medo apps/client/src/app/components/markets/markets.component.ts - 57 + 61 libs/ui/src/lib/i18n.ts @@ -1014,7 +1014,7 @@ Ganância apps/client/src/app/components/markets/markets.component.ts - 58 + 62 libs/ui/src/lib/i18n.ts @@ -1034,7 +1034,7 @@ An error occurred while merging this asset profile into (). apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 942 + 944 @@ -1450,7 +1450,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 366 + 368 @@ -1458,11 +1458,11 @@ AATD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 265 + 267 libs/ui/src/lib/assistant/assistant.component.ts - 378 + 380 @@ -1470,11 +1470,11 @@ 1A apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 269 + 271 libs/ui/src/lib/assistant/assistant.component.ts - 388 + 390 @@ -1490,11 +1490,11 @@ 5A apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 273 + 275 libs/ui/src/lib/assistant/assistant.component.ts - 410 + 412 @@ -1510,19 +1510,11 @@ Máx apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 277 + 279 libs/ui/src/lib/assistant/assistant.component.ts - 416 - - - - Identifier has been copied to the clipboard - Identifier has been copied to the clipboard - - apps/client/src/app/components/access-table/access-table.component.ts - 149 + 418 @@ -1594,7 +1586,7 @@ libs/common/src/lib/routes/routes.ts - 270 + 275 @@ -1610,7 +1602,7 @@ libs/common/src/lib/routes/routes.ts - 259 + 264 @@ -1862,7 +1854,7 @@ ID do Utilizador apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html - 116 + 113 apps/client/src/app/components/user-account-settings/user-account-settings.html @@ -1954,11 +1946,11 @@ libs/common/src/lib/routes/routes.ts - 104 + 109 libs/ui/src/lib/assistant/assistant.html - 84 + 85 @@ -1982,7 +1974,7 @@ ID da Conta apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 108 + 109 @@ -2118,7 +2110,7 @@ libs/common/src/lib/routes/routes.ts - 275 + 280 @@ -2162,7 +2154,7 @@ libs/common/src/lib/routes/routes.ts - 301 + 306 @@ -2190,7 +2182,7 @@ libs/common/src/lib/routes/routes.ts - 306 + 311 @@ -2226,11 +2218,11 @@ libs/common/src/lib/routes/routes.ts - 143 + 148 libs/common/src/lib/routes/routes.ts - 220 + 225 @@ -2262,15 +2254,15 @@ libs/common/src/lib/routes/routes.ts - 130 + 135 libs/common/src/lib/routes/routes.ts - 311 + 316 libs/common/src/lib/routes/routes.ts - 359 + 364 @@ -2318,7 +2310,7 @@ libs/common/src/lib/routes/routes.ts - 179 + 184 libs/ui/src/lib/accounts-table/accounts-table.component.html @@ -2338,7 +2330,7 @@ Current week apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 257 + 259 @@ -2373,14 +2365,6 @@ 5 - - Copy identifier to clipboard - Copy identifier to clipboard - - apps/client/src/app/components/access-table/access-table.component.html - 120 - - Name, symbol or ISIN Nome, símbolo or ISIN @@ -2434,7 +2418,7 @@ apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html - 251 + 252 libs/ui/src/lib/accounts-table/accounts-table.component.html @@ -2502,7 +2486,7 @@ Do you really want to convert this asset profile to ()? apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 809 + 811 @@ -2518,7 +2502,7 @@ libs/common/src/lib/routes/routes.ts - 184 + 189 @@ -2534,7 +2518,7 @@ Por Conta apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 283 + 285 @@ -2542,7 +2526,7 @@ Por Moeda apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 58 + 60 @@ -2550,7 +2534,7 @@ Por Classe de Ativo apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 80 + 82 @@ -2558,7 +2542,7 @@ Por Posse apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 102 + 104 @@ -2566,7 +2550,7 @@ Por Setor apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 125 + 127 @@ -2574,7 +2558,7 @@ Por Continente apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 148 + 150 @@ -2582,7 +2566,7 @@ Por País apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 261 + 263 @@ -2590,7 +2574,7 @@ Regiões apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 193 + 195 apps/client/src/app/pages/public/public-page.html @@ -2618,7 +2602,7 @@ Mercados Desenvoldidos apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 216 + 218 apps/client/src/app/pages/public/public-page.html @@ -2638,7 +2622,7 @@ Mercados Emergentes apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 226 + 228 apps/client/src/app/pages/public/public-page.html @@ -2650,7 +2634,7 @@ Outros Mercados apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 236 + 238 apps/client/src/app/pages/public/public-page.html @@ -2666,7 +2650,7 @@ libs/common/src/lib/routes/routes.ts - 189 + 194 @@ -2746,15 +2730,15 @@ libs/common/src/lib/routes/routes.ts - 125 + 130 libs/common/src/lib/routes/routes.ts - 217 + 222 libs/ui/src/lib/assistant/assistant.html - 110 + 111 @@ -2786,7 +2770,7 @@ libs/common/src/lib/routes/routes.ts - 321 + 326 @@ -2874,7 +2858,7 @@ libs/common/src/lib/routes/routes.ts - 331 + 336 @@ -2938,7 +2922,7 @@ libs/common/src/lib/routes/routes.ts - 382 + 387 @@ -3126,7 +3110,7 @@ Conta apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.component.ts - 102 + 109 libs/common/src/lib/routes/routes.ts @@ -3162,7 +3146,7 @@ apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html - 266 + 268 libs/ui/src/lib/i18n.ts @@ -3210,7 +3194,7 @@ libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 460 + 462 @@ -3394,7 +3378,7 @@ Sem dados disponíveis apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 247 + 249 apps/client/src/app/pages/public/public-page.html @@ -3406,11 +3390,11 @@ libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 462 + 464 libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 476 + 478 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -3430,7 +3414,7 @@ Data Gathering Frequency apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 476 + 477 @@ -3482,7 +3466,7 @@ This action cannot be undone. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 961 + 963 @@ -3502,7 +3486,7 @@ libs/common/src/lib/routes/routes.ts - 135 + 140 @@ -3598,7 +3582,7 @@ apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html - 285 + 287 libs/ui/src/lib/i18n.ts @@ -3890,7 +3874,7 @@ Hourly apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 249 + 251 @@ -4002,11 +3986,11 @@ Could not save asset profile apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 762 + 764 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 765 + 767 @@ -4122,7 +4106,7 @@ This asset profile cannot be merged into (). apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 920 + 922 @@ -4174,7 +4158,7 @@ Do you really want to remove this received access? apps/client/src/app/components/access-table/access-table.component.ts - 176 + 152 @@ -4190,7 +4174,7 @@ Por Prestador de ETF apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 303 + 305 @@ -4214,7 +4198,7 @@ The data of this asset profile is moved to () and this asset profile is deleted. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 959 + 961 @@ -4230,7 +4214,7 @@ Current year apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 265 + 267 @@ -4282,7 +4266,7 @@ Asset profile has been saved apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 752 + 754 @@ -4314,7 +4298,7 @@ Por Plataforma apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 39 + 41 @@ -4410,7 +4394,7 @@ Shares After apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 590 + 591 @@ -4514,7 +4498,7 @@ libs/common/src/lib/routes/routes.ts - 235 + 240 @@ -4530,7 +4514,7 @@ libs/common/src/lib/routes/routes.ts - 243 + 248 @@ -4650,7 +4634,7 @@ Update Activity libs/common/src/lib/routes/routes.ts - 176 + 181 @@ -4682,7 +4666,7 @@ Configuração do raspador apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 634 + 635 @@ -4702,7 +4686,7 @@ libs/common/src/lib/routes/routes.ts - 379 + 384 @@ -4974,7 +4958,7 @@ An error occurred while converting the data source to . apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 526 + 528 @@ -4998,7 +4982,7 @@ Por mercado apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 170 + 172 @@ -5246,11 +5230,11 @@ Could not parse scraper configuration apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 676 + 678 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 679 + 681 @@ -5550,7 +5534,7 @@ Add Activity libs/common/src/lib/routes/routes.ts - 169 + 174 @@ -5599,19 +5583,19 @@ kebab-case libs/common/src/lib/routes/routes.ts - 284 + 289 libs/common/src/lib/routes/routes.ts - 285 + 290 libs/common/src/lib/routes/routes.ts - 289 + 294 libs/common/src/lib/routes/routes.ts - 295 + 300 @@ -5620,11 +5604,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 304 + 309 libs/common/src/lib/routes/routes.ts - 305 + 310 @@ -5633,31 +5617,31 @@ kebab-case libs/common/src/lib/routes/routes.ts - 226 + 231 libs/common/src/lib/routes/routes.ts - 227 + 232 libs/common/src/lib/routes/routes.ts - 232 + 237 libs/common/src/lib/routes/routes.ts - 240 + 245 libs/common/src/lib/routes/routes.ts - 248 + 253 libs/common/src/lib/routes/routes.ts - 256 + 261 libs/common/src/lib/routes/routes.ts - 264 + 269 @@ -5666,11 +5650,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 254 + 259 libs/common/src/lib/routes/routes.ts - 257 + 262 @@ -5679,11 +5663,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 238 + 243 libs/common/src/lib/routes/routes.ts - 241 + 246 @@ -5692,11 +5676,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 309 + 314 libs/common/src/lib/routes/routes.ts - 310 + 315 @@ -5705,11 +5689,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 319 + 324 libs/common/src/lib/routes/routes.ts - 320 + 325 @@ -5718,11 +5702,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 329 + 334 libs/common/src/lib/routes/routes.ts - 330 + 335 @@ -5731,31 +5715,31 @@ kebab-case libs/common/src/lib/routes/routes.ts - 334 + 339 libs/common/src/lib/routes/routes.ts - 335 + 340 libs/common/src/lib/routes/routes.ts - 340 + 345 libs/common/src/lib/routes/routes.ts - 348 + 353 libs/common/src/lib/routes/routes.ts - 356 + 361 libs/common/src/lib/routes/routes.ts - 364 + 369 libs/common/src/lib/routes/routes.ts - 372 + 377 @@ -5828,11 +5812,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 370 + 375 libs/common/src/lib/routes/routes.ts - 374 + 379 @@ -5900,7 +5884,7 @@ Do you really want to merge this asset profile into it? apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 965 + 967 @@ -5984,7 +5968,7 @@ Taxa apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html - 238 + 239 libs/ui/src/lib/activities-table/activities-table.component.html @@ -6042,6 +6026,10 @@ apps/client/src/app/pages/accounts/transfer-balance/transfer-balance-dialog.html 7 + + libs/common/src/lib/routes/routes.ts + 99 + libs/ui/src/lib/accounts-table/accounts-table.component.html 10 @@ -6335,8 +6323,8 @@ Oops, cash balance transfer has failed. Ops, a transferência do saldo em dinheiro falhou. - apps/client/src/app/pages/accounts/accounts-page.component.ts - 199 + apps/client/src/app/pages/accounts/account-dialog-host/account-dialog-host.component.ts + 365 @@ -6392,7 +6380,7 @@ Portfolio Filters apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html - 128 + 125 @@ -6452,7 +6440,7 @@ O preço de mercado atual é apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 854 + 856 @@ -6468,7 +6456,7 @@ Período libs/ui/src/lib/assistant/assistant.html - 170 + 171 @@ -6496,7 +6484,7 @@ Ops! Não foi possível conceder acesso. apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.component.ts - 256 + 311 @@ -6592,7 +6580,7 @@ Semana até agora libs/ui/src/lib/assistant/assistant.component.ts - 370 + 372 @@ -6600,11 +6588,11 @@ WTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 257 + 259 libs/ui/src/lib/assistant/assistant.component.ts - 370 + 372 @@ -6612,7 +6600,7 @@ Do mês até a data libs/ui/src/lib/assistant/assistant.component.ts - 374 + 376 @@ -6620,11 +6608,11 @@ MTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 261 + 263 libs/ui/src/lib/assistant/assistant.component.ts - 374 + 376 @@ -6640,7 +6628,7 @@ No acumulado do ano libs/ui/src/lib/assistant/assistant.component.ts - 378 + 380 @@ -6672,7 +6660,7 @@ Redefinir filtros libs/ui/src/lib/assistant/assistant.html - 204 + 205 @@ -6680,7 +6668,7 @@ ano apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 269 + 271 apps/client/src/app/pages/resources/personal-finance-tools/product-page.html @@ -6692,7 +6680,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 388 + 390 @@ -6700,11 +6688,11 @@ anos apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 273 + 275 libs/ui/src/lib/assistant/assistant.component.ts - 410 + 412 @@ -6712,7 +6700,7 @@ Aplicar filtros libs/ui/src/lib/assistant/assistant.html - 217 + 218 @@ -6732,7 +6720,7 @@ Find a holding... libs/ui/src/lib/assistant/assistant.component.ts - 449 + 451 @@ -6752,7 +6740,7 @@ libs/common/src/lib/routes/routes.ts - 290 + 295 @@ -6764,7 +6752,7 @@ libs/common/src/lib/routes/routes.ts - 298 + 303 @@ -6773,11 +6761,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 293 + 298 libs/common/src/lib/routes/routes.ts - 296 + 301 @@ -6785,7 +6773,7 @@ Daily apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 245 + 247 @@ -6809,7 +6797,7 @@ Ativo apps/client/src/app/components/home-holdings/home-holdings.component.ts - 73 + 77 @@ -6817,7 +6805,7 @@ Fechado apps/client/src/app/components/home-holdings/home-holdings.component.ts - 74 + 78 @@ -6893,7 +6881,7 @@ Internacionalização libs/common/src/lib/routes/routes.ts - 149 + 154 @@ -6909,7 +6897,7 @@ Jump to a page... libs/ui/src/lib/assistant/assistant.component.ts - 450 + 452 @@ -6933,7 +6921,7 @@ Por ETF Holding apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 328 + 330 @@ -6941,7 +6929,7 @@ Aproximação baseada nas principais participações de cada ETF apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 335 + 337 @@ -6957,7 +6945,7 @@ Clone Activity libs/common/src/lib/routes/routes.ts - 164 + 169 @@ -7005,7 +6993,7 @@ o índice apps/client/src/app/components/home-holdings/home-holdings.component.ts - 62 + 66 @@ -7013,7 +7001,7 @@ Gráfico apps/client/src/app/components/home-holdings/home-holdings.component.ts - 67 + 71 @@ -7241,15 +7229,15 @@ Erro apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 844 + 846 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 921 + 923 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 943 + 945 @@ -7273,7 +7261,7 @@ Oops! Could not update access. apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.component.ts - 354 + 409 @@ -7313,11 +7301,11 @@ apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html - 143 + 152 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 117 + 118 apps/client/src/app/pages/accounts/transfer-balance/transfer-balance-dialog.html @@ -7325,7 +7313,7 @@ apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html - 321 + 323 apps/client/src/app/pages/register/user-account-registration-dialog/user-account-registration-dialog.html @@ -7369,7 +7357,7 @@ apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html - 145 + 154 apps/client/src/app/components/user-account-membership/user-account-membership.component.ts @@ -7381,11 +7369,11 @@ apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 119 + 120 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html - 323 + 325 libs/ui/src/lib/i18n.ts @@ -7413,7 +7401,7 @@ Copiar link para a área de transferência apps/client/src/app/components/access-table/access-table.component.html - 112 + 82 @@ -7633,7 +7621,7 @@ Shares Before apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 603 + 604 @@ -7693,7 +7681,7 @@ Ops! Não foi possível encontrar nenhum ativo. libs/ui/src/lib/symbol-autocomplete/symbol-autocomplete.component.html - 43 + 44 @@ -7749,7 +7737,7 @@ libs/common/src/lib/routes/routes.ts - 343 + 348 @@ -7765,7 +7753,7 @@ libs/common/src/lib/routes/routes.ts - 351 + 356 @@ -7774,11 +7762,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 346 + 351 libs/common/src/lib/routes/routes.ts - 349 + 354 @@ -7787,11 +7775,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 338 + 343 libs/common/src/lib/routes/routes.ts - 341 + 346 @@ -7831,7 +7819,7 @@ Você realmente deseja excluir a chave de API? apps/client/src/app/components/admin-settings/admin-settings.component.ts - 148 + 151 @@ -7959,15 +7947,15 @@ apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html - 158 + 167 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 128 + 129 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html - 332 + 334 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html @@ -8015,7 +8003,7 @@ Please enter your Ghostfolio API key. apps/client/src/app/components/admin-settings/admin-settings.component.ts - 167 + 170 @@ -8039,7 +8027,7 @@ O link foi copiado para a área de transferência apps/client/src/app/components/access-table/access-table.component.ts - 161 + 137 @@ -8047,7 +8035,7 @@ Lazy apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 294 + 296 @@ -8055,7 +8043,7 @@ Instant apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 298 + 300 @@ -8063,7 +8051,7 @@ Preço de mercado padrão apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 644 + 645 @@ -8079,7 +8067,7 @@ Do you really want to convert the data source to ? apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 529 + 531 @@ -8095,7 +8083,7 @@ HTTP Request Headers apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 657 + 658 @@ -8103,7 +8091,7 @@ end of day apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 294 + 296 @@ -8111,7 +8099,7 @@ real-time apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 298 + 300 @@ -8239,7 +8227,7 @@ Additional requests are granted while you are setting up your instance apps/client/src/app/components/admin-settings/admin-settings.component.ts - 87 + 88 @@ -8308,11 +8296,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 262 + 267 libs/common/src/lib/routes/routes.ts - 265 + 270 @@ -8324,7 +8312,7 @@ libs/common/src/lib/routes/routes.ts - 267 + 272 @@ -8340,7 +8328,7 @@ () is already in use. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 963 + 965 @@ -8348,7 +8336,7 @@ An error occurred while updating to (). apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 807 + 809 @@ -8436,7 +8424,7 @@ libs/common/src/lib/routes/routes.ts - 140 + 145 @@ -8481,11 +8469,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 230 + 235 libs/common/src/lib/routes/routes.ts - 233 + 238 @@ -8605,7 +8593,7 @@ Links rápidos libs/ui/src/lib/assistant/assistant.html - 58 + 59 @@ -8621,7 +8609,7 @@ libs/common/src/lib/routes/routes.ts - 281 + 286 @@ -8629,7 +8617,7 @@ Alternativa de software livre ao libs/common/src/lib/routes/routes.ts - 376 + 381 @@ -8662,15 +8650,15 @@ kebab-case libs/common/src/lib/routes/routes.ts - 362 + 367 libs/common/src/lib/routes/routes.ts - 365 + 370 libs/common/src/lib/routes/routes.ts - 373 + 378 @@ -8679,11 +8667,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 354 + 359 libs/common/src/lib/routes/routes.ts - 357 + 362 @@ -8763,7 +8751,7 @@ Current month apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 261 + 263 @@ -8908,11 +8896,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 386 + 391 libs/common/src/lib/routes/routes.ts - 387 + 392 @@ -8944,7 +8932,7 @@ Stocks apps/client/src/app/components/markets/markets.component.ts - 53 + 57 apps/client/src/app/pages/features/features-page.html @@ -8956,7 +8944,7 @@ Criptomoedas apps/client/src/app/components/markets/markets.component.ts - 54 + 58 apps/client/src/app/pages/features/features-page.html @@ -9084,7 +9072,7 @@ Nenhum resultado encontrado... libs/ui/src/lib/assistant/assistant.html - 51 + 52 diff --git a/apps/client/src/locales/messages.tr.xlf b/apps/client/src/locales/messages.tr.xlf index 8dd15047c..bc811c626 100644 --- a/apps/client/src/locales/messages.tr.xlf +++ b/apps/client/src/locales/messages.tr.xlf @@ -7,31 +7,31 @@ kebab-case libs/common/src/lib/routes/routes.ts - 226 + 231 libs/common/src/lib/routes/routes.ts - 227 + 232 libs/common/src/lib/routes/routes.ts - 232 + 237 libs/common/src/lib/routes/routes.ts - 240 + 245 libs/common/src/lib/routes/routes.ts - 248 + 253 libs/common/src/lib/routes/routes.ts - 256 + 261 libs/common/src/lib/routes/routes.ts - 264 + 269 @@ -40,19 +40,19 @@ kebab-case libs/common/src/lib/routes/routes.ts - 284 + 289 libs/common/src/lib/routes/routes.ts - 285 + 290 libs/common/src/lib/routes/routes.ts - 289 + 294 libs/common/src/lib/routes/routes.ts - 295 + 300 @@ -61,11 +61,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 304 + 309 libs/common/src/lib/routes/routes.ts - 305 + 310 @@ -74,11 +74,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 238 + 243 libs/common/src/lib/routes/routes.ts - 241 + 246 @@ -87,11 +87,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 309 + 314 libs/common/src/lib/routes/routes.ts - 310 + 315 @@ -100,11 +100,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 319 + 324 libs/common/src/lib/routes/routes.ts - 320 + 325 @@ -113,11 +113,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 254 + 259 libs/common/src/lib/routes/routes.ts - 257 + 262 @@ -126,11 +126,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 329 + 334 libs/common/src/lib/routes/routes.ts - 330 + 335 @@ -139,31 +139,31 @@ kebab-case libs/common/src/lib/routes/routes.ts - 334 + 339 libs/common/src/lib/routes/routes.ts - 335 + 340 libs/common/src/lib/routes/routes.ts - 340 + 345 libs/common/src/lib/routes/routes.ts - 348 + 353 libs/common/src/lib/routes/routes.ts - 356 + 361 libs/common/src/lib/routes/routes.ts - 364 + 369 libs/common/src/lib/routes/routes.ts - 372 + 377 @@ -250,8 +250,8 @@ Details Ayrıntılar - apps/client/src/app/components/access-table/access-table.component.html - 49 + apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html + 137 @@ -259,7 +259,7 @@ Geri Al apps/client/src/app/components/access-table/access-table.component.html - 138 + 100 @@ -283,7 +283,7 @@ Bu erişim iznini geri almayı gerçekten istiyor musunuz? apps/client/src/app/components/access-table/access-table.component.ts - 177 + 153 @@ -487,7 +487,7 @@ Düzenle apps/client/src/app/components/access-table/access-table.component.html - 104 + 74 apps/client/src/app/components/admin-market-data/admin-market-data.html @@ -515,7 +515,7 @@ Sil apps/client/src/app/components/access-table/access-table.component.html - 135 + 97 apps/client/src/app/components/admin-market-data/admin-market-data.html @@ -567,7 +567,7 @@ Bu hesabı silmeyi gerçekten istiyor musunuz? libs/ui/src/lib/accounts-table/accounts-table.component.ts - 183 + 185 @@ -679,7 +679,7 @@ libs/ui/src/lib/assistant/assistant.html - 140 + 141 @@ -691,7 +691,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 495 + 496 @@ -707,7 +707,7 @@ Splits apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 518 + 519 @@ -739,7 +739,7 @@ Find an account... libs/ui/src/lib/assistant/assistant.component.ts - 448 + 450 @@ -747,11 +747,11 @@ Tarih apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 527 + 528 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 566 + 567 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -835,7 +835,7 @@ An error occurred while converting the data source to . apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 526 + 528 @@ -879,7 +879,7 @@ Data Gathering Frequency apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 476 + 477 @@ -915,7 +915,7 @@ Apply current market price apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html - 220 + 221 @@ -1043,7 +1043,7 @@ Update Activity libs/common/src/lib/routes/routes.ts - 176 + 181 @@ -1075,7 +1075,7 @@ Veri Toplayıcı Yapılandırması apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 634 + 635 @@ -1091,7 +1091,7 @@ apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html - 251 + 252 libs/ui/src/lib/accounts-table/accounts-table.component.html @@ -1110,14 +1110,6 @@ 7 - - Copy identifier to clipboard - Copy identifier to clipboard - - apps/client/src/app/components/access-table/access-table.component.html - 120 - - Name, symbol or ISIN Ad, sembol ya da ISIN @@ -1223,7 +1215,7 @@ Update Account libs/common/src/lib/routes/routes.ts - 101 + 106 @@ -1263,7 +1255,7 @@ Ekle apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 621 + 622 apps/client/src/app/components/admin-overview/admin-overview.html @@ -1331,7 +1323,7 @@ Asset profile has been saved apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 752 + 754 @@ -1363,7 +1355,7 @@ The data of this asset profile is moved to () and this asset profile is deleted. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 959 + 961 @@ -1379,7 +1371,7 @@ Current year apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 265 + 267 @@ -1471,11 +1463,11 @@ Could not validate form apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 728 + 730 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 731 + 733 @@ -1515,7 +1507,7 @@ libs/common/src/lib/routes/routes.ts - 202 + 207 @@ -1567,7 +1559,7 @@ libs/common/src/lib/routes/routes.ts - 116 + 121 @@ -1599,7 +1591,7 @@ Split Ratio apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 532 + 533 @@ -1607,7 +1599,7 @@ Korku apps/client/src/app/components/markets/markets.component.ts - 57 + 61 libs/ui/src/lib/i18n.ts @@ -1619,7 +1611,7 @@ Açgözlülük apps/client/src/app/components/markets/markets.component.ts - 58 + 62 libs/ui/src/lib/i18n.ts @@ -1639,7 +1631,7 @@ An error occurred while merging this asset profile into (). apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 942 + 944 @@ -1735,7 +1727,7 @@ Current week apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 257 + 259 @@ -2211,7 +2203,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 366 + 368 @@ -2219,11 +2211,11 @@ YTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 265 + 267 libs/ui/src/lib/assistant/assistant.component.ts - 378 + 380 @@ -2231,11 +2223,11 @@ 1Y apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 269 + 271 libs/ui/src/lib/assistant/assistant.component.ts - 388 + 390 @@ -2251,11 +2243,11 @@ 5Y apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 273 + 275 libs/ui/src/lib/assistant/assistant.component.ts - 410 + 412 @@ -2271,19 +2263,11 @@ Maks. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 277 + 279 libs/ui/src/lib/assistant/assistant.component.ts - 416 - - - - Identifier has been copied to the clipboard - Identifier has been copied to the clipboard - - apps/client/src/app/components/access-table/access-table.component.ts - 149 + 418 @@ -2355,7 +2339,7 @@ libs/common/src/lib/routes/routes.ts - 270 + 275 @@ -2371,7 +2355,7 @@ libs/common/src/lib/routes/routes.ts - 235 + 240 @@ -2387,7 +2371,7 @@ libs/common/src/lib/routes/routes.ts - 243 + 248 @@ -2403,7 +2387,7 @@ libs/common/src/lib/routes/routes.ts - 259 + 264 @@ -2475,11 +2459,11 @@ libs/common/src/lib/routes/routes.ts - 104 + 109 libs/ui/src/lib/assistant/assistant.html - 84 + 85 @@ -2503,7 +2487,7 @@ Hesap Kimliği apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 108 + 109 @@ -2603,11 +2587,11 @@ libs/common/src/lib/routes/routes.ts - 143 + 148 libs/common/src/lib/routes/routes.ts - 220 + 225 @@ -2719,7 +2703,7 @@ libs/common/src/lib/routes/routes.ts - 275 + 280 @@ -2727,11 +2711,11 @@ Could not parse scraper configuration apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 676 + 678 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 679 + 681 @@ -2783,7 +2767,7 @@ libs/common/src/lib/routes/routes.ts - 301 + 306 @@ -2811,7 +2795,7 @@ libs/common/src/lib/routes/routes.ts - 306 + 311 @@ -3003,15 +2987,15 @@ libs/common/src/lib/routes/routes.ts - 125 + 130 libs/common/src/lib/routes/routes.ts - 217 + 222 libs/ui/src/lib/assistant/assistant.html - 110 + 111 @@ -3019,7 +3003,7 @@ This action cannot be undone. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 961 + 963 @@ -3039,7 +3023,7 @@ libs/common/src/lib/routes/routes.ts - 135 + 140 @@ -3071,15 +3055,15 @@ libs/common/src/lib/routes/routes.ts - 130 + 135 libs/common/src/lib/routes/routes.ts - 311 + 316 libs/common/src/lib/routes/routes.ts - 359 + 364 @@ -3411,7 +3395,7 @@ Add Activity libs/common/src/lib/routes/routes.ts - 169 + 174 @@ -3535,7 +3519,7 @@ libs/common/src/lib/routes/routes.ts - 179 + 184 libs/ui/src/lib/accounts-table/accounts-table.component.html @@ -3727,7 +3711,7 @@ Shares After apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 590 + 591 @@ -3755,7 +3739,7 @@ Do you really want to convert this asset profile to ()? apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 809 + 811 @@ -3787,7 +3771,7 @@ libs/common/src/lib/routes/routes.ts - 184 + 189 @@ -3803,7 +3787,7 @@ Platforma Göre apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 39 + 41 @@ -3811,7 +3795,7 @@ Para Birimine Göre apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 58 + 60 @@ -3819,7 +3803,7 @@ Varlık Sınıfına Göre apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 80 + 82 @@ -3827,7 +3811,7 @@ Varlığa Göre apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 102 + 104 @@ -3835,7 +3819,7 @@ Sektöre Göre apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 125 + 127 @@ -3843,7 +3827,7 @@ Kıtaya Göre apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 148 + 150 @@ -3851,7 +3835,7 @@ Piyasaya Göre apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 170 + 172 @@ -3859,7 +3843,7 @@ Bölgeler apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 193 + 195 apps/client/src/app/pages/public/public-page.html @@ -3887,7 +3871,7 @@ Gelişmiş Piyasalar apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 216 + 218 apps/client/src/app/pages/public/public-page.html @@ -3907,7 +3891,7 @@ Gelişmekte Olan Piyasalar apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 226 + 228 apps/client/src/app/pages/public/public-page.html @@ -3919,7 +3903,7 @@ Diğer Piyasalar apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 236 + 238 apps/client/src/app/pages/public/public-page.html @@ -3931,7 +3915,7 @@ Hesaba Göre apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 283 + 285 @@ -3939,7 +3923,7 @@ ETF Sağlayıcısına Göre apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 303 + 305 @@ -3947,7 +3931,7 @@ Ülkeye Göre apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 261 + 263 @@ -3959,7 +3943,7 @@ libs/common/src/lib/routes/routes.ts - 189 + 194 @@ -4127,7 +4111,7 @@ libs/common/src/lib/routes/routes.ts - 321 + 326 @@ -4151,7 +4135,7 @@ Do you really want to remove this received access? apps/client/src/app/components/access-table/access-table.component.ts - 176 + 152 @@ -4175,7 +4159,7 @@ Hourly apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 249 + 251 @@ -4331,11 +4315,11 @@ Could not save asset profile apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 762 + 764 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 765 + 767 @@ -4387,7 +4371,7 @@ libs/common/src/lib/routes/routes.ts - 331 + 336 @@ -4439,7 +4423,7 @@ libs/common/src/lib/routes/routes.ts - 379 + 384 @@ -4448,11 +4432,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 370 + 375 libs/common/src/lib/routes/routes.ts - 374 + 379 @@ -4768,7 +4752,7 @@ libs/common/src/lib/routes/routes.ts - 382 + 387 @@ -5084,7 +5068,7 @@ Kullanıcı Kimliği apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html - 116 + 113 apps/client/src/app/components/user-account-settings/user-account-settings.html @@ -5268,7 +5252,7 @@ This asset profile cannot be merged into (). apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 920 + 922 @@ -5348,7 +5332,7 @@ Hesap apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.component.ts - 102 + 109 libs/common/src/lib/routes/routes.ts @@ -5392,7 +5376,7 @@ apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html - 266 + 268 libs/ui/src/lib/i18n.ts @@ -5424,7 +5408,7 @@ apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html - 285 + 287 libs/ui/src/lib/i18n.ts @@ -5540,7 +5524,7 @@ libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 460 + 462 @@ -5856,7 +5840,7 @@ Veri mevcut değil apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 247 + 249 apps/client/src/app/pages/public/public-page.html @@ -5868,11 +5852,11 @@ libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 462 + 464 libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 476 + 478 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -5908,7 +5892,7 @@ Do you really want to merge this asset profile into it? apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 965 + 967 @@ -5992,7 +5976,7 @@ Ücret apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html - 238 + 239 libs/ui/src/lib/activities-table/activities-table.component.html @@ -6042,6 +6026,10 @@ apps/client/src/app/pages/accounts/transfer-balance/transfer-balance-dialog.html 7 + + libs/common/src/lib/routes/routes.ts + 99 + libs/ui/src/lib/accounts-table/accounts-table.component.html 10 @@ -6335,8 +6323,8 @@ Oops, cash balance transfer has failed. Hay Allah, Nakit bakiyesi tranferi başarısız oldu. - apps/client/src/app/pages/accounts/accounts-page.component.ts - 199 + apps/client/src/app/pages/accounts/account-dialog-host/account-dialog-host.component.ts + 365 @@ -6392,7 +6380,7 @@ Portfolio Filters apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html - 128 + 125 @@ -6452,7 +6440,7 @@ Şu anki piyasa fiyatı apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 854 + 856 @@ -6468,7 +6456,7 @@ Tarih Aralığı libs/ui/src/lib/assistant/assistant.html - 170 + 171 @@ -6496,7 +6484,7 @@ Hay Allah! Erişim izni verilemedi. apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.component.ts - 256 + 311 @@ -6592,7 +6580,7 @@ Hafta içi libs/ui/src/lib/assistant/assistant.component.ts - 370 + 372 @@ -6600,11 +6588,11 @@ WTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 257 + 259 libs/ui/src/lib/assistant/assistant.component.ts - 370 + 372 @@ -6612,7 +6600,7 @@ Ay içi libs/ui/src/lib/assistant/assistant.component.ts - 374 + 376 @@ -6620,11 +6608,11 @@ MTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 261 + 263 libs/ui/src/lib/assistant/assistant.component.ts - 374 + 376 @@ -6640,7 +6628,7 @@ Yıl içi libs/ui/src/lib/assistant/assistant.component.ts - 378 + 380 @@ -6672,7 +6660,7 @@ Filtreleri Sıfırla libs/ui/src/lib/assistant/assistant.html - 204 + 205 @@ -6680,7 +6668,7 @@ Yıl apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 269 + 271 apps/client/src/app/pages/resources/personal-finance-tools/product-page.html @@ -6692,7 +6680,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 388 + 390 @@ -6700,11 +6688,11 @@ Yıllar apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 273 + 275 libs/ui/src/lib/assistant/assistant.component.ts - 410 + 412 @@ -6712,7 +6700,7 @@ Filtreleri Uygula libs/ui/src/lib/assistant/assistant.html - 217 + 218 @@ -6732,7 +6720,7 @@ Find a holding... libs/ui/src/lib/assistant/assistant.component.ts - 449 + 451 @@ -6752,7 +6740,7 @@ libs/common/src/lib/routes/routes.ts - 290 + 295 @@ -6764,7 +6752,7 @@ libs/common/src/lib/routes/routes.ts - 298 + 303 @@ -6773,11 +6761,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 293 + 298 libs/common/src/lib/routes/routes.ts - 296 + 301 @@ -6785,7 +6773,7 @@ Daily apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 245 + 247 @@ -6809,7 +6797,7 @@ Aktif apps/client/src/app/components/home-holdings/home-holdings.component.ts - 73 + 77 @@ -6817,7 +6805,7 @@ Kapalı apps/client/src/app/components/home-holdings/home-holdings.component.ts - 74 + 78 @@ -6893,7 +6881,7 @@ İnternasyonalizasyon libs/common/src/lib/routes/routes.ts - 149 + 154 @@ -6909,7 +6897,7 @@ Jump to a page... libs/ui/src/lib/assistant/assistant.component.ts - 450 + 452 @@ -6933,7 +6921,7 @@ ETF Portföyü apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 328 + 330 @@ -6941,7 +6929,7 @@ Her ETF’nin en üst tutarlarına dayalı yaklaşım apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 335 + 337 @@ -6957,7 +6945,7 @@ Clone Activity libs/common/src/lib/routes/routes.ts - 164 + 169 @@ -7005,7 +6993,7 @@ Tablo apps/client/src/app/components/home-holdings/home-holdings.component.ts - 62 + 66 @@ -7013,7 +7001,7 @@ Grafik apps/client/src/app/components/home-holdings/home-holdings.component.ts - 67 + 71 @@ -7241,15 +7229,15 @@ Hata apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 844 + 846 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 921 + 923 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 943 + 945 @@ -7273,7 +7261,7 @@ Oops! Could not update access. apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.component.ts - 354 + 409 @@ -7313,11 +7301,11 @@ apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html - 143 + 152 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 117 + 118 apps/client/src/app/pages/accounts/transfer-balance/transfer-balance-dialog.html @@ -7325,7 +7313,7 @@ apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html - 321 + 323 apps/client/src/app/pages/register/user-account-registration-dialog/user-account-registration-dialog.html @@ -7369,7 +7357,7 @@ apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html - 145 + 154 apps/client/src/app/components/user-account-membership/user-account-membership.component.ts @@ -7381,11 +7369,11 @@ apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 119 + 120 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html - 323 + 325 libs/ui/src/lib/i18n.ts @@ -7413,7 +7401,7 @@ Bağlantıyı panoya kopyala apps/client/src/app/components/access-table/access-table.component.html - 112 + 82 @@ -7633,7 +7621,7 @@ Shares Before apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 603 + 604 @@ -7693,7 +7681,7 @@ Oops! Herhangi bir varlık bulunamadı. libs/ui/src/lib/symbol-autocomplete/symbol-autocomplete.component.html - 43 + 44 @@ -7749,7 +7737,7 @@ libs/common/src/lib/routes/routes.ts - 343 + 348 @@ -7765,7 +7753,7 @@ libs/common/src/lib/routes/routes.ts - 351 + 356 @@ -7774,11 +7762,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 346 + 351 libs/common/src/lib/routes/routes.ts - 349 + 354 @@ -7787,11 +7775,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 338 + 343 libs/common/src/lib/routes/routes.ts - 341 + 346 @@ -7831,7 +7819,7 @@ API anahtarını silmek istediğinize emin misiniz? apps/client/src/app/components/admin-settings/admin-settings.component.ts - 148 + 151 @@ -7959,15 +7947,15 @@ apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html - 158 + 167 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 128 + 129 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html - 332 + 334 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html @@ -8015,7 +8003,7 @@ Lütfen Ghostfolio API anahtarınızı girin. apps/client/src/app/components/admin-settings/admin-settings.component.ts - 167 + 170 @@ -8039,7 +8027,7 @@ Bağlantı panoya kopyalandı apps/client/src/app/components/access-table/access-table.component.ts - 161 + 137 @@ -8047,7 +8035,7 @@ Tembel apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 294 + 296 @@ -8055,7 +8043,7 @@ Anında apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 298 + 300 @@ -8063,7 +8051,7 @@ Varsayılan Piyasa Fiyatı apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 644 + 645 @@ -8079,7 +8067,7 @@ Do you really want to convert the data source to ? apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 529 + 531 @@ -8095,7 +8083,7 @@ HTTP İstek Başlıkları apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 657 + 658 @@ -8103,7 +8091,7 @@ gün sonu apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 294 + 296 @@ -8111,7 +8099,7 @@ gerçek zamanlı apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 298 + 300 @@ -8239,7 +8227,7 @@ Additional requests are granted while you are setting up your instance apps/client/src/app/components/admin-settings/admin-settings.component.ts - 87 + 88 @@ -8308,11 +8296,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 262 + 267 libs/common/src/lib/routes/routes.ts - 265 + 270 @@ -8324,7 +8312,7 @@ libs/common/src/lib/routes/routes.ts - 267 + 272 @@ -8340,7 +8328,7 @@ () is already in use. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 963 + 965 @@ -8348,7 +8336,7 @@ Güncelleştirilirken bir hata oluştu (). apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 807 + 809 @@ -8436,7 +8424,7 @@ libs/common/src/lib/routes/routes.ts - 140 + 145 @@ -8481,11 +8469,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 230 + 235 libs/common/src/lib/routes/routes.ts - 233 + 238 @@ -8605,7 +8593,7 @@ Hızlı Bağlantılar libs/ui/src/lib/assistant/assistant.html - 58 + 59 @@ -8621,7 +8609,7 @@ libs/common/src/lib/routes/routes.ts - 281 + 286 @@ -8629,7 +8617,7 @@ Açık Kaynak Alternatifi libs/common/src/lib/routes/routes.ts - 376 + 381 @@ -8662,15 +8650,15 @@ kebab-case libs/common/src/lib/routes/routes.ts - 362 + 367 libs/common/src/lib/routes/routes.ts - 365 + 370 libs/common/src/lib/routes/routes.ts - 373 + 378 @@ -8679,11 +8667,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 354 + 359 libs/common/src/lib/routes/routes.ts - 357 + 362 @@ -8763,7 +8751,7 @@ Current month apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 261 + 263 @@ -8908,11 +8896,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 386 + 391 libs/common/src/lib/routes/routes.ts - 387 + 392 @@ -8944,7 +8932,7 @@ Stocks apps/client/src/app/components/markets/markets.component.ts - 53 + 57 apps/client/src/app/pages/features/features-page.html @@ -8956,7 +8944,7 @@ Cryptocurrencies apps/client/src/app/components/markets/markets.component.ts - 54 + 58 apps/client/src/app/pages/features/features-page.html @@ -9084,7 +9072,7 @@ No results found... libs/ui/src/lib/assistant/assistant.html - 51 + 52 diff --git a/apps/client/src/locales/messages.uk.xlf b/apps/client/src/locales/messages.uk.xlf index 7bcfb2b59..806528d5c 100644 --- a/apps/client/src/locales/messages.uk.xlf +++ b/apps/client/src/locales/messages.uk.xlf @@ -26,7 +26,7 @@ libs/common/src/lib/routes/routes.ts - 306 + 311 @@ -34,7 +34,7 @@ Інтернаціоналізація libs/common/src/lib/routes/routes.ts - 149 + 154 @@ -54,7 +54,7 @@ libs/common/src/lib/routes/routes.ts - 116 + 121 @@ -115,31 +115,31 @@ kebab-case libs/common/src/lib/routes/routes.ts - 226 + 231 libs/common/src/lib/routes/routes.ts - 227 + 232 libs/common/src/lib/routes/routes.ts - 232 + 237 libs/common/src/lib/routes/routes.ts - 240 + 245 libs/common/src/lib/routes/routes.ts - 248 + 253 libs/common/src/lib/routes/routes.ts - 256 + 261 libs/common/src/lib/routes/routes.ts - 264 + 269 @@ -148,11 +148,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 238 + 243 libs/common/src/lib/routes/routes.ts - 241 + 246 @@ -161,11 +161,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 254 + 259 libs/common/src/lib/routes/routes.ts - 257 + 262 @@ -174,19 +174,19 @@ kebab-case libs/common/src/lib/routes/routes.ts - 284 + 289 libs/common/src/lib/routes/routes.ts - 285 + 290 libs/common/src/lib/routes/routes.ts - 289 + 294 libs/common/src/lib/routes/routes.ts - 295 + 300 @@ -195,11 +195,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 304 + 309 libs/common/src/lib/routes/routes.ts - 305 + 310 @@ -208,11 +208,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 309 + 314 libs/common/src/lib/routes/routes.ts - 310 + 315 @@ -221,11 +221,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 319 + 324 libs/common/src/lib/routes/routes.ts - 320 + 325 @@ -234,11 +234,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 329 + 334 libs/common/src/lib/routes/routes.ts - 330 + 335 @@ -247,31 +247,31 @@ kebab-case libs/common/src/lib/routes/routes.ts - 334 + 339 libs/common/src/lib/routes/routes.ts - 335 + 340 libs/common/src/lib/routes/routes.ts - 340 + 345 libs/common/src/lib/routes/routes.ts - 348 + 353 libs/common/src/lib/routes/routes.ts - 356 + 361 libs/common/src/lib/routes/routes.ts - 364 + 369 libs/common/src/lib/routes/routes.ts - 372 + 377 @@ -342,8 +342,8 @@ Details Деталі - apps/client/src/app/components/access-table/access-table.component.html - 49 + apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html + 137 @@ -351,7 +351,7 @@ Скопіювати посилання в буфер обміну apps/client/src/app/components/access-table/access-table.component.html - 112 + 82 @@ -367,7 +367,7 @@ Відкликати apps/client/src/app/components/access-table/access-table.component.html - 138 + 100 @@ -383,7 +383,7 @@ Посилання скопійовано в буфер обміну apps/client/src/app/components/access-table/access-table.component.ts - 161 + 137 @@ -399,7 +399,7 @@ Ви дійсно хочете відкликати цей наданий доступ? apps/client/src/app/components/access-table/access-table.component.ts - 177 + 153 @@ -449,6 +449,10 @@ apps/client/src/app/pages/accounts/transfer-balance/transfer-balance-dialog.html 7 + + libs/common/src/lib/routes/routes.ts + 99 + libs/ui/src/lib/accounts-table/accounts-table.component.html 10 @@ -623,7 +627,7 @@ Редагувати apps/client/src/app/components/access-table/access-table.component.html - 104 + 74 apps/client/src/app/components/admin-market-data/admin-market-data.html @@ -651,7 +655,7 @@ Видалити apps/client/src/app/components/access-table/access-table.component.html - 135 + 97 apps/client/src/app/components/admin-market-data/admin-market-data.html @@ -703,7 +707,7 @@ Ви дійсно хочете видалити цей обліковий запис? libs/ui/src/lib/accounts-table/accounts-table.component.ts - 183 + 185 @@ -759,7 +763,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 495 + 496 @@ -883,7 +887,7 @@ Splits apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 518 + 519 @@ -959,7 +963,7 @@ Під час конвертації джерела даних на сталася помилка. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 526 + 528 @@ -1027,7 +1031,7 @@ Частота збору даних apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 476 + 477 @@ -1063,7 +1067,7 @@ Застосувати поточну ринкову ціну apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html - 220 + 221 @@ -1119,15 +1123,15 @@ Помилка apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 844 + 846 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 921 + 923 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 943 + 945 @@ -1135,7 +1139,7 @@ Поточна ринкова ціна apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 854 + 856 @@ -1235,7 +1239,7 @@ Update Activity libs/common/src/lib/routes/routes.ts - 176 + 181 @@ -1267,7 +1271,7 @@ Конфігурація скребка apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 634 + 635 @@ -1311,7 +1315,7 @@ Профіль активу було збережено apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 752 + 754 @@ -1327,7 +1331,7 @@ apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html - 251 + 252 libs/ui/src/lib/accounts-table/accounts-table.component.html @@ -1378,14 +1382,6 @@ 20 - - Copy identifier to clipboard - Copy identifier to clipboard - - apps/client/src/app/components/access-table/access-table.component.html - 120 - - Name, symbol or ISIN Назва, символ або ISIN @@ -1491,7 +1487,7 @@ Update Account libs/common/src/lib/routes/routes.ts - 101 + 106 @@ -1511,7 +1507,7 @@ Знайти актив... libs/ui/src/lib/assistant/assistant.component.ts - 449 + 451 @@ -1551,7 +1547,7 @@ Додати apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 621 + 622 apps/client/src/app/components/admin-overview/admin-overview.html @@ -1615,7 +1611,7 @@ The data of this asset profile is moved to () and this asset profile is deleted. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 959 + 961 @@ -1631,7 +1627,7 @@ Поточний рік apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 265 + 267 @@ -1731,7 +1727,7 @@ Ви дійсно хочете видалити ключ API? apps/client/src/app/components/admin-settings/admin-settings.component.ts - 148 + 151 @@ -1747,7 +1743,7 @@ Будь ласка, введіть ваш ключ API Ghostfolio. apps/client/src/app/components/admin-settings/admin-settings.component.ts - 167 + 170 @@ -1907,11 +1903,11 @@ Не вдалося перевірити форму apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 728 + 730 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 731 + 733 @@ -1951,7 +1947,7 @@ libs/common/src/lib/routes/routes.ts - 202 + 207 @@ -2155,7 +2151,7 @@ Активний apps/client/src/app/components/home-holdings/home-holdings.component.ts - 73 + 77 @@ -2163,7 +2159,7 @@ Закритий apps/client/src/app/components/home-holdings/home-holdings.component.ts - 74 + 78 @@ -2171,7 +2167,7 @@ Таблиця apps/client/src/app/components/home-holdings/home-holdings.component.ts - 62 + 66 @@ -2179,7 +2175,7 @@ Графік apps/client/src/app/components/home-holdings/home-holdings.component.ts - 67 + 71 @@ -2195,7 +2191,7 @@ Split Ratio apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 532 + 533 @@ -2203,7 +2199,7 @@ Страх apps/client/src/app/components/markets/markets.component.ts - 57 + 61 libs/ui/src/lib/i18n.ts @@ -2215,7 +2211,7 @@ Жадібність apps/client/src/app/components/markets/markets.component.ts - 58 + 62 libs/ui/src/lib/i18n.ts @@ -2235,7 +2231,7 @@ An error occurred while merging this asset profile into (). apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 942 + 944 @@ -2331,7 +2327,7 @@ Поточний тиждень apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 257 + 259 @@ -2571,15 +2567,15 @@ apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html - 158 + 167 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 128 + 129 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html - 332 + 334 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html @@ -2655,7 +2651,7 @@ Упс! Не вдалося оновити права доступу. apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.component.ts - 354 + 409 @@ -2823,7 +2819,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 366 + 368 @@ -2831,11 +2827,11 @@ З початку року apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 265 + 267 libs/ui/src/lib/assistant/assistant.component.ts - 378 + 380 @@ -2843,11 +2839,11 @@ 1 рік apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 269 + 271 libs/ui/src/lib/assistant/assistant.component.ts - 388 + 390 @@ -2863,11 +2859,11 @@ 5 років apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 273 + 275 libs/ui/src/lib/assistant/assistant.component.ts - 410 + 412 @@ -2883,19 +2879,11 @@ Максимум apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 277 + 279 libs/ui/src/lib/assistant/assistant.component.ts - 416 - - - - Identifier has been copied to the clipboard - Identifier has been copied to the clipboard - - apps/client/src/app/components/access-table/access-table.component.ts - 149 + 418 @@ -2903,7 +2891,7 @@ Упс! Не вдалося надати доступ. apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.component.ts - 256 + 311 @@ -2955,7 +2943,7 @@ ID користувача apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html - 116 + 113 apps/client/src/app/components/user-account-settings/user-account-settings.html @@ -3147,7 +3135,7 @@ Перейти до сторінки... libs/ui/src/lib/assistant/assistant.component.ts - 450 + 452 @@ -3163,7 +3151,7 @@ Clone Activity libs/common/src/lib/routes/routes.ts - 164 + 169 @@ -3443,7 +3431,7 @@ Щодня apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 245 + 247 @@ -3475,7 +3463,7 @@ libs/common/src/lib/routes/routes.ts - 270 + 275 @@ -3491,7 +3479,7 @@ libs/common/src/lib/routes/routes.ts - 235 + 240 @@ -3507,7 +3495,7 @@ libs/common/src/lib/routes/routes.ts - 243 + 248 @@ -3523,7 +3511,7 @@ libs/common/src/lib/routes/routes.ts - 259 + 264 @@ -3595,19 +3583,19 @@ libs/common/src/lib/routes/routes.ts - 104 + 109 libs/ui/src/lib/assistant/assistant.html - 84 + 85 Oops, cash balance transfer has failed. Упс, перенесення балансу готівки не вдалося. - apps/client/src/app/pages/accounts/accounts-page.component.ts - 199 + apps/client/src/app/pages/accounts/account-dialog-host/account-dialog-host.component.ts + 365 @@ -3631,7 +3619,7 @@ Ідентифікатор облікового запису apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 108 + 109 @@ -3767,11 +3755,11 @@ libs/common/src/lib/routes/routes.ts - 143 + 148 libs/common/src/lib/routes/routes.ts - 220 + 225 @@ -3891,7 +3879,7 @@ libs/common/src/lib/routes/routes.ts - 275 + 280 @@ -3899,11 +3887,11 @@ Не вдалося розібрати конфігурацію скрапера apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 676 + 678 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 679 + 681 @@ -3955,7 +3943,7 @@ libs/common/src/lib/routes/routes.ts - 301 + 306 @@ -3975,7 +3963,7 @@ libs/common/src/lib/routes/routes.ts - 290 + 295 @@ -3987,7 +3975,7 @@ libs/common/src/lib/routes/routes.ts - 298 + 303 @@ -3996,11 +3984,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 293 + 298 libs/common/src/lib/routes/routes.ts - 296 + 301 @@ -4180,15 +4168,15 @@ libs/common/src/lib/routes/routes.ts - 125 + 130 libs/common/src/lib/routes/routes.ts - 217 + 222 libs/ui/src/lib/assistant/assistant.html - 110 + 111 @@ -4196,7 +4184,7 @@ This action cannot be undone. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 961 + 963 @@ -4216,7 +4204,7 @@ libs/common/src/lib/routes/routes.ts - 135 + 140 @@ -4248,15 +4236,15 @@ libs/common/src/lib/routes/routes.ts - 130 + 135 libs/common/src/lib/routes/routes.ts - 311 + 316 libs/common/src/lib/routes/routes.ts - 359 + 364 @@ -4756,7 +4744,7 @@ Add Activity libs/common/src/lib/routes/routes.ts - 169 + 174 @@ -4812,7 +4800,7 @@ Do you really want to merge this asset profile into it? apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 965 + 967 @@ -4956,7 +4944,7 @@ libs/common/src/lib/routes/routes.ts - 179 + 184 libs/ui/src/lib/accounts-table/accounts-table.component.html @@ -5036,7 +5024,7 @@ Знайти рахунок... libs/ui/src/lib/assistant/assistant.component.ts - 448 + 450 @@ -5044,11 +5032,11 @@ Дата apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 527 + 528 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 566 + 567 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -5216,7 +5204,7 @@ Shares After apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 590 + 591 @@ -5244,7 +5232,7 @@ Ви дійсно бажаєте конвертувати цей профіль активу в ()? apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 809 + 811 @@ -5276,7 +5264,7 @@ libs/common/src/lib/routes/routes.ts - 184 + 189 @@ -5292,7 +5280,7 @@ За платформою apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 39 + 41 @@ -5300,7 +5288,7 @@ За валютою apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 58 + 60 @@ -5308,7 +5296,7 @@ За класом активів apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 80 + 82 @@ -5316,7 +5304,7 @@ За активом apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 102 + 104 @@ -5324,7 +5312,7 @@ За сектором apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 125 + 127 @@ -5332,7 +5320,7 @@ За континентом apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 148 + 150 @@ -5340,7 +5328,7 @@ За ринком apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 170 + 172 @@ -5348,7 +5336,7 @@ Регіони apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 193 + 195 apps/client/src/app/pages/public/public-page.html @@ -5376,7 +5364,7 @@ Розвиті ринки apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 216 + 218 apps/client/src/app/pages/public/public-page.html @@ -5396,7 +5384,7 @@ Ринки, що розвиваються apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 226 + 228 apps/client/src/app/pages/public/public-page.html @@ -5408,7 +5396,7 @@ Інші ринки apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 236 + 238 apps/client/src/app/pages/public/public-page.html @@ -5420,7 +5408,7 @@ За країною apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 261 + 263 @@ -5428,7 +5416,7 @@ За рахунком apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 283 + 285 @@ -5436,7 +5424,7 @@ За постачальником ETF apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 303 + 305 @@ -5444,7 +5432,7 @@ За активами ETF apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 328 + 330 @@ -5452,7 +5440,7 @@ Наближення на основі провідних активів кожного ETF apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 335 + 337 @@ -5464,7 +5452,7 @@ libs/common/src/lib/routes/routes.ts - 189 + 194 @@ -5708,7 +5696,7 @@ libs/common/src/lib/routes/routes.ts - 321 + 326 @@ -5732,7 +5720,7 @@ Do you really want to remove this received access? apps/client/src/app/components/access-table/access-table.component.ts - 176 + 152 @@ -5756,7 +5744,7 @@ Щогодини apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 249 + 251 @@ -5896,11 +5884,11 @@ Не вдалося зберегти профіль активу apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 762 + 764 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 765 + 767 @@ -5996,7 +5984,7 @@ libs/common/src/lib/routes/routes.ts - 331 + 336 @@ -6032,7 +6020,7 @@ libs/common/src/lib/routes/routes.ts - 343 + 348 @@ -6048,7 +6036,7 @@ libs/common/src/lib/routes/routes.ts - 351 + 356 @@ -6057,11 +6045,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 346 + 351 libs/common/src/lib/routes/routes.ts - 349 + 354 @@ -6070,11 +6058,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 338 + 343 libs/common/src/lib/routes/routes.ts - 341 + 346 @@ -6086,7 +6074,7 @@ libs/common/src/lib/routes/routes.ts - 379 + 384 @@ -6095,11 +6083,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 370 + 375 libs/common/src/lib/routes/routes.ts - 374 + 379 @@ -6643,7 +6631,7 @@ Shares Before apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 603 + 604 @@ -6787,7 +6775,7 @@ libs/common/src/lib/routes/routes.ts - 382 + 387 @@ -6943,7 +6931,7 @@ Тиждень до дати libs/ui/src/lib/assistant/assistant.component.ts - 370 + 372 @@ -6951,11 +6939,11 @@ WTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 257 + 259 libs/ui/src/lib/assistant/assistant.component.ts - 370 + 372 @@ -6963,7 +6951,7 @@ Місяць до дати libs/ui/src/lib/assistant/assistant.component.ts - 374 + 376 @@ -6971,11 +6959,11 @@ MTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 261 + 263 libs/ui/src/lib/assistant/assistant.component.ts - 374 + 376 @@ -6991,7 +6979,7 @@ Рік до дати libs/ui/src/lib/assistant/assistant.component.ts - 378 + 380 @@ -6999,7 +6987,7 @@ рік apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 269 + 271 apps/client/src/app/pages/resources/personal-finance-tools/product-page.html @@ -7011,7 +6999,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 388 + 390 @@ -7019,11 +7007,11 @@ роки apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 273 + 275 libs/ui/src/lib/assistant/assistant.component.ts - 410 + 412 @@ -7035,7 +7023,7 @@ libs/ui/src/lib/assistant/assistant.html - 140 + 141 @@ -7043,7 +7031,7 @@ Діапазон дат libs/ui/src/lib/assistant/assistant.html - 170 + 171 @@ -7051,7 +7039,7 @@ Скинути фільтри libs/ui/src/lib/assistant/assistant.html - 204 + 205 @@ -7059,7 +7047,7 @@ Застосувати фільтри libs/ui/src/lib/assistant/assistant.html - 217 + 218 @@ -7067,7 +7055,7 @@ Фільтри портфеля apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html - 128 + 125 @@ -7163,7 +7151,7 @@ This asset profile cannot be merged into (). apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 920 + 922 @@ -7275,7 +7263,7 @@ Рахунок apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.component.ts - 102 + 109 libs/common/src/lib/routes/routes.ts @@ -7319,7 +7307,7 @@ apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html - 266 + 268 libs/ui/src/lib/i18n.ts @@ -7351,7 +7339,7 @@ apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html - 285 + 287 libs/ui/src/lib/i18n.ts @@ -7395,11 +7383,11 @@ apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html - 143 + 152 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 117 + 118 apps/client/src/app/pages/accounts/transfer-balance/transfer-balance-dialog.html @@ -7407,7 +7395,7 @@ apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html - 321 + 323 apps/client/src/app/pages/register/user-account-registration-dialog/user-account-registration-dialog.html @@ -7459,7 +7447,7 @@ apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html - 145 + 154 apps/client/src/app/components/user-account-membership/user-account-membership.component.ts @@ -7471,11 +7459,11 @@ apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 119 + 120 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html - 323 + 325 libs/ui/src/lib/i18n.ts @@ -7583,7 +7571,7 @@ libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 460 + 462 @@ -7759,7 +7747,7 @@ Комісія apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html - 238 + 239 libs/ui/src/lib/activities-table/activities-table.component.html @@ -7987,7 +7975,7 @@ Дані недоступні apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 247 + 249 apps/client/src/app/pages/public/public-page.html @@ -7999,11 +7987,11 @@ libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 462 + 464 libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 476 + 478 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -8015,7 +8003,7 @@ Упс! Не вдалося знайти жодного активу. libs/ui/src/lib/symbol-autocomplete/symbol-autocomplete.component.html - 43 + 44 @@ -8047,7 +8035,7 @@ Лінивий apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 294 + 296 @@ -8055,7 +8043,7 @@ Миттєвий apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 298 + 300 @@ -8063,7 +8051,7 @@ Стандартна ринкова ціна apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 644 + 645 @@ -8079,7 +8067,7 @@ Ви дійсно бажаєте конвертувати джерело даних на ? apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 529 + 531 @@ -8095,7 +8083,7 @@ Заголовки HTTP-запиту apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 657 + 658 @@ -8103,7 +8091,7 @@ кінець дня apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 294 + 296 @@ -8111,7 +8099,7 @@ реальний час apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 298 + 300 @@ -8239,7 +8227,7 @@ Additional requests are granted while you are setting up your instance apps/client/src/app/components/admin-settings/admin-settings.component.ts - 87 + 88 @@ -8308,11 +8296,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 262 + 267 libs/common/src/lib/routes/routes.ts - 265 + 270 @@ -8324,7 +8312,7 @@ libs/common/src/lib/routes/routes.ts - 267 + 272 @@ -8340,7 +8328,7 @@ () вже використовується. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 963 + 965 @@ -8348,7 +8336,7 @@ Під час оновлення до () сталася помилка. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 807 + 809 @@ -8436,7 +8424,7 @@ libs/common/src/lib/routes/routes.ts - 140 + 145 @@ -8481,11 +8469,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 230 + 235 libs/common/src/lib/routes/routes.ts - 233 + 238 @@ -8605,7 +8593,7 @@ Швидкі посилання libs/ui/src/lib/assistant/assistant.html - 58 + 59 @@ -8621,7 +8609,7 @@ libs/common/src/lib/routes/routes.ts - 281 + 286 @@ -8629,7 +8617,7 @@ Альтернатива з відкритим кодом для libs/common/src/lib/routes/routes.ts - 376 + 381 @@ -8662,15 +8650,15 @@ kebab-case libs/common/src/lib/routes/routes.ts - 362 + 367 libs/common/src/lib/routes/routes.ts - 365 + 370 libs/common/src/lib/routes/routes.ts - 373 + 378 @@ -8679,11 +8667,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 354 + 359 libs/common/src/lib/routes/routes.ts - 357 + 362 @@ -8763,7 +8751,7 @@ Поточний місяць apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 261 + 263 @@ -8908,11 +8896,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 386 + 391 libs/common/src/lib/routes/routes.ts - 387 + 392 @@ -8944,7 +8932,7 @@ Акції apps/client/src/app/components/markets/markets.component.ts - 53 + 57 apps/client/src/app/pages/features/features-page.html @@ -8956,7 +8944,7 @@ Криптовалюти apps/client/src/app/components/markets/markets.component.ts - 54 + 58 apps/client/src/app/pages/features/features-page.html @@ -9084,7 +9072,7 @@ Результатів не знайдено... libs/ui/src/lib/assistant/assistant.html - 51 + 52 diff --git a/apps/client/src/locales/messages.xlf b/apps/client/src/locales/messages.xlf index 806cf86c7..f307ec366 100644 --- a/apps/client/src/locales/messages.xlf +++ b/apps/client/src/locales/messages.xlf @@ -7,31 +7,31 @@ kebab-case libs/common/src/lib/routes/routes.ts - 226 + 231 libs/common/src/lib/routes/routes.ts - 227 + 232 libs/common/src/lib/routes/routes.ts - 232 + 237 libs/common/src/lib/routes/routes.ts - 240 + 245 libs/common/src/lib/routes/routes.ts - 248 + 253 libs/common/src/lib/routes/routes.ts - 256 + 261 libs/common/src/lib/routes/routes.ts - 264 + 269 @@ -39,19 +39,19 @@ kebab-case libs/common/src/lib/routes/routes.ts - 284 + 289 libs/common/src/lib/routes/routes.ts - 285 + 290 libs/common/src/lib/routes/routes.ts - 289 + 294 libs/common/src/lib/routes/routes.ts - 295 + 300 @@ -59,11 +59,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 304 + 309 libs/common/src/lib/routes/routes.ts - 305 + 310 @@ -71,11 +71,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 238 + 243 libs/common/src/lib/routes/routes.ts - 241 + 246 @@ -83,11 +83,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 309 + 314 libs/common/src/lib/routes/routes.ts - 310 + 315 @@ -95,11 +95,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 319 + 324 libs/common/src/lib/routes/routes.ts - 320 + 325 @@ -107,11 +107,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 254 + 259 libs/common/src/lib/routes/routes.ts - 257 + 262 @@ -119,11 +119,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 329 + 334 libs/common/src/lib/routes/routes.ts - 330 + 335 @@ -131,31 +131,31 @@ kebab-case libs/common/src/lib/routes/routes.ts - 334 + 339 libs/common/src/lib/routes/routes.ts - 335 + 340 libs/common/src/lib/routes/routes.ts - 340 + 345 libs/common/src/lib/routes/routes.ts - 348 + 353 libs/common/src/lib/routes/routes.ts - 356 + 361 libs/common/src/lib/routes/routes.ts - 364 + 369 libs/common/src/lib/routes/routes.ts - 372 + 377 @@ -261,15 +261,15 @@ Details - apps/client/src/app/components/access-table/access-table.component.html - 49 + apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html + 137 Revoke apps/client/src/app/components/access-table/access-table.component.html - 138 + 100 @@ -290,7 +290,7 @@ Do you really want to revoke this granted access? apps/client/src/app/components/access-table/access-table.component.ts - 177 + 153 @@ -336,6 +336,10 @@ apps/client/src/app/pages/accounts/transfer-balance/transfer-balance-dialog.html 7 + + libs/common/src/lib/routes/routes.ts + 99 + libs/ui/src/lib/accounts-table/accounts-table.component.html 10 @@ -504,7 +508,7 @@ Edit apps/client/src/app/components/access-table/access-table.component.html - 104 + 74 apps/client/src/app/components/admin-market-data/admin-market-data.html @@ -531,7 +535,7 @@ Delete apps/client/src/app/components/access-table/access-table.component.html - 135 + 97 apps/client/src/app/components/admin-market-data/admin-market-data.html @@ -582,7 +586,7 @@ Do you really want to delete this account? libs/ui/src/lib/accounts-table/accounts-table.component.ts - 183 + 185 @@ -607,7 +611,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 495 + 496 @@ -704,7 +708,7 @@ Splits apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 518 + 519 @@ -732,18 +736,18 @@ Find an account... libs/ui/src/lib/assistant/assistant.component.ts - 448 + 450 Date apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 527 + 528 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 566 + 567 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -820,7 +824,7 @@ An error occurred while converting the data source to . apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 526 + 528 @@ -871,7 +875,7 @@ Data Gathering Frequency apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 476 + 477 @@ -903,7 +907,7 @@ Apply current market price apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html - 220 + 221 @@ -1070,7 +1074,7 @@ Update Activity libs/common/src/lib/routes/routes.ts - 176 + 181 @@ -1098,7 +1102,7 @@ Scraper Configuration apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 634 + 635 @@ -1113,7 +1117,7 @@ apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html - 251 + 252 libs/ui/src/lib/accounts-table/accounts-table.component.html @@ -1152,13 +1156,6 @@ 18 - - Copy identifier to clipboard - - apps/client/src/app/components/access-table/access-table.component.html - 120 - - Name, symbol or ISIN @@ -1252,7 +1249,7 @@ Update Account libs/common/src/lib/routes/routes.ts - 101 + 106 @@ -1287,7 +1284,7 @@ Add apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 621 + 622 apps/client/src/app/components/admin-overview/admin-overview.html @@ -1349,7 +1346,7 @@ Asset profile has been saved apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 752 + 754 @@ -1377,7 +1374,7 @@ The data of this asset profile is moved to () and this asset profile is deleted. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 959 + 961 @@ -1391,7 +1388,7 @@ Current year apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 265 + 267 @@ -1516,11 +1513,11 @@ Could not validate form apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 728 + 730 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 731 + 733 @@ -1557,7 +1554,7 @@ libs/common/src/lib/routes/routes.ts - 202 + 207 @@ -1605,7 +1602,7 @@ libs/common/src/lib/routes/routes.ts - 116 + 121 @@ -1634,14 +1631,14 @@ Split Ratio apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 532 + 533 Fear apps/client/src/app/components/markets/markets.component.ts - 57 + 61 libs/ui/src/lib/i18n.ts @@ -1652,7 +1649,7 @@ Greed apps/client/src/app/components/markets/markets.component.ts - 58 + 62 libs/ui/src/lib/i18n.ts @@ -1670,7 +1667,7 @@ An error occurred while merging this asset profile into (). apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 942 + 944 @@ -1754,7 +1751,7 @@ Current week apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 257 + 259 @@ -2192,29 +2189,29 @@ libs/ui/src/lib/assistant/assistant.component.ts - 366 + 368 YTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 265 + 267 libs/ui/src/lib/assistant/assistant.component.ts - 378 + 380 1Y apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 269 + 271 libs/ui/src/lib/assistant/assistant.component.ts - 388 + 390 @@ -2228,11 +2225,11 @@ 5Y apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 273 + 275 libs/ui/src/lib/assistant/assistant.component.ts - 410 + 412 @@ -2246,18 +2243,11 @@ Max apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 277 + 279 libs/ui/src/lib/assistant/assistant.component.ts - 416 - - - - Identifier has been copied to the clipboard - - apps/client/src/app/components/access-table/access-table.component.ts - 149 + 418 @@ -2534,7 +2524,7 @@ User ID apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html - 116 + 113 apps/client/src/app/components/user-account-settings/user-account-settings.html @@ -2616,7 +2606,7 @@ libs/common/src/lib/routes/routes.ts - 270 + 275 @@ -2631,7 +2621,7 @@ libs/common/src/lib/routes/routes.ts - 235 + 240 @@ -2646,7 +2636,7 @@ libs/common/src/lib/routes/routes.ts - 243 + 248 @@ -2661,7 +2651,7 @@ libs/common/src/lib/routes/routes.ts - 259 + 264 @@ -2728,18 +2718,18 @@ libs/common/src/lib/routes/routes.ts - 104 + 109 libs/ui/src/lib/assistant/assistant.html - 84 + 85 Oops, cash balance transfer has failed. - apps/client/src/app/pages/accounts/accounts-page.component.ts - 199 + apps/client/src/app/pages/accounts/account-dialog-host/account-dialog-host.component.ts + 365 @@ -2760,7 +2750,7 @@ Account ID apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 108 + 109 @@ -2875,11 +2865,11 @@ libs/common/src/lib/routes/routes.ts - 143 + 148 libs/common/src/lib/routes/routes.ts - 220 + 225 @@ -2990,18 +2980,18 @@ libs/common/src/lib/routes/routes.ts - 275 + 280 Could not parse scraper configuration apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 676 + 678 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 679 + 681 @@ -3048,7 +3038,7 @@ libs/common/src/lib/routes/routes.ts - 301 + 306 @@ -3074,7 +3064,7 @@ libs/common/src/lib/routes/routes.ts - 306 + 311 @@ -3237,22 +3227,22 @@ libs/common/src/lib/routes/routes.ts - 125 + 130 libs/common/src/lib/routes/routes.ts - 217 + 222 libs/ui/src/lib/assistant/assistant.html - 110 + 111 This action cannot be undone. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 961 + 963 @@ -3270,7 +3260,7 @@ libs/common/src/lib/routes/routes.ts - 135 + 140 @@ -3301,15 +3291,15 @@ libs/common/src/lib/routes/routes.ts - 130 + 135 libs/common/src/lib/routes/routes.ts - 311 + 316 libs/common/src/lib/routes/routes.ts - 359 + 364 @@ -3748,7 +3738,7 @@ Add Activity libs/common/src/lib/routes/routes.ts - 169 + 174 @@ -3790,7 +3780,7 @@ Do you really want to merge this asset profile into it? apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 965 + 967 @@ -3922,7 +3912,7 @@ libs/common/src/lib/routes/routes.ts - 179 + 184 libs/ui/src/lib/accounts-table/accounts-table.component.html @@ -4122,7 +4112,7 @@ Shares After apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 590 + 591 @@ -4147,7 +4137,7 @@ Do you really want to convert this asset profile to ()? apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 809 + 811 @@ -4162,7 +4152,7 @@ libs/common/src/lib/routes/routes.ts - 184 + 189 @@ -4176,56 +4166,56 @@ By Platform apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 39 + 41 By Currency apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 58 + 60 By Asset Class apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 80 + 82 By Holding apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 102 + 104 By Sector apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 125 + 127 By Continent apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 148 + 150 By Market apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 170 + 172 Regions apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 193 + 195 apps/client/src/app/pages/public/public-page.html @@ -4250,7 +4240,7 @@ Developed Markets apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 216 + 218 apps/client/src/app/pages/public/public-page.html @@ -4268,7 +4258,7 @@ Emerging Markets apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 226 + 228 apps/client/src/app/pages/public/public-page.html @@ -4279,7 +4269,7 @@ Other Markets apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 236 + 238 apps/client/src/app/pages/public/public-page.html @@ -4290,21 +4280,21 @@ By Account apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 283 + 285 By ETF Provider apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 303 + 305 By Country apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 261 + 263 @@ -4315,7 +4305,7 @@ libs/common/src/lib/routes/routes.ts - 189 + 194 @@ -4468,7 +4458,7 @@ libs/common/src/lib/routes/routes.ts - 321 + 326 @@ -4489,7 +4479,7 @@ Do you really want to remove this received access? apps/client/src/app/components/access-table/access-table.component.ts - 176 + 152 @@ -4510,7 +4500,7 @@ Hourly apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 249 + 251 @@ -4651,11 +4641,11 @@ Could not save asset profile apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 762 + 764 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 765 + 767 @@ -4701,7 +4691,7 @@ libs/common/src/lib/routes/routes.ts - 331 + 336 @@ -4730,7 +4720,7 @@ libs/common/src/lib/routes/routes.ts - 379 + 384 @@ -4738,11 +4728,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 370 + 375 libs/common/src/lib/routes/routes.ts - 374 + 379 @@ -5046,7 +5036,7 @@ libs/common/src/lib/routes/routes.ts - 382 + 387 @@ -5183,14 +5173,14 @@ libs/ui/src/lib/assistant/assistant.html - 140 + 141 Portfolio Filters apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html - 128 + 125 @@ -5274,7 +5264,7 @@ This asset profile cannot be merged into (). apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 920 + 922 @@ -5348,7 +5338,7 @@ Account apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.component.ts - 102 + 109 libs/common/src/lib/routes/routes.ts @@ -5390,7 +5380,7 @@ apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html - 266 + 268 libs/ui/src/lib/i18n.ts @@ -5421,7 +5411,7 @@ apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html - 285 + 287 libs/ui/src/lib/i18n.ts @@ -5526,7 +5516,7 @@ libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 460 + 462 @@ -5656,7 +5646,7 @@ Fee apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html - 238 + 239 libs/ui/src/lib/activities-table/activities-table.component.html @@ -5848,7 +5838,7 @@ No data available apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 247 + 249 apps/client/src/app/pages/public/public-page.html @@ -5860,11 +5850,11 @@ libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 462 + 464 libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 476 + 478 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -5882,14 +5872,14 @@ Date Range libs/ui/src/lib/assistant/assistant.html - 170 + 171 The current market price is apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 854 + 856 @@ -5903,7 +5893,7 @@ Oops! Could not grant access. apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.component.ts - 256 + 311 @@ -6006,32 +5996,32 @@ Year to date libs/ui/src/lib/assistant/assistant.component.ts - 378 + 380 Week to date libs/ui/src/lib/assistant/assistant.component.ts - 370 + 372 Month to date libs/ui/src/lib/assistant/assistant.component.ts - 374 + 376 MTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 261 + 263 libs/ui/src/lib/assistant/assistant.component.ts - 374 + 376 @@ -6045,11 +6035,11 @@ WTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 257 + 259 libs/ui/src/lib/assistant/assistant.component.ts - 370 + 372 @@ -6077,14 +6067,14 @@ Reset Filters libs/ui/src/lib/assistant/assistant.html - 204 + 205 year apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 269 + 271 apps/client/src/app/pages/resources/personal-finance-tools/product-page.html @@ -6096,25 +6086,25 @@ libs/ui/src/lib/assistant/assistant.component.ts - 388 + 390 years apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 273 + 275 libs/ui/src/lib/assistant/assistant.component.ts - 410 + 412 Apply Filters libs/ui/src/lib/assistant/assistant.html - 217 + 218 @@ -6122,11 +6112,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 293 + 298 libs/common/src/lib/routes/routes.ts - 296 + 301 @@ -6137,7 +6127,7 @@ libs/common/src/lib/routes/routes.ts - 298 + 303 @@ -6155,7 +6145,7 @@ Find a holding... libs/ui/src/lib/assistant/assistant.component.ts - 449 + 451 @@ -6173,14 +6163,14 @@ libs/common/src/lib/routes/routes.ts - 290 + 295 Daily apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 245 + 247 @@ -6201,14 +6191,14 @@ Closed apps/client/src/app/components/home-holdings/home-holdings.component.ts - 74 + 78 Active apps/client/src/app/components/home-holdings/home-holdings.component.ts - 73 + 77 @@ -6275,7 +6265,7 @@ Internationalization libs/common/src/lib/routes/routes.ts - 149 + 154 @@ -6296,7 +6286,7 @@ Jump to a page... libs/ui/src/lib/assistant/assistant.component.ts - 450 + 452 @@ -6310,14 +6300,14 @@ Approximation based on the top holdings of each ETF apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 335 + 337 By ETF Holding apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 328 + 330 @@ -6331,7 +6321,7 @@ Clone Activity libs/common/src/lib/routes/routes.ts - 164 + 169 @@ -6373,14 +6363,14 @@ Chart apps/client/src/app/components/home-holdings/home-holdings.component.ts - 67 + 71 Table apps/client/src/app/components/home-holdings/home-holdings.component.ts - 62 + 66 @@ -6587,15 +6577,15 @@ Error apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 844 + 846 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 921 + 923 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 943 + 945 @@ -6626,11 +6616,11 @@ apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html - 143 + 152 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 117 + 118 apps/client/src/app/pages/accounts/transfer-balance/transfer-balance-dialog.html @@ -6638,7 +6628,7 @@ apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html - 321 + 323 apps/client/src/app/pages/register/user-account-registration-dialog/user-account-registration-dialog.html @@ -6702,7 +6692,7 @@ apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html - 145 + 154 apps/client/src/app/components/user-account-membership/user-account-membership.component.ts @@ -6714,11 +6704,11 @@ apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 119 + 120 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html - 323 + 325 libs/ui/src/lib/i18n.ts @@ -6736,7 +6726,7 @@ Oops! Could not update access. apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.component.ts - 354 + 409 @@ -6799,7 +6789,7 @@ Copy link to clipboard apps/client/src/app/components/access-table/access-table.component.html - 112 + 82 @@ -6946,7 +6936,7 @@ Shares Before apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 603 + 604 @@ -7000,7 +6990,7 @@ Oops! Could not find any assets. libs/ui/src/lib/symbol-autocomplete/symbol-autocomplete.component.html - 43 + 44 @@ -7050,7 +7040,7 @@ libs/common/src/lib/routes/routes.ts - 343 + 348 @@ -7058,11 +7048,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 338 + 343 libs/common/src/lib/routes/routes.ts - 341 + 346 @@ -7077,7 +7067,7 @@ libs/common/src/lib/routes/routes.ts - 351 + 356 @@ -7085,11 +7075,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 346 + 351 libs/common/src/lib/routes/routes.ts - 349 + 354 @@ -7117,7 +7107,7 @@ Do you really want to delete the API key? apps/client/src/app/components/admin-settings/admin-settings.component.ts - 148 + 151 @@ -7240,15 +7230,15 @@ apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html - 158 + 167 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 128 + 129 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html - 332 + 334 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html @@ -7291,7 +7281,7 @@ Please enter your Ghostfolio API key. apps/client/src/app/components/admin-settings/admin-settings.component.ts - 167 + 170 @@ -7312,7 +7302,7 @@ Link has been copied to the clipboard apps/client/src/app/components/access-table/access-table.component.ts - 161 + 137 @@ -7326,14 +7316,14 @@ Do you really want to convert the data source to ? apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 529 + 531 Default Market Price apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 644 + 645 @@ -7347,35 +7337,35 @@ Instant apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 298 + 300 Lazy apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 294 + 296 HTTP Request Headers apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 657 + 658 real-time apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 298 + 300 end of day apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 294 + 296 @@ -7476,7 +7466,7 @@ Additional requests are granted while you are setting up your instance apps/client/src/app/components/admin-settings/admin-settings.component.ts - 87 + 88 @@ -7547,7 +7537,7 @@ libs/common/src/lib/routes/routes.ts - 267 + 272 @@ -7555,11 +7545,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 262 + 267 libs/common/src/lib/routes/routes.ts - 265 + 270 @@ -7580,14 +7570,14 @@ () is already in use. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 963 + 965 An error occurred while updating to (). apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 807 + 809 @@ -7644,7 +7634,7 @@ libs/common/src/lib/routes/routes.ts - 140 + 145 @@ -7684,11 +7674,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 230 + 235 libs/common/src/lib/routes/routes.ts - 233 + 238 @@ -7793,7 +7783,7 @@ Quick Links libs/ui/src/lib/assistant/assistant.html - 58 + 59 @@ -7808,14 +7798,14 @@ libs/common/src/lib/routes/routes.ts - 281 + 286 Open Source Alternative to libs/common/src/lib/routes/routes.ts - 376 + 381 @@ -7844,15 +7834,15 @@ kebab-case libs/common/src/lib/routes/routes.ts - 362 + 367 libs/common/src/lib/routes/routes.ts - 365 + 370 libs/common/src/lib/routes/routes.ts - 373 + 378 @@ -7860,11 +7850,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 354 + 359 libs/common/src/lib/routes/routes.ts - 357 + 362 @@ -7935,7 +7925,7 @@ Current month apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 261 + 263 @@ -8062,11 +8052,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 386 + 391 libs/common/src/lib/routes/routes.ts - 387 + 392 @@ -8094,7 +8084,7 @@ Cryptocurrencies apps/client/src/app/components/markets/markets.component.ts - 54 + 58 apps/client/src/app/pages/features/features-page.html @@ -8105,7 +8095,7 @@ Stocks apps/client/src/app/components/markets/markets.component.ts - 53 + 57 apps/client/src/app/pages/features/features-page.html @@ -8134,7 +8124,7 @@ No results found... libs/ui/src/lib/assistant/assistant.html - 51 + 52 diff --git a/apps/client/src/locales/messages.zh.xlf b/apps/client/src/locales/messages.zh.xlf index d387c9495..7b1600c9e 100644 --- a/apps/client/src/locales/messages.zh.xlf +++ b/apps/client/src/locales/messages.zh.xlf @@ -8,31 +8,31 @@ kebab-case libs/common/src/lib/routes/routes.ts - 226 + 231 libs/common/src/lib/routes/routes.ts - 227 + 232 libs/common/src/lib/routes/routes.ts - 232 + 237 libs/common/src/lib/routes/routes.ts - 240 + 245 libs/common/src/lib/routes/routes.ts - 248 + 253 libs/common/src/lib/routes/routes.ts - 256 + 261 libs/common/src/lib/routes/routes.ts - 264 + 269 @@ -41,19 +41,19 @@ kebab-case libs/common/src/lib/routes/routes.ts - 284 + 289 libs/common/src/lib/routes/routes.ts - 285 + 290 libs/common/src/lib/routes/routes.ts - 289 + 294 libs/common/src/lib/routes/routes.ts - 295 + 300 @@ -62,11 +62,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 304 + 309 libs/common/src/lib/routes/routes.ts - 305 + 310 @@ -75,11 +75,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 238 + 243 libs/common/src/lib/routes/routes.ts - 241 + 246 @@ -88,11 +88,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 309 + 314 libs/common/src/lib/routes/routes.ts - 310 + 315 @@ -101,11 +101,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 319 + 324 libs/common/src/lib/routes/routes.ts - 320 + 325 @@ -114,11 +114,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 254 + 259 libs/common/src/lib/routes/routes.ts - 257 + 262 @@ -127,11 +127,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 329 + 334 libs/common/src/lib/routes/routes.ts - 330 + 335 @@ -140,31 +140,31 @@ kebab-case libs/common/src/lib/routes/routes.ts - 334 + 339 libs/common/src/lib/routes/routes.ts - 335 + 340 libs/common/src/lib/routes/routes.ts - 340 + 345 libs/common/src/lib/routes/routes.ts - 348 + 353 libs/common/src/lib/routes/routes.ts - 356 + 361 libs/common/src/lib/routes/routes.ts - 364 + 369 libs/common/src/lib/routes/routes.ts - 372 + 377 @@ -279,8 +279,8 @@ Details 详情 - apps/client/src/app/components/access-table/access-table.component.html - 49 + apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html + 137 @@ -288,7 +288,7 @@ 撤销 apps/client/src/app/components/access-table/access-table.component.html - 138 + 100 @@ -312,7 +312,7 @@ 您真的要撤销此访问权限吗? apps/client/src/app/components/access-table/access-table.component.ts - 177 + 153 @@ -362,6 +362,10 @@ apps/client/src/app/pages/accounts/transfer-balance/transfer-balance-dialog.html 7 + + libs/common/src/lib/routes/routes.ts + 99 + libs/ui/src/lib/accounts-table/accounts-table.component.html 10 @@ -536,7 +540,7 @@ 编辑 apps/client/src/app/components/access-table/access-table.component.html - 104 + 74 apps/client/src/app/components/admin-market-data/admin-market-data.html @@ -564,7 +568,7 @@ 删除 apps/client/src/app/components/access-table/access-table.component.html - 135 + 97 apps/client/src/app/components/admin-market-data/admin-market-data.html @@ -616,7 +620,7 @@ 您确定要删除此账户吗? libs/ui/src/lib/accounts-table/accounts-table.component.ts - 183 + 185 @@ -644,7 +648,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 495 + 496 @@ -752,7 +756,7 @@ Splits apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 518 + 519 @@ -784,7 +788,7 @@ 查找账户... libs/ui/src/lib/assistant/assistant.component.ts - 448 + 450 @@ -792,11 +796,11 @@ 日期 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 527 + 528 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 566 + 567 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -880,7 +884,7 @@ 将数据源转换为 时发生错误。 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 526 + 528 @@ -936,7 +940,7 @@ 数据采集频率 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 476 + 477 @@ -972,7 +976,7 @@ 应用当前市场价格 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html - 220 + 221 @@ -1132,7 +1136,7 @@ 更新活动 libs/common/src/lib/routes/routes.ts - 176 + 181 @@ -1164,7 +1168,7 @@ 刮削配置 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 634 + 635 @@ -1180,7 +1184,7 @@ apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html - 251 + 252 libs/ui/src/lib/accounts-table/accounts-table.component.html @@ -1223,14 +1227,6 @@ 18 - - Copy identifier to clipboard - Copy identifier to clipboard - - apps/client/src/app/components/access-table/access-table.component.html - 120 - - Name, symbol or ISIN 名称、代码或 ISIN @@ -1336,7 +1332,7 @@ Update Account libs/common/src/lib/routes/routes.ts - 101 + 106 @@ -1376,7 +1372,7 @@ 添加 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 621 + 622 apps/client/src/app/components/admin-overview/admin-overview.html @@ -1444,7 +1440,7 @@ 资产概况已保存 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 752 + 754 @@ -1476,7 +1472,7 @@ The data of this asset profile is moved to () and this asset profile is deleted. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 959 + 961 @@ -1492,7 +1488,7 @@ 当前年份 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 265 + 267 @@ -1632,11 +1628,11 @@ 无法验证表单 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 728 + 730 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 731 + 733 @@ -1676,7 +1672,7 @@ libs/common/src/lib/routes/routes.ts - 202 + 207 @@ -1728,7 +1724,7 @@ libs/common/src/lib/routes/routes.ts - 116 + 121 @@ -1760,7 +1756,7 @@ Split Ratio apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 532 + 533 @@ -1768,7 +1764,7 @@ 恐惧 apps/client/src/app/components/markets/markets.component.ts - 57 + 61 libs/ui/src/lib/i18n.ts @@ -1780,7 +1776,7 @@ 贪婪 apps/client/src/app/components/markets/markets.component.ts - 58 + 62 libs/ui/src/lib/i18n.ts @@ -1800,7 +1796,7 @@ An error occurred while merging this asset profile into (). apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 942 + 944 @@ -1896,7 +1892,7 @@ 当前周 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 257 + 259 @@ -2372,7 +2368,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 366 + 368 @@ -2380,11 +2376,11 @@ 年初至今 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 265 + 267 libs/ui/src/lib/assistant/assistant.component.ts - 378 + 380 @@ -2392,11 +2388,11 @@ 1年 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 269 + 271 libs/ui/src/lib/assistant/assistant.component.ts - 388 + 390 @@ -2412,11 +2408,11 @@ 5年 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 273 + 275 libs/ui/src/lib/assistant/assistant.component.ts - 410 + 412 @@ -2432,19 +2428,11 @@ 最大限度 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 277 + 279 libs/ui/src/lib/assistant/assistant.component.ts - 416 - - - - Identifier has been copied to the clipboard - Identifier has been copied to the clipboard - - apps/client/src/app/components/access-table/access-table.component.ts - 149 + 418 @@ -2756,7 +2744,7 @@ 用户身份 apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html - 116 + 113 apps/client/src/app/components/user-account-settings/user-account-settings.html @@ -2844,7 +2832,7 @@ libs/common/src/lib/routes/routes.ts - 270 + 275 @@ -2860,7 +2848,7 @@ libs/common/src/lib/routes/routes.ts - 235 + 240 @@ -2876,7 +2864,7 @@ libs/common/src/lib/routes/routes.ts - 243 + 248 @@ -2892,7 +2880,7 @@ libs/common/src/lib/routes/routes.ts - 259 + 264 @@ -2964,19 +2952,19 @@ libs/common/src/lib/routes/routes.ts - 104 + 109 libs/ui/src/lib/assistant/assistant.html - 84 + 85 Oops, cash balance transfer has failed. 糟糕,现金余额转账失败。 - apps/client/src/app/pages/accounts/accounts-page.component.ts - 199 + apps/client/src/app/pages/accounts/account-dialog-host/account-dialog-host.component.ts + 365 @@ -3000,7 +2988,7 @@ 帐户ID apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 108 + 109 @@ -3124,11 +3112,11 @@ libs/common/src/lib/routes/routes.ts - 143 + 148 libs/common/src/lib/routes/routes.ts - 220 + 225 @@ -3240,7 +3228,7 @@ libs/common/src/lib/routes/routes.ts - 275 + 280 @@ -3248,11 +3236,11 @@ 无法解析抓取器配置 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 676 + 678 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 679 + 681 @@ -3304,7 +3292,7 @@ libs/common/src/lib/routes/routes.ts - 301 + 306 @@ -3332,7 +3320,7 @@ libs/common/src/lib/routes/routes.ts - 306 + 311 @@ -3512,15 +3500,15 @@ libs/common/src/lib/routes/routes.ts - 125 + 130 libs/common/src/lib/routes/routes.ts - 217 + 222 libs/ui/src/lib/assistant/assistant.html - 110 + 111 @@ -3528,7 +3516,7 @@ This action cannot be undone. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 961 + 963 @@ -3548,7 +3536,7 @@ libs/common/src/lib/routes/routes.ts - 135 + 140 @@ -3580,15 +3568,15 @@ libs/common/src/lib/routes/routes.ts - 130 + 135 libs/common/src/lib/routes/routes.ts - 311 + 316 libs/common/src/lib/routes/routes.ts - 359 + 364 @@ -4088,7 +4076,7 @@ 添加活动 libs/common/src/lib/routes/routes.ts - 169 + 174 @@ -4136,7 +4124,7 @@ Do you really want to merge this asset profile into it? apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 965 + 967 @@ -4280,7 +4268,7 @@ libs/common/src/lib/routes/routes.ts - 179 + 184 libs/ui/src/lib/accounts-table/accounts-table.component.html @@ -4504,7 +4492,7 @@ Shares After apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 590 + 591 @@ -4532,7 +4520,7 @@ 您确定要把此资产概况转换为 () 吗? apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 809 + 811 @@ -4548,7 +4536,7 @@ libs/common/src/lib/routes/routes.ts - 184 + 189 @@ -4564,7 +4552,7 @@ 按平台 apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 39 + 41 @@ -4572,7 +4560,7 @@ 按货币 apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 58 + 60 @@ -4580,7 +4568,7 @@ 按资产类别 apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 80 + 82 @@ -4588,7 +4576,7 @@ 通过持有 apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 102 + 104 @@ -4596,7 +4584,7 @@ 按部门 apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 125 + 127 @@ -4604,7 +4592,7 @@ 按大陆 apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 148 + 150 @@ -4612,7 +4600,7 @@ 按市场 apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 170 + 172 @@ -4620,7 +4608,7 @@ 区域 apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 193 + 195 apps/client/src/app/pages/public/public-page.html @@ -4648,7 +4636,7 @@ 发达市场 apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 216 + 218 apps/client/src/app/pages/public/public-page.html @@ -4668,7 +4656,7 @@ 新兴市场 apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 226 + 228 apps/client/src/app/pages/public/public-page.html @@ -4680,7 +4668,7 @@ 其他市场 apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 236 + 238 apps/client/src/app/pages/public/public-page.html @@ -4692,7 +4680,7 @@ 按帐户 apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 283 + 285 @@ -4700,7 +4688,7 @@ 按 ETF 提供商 apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 303 + 305 @@ -4708,7 +4696,7 @@ 按国家/地区 apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 261 + 263 @@ -4720,7 +4708,7 @@ libs/common/src/lib/routes/routes.ts - 189 + 194 @@ -4888,7 +4876,7 @@ libs/common/src/lib/routes/routes.ts - 321 + 326 @@ -4912,7 +4900,7 @@ Do you really want to remove this received access? apps/client/src/app/components/access-table/access-table.component.ts - 176 + 152 @@ -4936,7 +4924,7 @@ 每小时 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 249 + 251 @@ -5092,11 +5080,11 @@ 无法保存资产概况 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 762 + 764 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 765 + 767 @@ -5148,7 +5136,7 @@ libs/common/src/lib/routes/routes.ts - 331 + 336 @@ -5180,7 +5168,7 @@ libs/common/src/lib/routes/routes.ts - 379 + 384 @@ -5189,11 +5177,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 370 + 375 libs/common/src/lib/routes/routes.ts - 374 + 379 @@ -5529,7 +5517,7 @@ libs/common/src/lib/routes/routes.ts - 382 + 387 @@ -5681,7 +5669,7 @@ libs/ui/src/lib/assistant/assistant.html - 140 + 141 @@ -5689,7 +5677,7 @@ 组合筛选器 apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html - 128 + 125 @@ -5785,7 +5773,7 @@ This asset profile cannot be merged into (). apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 920 + 922 @@ -5865,7 +5853,7 @@ 帐户 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.component.ts - 102 + 109 libs/common/src/lib/routes/routes.ts @@ -5909,7 +5897,7 @@ apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html - 266 + 268 libs/ui/src/lib/i18n.ts @@ -5941,7 +5929,7 @@ apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html - 285 + 287 libs/ui/src/lib/i18n.ts @@ -6057,7 +6045,7 @@ libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 460 + 462 @@ -6201,7 +6189,7 @@ 费用 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html - 238 + 239 libs/ui/src/lib/activities-table/activities-table.component.html @@ -6417,7 +6405,7 @@ 无可用数据 apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 247 + 249 apps/client/src/app/pages/public/public-page.html @@ -6429,11 +6417,11 @@ libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 462 + 464 libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 476 + 478 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -6453,7 +6441,7 @@ 日期范围 libs/ui/src/lib/assistant/assistant.html - 170 + 171 @@ -6461,7 +6449,7 @@ 当前市场价格为 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 854 + 856 @@ -6477,7 +6465,7 @@ 哎呀!无法授予访问权限。 apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.component.ts - 256 + 311 @@ -6593,7 +6581,7 @@ 今年迄今为止 libs/ui/src/lib/assistant/assistant.component.ts - 378 + 380 @@ -6601,7 +6589,7 @@ 本周至今 libs/ui/src/lib/assistant/assistant.component.ts - 370 + 372 @@ -6609,7 +6597,7 @@ 本月至今 libs/ui/src/lib/assistant/assistant.component.ts - 374 + 376 @@ -6617,11 +6605,11 @@ 本月至今 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 261 + 263 libs/ui/src/lib/assistant/assistant.component.ts - 374 + 376 @@ -6637,11 +6625,11 @@ 本周至今 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 257 + 259 libs/ui/src/lib/assistant/assistant.component.ts - 370 + 372 @@ -6673,7 +6661,7 @@ 重置过滤器 libs/ui/src/lib/assistant/assistant.html - 204 + 205 @@ -6681,7 +6669,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 269 + 271 apps/client/src/app/pages/resources/personal-finance-tools/product-page.html @@ -6693,7 +6681,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 388 + 390 @@ -6701,11 +6689,11 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 273 + 275 libs/ui/src/lib/assistant/assistant.component.ts - 410 + 412 @@ -6713,7 +6701,7 @@ 应用过滤器 libs/ui/src/lib/assistant/assistant.html - 217 + 218 @@ -6722,11 +6710,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 293 + 298 libs/common/src/lib/routes/routes.ts - 296 + 301 @@ -6738,7 +6726,7 @@ libs/common/src/lib/routes/routes.ts - 298 + 303 @@ -6758,7 +6746,7 @@ 查找持仓... libs/ui/src/lib/assistant/assistant.component.ts - 449 + 451 @@ -6778,7 +6766,7 @@ libs/common/src/lib/routes/routes.ts - 290 + 295 @@ -6786,7 +6774,7 @@ 每天 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 245 + 247 @@ -6810,7 +6798,7 @@ 已关闭 apps/client/src/app/components/home-holdings/home-holdings.component.ts - 74 + 78 @@ -6818,7 +6806,7 @@ 活跃 apps/client/src/app/components/home-holdings/home-holdings.component.ts - 73 + 77 @@ -6894,7 +6882,7 @@ 国际化 libs/common/src/lib/routes/routes.ts - 149 + 154 @@ -6910,7 +6898,7 @@ 跳转到页面... libs/ui/src/lib/assistant/assistant.component.ts - 450 + 452 @@ -6934,7 +6922,7 @@ 按 ETF 持仓 apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 328 + 330 @@ -6942,7 +6930,7 @@ 基于每个 ETF 的主要持仓的近似值 apps/client/src/app/pages/portfolio/allocations/allocations-page.html - 335 + 337 @@ -6958,7 +6946,7 @@ 克隆活动 libs/common/src/lib/routes/routes.ts - 164 + 169 @@ -7006,7 +6994,7 @@ 表格 apps/client/src/app/components/home-holdings/home-holdings.component.ts - 62 + 66 @@ -7014,7 +7002,7 @@ 图表 apps/client/src/app/components/home-holdings/home-holdings.component.ts - 67 + 71 @@ -7242,15 +7230,15 @@ 错误 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 844 + 846 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 921 + 923 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 943 + 945 @@ -7274,7 +7262,7 @@ 哎呀!无法更新访问权限。 apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.component.ts - 354 + 409 @@ -7314,11 +7302,11 @@ apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html - 143 + 152 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 117 + 118 apps/client/src/app/pages/accounts/transfer-balance/transfer-balance-dialog.html @@ -7326,7 +7314,7 @@ apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html - 321 + 323 apps/client/src/app/pages/register/user-account-registration-dialog/user-account-registration-dialog.html @@ -7370,7 +7358,7 @@ apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html - 145 + 154 apps/client/src/app/components/user-account-membership/user-account-membership.component.ts @@ -7382,11 +7370,11 @@ apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 119 + 120 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html - 323 + 325 libs/ui/src/lib/i18n.ts @@ -7414,7 +7402,7 @@ 复制链接到剪贴板 apps/client/src/app/components/access-table/access-table.component.html - 112 + 82 @@ -7634,7 +7622,7 @@ Shares Before apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 603 + 604 @@ -7694,7 +7682,7 @@ 哎呀!找不到任何资产。 libs/ui/src/lib/symbol-autocomplete/symbol-autocomplete.component.html - 43 + 44 @@ -7750,7 +7738,7 @@ libs/common/src/lib/routes/routes.ts - 343 + 348 @@ -7766,7 +7754,7 @@ libs/common/src/lib/routes/routes.ts - 351 + 356 @@ -7775,11 +7763,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 346 + 351 libs/common/src/lib/routes/routes.ts - 349 + 354 @@ -7788,11 +7776,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 338 + 343 libs/common/src/lib/routes/routes.ts - 341 + 346 @@ -7832,7 +7820,7 @@ 您确定要删除此 API 密钥吗? apps/client/src/app/components/admin-settings/admin-settings.component.ts - 148 + 151 @@ -7960,15 +7948,15 @@ apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html - 158 + 167 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 128 + 129 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html - 332 + 334 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html @@ -8016,7 +8004,7 @@ 请输入您的 Ghostfolio API 密钥。 apps/client/src/app/components/admin-settings/admin-settings.component.ts - 167 + 170 @@ -8040,7 +8028,7 @@ 链接已复制到剪贴板 apps/client/src/app/components/access-table/access-table.component.ts - 161 + 137 @@ -8048,7 +8036,7 @@ 延迟 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 294 + 296 @@ -8056,7 +8044,7 @@ 即时 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 298 + 300 @@ -8064,7 +8052,7 @@ 默认市场价格 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 644 + 645 @@ -8080,7 +8068,7 @@ 您确定要把数据源转换为 吗? apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 529 + 531 @@ -8096,7 +8084,7 @@ HTTP 请求标头 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 657 + 658 @@ -8104,7 +8092,7 @@ 收盘 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 294 + 296 @@ -8112,7 +8100,7 @@ 实时 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 298 + 300 @@ -8240,7 +8228,7 @@ Additional requests are granted while you are setting up your instance apps/client/src/app/components/admin-settings/admin-settings.component.ts - 87 + 88 @@ -8309,11 +8297,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 262 + 267 libs/common/src/lib/routes/routes.ts - 265 + 270 @@ -8325,7 +8313,7 @@ libs/common/src/lib/routes/routes.ts - 267 + 272 @@ -8341,7 +8329,7 @@ () 已在使用中。 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 963 + 965 @@ -8349,7 +8337,7 @@ 在更新到 () 时发生错误。 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 807 + 809 @@ -8437,7 +8425,7 @@ libs/common/src/lib/routes/routes.ts - 140 + 145 @@ -8482,11 +8470,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 230 + 235 libs/common/src/lib/routes/routes.ts - 233 + 238 @@ -8606,7 +8594,7 @@ 快速链接 libs/ui/src/lib/assistant/assistant.html - 58 + 59 @@ -8622,7 +8610,7 @@ libs/common/src/lib/routes/routes.ts - 281 + 286 @@ -8630,7 +8618,7 @@ 开源替代方案 libs/common/src/lib/routes/routes.ts - 376 + 381 @@ -8663,15 +8651,15 @@ kebab-case libs/common/src/lib/routes/routes.ts - 362 + 367 libs/common/src/lib/routes/routes.ts - 365 + 370 libs/common/src/lib/routes/routes.ts - 373 + 378 @@ -8680,11 +8668,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 354 + 359 libs/common/src/lib/routes/routes.ts - 357 + 362 @@ -8764,7 +8752,7 @@ 当前月份 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 261 + 263 @@ -8909,11 +8897,11 @@ kebab-case libs/common/src/lib/routes/routes.ts - 386 + 391 libs/common/src/lib/routes/routes.ts - 387 + 392 @@ -8945,7 +8933,7 @@ 股票 apps/client/src/app/components/markets/markets.component.ts - 53 + 57 apps/client/src/app/pages/features/features-page.html @@ -8957,7 +8945,7 @@ 加密货币 apps/client/src/app/components/markets/markets.component.ts - 54 + 58 apps/client/src/app/pages/features/features-page.html @@ -9085,7 +9073,7 @@ 未找到结果... libs/ui/src/lib/assistant/assistant.html - 51 + 52 diff --git a/libs/common/src/lib/config.ts b/libs/common/src/lib/config.ts index 5e11f8ae1..77e854239 100644 --- a/libs/common/src/lib/config.ts +++ b/libs/common/src/lib/config.ts @@ -60,6 +60,8 @@ export const BULL_BOARD_ROUTE = '/admin/queues'; export const CACHE_TTL_NO_CACHE = 1; export const CACHE_TTL_INFINITE = 0; +export const COMMENT_MAXIMUM_LENGTH = 2000; + export const DATA_GATHERING_QUEUE = 'DATA_GATHERING_QUEUE'; export const DATA_GATHERING_QUEUE_PRIORITY_HIGH = 1; export const DATA_GATHERING_QUEUE_PRIORITY_LOW = Number.MAX_SAFE_INTEGER; @@ -342,6 +344,7 @@ export const REPLACE_NAME_PARTS = [ 'Xtrackers (IE) Plc -' ]; +export const SEARCH_QUERY_MAXIMUM_LENGTH = 255; export const SEARCH_QUERY_MINIMUM_LENGTH = 2; export const SECTORS = [ @@ -378,6 +381,8 @@ export const SUPPORTED_LANGUAGE_CODES = [ 'zh' ] as const; +export const SYMBOL_MAXIMUM_LENGTH = 255; + export const TAG_ID_DEMO = 'efa08cb3-9b9d-4974-ac68-db13a19c4874'; export const TAG_ID_DRAFT = '0c077abd-eca2-4cbb-818c-6cefbf2d169a'; export const TAG_ID_EMERGENCY_FUND = '4452656d-9fa4-4bd0-ba38-70492e31d180'; diff --git a/libs/common/src/lib/dtos/create-account.dto.ts b/libs/common/src/lib/dtos/create-account.dto.ts index ccadff5f9..92879dbb2 100644 --- a/libs/common/src/lib/dtos/create-account.dto.ts +++ b/libs/common/src/lib/dtos/create-account.dto.ts @@ -1,3 +1,4 @@ +import { COMMENT_MAXIMUM_LENGTH } from '@ghostfolio/common/config'; import { IsCurrencyCode } from '@ghostfolio/common/validators/is-currency-code'; import { Transform, TransformFnParams } from 'class-transformer'; @@ -7,6 +8,7 @@ import { IsNumber, IsOptional, IsString, + MaxLength, ValidateIf } from 'class-validator'; import { isString } from 'lodash'; @@ -22,6 +24,7 @@ export class CreateAccountDto { @IsOptional() @IsString() + @MaxLength(COMMENT_MAXIMUM_LENGTH) @Transform(({ value }: TransformFnParams) => isString(value) ? value.trim() : value ) diff --git a/libs/common/src/lib/dtos/create-asset-profile.dto.ts b/libs/common/src/lib/dtos/create-asset-profile.dto.ts index 17a9d12b9..4197137fb 100644 --- a/libs/common/src/lib/dtos/create-asset-profile.dto.ts +++ b/libs/common/src/lib/dtos/create-asset-profile.dto.ts @@ -1,3 +1,7 @@ +import { + COMMENT_MAXIMUM_LENGTH, + SYMBOL_MAXIMUM_LENGTH +} from '@ghostfolio/common/config'; import { IsCurrencyCode } from '@ghostfolio/common/validators/is-currency-code'; import { AssetClass, AssetSubClass, DataSource, Prisma } from '@prisma/client'; @@ -9,6 +13,7 @@ import { IsOptional, IsString, IsUrl, + MaxLength, ValidateNested } from 'class-validator'; @@ -27,6 +32,7 @@ export class CreateAssetProfileDto { @IsOptional() @IsString() + @MaxLength(COMMENT_MAXIMUM_LENGTH) comment?: string; @IsArray() @@ -82,6 +88,7 @@ export class CreateAssetProfileDto { sectors?: Prisma.InputJsonArray; @IsString() + @MaxLength(SYMBOL_MAXIMUM_LENGTH) symbol: string; @IsOptional() diff --git a/libs/common/src/lib/dtos/create-order.dto.ts b/libs/common/src/lib/dtos/create-order.dto.ts index c70b66b02..1345f418a 100644 --- a/libs/common/src/lib/dtos/create-order.dto.ts +++ b/libs/common/src/lib/dtos/create-order.dto.ts @@ -1,3 +1,7 @@ +import { + COMMENT_MAXIMUM_LENGTH, + SYMBOL_MAXIMUM_LENGTH +} from '@ghostfolio/common/config'; import { IsAfter1970Constraint } from '@ghostfolio/common/validator-constraints/is-after-1970'; import { IsCurrencyCode } from '@ghostfolio/common/validators/is-currency-code'; @@ -12,6 +16,7 @@ import { IsNumber, IsOptional, IsString, + MaxLength, Min, Validate } from 'class-validator'; @@ -32,6 +37,7 @@ export class CreateOrderDto { @IsOptional() @IsString() + @MaxLength(COMMENT_MAXIMUM_LENGTH) @Transform(({ value }: TransformFnParams) => isString(value) ? value.trim() : value ) @@ -61,6 +67,7 @@ export class CreateOrderDto { quantity: number; @IsString() + @MaxLength(SYMBOL_MAXIMUM_LENGTH) symbol: string; @ArrayUnique() diff --git a/libs/common/src/lib/dtos/create-watchlist-item.dto.ts b/libs/common/src/lib/dtos/create-watchlist-item.dto.ts index 663965ef1..78808a024 100644 --- a/libs/common/src/lib/dtos/create-watchlist-item.dto.ts +++ b/libs/common/src/lib/dtos/create-watchlist-item.dto.ts @@ -1,10 +1,13 @@ +import { SYMBOL_MAXIMUM_LENGTH } from '@ghostfolio/common/config'; + import { DataSource } from '@prisma/client'; -import { IsEnum, IsString } from 'class-validator'; +import { IsEnum, IsString, MaxLength } from 'class-validator'; export class CreateWatchlistItemDto { @IsEnum(DataSource) dataSource: DataSource; @IsString() + @MaxLength(SYMBOL_MAXIMUM_LENGTH) symbol: string; } diff --git a/libs/common/src/lib/dtos/update-account.dto.ts b/libs/common/src/lib/dtos/update-account.dto.ts index 4e1570aad..deec684aa 100644 --- a/libs/common/src/lib/dtos/update-account.dto.ts +++ b/libs/common/src/lib/dtos/update-account.dto.ts @@ -1,3 +1,4 @@ +import { COMMENT_MAXIMUM_LENGTH } from '@ghostfolio/common/config'; import { IsCurrencyCode } from '@ghostfolio/common/validators/is-currency-code'; import { Transform, TransformFnParams } from 'class-transformer'; @@ -7,6 +8,7 @@ import { IsNumber, IsOptional, IsString, + MaxLength, ValidateIf } from 'class-validator'; import { isString } from 'lodash'; @@ -22,6 +24,7 @@ export class UpdateAccountDto { @IsOptional() @IsString() + @MaxLength(COMMENT_MAXIMUM_LENGTH) @Transform(({ value }: TransformFnParams) => isString(value) ? value.trim() : value ) diff --git a/libs/common/src/lib/dtos/update-asset-profile.dto.ts b/libs/common/src/lib/dtos/update-asset-profile.dto.ts index a8eaad608..965778761 100644 --- a/libs/common/src/lib/dtos/update-asset-profile.dto.ts +++ b/libs/common/src/lib/dtos/update-asset-profile.dto.ts @@ -1,3 +1,7 @@ +import { + COMMENT_MAXIMUM_LENGTH, + SYMBOL_MAXIMUM_LENGTH +} from '@ghostfolio/common/config'; import { IsCurrencyCode } from '@ghostfolio/common/validators/is-currency-code'; import { @@ -16,6 +20,7 @@ import { IsOptional, IsString, IsUrl, + MaxLength, ValidateNested } from 'class-validator'; @@ -35,6 +40,7 @@ export class UpdateAssetProfileDto { @IsOptional() @IsString() + @MaxLength(COMMENT_MAXIMUM_LENGTH) comment?: string | null; @IsArray() @@ -83,6 +89,7 @@ export class UpdateAssetProfileDto { @IsOptional() @IsString() + @MaxLength(SYMBOL_MAXIMUM_LENGTH) symbol?: string; @IsObject() diff --git a/libs/common/src/lib/dtos/update-order.dto.ts b/libs/common/src/lib/dtos/update-order.dto.ts index d8fdbe66b..69d993559 100644 --- a/libs/common/src/lib/dtos/update-order.dto.ts +++ b/libs/common/src/lib/dtos/update-order.dto.ts @@ -1,3 +1,7 @@ +import { + COMMENT_MAXIMUM_LENGTH, + SYMBOL_MAXIMUM_LENGTH +} from '@ghostfolio/common/config'; import { IsAfter1970Constraint } from '@ghostfolio/common/validator-constraints/is-after-1970'; import { IsCurrencyCode } from '@ghostfolio/common/validators/is-currency-code'; @@ -11,6 +15,7 @@ import { IsNumber, IsOptional, IsString, + MaxLength, Min, Validate } from 'class-validator'; @@ -31,6 +36,7 @@ export class UpdateOrderDto { @IsOptional() @IsString() + @MaxLength(COMMENT_MAXIMUM_LENGTH) @Transform(({ value }: TransformFnParams) => isString(value) ? value.trim() : value ) @@ -62,6 +68,7 @@ export class UpdateOrderDto { quantity: number; @IsString() + @MaxLength(SYMBOL_MAXIMUM_LENGTH) symbol: string; @ArrayUnique() diff --git a/libs/common/src/lib/personal-finance-tools.ts b/libs/common/src/lib/personal-finance-tools.ts index 1339ea907..d0d7a92ba 100644 --- a/libs/common/src/lib/personal-finance-tools.ts +++ b/libs/common/src/lib/personal-finance-tools.ts @@ -1590,6 +1590,26 @@ export const personalFinanceTools: Product[] = [ slogan: 'The Intelligent Portfolio Tracker', url: 'https://www.navexa.com' }, + { + categories: [ + 'BUDGETING', + 'CRYPTOCURRENCY', + 'ETF_TRACKING', + 'FINANCIAL_PLANNING', + 'NET_WORTH_TRACKING', + 'STOCK_TRACKING' + ], + hasFreePlan: true, + hasSelfHostingAbility: false, + key: 'neontra', + languages: ['English'], + name: 'Neontra', + origin: 'CA', + platforms: ['ANDROID', 'IOS', 'WEB'], + pricingPerYear: '$75', + slogan: 'Everything you own. Everything you owe. Everything in one place.', + url: 'https://neontra.com' + }, { categories: ['INVESTMENT_RESEARCH', 'STOCK_TRACKING'], hasFreePlan: true, diff --git a/libs/common/src/lib/routes/routes.ts b/libs/common/src/lib/routes/routes.ts index 6985ba04f..3d7429760 100644 --- a/libs/common/src/lib/routes/routes.ts +++ b/libs/common/src/lib/routes/routes.ts @@ -93,6 +93,11 @@ export const internalRoutes = { }, title: $localize`Account` }, + transferCashBalance: { + path: 'transfer-cash-balance', + routerLink: ['/accounts', 'transfer-cash-balance'], + title: $localize`Transfer Cash Balance` + }, update: { path: 'update', routerLink: (aAccountId: string) => { diff --git a/libs/ui/src/lib/accounts-table/accounts-table.component.html b/libs/ui/src/lib/accounts-table/accounts-table.component.html index 2719f05a0..a01abff1a 100644 --- a/libs/ui/src/lib/accounts-table/accounts-table.component.html +++ b/libs/ui/src/lib/accounts-table/accounts-table.component.html @@ -4,7 +4,7 @@ class="align-items-center d-flex" mat-stroked-button [disabled]="dataSource?.data.length < 2" - (click)="onTransferBalance()" + [routerLink]="transferCashBalanceRouterLink" > Transfer Cash Balance... diff --git a/libs/ui/src/lib/accounts-table/accounts-table.component.ts b/libs/ui/src/lib/accounts-table/accounts-table.component.ts index 48eb99d51..e98693290 100644 --- a/libs/ui/src/lib/accounts-table/accounts-table.component.ts +++ b/libs/ui/src/lib/accounts-table/accounts-table.component.ts @@ -75,7 +75,6 @@ export class GfAccountsTableComponent { public readonly totalValueInBaseCurrency = input(); public readonly accountDeleted = output(); - public readonly transferBalance = output(); public readonly sort = viewChild.required(MatSort); @@ -141,6 +140,9 @@ export class GfAccountsTableComponent { protected readonly isLoading = computed(() => !this.accounts()); + protected readonly transferCashBalanceRouterLink = + internalRoutes.accounts.subRoutes.transferCashBalance.routerLink; + private readonly notificationService = inject(NotificationService); private readonly router = inject(Router); @@ -197,8 +199,4 @@ export class GfAccountsTableComponent { title: aComment }); } - - protected onTransferBalance() { - this.transferBalance.emit(); - } } diff --git a/libs/ui/src/lib/assistant/assistant.component.ts b/libs/ui/src/lib/assistant/assistant.component.ts index f612a2cad..bdbaa6cdb 100644 --- a/libs/ui/src/lib/assistant/assistant.component.ts +++ b/libs/ui/src/lib/assistant/assistant.component.ts @@ -1,3 +1,4 @@ +import { SEARCH_QUERY_MAXIMUM_LENGTH } from '@ghostfolio/common/config'; import { Filter, PortfolioPosition, User } from '@ghostfolio/common/interfaces'; import { InternalRoute } from '@ghostfolio/common/routes/interfaces/internal-route.interface'; import { internalRoutes } from '@ghostfolio/common/routes/routes'; @@ -130,6 +131,7 @@ export class GfAssistantComponent implements OnChanges, OnDestroy, OnInit { ); public searchFormControl = new FormControl(''); + public readonly SEARCH_QUERY_MAXIMUM_LENGTH = SEARCH_QUERY_MAXIMUM_LENGTH; public searchResults: SearchResults = { accounts: [], diff --git a/libs/ui/src/lib/assistant/assistant.html b/libs/ui/src/lib/assistant/assistant.html index 79e2f31a1..9c5fd5601 100644 --- a/libs/ui/src/lib/assistant/assistant.html +++ b/libs/ui/src/lib/assistant/assistant.html @@ -13,6 +13,7 @@ name="search" type="text" [formControl]="searchFormControl" + [maxlength]="SEARCH_QUERY_MAXIMUM_LENGTH" [placeholder]="placeholder" /> @if (deviceType !== 'mobile' && !searchFormControl.value) { diff --git a/libs/ui/src/lib/symbol-autocomplete/symbol-autocomplete.component.html b/libs/ui/src/lib/symbol-autocomplete/symbol-autocomplete.component.html index d786d724d..5e23c558a 100644 --- a/libs/ui/src/lib/symbol-autocomplete/symbol-autocomplete.component.html +++ b/libs/ui/src/lib/symbol-autocomplete/symbol-autocomplete.component.html @@ -4,6 +4,7 @@ matInput [formControl]="control" [matAutocomplete]="symbolAutocomplete" + [maxlength]="SEARCH_QUERY_MAXIMUM_LENGTH" /> ('symbolAutocomplete'); diff --git a/package-lock.json b/package-lock.json index 2cb547964..e3dd692ea 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "ghostfolio", - "version": "3.65.0", + "version": "3.66.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "ghostfolio", - "version": "3.65.0", + "version": "3.66.0", "hasInstallScript": true, "license": "AGPL-3.0", "dependencies": { @@ -47,9 +47,9 @@ "@nestjs/serve-static": "5.0.5", "@nestjs/throttler": "6.5.0", "@openrouter/ai-sdk-provider": "3.0.0", - "@prisma/adapter-pg": "7.9.1", - "@prisma/client": "7.9.1", - "@rekog/mcp-nest": "2.0.0", + "@prisma/adapter-pg": "7.10.0", + "@prisma/client": "7.10.0", + "@rekog/mcp-nest": "2.0.2", "@simplewebauthn/browser": "13.3.0", "@simplewebauthn/server": "13.3.1", "ai": "7.0.37", @@ -134,7 +134,7 @@ "@nx/storybook": "23.1.1", "@nx/web": "23.1.1", "@nx/workspace": "23.1.1", - "@prisma/config": "7.9.1", + "@prisma/config": "7.10.0", "@schematics/angular": "22.1.4", "@storybook/addon-docs": "10.5.7", "@storybook/addon-themes": "10.5.7", @@ -165,7 +165,7 @@ "nx": "23.1.1", "prettier": "3.9.6", "prettier-plugin-organize-attributes": "1.0.0", - "prisma": "7.9.1", + "prisma": "7.10.0", "react": "18.2.0", "react-dom": "18.2.0", "replace-in-file": "9.0.0", @@ -13186,24 +13186,24 @@ } }, "node_modules/@prisma/adapter-pg": { - "version": "7.9.1", - "resolved": "https://registry.npmjs.org/@prisma/adapter-pg/-/adapter-pg-7.9.1.tgz", - "integrity": "sha512-Ho2RK1KanQxLNSC0sR5bpiiVep10sWPLXCcxK+KXfI/Q69TMRbiafSvLPv3V9snimX72rMCqGlyJ4sBO4lKTAw==", + "version": "7.10.0", + "resolved": "https://registry.npmjs.org/@prisma/adapter-pg/-/adapter-pg-7.10.0.tgz", + "integrity": "sha512-N7nwSor0HO1Kz6xBv0TPAjAPysKK0fac6p4fVN3ensLOuzc/83Fgmln5k92eK/cvzqdkSR/2kkAqlbcdwVrwpw==", "license": "Apache-2.0", "dependencies": { - "@prisma/driver-adapter-utils": "7.9.1", + "@prisma/driver-adapter-utils": "7.10.0", "@types/pg": "^8.16.0", "pg": "^8.16.3", "postgres-array": "3.0.4" } }, "node_modules/@prisma/client": { - "version": "7.9.1", - "resolved": "https://registry.npmjs.org/@prisma/client/-/client-7.9.1.tgz", - "integrity": "sha512-+xgrh2EhJVF79wC0yX5G4PI1Rdcm7Qn/nekNQ+t/O153wtNggruHal+fXHSa0QE+Tp/Cw5wvxeCEhZZ59xGm8Q==", + "version": "7.10.0", + "resolved": "https://registry.npmjs.org/@prisma/client/-/client-7.10.0.tgz", + "integrity": "sha512-Ubw/QS9JGIBSBUsyxAUQuK/Jcu0Tsva7le7QbLd91Kix9yJvYDdj5QkwgEbbZniH80dd+sziQcALPc+HnvQC8Q==", "license": "Apache-2.0", "dependencies": { - "@prisma/client-runtime-utils": "7.9.1" + "@prisma/client-runtime-utils": "7.10.0" }, "engines": { "node": "^20.19 || ^22.12 || >=24.0" @@ -13222,15 +13222,15 @@ } }, "node_modules/@prisma/client-runtime-utils": { - "version": "7.9.1", - "resolved": "https://registry.npmjs.org/@prisma/client-runtime-utils/-/client-runtime-utils-7.9.1.tgz", - "integrity": "sha512-mVIBGYdO5CFmK0HvjxrtfIyQQcPdb88pSCeVQriVQPVZyDovIWblpHfOgcS8QO187j3QF0ePArH8qPhp0AU2vg==", + "version": "7.10.0", + "resolved": "https://registry.npmjs.org/@prisma/client-runtime-utils/-/client-runtime-utils-7.10.0.tgz", + "integrity": "sha512-cnCy7lUV8/CctgKVEmqAbSLAmwqJdE/qAlqTBk/0NDk59zEb2cZ0M0M0E4vVPnqbSEYudRroQDvOWfUZH6RIfw==", "license": "Apache-2.0" }, "node_modules/@prisma/config": { - "version": "7.9.1", - "resolved": "https://registry.npmjs.org/@prisma/config/-/config-7.9.1.tgz", - "integrity": "sha512-4znKhxTmXmuPye9Z6pbIyYb5VZlkZ05qG1L6Dr4g+7oTwc6V50Bs9XirFBDdjWt+H/AabMn9aUnxBcvj8z05aA==", + "version": "7.10.0", + "resolved": "https://registry.npmjs.org/@prisma/config/-/config-7.10.0.tgz", + "integrity": "sha512-Rcg828gIRE3HOQ3pOATFjV5d/P0U9OIobxhd/IMxlfWjA4vru0eGwb0AIwFw0rmcLMVShohZYWPixVxkBHsxUA==", "devOptional": true, "license": "Apache-2.0", "dependencies": { @@ -13241,9 +13241,9 @@ } }, "node_modules/@prisma/debug": { - "version": "7.9.1", - "resolved": "https://registry.npmjs.org/@prisma/debug/-/debug-7.9.1.tgz", - "integrity": "sha512-/cpVZ4itxtcgB8GHBvZtcmuEjq+lWsLrRJxFMbwZrT1RIdtuKmUm7PPGo/wzfbYpBrk+9WmmBE8CHJw2rybKDQ==", + "version": "7.10.0", + "resolved": "https://registry.npmjs.org/@prisma/debug/-/debug-7.10.0.tgz", + "integrity": "sha512-caygJKtltmRIgdJ3jRpkOr7yM4DW6zxo5uOmojKWFb3asnxWoRkQOwZmXBgD8FZp4htrX+nMpcWqDwzlQ1+Y4g==", "license": "Apache-2.0" }, "node_modules/@prisma/dev": { @@ -13271,65 +13271,65 @@ } }, "node_modules/@prisma/driver-adapter-utils": { - "version": "7.9.1", - "resolved": "https://registry.npmjs.org/@prisma/driver-adapter-utils/-/driver-adapter-utils-7.9.1.tgz", - "integrity": "sha512-vmHehG7nn/heW32DXXpp13DxxAxVVe6n250oEt3dOL2E/4bt3olktKZN0mzSuxMMronyMSkbeW2uCOn3F4g8RQ==", + "version": "7.10.0", + "resolved": "https://registry.npmjs.org/@prisma/driver-adapter-utils/-/driver-adapter-utils-7.10.0.tgz", + "integrity": "sha512-u8zkcRLlaryO652T4qavBg0HmzNW5tSKdsCn6hc1PhWAp/J6k0vrxLuUs+b9o+HcjsK7Dfa01o4OFSn0frauJA==", "license": "Apache-2.0", "dependencies": { - "@prisma/debug": "7.9.1" + "@prisma/debug": "7.10.0" } }, "node_modules/@prisma/engines": { - "version": "7.9.1", - "resolved": "https://registry.npmjs.org/@prisma/engines/-/engines-7.9.1.tgz", - "integrity": "sha512-UprXSMNXx2NF5ow4pqaQtE8OuBz6K78B0wc0tn2L28G5r933iWp1DR9Do2qWrsNvvFIP3x6mpEWnQtckMO0Uhg==", + "version": "7.10.0", + "resolved": "https://registry.npmjs.org/@prisma/engines/-/engines-7.10.0.tgz", + "integrity": "sha512-KNumN6NHFwybvfdYzTee9pqwx5PvknpWAaHn6L5NsbrKdl+SQrsVZs9opKs6U6SAsvB26HDt3WybRjOhgoWOYQ==", "devOptional": true, "hasInstallScript": true, "license": "Apache-2.0", "dependencies": { - "@prisma/debug": "7.9.1", - "@prisma/engines-version": "7.9.0-1.e922089b7d7502aff4249d5da3420f6fa55fc6ad", - "@prisma/fetch-engine": "7.9.1", - "@prisma/get-platform": "7.9.1" + "@prisma/debug": "7.10.0", + "@prisma/engines-version": "7.10.0-4.0edf323efd1d98336f3f0a68684b56f689b900d3", + "@prisma/fetch-engine": "7.10.0", + "@prisma/get-platform": "7.10.0" } }, "node_modules/@prisma/engines-version": { - "version": "7.9.0-1.e922089b7d7502aff4249d5da3420f6fa55fc6ad", - "resolved": "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-7.9.0-1.e922089b7d7502aff4249d5da3420f6fa55fc6ad.tgz", - "integrity": "sha512-2BsPPFksz3CQUXG6af3rVCtJKg6+JJGJTtfgu2fU8DdXhOfkBjulCq8mwybCd6ge0/jhZq2kOtLAbmUDMyI1nA==", + "version": "7.10.0-4.0edf323efd1d98336f3f0a68684b56f689b900d3", + "resolved": "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-7.10.0-4.0edf323efd1d98336f3f0a68684b56f689b900d3.tgz", + "integrity": "sha512-8OJ6RuZTZ06eFUOtBwxVmv8XMmOW6HWN5F+uxUbZkGxR0Bfab1dfAdXaHPmR5mb59E+fmUo8IOzXlbLY1SClbw==", "devOptional": true, "license": "Apache-2.0" }, "node_modules/@prisma/engines/node_modules/@prisma/get-platform": { - "version": "7.9.1", - "resolved": "https://registry.npmjs.org/@prisma/get-platform/-/get-platform-7.9.1.tgz", - "integrity": "sha512-PK8R60YZRQvYxBrGG9i7l2/rFyzy+2MuI1dKtmtrCqPH8YpiJx/MfiC7LRzX5786rZDEv7BngcjfIJW4/9ADuw==", + "version": "7.10.0", + "resolved": "https://registry.npmjs.org/@prisma/get-platform/-/get-platform-7.10.0.tgz", + "integrity": "sha512-0bra1LFYi8xNw0yqV62bHJNQk4BKleOngZiqPWIQc7a3+9q6rqsnqJ15BuepP8943PFMvtmgnP52juZsyYkA6w==", "devOptional": true, "license": "Apache-2.0", "dependencies": { - "@prisma/debug": "7.9.1" + "@prisma/debug": "7.10.0" } }, "node_modules/@prisma/fetch-engine": { - "version": "7.9.1", - "resolved": "https://registry.npmjs.org/@prisma/fetch-engine/-/fetch-engine-7.9.1.tgz", - "integrity": "sha512-9DwxrNTeT25Orbu9CWh0CZvVlyY1lmscpbaeLZcOnuR7zcuFrt91YSmmOfIm7zJ08YOZ6mVzURKwLoMwEBcK8w==", + "version": "7.10.0", + "resolved": "https://registry.npmjs.org/@prisma/fetch-engine/-/fetch-engine-7.10.0.tgz", + "integrity": "sha512-Zqyu8DY14t6W/xwmAxUYWCXtHrvQnSvT644EAZSsdM8NSmCS74vJJbBKdVsK3ucFpnUWkEpbO1a0CxJXrg130g==", "devOptional": true, "license": "Apache-2.0", "dependencies": { - "@prisma/debug": "7.9.1", - "@prisma/engines-version": "7.9.0-1.e922089b7d7502aff4249d5da3420f6fa55fc6ad", - "@prisma/get-platform": "7.9.1" + "@prisma/debug": "7.10.0", + "@prisma/engines-version": "7.10.0-4.0edf323efd1d98336f3f0a68684b56f689b900d3", + "@prisma/get-platform": "7.10.0" } }, "node_modules/@prisma/fetch-engine/node_modules/@prisma/get-platform": { - "version": "7.9.1", - "resolved": "https://registry.npmjs.org/@prisma/get-platform/-/get-platform-7.9.1.tgz", - "integrity": "sha512-PK8R60YZRQvYxBrGG9i7l2/rFyzy+2MuI1dKtmtrCqPH8YpiJx/MfiC7LRzX5786rZDEv7BngcjfIJW4/9ADuw==", + "version": "7.10.0", + "resolved": "https://registry.npmjs.org/@prisma/get-platform/-/get-platform-7.10.0.tgz", + "integrity": "sha512-0bra1LFYi8xNw0yqV62bHJNQk4BKleOngZiqPWIQc7a3+9q6rqsnqJ15BuepP8943PFMvtmgnP52juZsyYkA6w==", "devOptional": true, "license": "Apache-2.0", "dependencies": { - "@prisma/debug": "7.9.1" + "@prisma/debug": "7.10.0" } }, "node_modules/@prisma/get-platform": { @@ -13587,9 +13587,9 @@ } }, "node_modules/@rekog/mcp-nest": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@rekog/mcp-nest/-/mcp-nest-2.0.0.tgz", - "integrity": "sha512-lT5V26V4fvPay50zMiw2KrEqlDSuzdAeyoQFd0+vfAwb40G6H8p8psTzgq5atTgNHktRPI7u4x8lrm8X844Asg==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@rekog/mcp-nest/-/mcp-nest-2.0.2.tgz", + "integrity": "sha512-kuye6wmRk5Gw4KZSCSXd83cWznRw4eFbvNUXsd8+1dYcS4uWKVVbRvxQIKNCyxc2UcljpsmLpnksr1NCRn3YAQ==", "license": "MIT", "dependencies": { "multer": "^2.2.0", @@ -30547,16 +30547,16 @@ } }, "node_modules/prisma": { - "version": "7.9.1", - "resolved": "https://registry.npmjs.org/prisma/-/prisma-7.9.1.tgz", - "integrity": "sha512-aPqePoZIqwlAchbgbFDO/wHqGB+7H1nj9gaM+OsL9h77S5S3TnLd9BgD3LnoeDikULo7cl2HSUrEyQ55Z7DYbg==", + "version": "7.10.0", + "resolved": "https://registry.npmjs.org/prisma/-/prisma-7.10.0.tgz", + "integrity": "sha512-o0ornyJOWgygVAzGCpr8PdXV8EJLHyVGDDUr/voBQt8Azzw8cYTByzzPGcA/m4tCkPcnJA8raEOv2CslsKhPEw==", "devOptional": true, "hasInstallScript": true, "license": "Apache-2.0", "dependencies": { - "@prisma/config": "7.9.1", + "@prisma/config": "7.10.0", "@prisma/dev": "0.24.17", - "@prisma/engines": "7.9.1", + "@prisma/engines": "7.10.0", "@prisma/studio-core": "0.33.0", "mysql2": "3.15.3", "postgres": "3.4.7" diff --git a/package.json b/package.json index 920ba8ba1..453944c84 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ghostfolio", - "version": "3.65.0", + "version": "3.66.0", "homepage": "https://ghostfol.io", "license": "AGPL-3.0", "repository": "https://github.com/ghostfolio/ghostfolio", @@ -91,9 +91,9 @@ "@nestjs/serve-static": "5.0.5", "@nestjs/throttler": "6.5.0", "@openrouter/ai-sdk-provider": "3.0.0", - "@prisma/adapter-pg": "7.9.1", - "@prisma/client": "7.9.1", - "@rekog/mcp-nest": "2.0.0", + "@prisma/adapter-pg": "7.10.0", + "@prisma/client": "7.10.0", + "@rekog/mcp-nest": "2.0.2", "@simplewebauthn/browser": "13.3.0", "@simplewebauthn/server": "13.3.1", "ai": "7.0.37", @@ -178,7 +178,7 @@ "@nx/storybook": "23.1.1", "@nx/web": "23.1.1", "@nx/workspace": "23.1.1", - "@prisma/config": "7.9.1", + "@prisma/config": "7.10.0", "@schematics/angular": "22.1.4", "@storybook/addon-docs": "10.5.7", "@storybook/addon-themes": "10.5.7", @@ -209,7 +209,7 @@ "nx": "23.1.1", "prettier": "3.9.6", "prettier-plugin-organize-attributes": "1.0.0", - "prisma": "7.9.1", + "prisma": "7.10.0", "react": "18.2.0", "react-dom": "18.2.0", "replace-in-file": "9.0.0",