From 8cd72885ea9116ea118ef3ec603a9efefd9bee50 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Thu, 7 Aug 2025 19:21:36 +0200 Subject: [PATCH 01/62] Feature/extend personal finance tools 20250806 (#5326) * Various updates * Add Gasti --- libs/common/src/lib/personal-finance-tools.ts | 33 +++++++++++++++---- libs/ui/src/lib/i18n.ts | 1 + 2 files changed, 28 insertions(+), 6 deletions(-) diff --git a/libs/common/src/lib/personal-finance-tools.ts b/libs/common/src/lib/personal-finance-tools.ts index 51d847300..ae341f03a 100644 --- a/libs/common/src/lib/personal-finance-tools.ts +++ b/libs/common/src/lib/personal-finance-tools.ts @@ -107,7 +107,7 @@ export const personalFinanceTools: Product[] = [ key: 'capitally', name: 'Capitally', origin: 'Poland', - pricingPerYear: '€50', + pricingPerYear: '€80', slogan: 'Optimize your investments performance' }, { @@ -163,7 +163,7 @@ export const personalFinanceTools: Product[] = [ key: 'copilot-money', name: 'Copilot Money', origin: 'United States', - pricingPerYear: '$70', + pricingPerYear: '$95', slogan: 'Do money better with Copilot' }, { @@ -364,6 +364,24 @@ export const personalFinanceTools: Product[] = [ pricingPerYear: '$65', slogan: 'Take control over your investments' }, + { + hasFreePlan: true, + hasSelfHostingAbility: false, + key: 'gasti', + languages: [ + 'Deutsch', + 'English', + 'Español', + 'Français', + 'Italiano', + 'Português' + ], + name: 'Gasti', + origin: 'Argentina', + pricingPerYear: '$60', + regions: ['Global'], + slogan: 'Take control of your finances from WhatsApp' + }, { founded: 2020, hasFreePlan: true, @@ -450,7 +468,7 @@ export const personalFinanceTools: Product[] = [ key: 'kubera', name: 'Kubera®', origin: 'United States', - pricingPerYear: '$150', + pricingPerYear: '$249', slogan: 'The Time Machine for your Net Worth' }, { @@ -493,7 +511,10 @@ export const personalFinanceTools: Product[] = [ }, { founded: 2021, + hasFreePlan: false, + hasSelfHostingAbility: true, isArchived: true, + isOpenSource: true, key: 'maybe-finance', languages: ['English'], name: 'Maybe Finance', @@ -609,7 +630,7 @@ export const personalFinanceTools: Product[] = [ name: 'Parqet', note: 'Originally named as Tresor One', origin: 'Germany', - pricingPerYear: '€88', + pricingPerYear: '€99.99', regions: ['Austria', 'Germany', 'Switzerland'], slogan: 'Dein Vermögen immer im Blick' }, @@ -989,7 +1010,7 @@ export const personalFinanceTools: Product[] = [ key: 'ynab', name: 'YNAB (You Need a Budget)', origin: 'United States', - pricingPerYear: '$99', + pricingPerYear: '$109', slogan: 'Change Your Relationship With Money' }, { @@ -999,7 +1020,7 @@ export const personalFinanceTools: Product[] = [ key: 'ziggma', name: 'Ziggma', origin: 'United States', - pricingPerYear: '$90', + pricingPerYear: '$84', slogan: 'Your solution for investing success' } ]; diff --git a/libs/ui/src/lib/i18n.ts b/libs/ui/src/lib/i18n.ts index 2b68063e6..8007dc53e 100644 --- a/libs/ui/src/lib/i18n.ts +++ b/libs/ui/src/lib/i18n.ts @@ -74,6 +74,7 @@ const locales = { // Countries Armenia: $localize`Armenia`, + Argentina: $localize`Argentina`, Australia: $localize`Australia`, Austria: $localize`Austria`, Belgium: $localize`Belgium`, From 7613b5451429b0162a8afb786be4d73d95a6a2ad Mon Sep 17 00:00:00 2001 From: Attila Cseh <77381875+csehatt741@users.noreply.github.com> Date: Thu, 7 Aug 2025 19:23:40 +0200 Subject: [PATCH 02/62] Feature/extend activities import by tags (#5287) * Extend activities import by tags * Update changelog --- CHANGELOG.md | 6 ++ .../src/app/endpoints/tags/create-tag.dto.ts | 4 + apps/api/src/app/import/import-data.dto.ts | 7 ++ apps/api/src/app/import/import.controller.ts | 1 + apps/api/src/app/import/import.module.ts | 2 + apps/api/src/app/import/import.service.ts | 96 ++++++++++++++++++- apps/api/src/app/order/create-order.dto.ts | 10 +- .../order/interfaces/activities.interface.ts | 1 + apps/api/src/app/order/order.controller.ts | 6 ++ apps/api/src/app/order/order.service.ts | 12 +-- apps/api/src/app/order/update-order.dto.ts | 10 +- .../roai/portfolio-calculator-btceur.spec.ts | 4 + .../roai/portfolio-calculator-btcusd.spec.ts | 4 + ...ulator-novn-buy-and-sell-partially.spec.ts | 4 + ...folio-calculator-novn-buy-and-sell.spec.ts | 4 + ...ate-or-update-activity-dialog.component.ts | 4 +- .../import-activities-dialog.component.ts | 9 +- .../app/services/import-activities.service.ts | 26 ++++- 18 files changed, 173 insertions(+), 37 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 838d5350e..5f0267a53 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,12 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## Unreleased + +### Changed + +- Extended the import functionality by tags + ## 2.189.0 - 2025-08-05 ### Changed diff --git a/apps/api/src/app/endpoints/tags/create-tag.dto.ts b/apps/api/src/app/endpoints/tags/create-tag.dto.ts index 09c29d25a..b41c37a50 100644 --- a/apps/api/src/app/endpoints/tags/create-tag.dto.ts +++ b/apps/api/src/app/endpoints/tags/create-tag.dto.ts @@ -1,6 +1,10 @@ import { IsOptional, IsString } from 'class-validator'; export class CreateTagDto { + @IsOptional() + @IsString() + id?: string; + @IsString() name: string; diff --git a/apps/api/src/app/import/import-data.dto.ts b/apps/api/src/app/import/import-data.dto.ts index 138d16961..330bc52f6 100644 --- a/apps/api/src/app/import/import-data.dto.ts +++ b/apps/api/src/app/import/import-data.dto.ts @@ -3,6 +3,7 @@ import { CreateOrderDto } from '@ghostfolio/api/app/order/create-order.dto'; import { Type } from 'class-transformer'; import { IsArray, IsOptional, ValidateNested } from 'class-validator'; +import { CreateTagDto } from '../endpoints/tags/create-tag.dto'; import { CreateAccountWithBalancesDto } from './create-account-with-balances.dto'; import { CreateAssetProfileWithMarketDataDto } from './create-asset-profile-with-market-data.dto'; @@ -23,4 +24,10 @@ export class ImportDataDto { @Type(() => CreateAssetProfileWithMarketDataDto) @ValidateNested({ each: true }) assetProfiles?: CreateAssetProfileWithMarketDataDto[]; + + @IsArray() + @IsOptional() + @Type(() => CreateTagDto) + @ValidateNested({ each: true }) + tags?: CreateTagDto[]; } diff --git a/apps/api/src/app/import/import.controller.ts b/apps/api/src/app/import/import.controller.ts index 8c06bdc6d..2681444df 100644 --- a/apps/api/src/app/import/import.controller.ts +++ b/apps/api/src/app/import/import.controller.ts @@ -74,6 +74,7 @@ export class ImportController { accountsWithBalancesDto: importData.accounts ?? [], activitiesDto: importData.activities, assetProfilesWithMarketDataDto: importData.assetProfiles ?? [], + tagsDto: importData.tags ?? [], user: this.request.user }); diff --git a/apps/api/src/app/import/import.module.ts b/apps/api/src/app/import/import.module.ts index fb6c29fc5..88990af2e 100644 --- a/apps/api/src/app/import/import.module.ts +++ b/apps/api/src/app/import/import.module.ts @@ -13,6 +13,7 @@ import { MarketDataModule } from '@ghostfolio/api/services/market-data/market-da import { PrismaModule } from '@ghostfolio/api/services/prisma/prisma.module'; import { DataGatheringModule } from '@ghostfolio/api/services/queues/data-gathering/data-gathering.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'; @@ -35,6 +36,7 @@ import { ImportService } from './import.service'; PrismaModule, RedisCacheModule, SymbolProfileModule, + TagModule, TransformDataSourceInRequestModule, TransformDataSourceInResponseModule ], diff --git a/apps/api/src/app/import/import.service.ts b/apps/api/src/app/import/import.service.ts index ef9d25f53..a9fe898b9 100644 --- a/apps/api/src/app/import/import.service.ts +++ b/apps/api/src/app/import/import.service.ts @@ -13,12 +13,14 @@ import { DataProviderService } from '@ghostfolio/api/services/data-provider/data import { MarketDataService } from '@ghostfolio/api/services/market-data/market-data.service'; import { DataGatheringService } from '@ghostfolio/api/services/queues/data-gathering/data-gathering.service'; import { SymbolProfileService } from '@ghostfolio/api/services/symbol-profile/symbol-profile.service'; +import { TagService } from '@ghostfolio/api/services/tag/tag.service'; import { DATA_GATHERING_QUEUE_PRIORITY_HIGH } from '@ghostfolio/common/config'; import { getAssetProfileIdentifier, parseDate } from '@ghostfolio/common/helper'; import { AssetProfileIdentifier } from '@ghostfolio/common/interfaces'; +import { hasPermission, permissions } from '@ghostfolio/common/permissions'; import { AccountWithPlatform, OrderWithAccount, @@ -46,7 +48,8 @@ export class ImportService { private readonly orderService: OrderService, private readonly platformService: PlatformService, private readonly portfolioService: PortfolioService, - private readonly symbolProfileService: SymbolProfileService + private readonly symbolProfileService: SymbolProfileService, + private readonly tagService: TagService ) {} public async getDividends({ @@ -154,6 +157,7 @@ export class ImportService { assetProfilesWithMarketDataDto, isDryRun = false, maxActivitiesToImport, + tagsDto, user }: { accountsWithBalancesDto: ImportDataDto['accounts']; @@ -161,10 +165,12 @@ export class ImportService { assetProfilesWithMarketDataDto: ImportDataDto['assetProfiles']; isDryRun?: boolean; maxActivitiesToImport: number; + tagsDto: ImportDataDto['tags']; user: UserWithSettings; }): Promise { const accountIdMapping: { [oldAccountId: string]: string } = {}; const assetProfileSymbolMapping: { [oldSymbol: string]: string } = {}; + const tagIdMapping: { [oldTagId: string]: string } = {}; const userCurrency = user.settings.settings.baseCurrency; if (!isDryRun && accountsWithBalancesDto?.length) { @@ -293,6 +299,50 @@ export class ImportService { } } + if (tagsDto?.length) { + const existingTagsOfUser = await this.tagService.getTagsForUser(user.id); + + const canCreateOwnTag = hasPermission( + user.permissions, + permissions.createOwnTag + ); + + for (const tag of tagsDto) { + const existingTagOfUser = existingTagsOfUser.find(({ id }) => { + return id === tag.id; + }); + + if (!existingTagOfUser || existingTagOfUser.userId !== null) { + if (!canCreateOwnTag) { + throw new Error( + `Insufficient permissions to create custom tag ("${tag.name}")` + ); + } + + if (!isDryRun) { + const existingTag = await this.tagService.getTag({ id: tag.id }); + let oldTagId: string; + + if (existingTag) { + oldTagId = tag.id; + delete tag.id; + } + + const tagObject: Prisma.TagCreateInput = { + ...tag, + user: { connect: { id: user.id } } + }; + + const newTag = await this.tagService.createTag(tagObject); + + if (existingTag && oldTagId) { + tagIdMapping[oldTagId] = newTag.id; + } + } + } + } + } + for (const activity of activitiesDto) { if (!activity.dataSource) { if (['FEE', 'INTEREST', 'LIABILITY'].includes(activity.type)) { @@ -313,6 +363,11 @@ export class ImportService { if (assetProfileSymbolMapping[activity.symbol]) { activity.symbol = assetProfileSymbolMapping[activity.symbol]; } + + // If a new tag is created, then update the tag ID in all activities + activity.tags = (activity.tags ?? []).map((tagId) => { + return tagIdMapping[tagId] ?? tagId; + }); } } @@ -340,6 +395,24 @@ export class ImportService { }); } + const tags = (await this.tagService.getTagsForUser(user.id)).map( + ({ id, name }) => { + return { id, name }; + } + ); + + if (isDryRun) { + tagsDto + .filter(({ id }) => { + return !tags.some(({ id: tagId }) => { + return tagId === id; + }); + }) + .forEach(({ id, name }) => { + tags.push({ id, name }); + }); + } + const activities: Activity[] = []; for (const activity of activitiesExtendedWithErrors) { @@ -351,6 +424,7 @@ export class ImportService { const fee = activity.fee; const quantity = activity.quantity; const SymbolProfile = activity.SymbolProfile; + const tagIds = activity.tagIds ?? []; const type = activity.type; const unitPrice = activity.unitPrice; @@ -388,11 +462,17 @@ export class ImportService { const validatedAccount = accounts.find(({ id }) => { return id === accountId; }); + const validatedTags = tags.filter(({ id: tagId }) => { + return tagIds.some((activityTagId) => { + return activityTagId === tagId; + }); + }); let order: | OrderWithAccount - | (Omit & { - Account?: { id: string; name: string }; + | (Omit & { + account?: { id: string; name: string }; + tags?: { id: string; name: string }[]; }); if (isDryRun) { @@ -404,7 +484,7 @@ export class ImportService { quantity, type, unitPrice, - Account: validatedAccount, + account: validatedAccount, accountId: validatedAccount?.id, accountUserId: undefined, createdAt: new Date(), @@ -436,6 +516,7 @@ export class ImportService { userId: dataSource === 'MANUAL' ? user.id : undefined }, symbolProfileId: undefined, + tags: validatedTags, updatedAt: new Date(), userId: user.id }; @@ -469,6 +550,9 @@ export class ImportService { } } }, + tags: validatedTags.map(({ id }) => { + return { id }; + }), updateAccountBalance: false, user: { connect: { id: user.id } }, userId: user.id @@ -546,6 +630,7 @@ export class ImportService { fee, quantity, symbol, + tags, type, unitPrice }) => { @@ -594,7 +679,8 @@ export class ImportService { isActive: true, sectors: undefined, updatedAt: undefined - } + }, + tagIds: tags }; } ); diff --git a/apps/api/src/app/order/create-order.dto.ts b/apps/api/src/app/order/create-order.dto.ts index c2b10fd81..af87fd93e 100644 --- a/apps/api/src/app/order/create-order.dto.ts +++ b/apps/api/src/app/order/create-order.dto.ts @@ -1,13 +1,7 @@ import { IsCurrencyCode } from '@ghostfolio/api/validators/is-currency-code'; import { IsAfter1970Constraint } from '@ghostfolio/common/validator-constraints/is-after-1970'; -import { - AssetClass, - AssetSubClass, - DataSource, - Tag, - Type -} from '@prisma/client'; +import { AssetClass, AssetSubClass, DataSource, Type } from '@prisma/client'; import { Transform, TransformFnParams } from 'class-transformer'; import { IsArray, @@ -70,7 +64,7 @@ export class CreateOrderDto { @IsArray() @IsOptional() - tags?: Tag[]; + tags?: string[]; @IsEnum(Type, { each: true }) type: Type; diff --git a/apps/api/src/app/order/interfaces/activities.interface.ts b/apps/api/src/app/order/interfaces/activities.interface.ts index 99dd87fea..01a5a60f0 100644 --- a/apps/api/src/app/order/interfaces/activities.interface.ts +++ b/apps/api/src/app/order/interfaces/activities.interface.ts @@ -14,6 +14,7 @@ export interface Activity extends Order { feeInAssetProfileCurrency: number; feeInBaseCurrency: number; SymbolProfile?: EnhancedSymbolProfile; + tagIds?: string[]; tags?: Tag[]; unitPriceInAssetProfileCurrency: number; updateAccountBalance?: boolean; diff --git a/apps/api/src/app/order/order.controller.ts b/apps/api/src/app/order/order.controller.ts index 9bd45050e..ffed8ac2e 100644 --- a/apps/api/src/app/order/order.controller.ts +++ b/apps/api/src/app/order/order.controller.ts @@ -217,6 +217,9 @@ export class OrderController { } } }, + tags: data.tags?.map((id) => { + return { id }; + }), user: { connect: { id: this.request.user.id } }, userId: this.request.user.id }); @@ -293,6 +296,9 @@ export class OrderController { name: data.symbol } }, + tags: data.tags?.map((id) => { + return { id }; + }), user: { connect: { id: this.request.user.id } } }, where: { diff --git a/apps/api/src/app/order/order.service.ts b/apps/api/src/app/order/order.service.ts index e9d72233e..fd50f5e74 100644 --- a/apps/api/src/app/order/order.service.ts +++ b/apps/api/src/app/order/order.service.ts @@ -97,7 +97,7 @@ export class OrderService { assetSubClass?: AssetSubClass; currency?: string; symbol?: string; - tags?: Tag[]; + tags?: { id: string }[]; updateAccountBalance?: boolean; userId: string; } @@ -201,9 +201,7 @@ export class OrderService { account, isDraft, tags: { - connect: tags.map(({ id }) => { - return { id }; - }) + connect: tags } }, include: { SymbolProfile: true } @@ -658,7 +656,7 @@ export class OrderService { assetSubClass?: AssetSubClass; currency?: string; symbol?: string; - tags?: Tag[]; + tags?: { id: string }[]; type?: ActivityType; }; where: Prisma.OrderWhereUniqueInput; @@ -720,9 +718,7 @@ export class OrderService { ...data, isDraft, tags: { - connect: tags.map(({ id }) => { - return { id }; - }) + connect: tags } } }); diff --git a/apps/api/src/app/order/update-order.dto.ts b/apps/api/src/app/order/update-order.dto.ts index eabd1f418..25c92532a 100644 --- a/apps/api/src/app/order/update-order.dto.ts +++ b/apps/api/src/app/order/update-order.dto.ts @@ -1,13 +1,7 @@ import { IsCurrencyCode } from '@ghostfolio/api/validators/is-currency-code'; import { IsAfter1970Constraint } from '@ghostfolio/common/validator-constraints/is-after-1970'; -import { - AssetClass, - AssetSubClass, - DataSource, - Tag, - Type -} from '@prisma/client'; +import { AssetClass, AssetSubClass, DataSource, Type } from '@prisma/client'; import { Transform, TransformFnParams } from 'class-transformer'; import { IsArray, @@ -71,7 +65,7 @@ export class UpdateOrderDto { @IsArray() @IsOptional() - tags?: Tag[]; + tags?: string[]; @IsString() type: Type; diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btceur.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btceur.spec.ts index 3594b4427..ad64cb383 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btceur.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btceur.spec.ts @@ -18,6 +18,7 @@ import { PortfolioSnapshotServiceMock } from '@ghostfolio/api/services/queues/po import { parseDate } from '@ghostfolio/common/helper'; import { PerformanceCalculationType } from '@ghostfolio/common/types/performance-calculation-type.type'; +import { Tag } from '@prisma/client'; import { Big } from 'big.js'; import { join } from 'path'; @@ -108,6 +109,9 @@ describe('PortfolioCalculator', () => { name: 'Bitcoin', symbol: activity.symbol }, + tags: activity.tags?.map((id) => { + return { id } as Tag; + }), unitPriceInAssetProfileCurrency: 44558.42 })); diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btcusd.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btcusd.spec.ts index d1d9fbd93..d17fd028a 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btcusd.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btcusd.spec.ts @@ -18,6 +18,7 @@ import { PortfolioSnapshotServiceMock } from '@ghostfolio/api/services/queues/po import { parseDate } from '@ghostfolio/common/helper'; import { PerformanceCalculationType } from '@ghostfolio/common/types/performance-calculation-type.type'; +import { Tag } from '@prisma/client'; import { Big } from 'big.js'; import { join } from 'path'; @@ -108,6 +109,9 @@ describe('PortfolioCalculator', () => { name: 'Bitcoin', symbol: activity.symbol }, + tags: activity.tags?.map((id) => { + return { id } as Tag; + }), unitPriceInAssetProfileCurrency: 44558.42 })); diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-novn-buy-and-sell-partially.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-novn-buy-and-sell-partially.spec.ts index 96bbbc757..18455477e 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-novn-buy-and-sell-partially.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-novn-buy-and-sell-partially.spec.ts @@ -18,6 +18,7 @@ import { PortfolioSnapshotServiceMock } from '@ghostfolio/api/services/queues/po import { parseDate } from '@ghostfolio/common/helper'; import { PerformanceCalculationType } from '@ghostfolio/common/types/performance-calculation-type.type'; +import { Tag } from '@prisma/client'; import { Big } from 'big.js'; import { join } from 'path'; @@ -111,6 +112,9 @@ describe('PortfolioCalculator', () => { name: 'Novartis AG', symbol: activity.symbol }, + tags: activity.tags?.map((id) => { + return { id } as Tag; + }), unitPriceInAssetProfileCurrency: activity.unitPrice })); diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-novn-buy-and-sell.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-novn-buy-and-sell.spec.ts index c19f6917e..e20400cb7 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-novn-buy-and-sell.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-novn-buy-and-sell.spec.ts @@ -18,6 +18,7 @@ import { PortfolioSnapshotServiceMock } from '@ghostfolio/api/services/queues/po import { parseDate } from '@ghostfolio/common/helper'; import { PerformanceCalculationType } from '@ghostfolio/common/types/performance-calculation-type.type'; +import { Tag } from '@prisma/client'; import { Big } from 'big.js'; import { join } from 'path'; @@ -111,6 +112,9 @@ describe('PortfolioCalculator', () => { name: 'Novartis AG', symbol: activity.symbol }, + tags: activity.tags?.map((id) => { + return { id } as Tag; + }), unitPriceInAssetProfileCurrency: activity.unitPrice })); 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 656e4a88f..f2da26246 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 @@ -495,7 +495,9 @@ export class GfCreateOrUpdateActivityDialog implements OnDestroy { ? undefined : this.activityForm.get('searchSymbol')?.value?.symbol) ?? this.activityForm.get('name')?.value, - tags: this.activityForm.get('tags').value, + tags: this.activityForm.get('tags').value?.map(({ id }) => { + return id; + }), type: this.activityForm.get('type').value, unitPrice: this.activityForm.get('unitPrice').value }; diff --git a/apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts b/apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts index 660e7265e..41e366253 100644 --- a/apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts +++ b/apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts @@ -1,3 +1,4 @@ +import { CreateTagDto } from '@ghostfolio/api/app/endpoints/tags/create-tag.dto'; import { CreateAccountWithBalancesDto } from '@ghostfolio/api/app/import/create-account-with-balances.dto'; import { CreateAssetProfileWithMarketDataDto } from '@ghostfolio/api/app/import/create-asset-profile-with-market-data.dto'; import { Activity } from '@ghostfolio/api/app/order/interfaces/activities.interface'; @@ -94,6 +95,7 @@ export class GfImportActivitiesDialog implements OnDestroy { public sortColumn = 'date'; public sortDirection: SortDirection = 'desc'; public stepperOrientation: StepperOrientation; + public tags: CreateTagDto[] = []; public totalItems: number; private unsubscribeSubject = new Subject(); @@ -169,7 +171,8 @@ export class GfImportActivitiesDialog implements OnDestroy { await this.importActivitiesService.importSelectedActivities({ accounts: this.accounts, activities: this.selectedActivities, - assetProfiles: this.assetProfiles + assetProfiles: this.assetProfiles, + tags: this.tags }); this.snackBar.open( @@ -297,6 +300,7 @@ export class GfImportActivitiesDialog implements OnDestroy { this.accounts = content.accounts; this.assetProfiles = content.assetProfiles; + this.tags = content.tags; if (!isArray(content.activities)) { if (isArray(content.orders)) { @@ -328,7 +332,8 @@ export class GfImportActivitiesDialog implements OnDestroy { accounts: content.accounts, activities: content.activities, assetProfiles: content.assetProfiles, - isDryRun: true + isDryRun: true, + tags: content.tags }); this.activities = activities; this.dataSource = new MatTableDataSource(activities.reverse()); diff --git a/apps/client/src/app/services/import-activities.service.ts b/apps/client/src/app/services/import-activities.service.ts index 033ae7e24..27a34652b 100644 --- a/apps/client/src/app/services/import-activities.service.ts +++ b/apps/client/src/app/services/import-activities.service.ts @@ -1,3 +1,4 @@ +import { CreateTagDto } from '@ghostfolio/api/app/endpoints/tags/create-tag.dto'; import { CreateAccountWithBalancesDto } from '@ghostfolio/api/app/import/create-account-with-balances.dto'; import { CreateAssetProfileWithMarketDataDto } from '@ghostfolio/api/app/import/create-asset-profile-with-market-data.dto'; import { CreateOrderDto } from '@ghostfolio/api/app/order/create-order.dto'; @@ -75,12 +76,14 @@ export class ImportActivitiesService { accounts, activities, assetProfiles, - isDryRun = false + isDryRun = false, + tags }: { activities: CreateOrderDto[]; accounts?: CreateAccountWithBalancesDto[]; assetProfiles?: CreateAssetProfileWithMarketDataDto[]; isDryRun?: boolean; + tags?: CreateTagDto[]; }): Promise<{ activities: Activity[]; }> { @@ -89,7 +92,8 @@ export class ImportActivitiesService { { accounts, activities, - assetProfiles + assetProfiles, + tags }, isDryRun ) @@ -110,11 +114,13 @@ export class ImportActivitiesService { public importSelectedActivities({ accounts, activities, - assetProfiles + assetProfiles, + tags }: { accounts?: CreateAccountWithBalancesDto[]; activities: Activity[]; assetProfiles?: CreateAssetProfileWithMarketDataDto[]; + tags?: CreateTagDto[]; }): Promise<{ activities: Activity[]; }> { @@ -124,7 +130,12 @@ export class ImportActivitiesService { importData.push(this.convertToCreateOrderDto(activity)); } - return this.importJson({ accounts, assetProfiles, activities: importData }); + return this.importJson({ + accounts, + assetProfiles, + tags, + activities: importData + }); } private convertToCreateOrderDto({ @@ -135,6 +146,7 @@ export class ImportActivitiesService { fee, quantity, SymbolProfile, + tags, type, unitPrice, updateAccountBalance @@ -150,7 +162,10 @@ export class ImportActivitiesService { currency: currency ?? SymbolProfile.currency, dataSource: SymbolProfile.dataSource, date: date.toString(), - symbol: SymbolProfile.symbol + symbol: SymbolProfile.symbol, + tags: tags?.map(({ id }) => { + return id; + }) }; } @@ -391,6 +406,7 @@ export class ImportActivitiesService { accounts?: CreateAccountWithBalancesDto[]; activities: CreateOrderDto[]; assetProfiles?: CreateAssetProfileWithMarketDataDto[]; + tags?: CreateTagDto[]; }, aIsDryRun = false ) { From 1fd1be16741ea1bcd045f296c9ff527b86e45772 Mon Sep 17 00:00:00 2001 From: Lukas Bauer Date: Thu, 7 Aug 2025 11:54:05 -0600 Subject: [PATCH 03/62] Feature/improve language localization for PL 20250807 (#5330) * Improve language localization for PL * Update changelog --- CHANGELOG.md | 1 + apps/client/src/locales/messages.pl.xlf | 30 ++++++++++++------------- 2 files changed, 16 insertions(+), 15 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5f0267a53..bd9a73498 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed - Extended the import functionality by tags +- Improved the language localization for Polish (`pl`) ## 2.189.0 - 2025-08-05 diff --git a/apps/client/src/locales/messages.pl.xlf b/apps/client/src/locales/messages.pl.xlf index 65e363299..4f7454649 100644 --- a/apps/client/src/locales/messages.pl.xlf +++ b/apps/client/src/locales/messages.pl.xlf @@ -3684,7 +3684,7 @@ Exclude from Analysis - Exclude from Analysis + Wyklucz z analizy apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html 90 @@ -7480,7 +7480,7 @@ Fuel your self-hosted Ghostfolio with a powerful data provider to access 80,000+ tickers from over 50 exchanges worldwide. - Fuel your self-hosted Ghostfolio with a powerful data provider to access 80,000+ tickers from over 50 exchanges worldwide. + Zasilać swój Ghostfolio self‑hosted za pomocą potężnego dostawcy danych, aby uzyskać dostęp do ponad 80,000 notowań z ponad 50 giełd na całym świecie. apps/client/src/app/components/admin-settings/admin-settings.component.html 16 @@ -7556,7 +7556,7 @@ Over ${thresholdMax}% of your current investment is at ${maxAccountName} (${maxInvestmentRatio}%) - Over ${thresholdMax}% of your current investment is at ${maxAccountName} (${maxInvestmentRatio}%) + Ponad ${thresholdMax}% twojej bieżącej inwestycji znajduje się na koncie ${maxAccountName} (${maxInvestmentRatio}%) apps/client/src/app/pages/i18n/i18n-page.html 17 @@ -7564,7 +7564,7 @@ The major part of your current investment is at ${maxAccountName} (${maxInvestmentRatio}%) and does not exceed ${thresholdMax}% - The major part of your current investment is at ${maxAccountName} (${maxInvestmentRatio}%) and does not exceed ${thresholdMax}% + Główna część twojej obecnej inwestycji znajduje się na koncie ${maxAccountName} (${maxInvestmentRatio}%) i nie przekracza ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html 24 @@ -7572,7 +7572,7 @@ Equity - Equity + Kapitał własny apps/client/src/app/pages/i18n/i18n-page.html 41 @@ -7580,7 +7580,7 @@ The equity contribution of your current investment (${equityValueRatio}%) exceeds ${thresholdMax}% - The equity contribution of your current investment (${equityValueRatio}%) exceeds ${thresholdMax}% + Udział kapitału własnego w twojej obecnej inwestycji (${equityValueRatio}%) przekracza ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html 43 @@ -7588,7 +7588,7 @@ The equity contribution of your current investment (${equityValueRatio}%) is below ${thresholdMin}% - The equity contribution of your current investment (${equityValueRatio}%) is below ${thresholdMin}% + Udział kapitału własnego w twojej obecnej inwestycji (${equityValueRatio}%) jest poniżej ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html 47 @@ -7596,7 +7596,7 @@ The equity contribution of your current investment (${equityValueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% - The equity contribution of your current investment (${equityValueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% + Udział kapitału własnego w twojej obecnej inwestycji (${equityValueRatio}%) mieści się w zakresie od ${thresholdMin}% do ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html 51 @@ -7604,7 +7604,7 @@ Fixed Income - Fixed Income + Dochód stały apps/client/src/app/pages/i18n/i18n-page.html 55 @@ -7612,7 +7612,7 @@ The fixed income contribution of your current investment (${fixedIncomeValueRatio}%) exceeds ${thresholdMax}% - The fixed income contribution of your current investment (${fixedIncomeValueRatio}%) exceeds ${thresholdMax}% + Udział dochodu stałego w twojej obecnej inwestycji (${fixedIncomeValueRatio}%) przekracza ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html 57 @@ -7620,7 +7620,7 @@ The fixed income contribution of your current investment (${fixedIncomeValueRatio}%) is below ${thresholdMin}% - The fixed income contribution of your current investment (${fixedIncomeValueRatio}%) is below ${thresholdMin}% + Udział dochodu stałego w twojej obecnej inwestycji (${fixedIncomeValueRatio}%) jest poniżej ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html 61 @@ -7628,7 +7628,7 @@ The fixed income contribution of your current investment (${fixedIncomeValueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% - The fixed income contribution of your current investment (${fixedIncomeValueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% + Udział dochodu stałego w twojej obecnej inwestycji (${fixedIncomeValueRatio}%) mieści się w zakresie od ${thresholdMin}% do ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html 66 @@ -7636,7 +7636,7 @@ Investment: Base Currency - Investment: Base Currency + Inwestycja: Waluta bazowa apps/client/src/app/pages/i18n/i18n-page.html 72 @@ -7644,7 +7644,7 @@ The major part of your current investment is not in your base currency (${baseCurrencyValueRatio}% in ${baseCurrency}) - The major part of your current investment is not in your base currency (${baseCurrencyValueRatio}% in ${baseCurrency}) + Główna część twojej bieżącej inwestycji nie jest w walucie bazowej (${baseCurrencyValueRatio}% w ${baseCurrency}) apps/client/src/app/pages/i18n/i18n-page.html 75 @@ -7652,7 +7652,7 @@ The major part of your current investment is in your base currency (${baseCurrencyValueRatio}% in ${baseCurrency}) - The major part of your current investment is in your base currency (${baseCurrencyValueRatio}% in ${baseCurrency}) + Główna część twojej bieżącej inwestycji jest w walucie bazowej (${baseCurrencyValueRatio}% w ${baseCurrency}) apps/client/src/app/pages/i18n/i18n-page.html 79 From fff291cc386ac142321a3c7e3e9e7a0ceefd58ad Mon Sep 17 00:00:00 2001 From: Jesica Mao Date: Fri, 8 Aug 2025 00:10:46 +0600 Subject: [PATCH 04/62] Feature/improve language localization for ES 20250807 (#5331) * Improve language localization for ES * Update changelog --- CHANGELOG.md | 1 + apps/client/src/locales/messages.es.xlf | 26 ++++++++++++------------- 2 files changed, 14 insertions(+), 13 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index bd9a73498..f3cd842ae 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Extended the import functionality by tags - Improved the language localization for Polish (`pl`) +- Improved the language localization for Spanish (`es`) ## 2.189.0 - 2025-08-05 diff --git a/apps/client/src/locales/messages.es.xlf b/apps/client/src/locales/messages.es.xlf index 47ced2075..fc7d38d4e 100644 --- a/apps/client/src/locales/messages.es.xlf +++ b/apps/client/src/locales/messages.es.xlf @@ -7581,7 +7581,7 @@ The equity contribution of your current investment (${equityValueRatio}%) exceeds ${thresholdMax}% - The equity contribution of your current investment (${equityValueRatio}%) exceeds ${thresholdMax}% + La contribución de renta variable de tu inversión actual (${equityValueRatio}%) supera el ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html 43 @@ -7589,7 +7589,7 @@ The equity contribution of your current investment (${equityValueRatio}%) is below ${thresholdMin}% - The equity contribution of your current investment (${equityValueRatio}%) is below ${thresholdMin}% + La contribución de renta variable de tu inversión actual (${equityValueRatio}%) está por debajo del ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html 47 @@ -7597,7 +7597,7 @@ The equity contribution of your current investment (${equityValueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% - The equity contribution of your current investment (${equityValueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% + La contribución de renta variable de tu inversión actual (${equityValueRatio}%) está dentro del rango entre ${thresholdMin}% y ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html 51 @@ -7605,7 +7605,7 @@ Fixed Income - Fixed Income + Renta fija apps/client/src/app/pages/i18n/i18n-page.html 55 @@ -7613,7 +7613,7 @@ The fixed income contribution of your current investment (${fixedIncomeValueRatio}%) exceeds ${thresholdMax}% - The fixed income contribution of your current investment (${fixedIncomeValueRatio}%) exceeds ${thresholdMax}% + La contribución de renta fija de tu inversión actual (${fixedIncomeValueRatio}%) supera el ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html 57 @@ -7621,7 +7621,7 @@ The fixed income contribution of your current investment (${fixedIncomeValueRatio}%) is below ${thresholdMin}% - The fixed income contribution of your current investment (${fixedIncomeValueRatio}%) is below ${thresholdMin}% + La contribución de renta fija de tu inversión actual (${fixedIncomeValueRatio}%) está por debajo del ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html 61 @@ -7629,7 +7629,7 @@ The fixed income contribution of your current investment (${fixedIncomeValueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% - The fixed income contribution of your current investment (${fixedIncomeValueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% + La contribución de renta fija de tu inversión actual (${fixedIncomeValueRatio}%) está dentro del rango entre ${thresholdMin}% y ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html 66 @@ -7637,7 +7637,7 @@ Investment: Base Currency - Investment: Base Currency + Inversión: Moneda base apps/client/src/app/pages/i18n/i18n-page.html 72 @@ -7645,7 +7645,7 @@ The major part of your current investment is not in your base currency (${baseCurrencyValueRatio}% in ${baseCurrency}) - The major part of your current investment is not in your base currency (${baseCurrencyValueRatio}% in ${baseCurrency}) + La mayor parte de tu inversión actual no está en tu moneda base (${baseCurrencyValueRatio}% en ${baseCurrency}) apps/client/src/app/pages/i18n/i18n-page.html 75 @@ -7653,7 +7653,7 @@ The major part of your current investment is in your base currency (${baseCurrencyValueRatio}% in ${baseCurrency}) - The major part of your current investment is in your base currency (${baseCurrencyValueRatio}% in ${baseCurrency}) + La mayor parte de tu inversión actual está en tu moneda base (${baseCurrencyValueRatio}% en ${baseCurrency}) apps/client/src/app/pages/i18n/i18n-page.html 79 @@ -7661,7 +7661,7 @@ Investment - Investment + Inversión apps/client/src/app/pages/i18n/i18n-page.html 82 @@ -7669,7 +7669,7 @@ Over ${thresholdMax}% of your current investment is in ${currency} (${maxValueRatio}%) - Over ${thresholdMax}% of your current investment is in ${currency} (${maxValueRatio}%) + Más del ${thresholdMax}% de tu inversión actual está en ${currency} (${maxValueRatio}%) apps/client/src/app/pages/i18n/i18n-page.html 84 @@ -7677,7 +7677,7 @@ The major part of your current investment is in ${currency} (${maxValueRatio}%) and does not exceed ${thresholdMax}% - The major part of your current investment is in ${currency} (${maxValueRatio}%) and does not exceed ${thresholdMax}% + La mayor parte de tu inversión actual está en ${currency} (${maxValueRatio}%) y no supera el ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html 88 From 6de3db08caacd223c5df2d63e6bcc78dee947924 Mon Sep 17 00:00:00 2001 From: Attila Cseh <77381875+csehatt741@users.noreply.github.com> Date: Fri, 8 Aug 2025 20:12:51 +0200 Subject: [PATCH 05/62] Feature/extend GET all accounts endpoint by search query filter (#5329) * Extend GET all accounts endpoint by search query filter * Update changelog --- CHANGELOG.md | 1 + apps/api/src/app/account/account.controller.ts | 2 ++ .../api/src/app/portfolio/portfolio.service.ts | 18 +++++++++++++++++- 3 files changed, 20 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f3cd842ae..0903fd7cd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed - Extended the import functionality by tags +- Introduced fuzzy search for the accounts endpoint - Improved the language localization for Polish (`pl`) - Improved the language localization for Spanish (`es`) diff --git a/apps/api/src/app/account/account.controller.ts b/apps/api/src/app/account/account.controller.ts index 51a33fa9e..7b24ccdcb 100644 --- a/apps/api/src/app/account/account.controller.ts +++ b/apps/api/src/app/account/account.controller.ts @@ -89,6 +89,7 @@ export class AccountController { public async getAllAccounts( @Headers(HEADER_KEY_IMPERSONATION.toLowerCase()) impersonationId: string, @Query('dataSource') filterByDataSource?: string, + @Query('query') filterBySearchQuery?: string, @Query('symbol') filterBySymbol?: string ): Promise { const impersonationUserId = @@ -96,6 +97,7 @@ export class AccountController { const filters = this.apiService.buildFiltersFromQueryParams({ filterByDataSource, + filterBySearchQuery, filterBySymbol }); diff --git a/apps/api/src/app/portfolio/portfolio.service.ts b/apps/api/src/app/portfolio/portfolio.service.ts index d1b9af892..5ad291238 100644 --- a/apps/api/src/app/portfolio/portfolio.service.ts +++ b/apps/api/src/app/portfolio/portfolio.service.ts @@ -220,11 +220,27 @@ export class PortfolioService { userId: string; withExcludedAccounts?: boolean; }): Promise { - const accounts = await this.getAccounts({ + let accounts = await this.getAccounts({ filters, userId, withExcludedAccounts }); + + const searchQuery = filters.find(({ type }) => { + return type === 'SEARCH_QUERY'; + })?.id; + + if (searchQuery) { + const fuse = new Fuse(accounts, { + keys: ['name', 'platform.name'], + threshold: 0.3 + }); + + accounts = fuse.search(searchQuery).map(({ item }) => { + return item; + }); + } + let totalBalanceInBaseCurrency = new Big(0); let totalValueInBaseCurrency = new Big(0); let transactionCount = 0; From bd9aae6fec10bb45881cd25264790ce6fea4ca89 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Fri, 8 Aug 2025 20:14:39 +0200 Subject: [PATCH 06/62] Feature/refactor search query of holdings search (#5333) * Refactor search query * Update changelog --- CHANGELOG.md | 3 ++- apps/api/src/app/portfolio/portfolio.controller.ts | 2 +- apps/api/src/app/portfolio/portfolio.service.ts | 10 ++++++---- 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0903fd7cd..edd5cbd55 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,7 +10,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed - Extended the import functionality by tags -- Introduced fuzzy search for the accounts endpoint +- Introduced the fuzzy search for the accounts endpoint +- Refactored the fuzzy search for the holdings of the assistant - Improved the language localization for Polish (`pl`) - Improved the language localization for Spanish (`es`) diff --git a/apps/api/src/app/portfolio/portfolio.controller.ts b/apps/api/src/app/portfolio/portfolio.controller.ts index f6cbbf105..748cdceb8 100644 --- a/apps/api/src/app/portfolio/portfolio.controller.ts +++ b/apps/api/src/app/portfolio/portfolio.controller.ts @@ -413,6 +413,7 @@ export class PortfolioController { filterByAssetClasses, filterByDataSource, filterByHoldingType, + filterBySearchQuery, filterBySymbol, filterByTags }); @@ -421,7 +422,6 @@ export class PortfolioController { dateRange, filters, impersonationId, - query: filterBySearchQuery, userId: this.request.user.id }); diff --git a/apps/api/src/app/portfolio/portfolio.service.ts b/apps/api/src/app/portfolio/portfolio.service.ts index 5ad291238..784661e20 100644 --- a/apps/api/src/app/portfolio/portfolio.service.ts +++ b/apps/api/src/app/portfolio/portfolio.service.ts @@ -292,13 +292,11 @@ export class PortfolioService { dateRange, filters, impersonationId, - query, userId }: { dateRange: DateRange; filters?: Filter[]; impersonationId: string; - query?: string; userId: string; }) { userId = await this.getUserId(impersonationId, userId); @@ -311,13 +309,17 @@ export class PortfolioService { let holdings = Object.values(holdingsMap); - if (query) { + const searchQuery = filters.find(({ type }) => { + return type === 'SEARCH_QUERY'; + })?.id; + + if (searchQuery) { const fuse = new Fuse(holdings, { keys: ['isin', 'name', 'symbol'], threshold: 0.3 }); - holdings = fuse.search(query).map(({ item }) => { + holdings = fuse.search(searchQuery).map(({ item }) => { return item; }); } From 6b320dd363e06798400e61edda48795663b7a565 Mon Sep 17 00:00:00 2001 From: Mark Philips Date: Sat, 9 Aug 2025 12:34:34 +0600 Subject: [PATCH 07/62] Feature/improve language localization for PL 20250808 (#5338) * Improve language localization for PL --- apps/client/src/locales/messages.pl.xlf | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/apps/client/src/locales/messages.pl.xlf b/apps/client/src/locales/messages.pl.xlf index 4f7454649..5a47e46a4 100644 --- a/apps/client/src/locales/messages.pl.xlf +++ b/apps/client/src/locales/messages.pl.xlf @@ -7660,7 +7660,7 @@ Investment - Investment + Inwestycja apps/client/src/app/pages/i18n/i18n-page.html 82 @@ -7668,7 +7668,7 @@ Over ${thresholdMax}% of your current investment is in ${currency} (${maxValueRatio}%) - Over ${thresholdMax}% of your current investment is in ${currency} (${maxValueRatio}%) + Ponad ${thresholdMax}% Twojej obecnej inwestycji znajduje się w ${currency} (${maxValueRatio}%) apps/client/src/app/pages/i18n/i18n-page.html 84 @@ -7676,7 +7676,7 @@ The major part of your current investment is in ${currency} (${maxValueRatio}%) and does not exceed ${thresholdMax}% - The major part of your current investment is in ${currency} (${maxValueRatio}%) and does not exceed ${thresholdMax}% + Główna część Twojej obecnej inwestycji znajduje się w ${currency} (${maxValueRatio}%) i nie przekracza ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html 88 @@ -7684,7 +7684,7 @@ start - start + rozpocznij kebab-case libs/common/src/lib/routes/routes.ts @@ -7697,7 +7697,7 @@ Do you really want to generate a new security token? - Do you really want to generate a new security token? + Czy na pewno chcesz wygenerować nowy token bezpieczeństwa? apps/client/src/app/components/user-account-access/user-account-access.component.ts 174 @@ -7705,7 +7705,7 @@ Generate - Generate + Generuj apps/client/src/app/components/user-account-access/user-account-access.html 43 @@ -7713,7 +7713,7 @@ Stocks - Stocks + Akcje apps/client/src/app/components/markets/markets.component.ts 52 @@ -7725,7 +7725,7 @@ Cryptocurrencies - Cryptocurrencies + Kryptowaluty apps/client/src/app/components/markets/markets.component.ts 53 @@ -7745,7 +7745,7 @@ Manage Asset Profile - Manage Asset Profile + Zarządzaj profilem aktywów apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html 437 @@ -7753,7 +7753,7 @@ Alternative Investment - Alternative Investment + Inwestycja alternatywna libs/ui/src/lib/i18n.ts 45 @@ -7761,7 +7761,7 @@ Collectible - Collectible + Kolekcjonerskie libs/ui/src/lib/i18n.ts 55 @@ -7769,7 +7769,7 @@ Average Unit Price - Average Unit Price + Średnia cena jednostkowa apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts 105 From fcaa4f79963df42c578d82ca05649722798f3eec Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Sat, 9 Aug 2025 09:38:32 +0200 Subject: [PATCH 08/62] Feature/improve precision of values in holding detail dialog on mobile (#5337) * Improve dynamic numerical precision * Shorten date on mobile * Extend Storybook story of value component * Update changelog --- CHANGELOG.md | 2 + .../holding-detail-dialog.component.ts | 59 +++++++++++++++++-- .../holding-detail-dialog.html | 6 ++ .../home-overview/home-overview.component.ts | 4 +- libs/common/src/lib/config.ts | 4 +- .../activities-table.component.html | 7 ++- .../activities-table.component.ts | 5 +- .../src/lib/value/value.component.stories.ts | 18 +++++- libs/ui/src/lib/value/value.component.ts | 3 +- 9 files changed, 93 insertions(+), 15 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index edd5cbd55..26878b5ee 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed - Extended the import functionality by tags +- Improved the dynamic numerical precision for various values in the holding detail dialog +- Shortened the date in the activities table on mobile - Introduced the fuzzy search for the accounts endpoint - Refactored the fuzzy search for the holdings of the assistant - Improved the language localization for Polish (`pl`) diff --git a/apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts b/apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts index 8f0e6ae68..eb32b5f8b 100644 --- a/apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts +++ b/apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts @@ -3,7 +3,11 @@ import { GfDialogFooterModule } from '@ghostfolio/client/components/dialog-foote import { GfDialogHeaderModule } from '@ghostfolio/client/components/dialog-header/dialog-header.module'; import { DataService } from '@ghostfolio/client/services/data.service'; import { UserService } from '@ghostfolio/client/services/user/user.service'; -import { NUMERICAL_PRECISION_THRESHOLD } from '@ghostfolio/common/config'; +import { + NUMERICAL_PRECISION_THRESHOLD_3_FIGURES, + NUMERICAL_PRECISION_THRESHOLD_5_FIGURES, + NUMERICAL_PRECISION_THRESHOLD_6_FIGURES +} from '@ghostfolio/common/config'; import { DATE_FORMAT, downloadAsFile } from '@ghostfolio/common/helper'; import { DataProviderInfo, @@ -101,6 +105,7 @@ export class GfHoldingDetailDialogComponent implements OnDestroy, OnInit { public assetClass: string; public assetSubClass: string; public averagePrice: number; + public averagePricePrecision = 2; public benchmarkDataItems: LineChartItem[]; public benchmarkLabel = $localize`Average Unit Price`; public countries: { @@ -122,11 +127,15 @@ export class GfHoldingDetailDialogComponent implements OnDestroy, OnInit { public marketDataItems: MarketData[] = []; public marketPrice: number; public marketPriceMax: number; + public marketPriceMaxPrecision = 2; public marketPriceMin: number; + public marketPriceMinPrecision = 2; + public marketPricePrecision = 2; public netPerformance: number; public netPerformancePrecision = 2; public netPerformancePercent: number; public netPerformancePercentWithCurrencyEffect: number; + public netPerformancePercentWithCurrencyEffectPrecision = 2; public netPerformanceWithCurrencyEffect: number; public netPerformanceWithCurrencyEffectPrecision = 2; public quantity: number; @@ -274,6 +283,14 @@ export class GfHoldingDetailDialogComponent implements OnDestroy, OnInit { value }) => { this.averagePrice = averagePrice; + + if ( + this.data.deviceType === 'mobile' && + this.averagePrice >= NUMERICAL_PRECISION_THRESHOLD_6_FIGURES + ) { + this.averagePricePrecision = 0; + } + this.benchmarkDataItems = []; this.countries = {}; this.dataProviderInfo = dataProviderInfo; @@ -281,7 +298,8 @@ export class GfHoldingDetailDialogComponent implements OnDestroy, OnInit { if ( this.data.deviceType === 'mobile' && - this.dividendInBaseCurrency >= NUMERICAL_PRECISION_THRESHOLD + this.dividendInBaseCurrency >= + NUMERICAL_PRECISION_THRESHOLD_6_FIGURES ) { this.dividendInBaseCurrencyPrecision = 0; } @@ -320,19 +338,42 @@ export class GfHoldingDetailDialogComponent implements OnDestroy, OnInit { if ( this.data.deviceType === 'mobile' && this.investmentInBaseCurrencyWithCurrencyEffect >= - NUMERICAL_PRECISION_THRESHOLD + NUMERICAL_PRECISION_THRESHOLD_6_FIGURES ) { this.investmentInBaseCurrencyWithCurrencyEffectPrecision = 0; } this.marketPrice = marketPrice; this.marketPriceMax = marketPriceMax; + + if ( + this.data.deviceType === 'mobile' && + this.marketPriceMax >= NUMERICAL_PRECISION_THRESHOLD_6_FIGURES + ) { + this.marketPriceMaxPrecision = 0; + } + this.marketPriceMin = marketPriceMin; + + if ( + this.data.deviceType === 'mobile' && + this.marketPriceMin >= NUMERICAL_PRECISION_THRESHOLD_6_FIGURES + ) { + this.marketPriceMinPrecision = 0; + } + + if ( + this.data.deviceType === 'mobile' && + this.marketPrice >= NUMERICAL_PRECISION_THRESHOLD_6_FIGURES + ) { + this.marketPricePrecision = 0; + } + this.netPerformance = netPerformance; if ( this.data.deviceType === 'mobile' && - this.netPerformance >= NUMERICAL_PRECISION_THRESHOLD + this.netPerformance >= NUMERICAL_PRECISION_THRESHOLD_6_FIGURES ) { this.netPerformancePrecision = 0; } @@ -342,13 +383,21 @@ export class GfHoldingDetailDialogComponent implements OnDestroy, OnInit { this.netPerformancePercentWithCurrencyEffect = netPerformancePercentWithCurrencyEffect; + if ( + this.data.deviceType === 'mobile' && + this.netPerformancePercentWithCurrencyEffect >= + NUMERICAL_PRECISION_THRESHOLD_3_FIGURES + ) { + this.netPerformancePercentWithCurrencyEffectPrecision = 0; + } + this.netPerformanceWithCurrencyEffect = netPerformanceWithCurrencyEffect; if ( this.data.deviceType === 'mobile' && this.netPerformanceWithCurrencyEffect >= - NUMERICAL_PRECISION_THRESHOLD + NUMERICAL_PRECISION_THRESHOLD_5_FIGURES ) { this.netPerformanceWithCurrencyEffectPrecision = 0; } diff --git a/apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html b/apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html index e0673a1f5..30ce98634 100644 --- a/apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html +++ b/apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -77,6 +77,7 @@ [colorizeSign]="true" [isPercent]="true" [locale]="data.locale" + [precision]="netPerformancePercentWithCurrencyEffectPrecision" [value]="netPerformancePercentWithCurrencyEffect" > @if ( @@ -95,6 +96,7 @@ size="medium" [isCurrency]="true" [locale]="data.locale" + [precision]="averagePricePrecision" [unit]="SymbolProfile?.currency" [value]="averagePrice" >Average Unit PriceMarket PriceMinimum PriceMaximum Price= - NUMERICAL_PRECISION_THRESHOLD + NUMERICAL_PRECISION_THRESHOLD_6_FIGURES ) { this.precision = 0; } diff --git a/libs/common/src/lib/config.ts b/libs/common/src/lib/config.ts index 02a12cfd1..169ab80c1 100644 --- a/libs/common/src/lib/config.ts +++ b/libs/common/src/lib/config.ts @@ -136,7 +136,9 @@ export const HEADER_KEY_SKIP_INTERCEPTOR = 'X-Skip-Interceptor'; export const MAX_TOP_HOLDINGS = 50; -export const NUMERICAL_PRECISION_THRESHOLD = 100000; +export const NUMERICAL_PRECISION_THRESHOLD_3_FIGURES = 100; +export const NUMERICAL_PRECISION_THRESHOLD_5_FIGURES = 10000; +export const NUMERICAL_PRECISION_THRESHOLD_6_FIGURES = 100000; export const PROPERTY_API_KEY_GHOSTFOLIO = 'API_KEY_GHOSTFOLIO'; export const PROPERTY_API_KEY_OPENROUTER = 'API_KEY_OPENROUTER'; diff --git a/libs/ui/src/lib/activities-table/activities-table.component.html b/libs/ui/src/lib/activities-table/activities-table.component.html index 4ee7c689a..326440774 100644 --- a/libs/ui/src/lib/activities-table/activities-table.component.html +++ b/libs/ui/src/lib/activities-table/activities-table.component.html @@ -171,7 +171,12 @@
- {{ element.date | date: defaultDateFormat }} +
diff --git a/libs/ui/src/lib/activities-table/activities-table.component.ts b/libs/ui/src/lib/activities-table/activities-table.component.ts index c13251771..b38af615e 100644 --- a/libs/ui/src/lib/activities-table/activities-table.component.ts +++ b/libs/ui/src/lib/activities-table/activities-table.component.ts @@ -6,7 +6,7 @@ import { DEFAULT_PAGE_SIZE, TAG_ID_EXCLUDE_FROM_ANALYSIS } from '@ghostfolio/common/config'; -import { getDateFormatString, getLocale } from '@ghostfolio/common/helper'; +import { getLocale } from '@ghostfolio/common/helper'; import { AssetProfileIdentifier } from '@ghostfolio/common/interfaces'; import { OrderWithAccount } from '@ghostfolio/common/types'; @@ -128,7 +128,6 @@ export class GfActivitiesTableComponent @ViewChild(MatPaginator) paginator: MatPaginator; @ViewChild(MatSort) sort: MatSort; - public defaultDateFormat: string; public displayedColumns = []; public endOfToday = endOfToday(); public hasDrafts = false; @@ -175,8 +174,6 @@ export class GfActivitiesTableComponent } public ngOnChanges() { - this.defaultDateFormat = getDateFormatString(this.locale); - this.displayedColumns = [ 'select', 'importStatus', diff --git a/libs/ui/src/lib/value/value.component.stories.ts b/libs/ui/src/lib/value/value.component.stories.ts index ff9f5a259..a1f9d06a0 100644 --- a/libs/ui/src/lib/value/value.component.stories.ts +++ b/libs/ui/src/lib/value/value.component.stories.ts @@ -11,7 +11,13 @@ export default { moduleMetadata({ imports: [NgxSkeletonLoaderModule] }) - ] + ], + argTypes: { + deviceType: { + control: 'select', + options: ['desktop', 'mobile'] + } + } } as Meta; type Story = StoryObj; @@ -31,6 +37,16 @@ export const Currency: Story = { } }; +export const DateValue: Story = { + args: { + deviceType: 'desktop', + isDate: true, + locale: 'en-US', + value: new Date().toISOString() + }, + name: 'Date' +}; + export const Label: Story = { args: { locale: 'en-US', diff --git a/libs/ui/src/lib/value/value.component.ts b/libs/ui/src/lib/value/value.component.ts index 55672bacf..e24c00322 100644 --- a/libs/ui/src/lib/value/value.component.ts +++ b/libs/ui/src/lib/value/value.component.ts @@ -22,6 +22,7 @@ import { NgxSkeletonLoaderModule } from 'ngx-skeleton-loader'; }) export class GfValueComponent implements OnChanges { @Input() colorizeSign = false; + @Input() deviceType: string; @Input() icon = ''; @Input() isAbsolute = false; @Input() isCurrency = false; @@ -118,7 +119,7 @@ export class GfValueComponent implements OnChanges { { day: '2-digit', month: '2-digit', - year: 'numeric' + year: this.deviceType === 'mobile' ? '2-digit' : 'numeric' } ); } else { From 453f36c1eb2bd1acd793c6c1eec741cf30127b44 Mon Sep 17 00:00:00 2001 From: Kenrick Tandrian <60643640+KenTandrian@users.noreply.github.com> Date: Sun, 10 Aug 2025 02:19:23 +0700 Subject: [PATCH 09/62] Task/remove warnings of database seeding process (#5340) * Remove warnings of database seeding process * Update changelog --- CHANGELOG.md | 1 + package.json | 2 +- prisma/{seed.ts => seed.mts} | 0 3 files changed, 2 insertions(+), 1 deletion(-) rename prisma/{seed.ts => seed.mts} (100%) diff --git a/CHANGELOG.md b/CHANGELOG.md index 26878b5ee..9bb4642c0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Shortened the date in the activities table on mobile - Introduced the fuzzy search for the accounts endpoint - Refactored the fuzzy search for the holdings of the assistant +- Eliminated the warnings of the database seeding process - Improved the language localization for Polish (`pl`) - Improved the language localization for Spanish (`es`) diff --git a/package.json b/package.json index e98dcfe76..152ddef22 100644 --- a/package.json +++ b/package.json @@ -212,6 +212,6 @@ "node": ">=22.18.0" }, "prisma": { - "seed": "node prisma/seed.ts" + "seed": "node prisma/seed.mts" } } diff --git a/prisma/seed.ts b/prisma/seed.mts similarity index 100% rename from prisma/seed.ts rename to prisma/seed.mts From e8c239ea5fc01ddc7f493bd0c9358dee61ea77e6 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sat, 9 Aug 2025 21:35:01 +0200 Subject: [PATCH 10/62] Feature/update locales (#5332) * Update locales * Update translation * Update changelog --------- Co-authored-by: github-actions[bot] Co-authored-by: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> --- CHANGELOG.md | 1 + apps/client/src/locales/messages.ca.xlf | 170 +++++++++++++----------- apps/client/src/locales/messages.de.xlf | 170 +++++++++++++----------- apps/client/src/locales/messages.es.xlf | 170 +++++++++++++----------- apps/client/src/locales/messages.fr.xlf | 170 +++++++++++++----------- apps/client/src/locales/messages.it.xlf | 170 +++++++++++++----------- apps/client/src/locales/messages.nl.xlf | 170 +++++++++++++----------- apps/client/src/locales/messages.pl.xlf | 170 +++++++++++++----------- apps/client/src/locales/messages.pt.xlf | 170 +++++++++++++----------- apps/client/src/locales/messages.tr.xlf | 170 +++++++++++++----------- apps/client/src/locales/messages.uk.xlf | 170 +++++++++++++----------- apps/client/src/locales/messages.xlf | 169 ++++++++++++----------- apps/client/src/locales/messages.zh.xlf | 170 +++++++++++++----------- 13 files changed, 1068 insertions(+), 972 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9bb4642c0..b44efa51b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Introduced the fuzzy search for the accounts endpoint - Refactored the fuzzy search for the holdings of the assistant - Eliminated the warnings of the database seeding process +- Improved the language localization for German (`de`) - Improved the language localization for Polish (`pl`) - Improved the language localization for Spanish (`es`) diff --git a/apps/client/src/locales/messages.ca.xlf b/apps/client/src/locales/messages.ca.xlf index 55c10bd2e..1da3f99f8 100644 --- a/apps/client/src/locales/messages.ca.xlf +++ b/apps/client/src/locales/messages.ca.xlf @@ -507,7 +507,7 @@
libs/ui/src/lib/activities-table/activities-table.component.html - 276 + 281
@@ -543,11 +543,11 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 257 + 262 libs/ui/src/lib/activities-table/activities-table.component.html - 293 + 298 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -583,7 +583,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 430 + 435 @@ -619,7 +619,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 457 + 462 libs/ui/src/lib/benchmark/benchmark.component.html @@ -815,7 +815,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 111 + 114 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html @@ -879,7 +879,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 214 + 220 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -1015,7 +1015,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 263 + 269 @@ -1031,7 +1031,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 273 + 279 @@ -1047,7 +1047,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 279 + 285 apps/client/src/app/pages/public/public-page.html @@ -1067,7 +1067,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 291 + 297 @@ -1611,7 +1611,7 @@ Preu Mínim apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 127 + 131 @@ -1619,7 +1619,7 @@ Preu Màxim apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 143 + 148 @@ -1627,7 +1627,7 @@ Quantitat apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 153 + 158 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -1635,7 +1635,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 186 + 191 @@ -1643,7 +1643,7 @@ Rendiment del Dividend apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 192 + 197 @@ -1651,7 +1651,7 @@ Comissions apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 204 + 209 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html @@ -1667,7 +1667,7 @@ Indonèsia libs/ui/src/lib/i18n.ts - 88 + 89 @@ -1675,7 +1675,7 @@ Activitat apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 224 + 230 @@ -1683,7 +1683,7 @@ Informar d’un Problema amb les Dades apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 446 + 452 @@ -1739,7 +1739,7 @@ libs/ui/src/lib/i18n.ts - 106 + 107 @@ -1755,7 +1755,7 @@ libs/ui/src/lib/i18n.ts - 107 + 108 @@ -2262,6 +2262,14 @@ 91 + + Argentina + Argentina + + libs/ui/src/lib/i18n.ts + 77 + + Grant access Concedeix accés @@ -2583,7 +2591,7 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 186 + 189 @@ -2603,7 +2611,7 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 184 + 187 @@ -2619,7 +2627,7 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 187 + 190 @@ -2747,7 +2755,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 370 + 376 apps/client/src/app/pages/accounts/accounts-page.html @@ -2843,7 +2851,7 @@ Dades de mercat apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 393 + 399 libs/common/src/lib/routes/routes.ts @@ -3720,11 +3728,11 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 226 + 232 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 337 + 343 apps/client/src/app/pages/portfolio/activities/activities-page.html @@ -3816,7 +3824,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 210 + 215 @@ -3824,7 +3832,7 @@ Activitats d’importació apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 86 + 87 libs/ui/src/lib/activities-table/activities-table.component.html @@ -3832,7 +3840,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 371 + 376 @@ -3840,7 +3848,7 @@ Importar dividends apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 129 + 131 libs/ui/src/lib/activities-table/activities-table.component.html @@ -3848,7 +3856,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 383 + 388 @@ -3856,7 +3864,7 @@ S’estan important dades... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 167 + 169 @@ -3864,7 +3872,7 @@ La importació s’ha completat apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 176 + 179 @@ -3872,7 +3880,7 @@ S’estan validant les dades... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 284 + 287 @@ -4152,7 +4160,7 @@ Dividend apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 182 + 187 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html @@ -4180,7 +4188,7 @@ Inversió apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 167 + 172 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html @@ -4709,7 +4717,7 @@ libs/ui/src/lib/i18n.ts - 97 + 98 @@ -5033,7 +5041,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 396 + 401 @@ -5045,7 +5053,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 409 + 414 @@ -5069,7 +5077,7 @@ Clonar libs/ui/src/lib/activities-table/activities-table.component.html - 436 + 441 @@ -5077,7 +5085,7 @@ Exporta l’esborrany com a ICS libs/ui/src/lib/activities-table/activities-table.component.html - 446 + 451 @@ -5085,7 +5093,7 @@ De veritat vols suprimir aquestes activitats? libs/ui/src/lib/activities-table/activities-table.component.ts - 262 + 259 @@ -5093,7 +5101,7 @@ Realment vols suprimir aquesta activitat? libs/ui/src/lib/activities-table/activities-table.component.ts - 272 + 269 @@ -5341,7 +5349,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 308 + 313 libs/ui/src/lib/assistant/assistant.html @@ -5377,7 +5385,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 237 + 243 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -5409,7 +5417,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 246 + 252 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -5509,7 +5517,7 @@ Japó libs/ui/src/lib/i18n.ts - 90 + 91 @@ -5593,7 +5601,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 310 + 316 libs/ui/src/lib/i18n.ts @@ -5649,7 +5657,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 234 + 239 libs/ui/src/lib/i18n.ts @@ -5849,7 +5857,7 @@ Por extrema libs/ui/src/lib/i18n.ts - 104 + 105 @@ -5857,7 +5865,7 @@ Avarícia extrema libs/ui/src/lib/i18n.ts - 105 + 106 @@ -5865,7 +5873,7 @@ Neutral libs/ui/src/lib/i18n.ts - 108 + 109 @@ -6097,7 +6105,7 @@ Australia libs/ui/src/lib/i18n.ts - 77 + 78 @@ -6105,7 +6113,7 @@ Austria libs/ui/src/lib/i18n.ts - 78 + 79 @@ -6113,7 +6121,7 @@ Belgium libs/ui/src/lib/i18n.ts - 79 + 80 @@ -6121,7 +6129,7 @@ Bulgaria libs/ui/src/lib/i18n.ts - 81 + 82 @@ -6129,7 +6137,7 @@ Canada libs/ui/src/lib/i18n.ts - 82 + 83 @@ -6137,7 +6145,7 @@ Czech Republic libs/ui/src/lib/i18n.ts - 83 + 84 @@ -6145,7 +6153,7 @@ Finland libs/ui/src/lib/i18n.ts - 84 + 85 @@ -6153,7 +6161,7 @@ France libs/ui/src/lib/i18n.ts - 85 + 86 @@ -6161,7 +6169,7 @@ Germany libs/ui/src/lib/i18n.ts - 86 + 87 @@ -6169,7 +6177,7 @@ India libs/ui/src/lib/i18n.ts - 87 + 88 @@ -6177,7 +6185,7 @@ Italy libs/ui/src/lib/i18n.ts - 89 + 90 @@ -6185,7 +6193,7 @@ Netherlands libs/ui/src/lib/i18n.ts - 91 + 92 @@ -6193,7 +6201,7 @@ New Zealand libs/ui/src/lib/i18n.ts - 92 + 93 @@ -6201,7 +6209,7 @@ Poland libs/ui/src/lib/i18n.ts - 93 + 94 @@ -6209,7 +6217,7 @@ Romania libs/ui/src/lib/i18n.ts - 94 + 95 @@ -6217,7 +6225,7 @@ South Africa libs/ui/src/lib/i18n.ts - 96 + 97 @@ -6225,7 +6233,7 @@ Thailand libs/ui/src/lib/i18n.ts - 98 + 99 @@ -6233,7 +6241,7 @@ United States libs/ui/src/lib/i18n.ts - 101 + 102 @@ -6373,7 +6381,7 @@ Performance with currency effect Performance apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 83 + 84 @@ -6573,7 +6581,7 @@ Ukraine libs/ui/src/lib/i18n.ts - 99 + 100 @@ -7031,7 +7039,7 @@ British Virgin Islands libs/ui/src/lib/i18n.ts - 80 + 81 @@ -7039,7 +7047,7 @@ Singapore libs/ui/src/lib/i18n.ts - 95 + 96 @@ -7115,7 +7123,7 @@ United Kingdom libs/ui/src/lib/i18n.ts - 100 + 101 @@ -7748,7 +7756,7 @@ Manage Asset Profile apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 437 + 443 @@ -7772,11 +7780,11 @@ Average Unit Price apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts - 105 + 110 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 100 + 102 diff --git a/apps/client/src/locales/messages.de.xlf b/apps/client/src/locales/messages.de.xlf index 7cb7937a3..ceda6f2b9 100644 --- a/apps/client/src/locales/messages.de.xlf +++ b/apps/client/src/locales/messages.de.xlf @@ -182,11 +182,11 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 257 + 262 libs/ui/src/lib/activities-table/activities-table.component.html - 293 + 298 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -222,7 +222,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 430 + 435 @@ -258,7 +258,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 457 + 462 libs/ui/src/lib/benchmark/benchmark.component.html @@ -418,7 +418,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 111 + 114 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html @@ -438,7 +438,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 214 + 220 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -898,7 +898,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 279 + 285 apps/client/src/app/pages/public/public-page.html @@ -918,7 +918,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 291 + 297 @@ -942,7 +942,7 @@ Datenfehler melden apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 446 + 452 @@ -1030,7 +1030,7 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 187 + 190 @@ -1266,7 +1266,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 370 + 376 apps/client/src/app/pages/accounts/accounts-page.html @@ -1322,7 +1322,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 276 + 281 @@ -1838,7 +1838,7 @@ Anzahl apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 153 + 158 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -1846,7 +1846,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 186 + 191 @@ -1858,7 +1858,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 210 + 215 @@ -1902,11 +1902,11 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 226 + 232 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 337 + 343 apps/client/src/app/pages/portfolio/activities/activities-page.html @@ -1926,7 +1926,7 @@ Daten importieren... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 167 + 169 @@ -1934,7 +1934,7 @@ Der Import wurde abgeschlossen apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 176 + 179 @@ -2106,7 +2106,7 @@ Aktivitäten importieren apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 86 + 87 libs/ui/src/lib/activities-table/activities-table.component.html @@ -2114,7 +2114,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 371 + 376 @@ -2126,7 +2126,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 396 + 401 @@ -2138,7 +2138,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 409 + 414 @@ -2146,7 +2146,7 @@ Kopieren libs/ui/src/lib/activities-table/activities-table.component.html - 436 + 441 @@ -2154,7 +2154,7 @@ Geplante Aktivität als ICS exportieren libs/ui/src/lib/activities-table/activities-table.component.html - 446 + 451 @@ -2162,7 +2162,7 @@ Möchtest du diese Aktivität wirklich löschen? libs/ui/src/lib/activities-table/activities-table.component.ts - 272 + 269 @@ -2234,7 +2234,7 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 186 + 189 @@ -2246,7 +2246,7 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 184 + 187 @@ -2254,7 +2254,7 @@ Minimum Preis apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 127 + 131 @@ -2262,7 +2262,7 @@ Maximum Preis apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 143 + 148 @@ -2274,7 +2274,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 263 + 269 @@ -2290,7 +2290,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 273 + 279 @@ -2418,7 +2418,7 @@ libs/ui/src/lib/i18n.ts - 106 + 107 @@ -2434,7 +2434,7 @@ libs/ui/src/lib/i18n.ts - 107 + 108 @@ -2578,7 +2578,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 308 + 313 libs/ui/src/lib/assistant/assistant.html @@ -2606,7 +2606,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 237 + 243 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -2642,7 +2642,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 310 + 316 libs/ui/src/lib/i18n.ts @@ -2930,7 +2930,7 @@ Dividenden apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 182 + 187 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html @@ -2970,7 +2970,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 246 + 252 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -2994,7 +2994,7 @@ Daten validieren... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 284 + 287 @@ -3018,7 +3018,7 @@ Marktdaten apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 393 + 399 libs/common/src/lib/routes/routes.ts @@ -3078,7 +3078,7 @@ Dividenden importieren apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 129 + 131 libs/ui/src/lib/activities-table/activities-table.component.html @@ -3086,7 +3086,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 383 + 388 @@ -3422,7 +3422,7 @@ Gebühren apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 204 + 209 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html @@ -3606,7 +3606,7 @@ Möchtest du diese Aktivitäten wirklich löschen? libs/ui/src/lib/activities-table/activities-table.component.ts - 262 + 259 @@ -4258,7 +4258,7 @@ Japan libs/ui/src/lib/i18n.ts - 90 + 91 @@ -5000,7 +5000,7 @@ libs/ui/src/lib/i18n.ts - 97 + 98 @@ -5084,7 +5084,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 234 + 239 libs/ui/src/lib/i18n.ts @@ -5304,7 +5304,7 @@ Extreme Angst libs/ui/src/lib/i18n.ts - 104 + 105 @@ -5312,7 +5312,7 @@ Extreme Gier libs/ui/src/lib/i18n.ts - 105 + 106 @@ -5320,7 +5320,7 @@ Neutral libs/ui/src/lib/i18n.ts - 108 + 109 @@ -5447,6 +5447,14 @@ 91 + + Argentina + Argentinien + + libs/ui/src/lib/i18n.ts + 77 + + Private Privat @@ -5476,7 +5484,7 @@ Investition apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 167 + 172 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html @@ -5745,7 +5753,7 @@ Indonesien libs/ui/src/lib/i18n.ts - 88 + 89 @@ -5753,7 +5761,7 @@ Aktivität apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 224 + 230 @@ -5761,7 +5769,7 @@ Dividendenrendite apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 192 + 197 @@ -6121,7 +6129,7 @@ Australien libs/ui/src/lib/i18n.ts - 77 + 78 @@ -6129,7 +6137,7 @@ Österreich libs/ui/src/lib/i18n.ts - 78 + 79 @@ -6137,7 +6145,7 @@ Belgien libs/ui/src/lib/i18n.ts - 79 + 80 @@ -6145,7 +6153,7 @@ Bulgarien libs/ui/src/lib/i18n.ts - 81 + 82 @@ -6153,7 +6161,7 @@ Kanada libs/ui/src/lib/i18n.ts - 82 + 83 @@ -6161,7 +6169,7 @@ Tschechien libs/ui/src/lib/i18n.ts - 83 + 84 @@ -6169,7 +6177,7 @@ Finnland libs/ui/src/lib/i18n.ts - 84 + 85 @@ -6177,7 +6185,7 @@ Frankreich libs/ui/src/lib/i18n.ts - 85 + 86 @@ -6185,7 +6193,7 @@ Deutschland libs/ui/src/lib/i18n.ts - 86 + 87 @@ -6193,7 +6201,7 @@ Indien libs/ui/src/lib/i18n.ts - 87 + 88 @@ -6201,7 +6209,7 @@ Italien libs/ui/src/lib/i18n.ts - 89 + 90 @@ -6209,7 +6217,7 @@ Niederlande libs/ui/src/lib/i18n.ts - 91 + 92 @@ -6217,7 +6225,7 @@ Neuseeland libs/ui/src/lib/i18n.ts - 92 + 93 @@ -6225,7 +6233,7 @@ Polen libs/ui/src/lib/i18n.ts - 93 + 94 @@ -6233,7 +6241,7 @@ Rumänien libs/ui/src/lib/i18n.ts - 94 + 95 @@ -6241,7 +6249,7 @@ Südafrika libs/ui/src/lib/i18n.ts - 96 + 97 @@ -6249,7 +6257,7 @@ Thailand libs/ui/src/lib/i18n.ts - 98 + 99 @@ -6257,7 +6265,7 @@ USA libs/ui/src/lib/i18n.ts - 101 + 102 @@ -6397,7 +6405,7 @@ Performance mit Währungseffekt Performance apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 83 + 84 @@ -6597,7 +6605,7 @@ Ukraine libs/ui/src/lib/i18n.ts - 99 + 100 @@ -7055,7 +7063,7 @@ Britische Jungferninseln libs/ui/src/lib/i18n.ts - 80 + 81 @@ -7063,7 +7071,7 @@ Singapur libs/ui/src/lib/i18n.ts - 95 + 96 @@ -7139,7 +7147,7 @@ Vereinigtes Königreich libs/ui/src/lib/i18n.ts - 100 + 101 @@ -7748,7 +7756,7 @@ Anlageprofil verwalten apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 437 + 443 @@ -7772,11 +7780,11 @@ Ø Preis pro Einheit apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts - 105 + 110 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 100 + 102 diff --git a/apps/client/src/locales/messages.es.xlf b/apps/client/src/locales/messages.es.xlf index fc7d38d4e..2714cc718 100644 --- a/apps/client/src/locales/messages.es.xlf +++ b/apps/client/src/locales/messages.es.xlf @@ -183,11 +183,11 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 257 + 262 libs/ui/src/lib/activities-table/activities-table.component.html - 293 + 298 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -223,7 +223,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 430 + 435 @@ -259,7 +259,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 457 + 462 libs/ui/src/lib/benchmark/benchmark.component.html @@ -419,7 +419,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 111 + 114 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html @@ -439,7 +439,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 214 + 220 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -883,7 +883,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 279 + 285 apps/client/src/app/pages/public/public-page.html @@ -903,7 +903,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 291 + 297 @@ -927,7 +927,7 @@ Reporta un anomalía de los datos apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 446 + 452 @@ -1015,7 +1015,7 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 187 + 190 @@ -1251,7 +1251,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 370 + 376 apps/client/src/app/pages/accounts/accounts-page.html @@ -1307,7 +1307,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 276 + 281 @@ -1823,7 +1823,7 @@ Cantidad apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 153 + 158 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -1831,7 +1831,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 186 + 191 @@ -1843,7 +1843,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 210 + 215 @@ -1887,11 +1887,11 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 226 + 232 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 337 + 343 apps/client/src/app/pages/portfolio/activities/activities-page.html @@ -1911,7 +1911,7 @@ Importando datos... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 167 + 169 @@ -1919,7 +1919,7 @@ La importación se ha completado apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 176 + 179 @@ -2091,7 +2091,7 @@ Importar operaciones apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 86 + 87 libs/ui/src/lib/activities-table/activities-table.component.html @@ -2099,7 +2099,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 371 + 376 @@ -2111,7 +2111,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 396 + 401 @@ -2123,7 +2123,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 409 + 414 @@ -2131,7 +2131,7 @@ Clonar libs/ui/src/lib/activities-table/activities-table.component.html - 436 + 441 @@ -2139,7 +2139,7 @@ Exportar borrador como ICS libs/ui/src/lib/activities-table/activities-table.component.html - 446 + 451 @@ -2147,7 +2147,7 @@ ¿Estás seguro de eliminar esta operación? libs/ui/src/lib/activities-table/activities-table.component.ts - 272 + 269 @@ -2215,7 +2215,7 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 184 + 187 @@ -2231,7 +2231,7 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 186 + 189 @@ -2263,7 +2263,7 @@ Precio máximo apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 143 + 148 @@ -2299,7 +2299,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 263 + 269 @@ -2315,7 +2315,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 273 + 279 @@ -2323,7 +2323,7 @@ Precio mínimo apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 127 + 131 @@ -2403,7 +2403,7 @@ libs/ui/src/lib/i18n.ts - 106 + 107 @@ -2419,7 +2419,7 @@ libs/ui/src/lib/i18n.ts - 107 + 108 @@ -2563,7 +2563,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 308 + 313 libs/ui/src/lib/assistant/assistant.html @@ -2591,7 +2591,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 237 + 243 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -2627,7 +2627,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 310 + 316 libs/ui/src/lib/i18n.ts @@ -2907,7 +2907,7 @@ Dividendo apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 182 + 187 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html @@ -2955,7 +2955,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 246 + 252 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -2979,7 +2979,7 @@ Validando datos... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 284 + 287 @@ -3003,7 +3003,7 @@ Datos del mercado apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 393 + 399 libs/common/src/lib/routes/routes.ts @@ -3063,7 +3063,7 @@ Importar Dividendos apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 129 + 131 libs/ui/src/lib/activities-table/activities-table.component.html @@ -3071,7 +3071,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 383 + 388 @@ -3407,7 +3407,7 @@ Comisiones apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 204 + 209 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html @@ -3583,7 +3583,7 @@ ¿Realmente deseas eliminar estas actividades? libs/ui/src/lib/activities-table/activities-table.component.ts - 262 + 259 @@ -4235,7 +4235,7 @@ Japón libs/ui/src/lib/i18n.ts - 90 + 91 @@ -4977,7 +4977,7 @@ libs/ui/src/lib/i18n.ts - 97 + 98 @@ -5061,7 +5061,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 234 + 239 libs/ui/src/lib/i18n.ts @@ -5281,7 +5281,7 @@ Miedo extremo libs/ui/src/lib/i18n.ts - 104 + 105 @@ -5289,7 +5289,7 @@ Avaricia extrema libs/ui/src/lib/i18n.ts - 105 + 106 @@ -5297,7 +5297,7 @@ Neutral libs/ui/src/lib/i18n.ts - 108 + 109 @@ -5424,6 +5424,14 @@ 91 + + Argentina + Argentina + + libs/ui/src/lib/i18n.ts + 77 + + Private Privado @@ -5453,7 +5461,7 @@ Inversión apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 167 + 172 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html @@ -5722,7 +5730,7 @@ Indonesia libs/ui/src/lib/i18n.ts - 88 + 89 @@ -5730,7 +5738,7 @@ Actividad apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 224 + 230 @@ -5738,7 +5746,7 @@ Rendimiento por dividendo apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 192 + 197 @@ -6098,7 +6106,7 @@ Australia libs/ui/src/lib/i18n.ts - 77 + 78 @@ -6106,7 +6114,7 @@ Austria libs/ui/src/lib/i18n.ts - 78 + 79 @@ -6114,7 +6122,7 @@ Bélgica libs/ui/src/lib/i18n.ts - 79 + 80 @@ -6122,7 +6130,7 @@ Bulgaria libs/ui/src/lib/i18n.ts - 81 + 82 @@ -6130,7 +6138,7 @@ Canadá libs/ui/src/lib/i18n.ts - 82 + 83 @@ -6138,7 +6146,7 @@ República Checa libs/ui/src/lib/i18n.ts - 83 + 84 @@ -6146,7 +6154,7 @@ Finlandia libs/ui/src/lib/i18n.ts - 84 + 85 @@ -6154,7 +6162,7 @@ Francia libs/ui/src/lib/i18n.ts - 85 + 86 @@ -6162,7 +6170,7 @@ Alemania libs/ui/src/lib/i18n.ts - 86 + 87 @@ -6170,7 +6178,7 @@ India libs/ui/src/lib/i18n.ts - 87 + 88 @@ -6178,7 +6186,7 @@ Italia libs/ui/src/lib/i18n.ts - 89 + 90 @@ -6186,7 +6194,7 @@ Países Bajos libs/ui/src/lib/i18n.ts - 91 + 92 @@ -6194,7 +6202,7 @@ Nueva Zelanda libs/ui/src/lib/i18n.ts - 92 + 93 @@ -6202,7 +6210,7 @@ Polonia libs/ui/src/lib/i18n.ts - 93 + 94 @@ -6210,7 +6218,7 @@ Rumanía libs/ui/src/lib/i18n.ts - 94 + 95 @@ -6218,7 +6226,7 @@ Sudáfrica libs/ui/src/lib/i18n.ts - 96 + 97 @@ -6226,7 +6234,7 @@ Tailandia libs/ui/src/lib/i18n.ts - 98 + 99 @@ -6234,7 +6242,7 @@ Estados Unidos libs/ui/src/lib/i18n.ts - 101 + 102 @@ -6374,7 +6382,7 @@ Performance with currency effect Performance apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 83 + 84 @@ -6574,7 +6582,7 @@ Ucrania libs/ui/src/lib/i18n.ts - 99 + 100 @@ -7032,7 +7040,7 @@ Islas Vírgenes Británicas libs/ui/src/lib/i18n.ts - 80 + 81 @@ -7040,7 +7048,7 @@ Singapur libs/ui/src/lib/i18n.ts - 95 + 96 @@ -7116,7 +7124,7 @@ Reino Unido libs/ui/src/lib/i18n.ts - 100 + 101 @@ -7749,7 +7757,7 @@ Manage Asset Profile apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 437 + 443 @@ -7773,11 +7781,11 @@ Average Unit Price apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts - 105 + 110 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 100 + 102 diff --git a/apps/client/src/locales/messages.fr.xlf b/apps/client/src/locales/messages.fr.xlf index d14fa2bdf..fe772536b 100644 --- a/apps/client/src/locales/messages.fr.xlf +++ b/apps/client/src/locales/messages.fr.xlf @@ -186,7 +186,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 276 + 281 @@ -238,11 +238,11 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 257 + 262 libs/ui/src/lib/activities-table/activities-table.component.html - 293 + 298 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -278,7 +278,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 430 + 435 @@ -314,7 +314,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 457 + 462 libs/ui/src/lib/benchmark/benchmark.component.html @@ -474,7 +474,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 111 + 114 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html @@ -502,7 +502,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 214 + 220 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -574,7 +574,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 263 + 269 @@ -590,7 +590,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 273 + 279 @@ -606,7 +606,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 279 + 285 apps/client/src/app/pages/public/public-page.html @@ -626,7 +626,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 291 + 297 @@ -962,7 +962,7 @@ libs/ui/src/lib/i18n.ts - 106 + 107 @@ -978,7 +978,7 @@ libs/ui/src/lib/i18n.ts - 107 + 108 @@ -1178,7 +1178,7 @@ Prix Minimum apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 127 + 131 @@ -1186,7 +1186,7 @@ Prix Maximum apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 143 + 148 @@ -1194,7 +1194,7 @@ Quantité apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 153 + 158 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -1202,7 +1202,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 186 + 191 @@ -1210,7 +1210,7 @@ Signaler une Erreur de Données apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 446 + 452 @@ -1278,7 +1278,7 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 186 + 189 @@ -1290,7 +1290,7 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 184 + 187 @@ -1306,7 +1306,7 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 187 + 190 @@ -1594,7 +1594,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 370 + 376 apps/client/src/app/pages/accounts/accounts-page.html @@ -1634,7 +1634,7 @@ Données du marché apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 393 + 399 libs/common/src/lib/routes/routes.ts @@ -1918,11 +1918,11 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 226 + 232 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 337 + 343 apps/client/src/app/pages/portfolio/activities/activities-page.html @@ -1998,7 +1998,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 210 + 215 @@ -2006,7 +2006,7 @@ Import des données... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 167 + 169 @@ -2014,7 +2014,7 @@ L’import est terminé apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 176 + 179 @@ -2022,7 +2022,7 @@ Validation des données... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 284 + 287 @@ -2218,7 +2218,7 @@ Dividende apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 182 + 187 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html @@ -2546,7 +2546,7 @@ Importer Activités apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 86 + 87 libs/ui/src/lib/activities-table/activities-table.component.html @@ -2554,7 +2554,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 371 + 376 @@ -2566,7 +2566,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 396 + 401 @@ -2578,7 +2578,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 409 + 414 @@ -2586,7 +2586,7 @@ Dupliquer libs/ui/src/lib/activities-table/activities-table.component.html - 436 + 441 @@ -2594,7 +2594,7 @@ Exporter Brouillon sous ICS libs/ui/src/lib/activities-table/activities-table.component.html - 446 + 451 @@ -2602,7 +2602,7 @@ Voulez-vous vraiment supprimer cette activité ? libs/ui/src/lib/activities-table/activities-table.component.ts - 272 + 269 @@ -2698,7 +2698,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 308 + 313 libs/ui/src/lib/assistant/assistant.html @@ -2726,7 +2726,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 237 + 243 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -2758,7 +2758,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 246 + 252 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -2822,7 +2822,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 310 + 316 libs/ui/src/lib/i18n.ts @@ -3062,7 +3062,7 @@ Importer Dividendes apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 129 + 131 libs/ui/src/lib/activities-table/activities-table.component.html @@ -3070,7 +3070,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 383 + 388 @@ -3406,7 +3406,7 @@ Frais apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 204 + 209 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html @@ -3582,7 +3582,7 @@ Voulez-vous vraiment supprimer toutes vos activités ? libs/ui/src/lib/activities-table/activities-table.component.ts - 262 + 259 @@ -4234,7 +4234,7 @@ Japon libs/ui/src/lib/i18n.ts - 90 + 91 @@ -4976,7 +4976,7 @@ libs/ui/src/lib/i18n.ts - 97 + 98 @@ -5060,7 +5060,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 234 + 239 libs/ui/src/lib/i18n.ts @@ -5280,7 +5280,7 @@ Extreme Peur libs/ui/src/lib/i18n.ts - 104 + 105 @@ -5288,7 +5288,7 @@ Extreme Cupidité libs/ui/src/lib/i18n.ts - 105 + 106 @@ -5296,7 +5296,7 @@ Neutre libs/ui/src/lib/i18n.ts - 108 + 109 @@ -5423,6 +5423,14 @@ 91 + + Argentina + Argentina + + libs/ui/src/lib/i18n.ts + 77 + + Private Privée @@ -5452,7 +5460,7 @@ Investissement apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 167 + 172 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html @@ -5721,7 +5729,7 @@ Indonesia libs/ui/src/lib/i18n.ts - 88 + 89 @@ -5729,7 +5737,7 @@ Activitées apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 224 + 230 @@ -5737,7 +5745,7 @@ Rendement en Dividende apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 192 + 197 @@ -6097,7 +6105,7 @@ Australie libs/ui/src/lib/i18n.ts - 77 + 78 @@ -6105,7 +6113,7 @@ Autriche libs/ui/src/lib/i18n.ts - 78 + 79 @@ -6113,7 +6121,7 @@ Belgique libs/ui/src/lib/i18n.ts - 79 + 80 @@ -6121,7 +6129,7 @@ Bulgarie libs/ui/src/lib/i18n.ts - 81 + 82 @@ -6129,7 +6137,7 @@ Canada libs/ui/src/lib/i18n.ts - 82 + 83 @@ -6137,7 +6145,7 @@ République Tchèque libs/ui/src/lib/i18n.ts - 83 + 84 @@ -6145,7 +6153,7 @@ Finlande libs/ui/src/lib/i18n.ts - 84 + 85 @@ -6153,7 +6161,7 @@ France libs/ui/src/lib/i18n.ts - 85 + 86 @@ -6161,7 +6169,7 @@ Allemagne libs/ui/src/lib/i18n.ts - 86 + 87 @@ -6169,7 +6177,7 @@ Inde libs/ui/src/lib/i18n.ts - 87 + 88 @@ -6177,7 +6185,7 @@ Italie libs/ui/src/lib/i18n.ts - 89 + 90 @@ -6185,7 +6193,7 @@ Pays-Bas libs/ui/src/lib/i18n.ts - 91 + 92 @@ -6193,7 +6201,7 @@ Nouvelle-Zélande libs/ui/src/lib/i18n.ts - 92 + 93 @@ -6201,7 +6209,7 @@ Pologne libs/ui/src/lib/i18n.ts - 93 + 94 @@ -6209,7 +6217,7 @@ Roumanie libs/ui/src/lib/i18n.ts - 94 + 95 @@ -6217,7 +6225,7 @@ Afrique du Sud libs/ui/src/lib/i18n.ts - 96 + 97 @@ -6225,7 +6233,7 @@ Thaïlande libs/ui/src/lib/i18n.ts - 98 + 99 @@ -6233,7 +6241,7 @@ Etats-Unis libs/ui/src/lib/i18n.ts - 101 + 102 @@ -6373,7 +6381,7 @@ Performance avec taux de change appliqué Performance apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 83 + 84 @@ -6573,7 +6581,7 @@ Ukraine libs/ui/src/lib/i18n.ts - 99 + 100 @@ -7031,7 +7039,7 @@ Îles Vierges britanniques libs/ui/src/lib/i18n.ts - 80 + 81 @@ -7039,7 +7047,7 @@ Singapour libs/ui/src/lib/i18n.ts - 95 + 96 @@ -7115,7 +7123,7 @@ Royaume-Uni libs/ui/src/lib/i18n.ts - 100 + 101 @@ -7748,7 +7756,7 @@ Gérer le profil d’actif apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 437 + 443 @@ -7772,11 +7780,11 @@ Average Unit Price apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts - 105 + 110 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 100 + 102 diff --git a/apps/client/src/locales/messages.it.xlf b/apps/client/src/locales/messages.it.xlf index 0a13e4dd7..ced0ad03d 100644 --- a/apps/client/src/locales/messages.it.xlf +++ b/apps/client/src/locales/messages.it.xlf @@ -183,11 +183,11 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 257 + 262 libs/ui/src/lib/activities-table/activities-table.component.html - 293 + 298 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -223,7 +223,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 430 + 435 @@ -259,7 +259,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 457 + 462 libs/ui/src/lib/benchmark/benchmark.component.html @@ -419,7 +419,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 111 + 114 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html @@ -439,7 +439,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 214 + 220 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -883,7 +883,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 279 + 285 apps/client/src/app/pages/public/public-page.html @@ -903,7 +903,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 291 + 297 @@ -927,7 +927,7 @@ Segnala un’anomalia dei dati apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 446 + 452 @@ -1015,7 +1015,7 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 187 + 190 @@ -1251,7 +1251,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 370 + 376 apps/client/src/app/pages/accounts/accounts-page.html @@ -1307,7 +1307,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 276 + 281 @@ -1823,7 +1823,7 @@ Quantità apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 153 + 158 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -1831,7 +1831,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 186 + 191 @@ -1843,7 +1843,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 210 + 215 @@ -1887,11 +1887,11 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 226 + 232 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 337 + 343 apps/client/src/app/pages/portfolio/activities/activities-page.html @@ -1911,7 +1911,7 @@ Importazione dei dati... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 167 + 169 @@ -1919,7 +1919,7 @@ L’importazione è stata completata apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 176 + 179 @@ -2091,7 +2091,7 @@ Importa le attività apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 86 + 87 libs/ui/src/lib/activities-table/activities-table.component.html @@ -2099,7 +2099,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 371 + 376 @@ -2111,7 +2111,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 396 + 401 @@ -2123,7 +2123,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 409 + 414 @@ -2131,7 +2131,7 @@ Clona libs/ui/src/lib/activities-table/activities-table.component.html - 436 + 441 @@ -2139,7 +2139,7 @@ Esporta la bozza come ICS libs/ui/src/lib/activities-table/activities-table.component.html - 446 + 451 @@ -2147,7 +2147,7 @@ Vuoi davvero eliminare questa attività? libs/ui/src/lib/activities-table/activities-table.component.ts - 272 + 269 @@ -2215,7 +2215,7 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 184 + 187 @@ -2231,7 +2231,7 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 186 + 189 @@ -2263,7 +2263,7 @@ Prezzo massimo apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 143 + 148 @@ -2299,7 +2299,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 263 + 269 @@ -2315,7 +2315,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 273 + 279 @@ -2323,7 +2323,7 @@ Prezzo minimo apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 127 + 131 @@ -2403,7 +2403,7 @@ libs/ui/src/lib/i18n.ts - 106 + 107 @@ -2419,7 +2419,7 @@ libs/ui/src/lib/i18n.ts - 107 + 108 @@ -2563,7 +2563,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 308 + 313 libs/ui/src/lib/assistant/assistant.html @@ -2591,7 +2591,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 237 + 243 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -2627,7 +2627,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 310 + 316 libs/ui/src/lib/i18n.ts @@ -2907,7 +2907,7 @@ Dividendi apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 182 + 187 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html @@ -2955,7 +2955,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 246 + 252 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -2979,7 +2979,7 @@ Convalida dei dati... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 284 + 287 @@ -3003,7 +3003,7 @@ Dati del mercato apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 393 + 399 libs/common/src/lib/routes/routes.ts @@ -3063,7 +3063,7 @@ Importa i dividendi apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 129 + 131 libs/ui/src/lib/activities-table/activities-table.component.html @@ -3071,7 +3071,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 383 + 388 @@ -3407,7 +3407,7 @@ Commissioni apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 204 + 209 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html @@ -3583,7 +3583,7 @@ Vuoi davvero eliminare tutte le tue attività? libs/ui/src/lib/activities-table/activities-table.component.ts - 262 + 259 @@ -4235,7 +4235,7 @@ Giappone libs/ui/src/lib/i18n.ts - 90 + 91 @@ -4977,7 +4977,7 @@ libs/ui/src/lib/i18n.ts - 97 + 98 @@ -5061,7 +5061,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 234 + 239 libs/ui/src/lib/i18n.ts @@ -5281,7 +5281,7 @@ Paura estrema libs/ui/src/lib/i18n.ts - 104 + 105 @@ -5289,7 +5289,7 @@ Avidità estrema libs/ui/src/lib/i18n.ts - 105 + 106 @@ -5297,7 +5297,7 @@ Neutrale libs/ui/src/lib/i18n.ts - 108 + 109 @@ -5424,6 +5424,14 @@ 91 + + Argentina + Argentina + + libs/ui/src/lib/i18n.ts + 77 + + Private Privato @@ -5453,7 +5461,7 @@ Investimento apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 167 + 172 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html @@ -5722,7 +5730,7 @@ Indonesia libs/ui/src/lib/i18n.ts - 88 + 89 @@ -5730,7 +5738,7 @@ Attività apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 224 + 230 @@ -5738,7 +5746,7 @@ Rendimento da Dividendi apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 192 + 197 @@ -6098,7 +6106,7 @@ Australia libs/ui/src/lib/i18n.ts - 77 + 78 @@ -6106,7 +6114,7 @@ Austria libs/ui/src/lib/i18n.ts - 78 + 79 @@ -6114,7 +6122,7 @@ Belgio libs/ui/src/lib/i18n.ts - 79 + 80 @@ -6122,7 +6130,7 @@ Bulgaria libs/ui/src/lib/i18n.ts - 81 + 82 @@ -6130,7 +6138,7 @@ Canada libs/ui/src/lib/i18n.ts - 82 + 83 @@ -6138,7 +6146,7 @@ Repubblica Ceca libs/ui/src/lib/i18n.ts - 83 + 84 @@ -6146,7 +6154,7 @@ Finlandia libs/ui/src/lib/i18n.ts - 84 + 85 @@ -6154,7 +6162,7 @@ Francia libs/ui/src/lib/i18n.ts - 85 + 86 @@ -6162,7 +6170,7 @@ Germania libs/ui/src/lib/i18n.ts - 86 + 87 @@ -6170,7 +6178,7 @@ India libs/ui/src/lib/i18n.ts - 87 + 88 @@ -6178,7 +6186,7 @@ Italia libs/ui/src/lib/i18n.ts - 89 + 90 @@ -6186,7 +6194,7 @@ Olanda libs/ui/src/lib/i18n.ts - 91 + 92 @@ -6194,7 +6202,7 @@ Nuova Zelanda libs/ui/src/lib/i18n.ts - 92 + 93 @@ -6202,7 +6210,7 @@ Polonia libs/ui/src/lib/i18n.ts - 93 + 94 @@ -6210,7 +6218,7 @@ Romania libs/ui/src/lib/i18n.ts - 94 + 95 @@ -6218,7 +6226,7 @@ Sud Africa libs/ui/src/lib/i18n.ts - 96 + 97 @@ -6226,7 +6234,7 @@ Tailandia libs/ui/src/lib/i18n.ts - 98 + 99 @@ -6234,7 +6242,7 @@ Stati Uniti libs/ui/src/lib/i18n.ts - 101 + 102 @@ -6374,7 +6382,7 @@ Prestazioni con effetto valuta Prestazioni apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 83 + 84 @@ -6574,7 +6582,7 @@ Ucraina libs/ui/src/lib/i18n.ts - 99 + 100 @@ -7032,7 +7040,7 @@ Isole Vergini Britanniche libs/ui/src/lib/i18n.ts - 80 + 81 @@ -7040,7 +7048,7 @@ Singapore libs/ui/src/lib/i18n.ts - 95 + 96 @@ -7116,7 +7124,7 @@ United Kingdom libs/ui/src/lib/i18n.ts - 100 + 101 @@ -7749,7 +7757,7 @@ Gestisci profilo risorsa apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 437 + 443 @@ -7773,11 +7781,11 @@ Average Unit Price apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts - 105 + 110 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 100 + 102 diff --git a/apps/client/src/locales/messages.nl.xlf b/apps/client/src/locales/messages.nl.xlf index 74f6af32e..7e32c2aa1 100644 --- a/apps/client/src/locales/messages.nl.xlf +++ b/apps/client/src/locales/messages.nl.xlf @@ -182,11 +182,11 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 257 + 262 libs/ui/src/lib/activities-table/activities-table.component.html - 293 + 298 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -222,7 +222,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 430 + 435 @@ -258,7 +258,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 457 + 462 libs/ui/src/lib/benchmark/benchmark.component.html @@ -418,7 +418,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 111 + 114 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html @@ -438,7 +438,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 214 + 220 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -882,7 +882,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 279 + 285 apps/client/src/app/pages/public/public-page.html @@ -902,7 +902,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 291 + 297 @@ -926,7 +926,7 @@ Gegevensstoring melden apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 446 + 452 @@ -1014,7 +1014,7 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 187 + 190 @@ -1250,7 +1250,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 370 + 376 apps/client/src/app/pages/accounts/accounts-page.html @@ -1306,7 +1306,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 276 + 281 @@ -1822,7 +1822,7 @@ Hoeveelheid apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 153 + 158 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -1830,7 +1830,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 186 + 191 @@ -1842,7 +1842,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 210 + 215 @@ -1886,11 +1886,11 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 226 + 232 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 337 + 343 apps/client/src/app/pages/portfolio/activities/activities-page.html @@ -1910,7 +1910,7 @@ Gegevens importeren... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 167 + 169 @@ -1918,7 +1918,7 @@ Importeren is voltooid apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 176 + 179 @@ -2090,7 +2090,7 @@ Activiteiten importeren apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 86 + 87 libs/ui/src/lib/activities-table/activities-table.component.html @@ -2098,7 +2098,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 371 + 376 @@ -2110,7 +2110,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 396 + 401 @@ -2122,7 +2122,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 409 + 414 @@ -2130,7 +2130,7 @@ Kloon libs/ui/src/lib/activities-table/activities-table.component.html - 436 + 441 @@ -2138,7 +2138,7 @@ Concept exporteren als ICS libs/ui/src/lib/activities-table/activities-table.component.html - 446 + 451 @@ -2146,7 +2146,7 @@ Wil je deze activiteit echt verwijderen? libs/ui/src/lib/activities-table/activities-table.component.ts - 272 + 269 @@ -2214,7 +2214,7 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 184 + 187 @@ -2230,7 +2230,7 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 186 + 189 @@ -2262,7 +2262,7 @@ Maximale prijs apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 143 + 148 @@ -2298,7 +2298,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 263 + 269 @@ -2314,7 +2314,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 273 + 279 @@ -2322,7 +2322,7 @@ Minimale prijs apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 127 + 131 @@ -2402,7 +2402,7 @@ libs/ui/src/lib/i18n.ts - 106 + 107 @@ -2418,7 +2418,7 @@ libs/ui/src/lib/i18n.ts - 107 + 108 @@ -2562,7 +2562,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 308 + 313 libs/ui/src/lib/assistant/assistant.html @@ -2590,7 +2590,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 237 + 243 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -2626,7 +2626,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 310 + 316 libs/ui/src/lib/i18n.ts @@ -2906,7 +2906,7 @@ Dividend apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 182 + 187 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html @@ -2954,7 +2954,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 246 + 252 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -2978,7 +2978,7 @@ Gegevens valideren... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 284 + 287 @@ -3002,7 +3002,7 @@ Marktgegevens apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 393 + 399 libs/common/src/lib/routes/routes.ts @@ -3062,7 +3062,7 @@ Importeer dividenden apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 129 + 131 libs/ui/src/lib/activities-table/activities-table.component.html @@ -3070,7 +3070,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 383 + 388 @@ -3406,7 +3406,7 @@ Kosten apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 204 + 209 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html @@ -3582,7 +3582,7 @@ Weet je zeker dat je alle activiteiten wilt verwijderen? libs/ui/src/lib/activities-table/activities-table.component.ts - 262 + 259 @@ -4234,7 +4234,7 @@ Japan libs/ui/src/lib/i18n.ts - 90 + 91 @@ -4976,7 +4976,7 @@ libs/ui/src/lib/i18n.ts - 97 + 98 @@ -5060,7 +5060,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 234 + 239 libs/ui/src/lib/i18n.ts @@ -5280,7 +5280,7 @@ Extreme Angst libs/ui/src/lib/i18n.ts - 104 + 105 @@ -5288,7 +5288,7 @@ Extreme Hebzucht libs/ui/src/lib/i18n.ts - 105 + 106 @@ -5296,7 +5296,7 @@ Neutraal libs/ui/src/lib/i18n.ts - 108 + 109 @@ -5423,6 +5423,14 @@ 91 + + Argentina + Argentina + + libs/ui/src/lib/i18n.ts + 77 + + Private Prive @@ -5452,7 +5460,7 @@ Investering apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 167 + 172 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html @@ -5721,7 +5729,7 @@ Indonesië libs/ui/src/lib/i18n.ts - 88 + 89 @@ -5729,7 +5737,7 @@ Activiteit apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 224 + 230 @@ -5737,7 +5745,7 @@ Dividendrendement apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 192 + 197 @@ -6097,7 +6105,7 @@ Australië libs/ui/src/lib/i18n.ts - 77 + 78 @@ -6105,7 +6113,7 @@ Oostenrijk libs/ui/src/lib/i18n.ts - 78 + 79 @@ -6113,7 +6121,7 @@ België libs/ui/src/lib/i18n.ts - 79 + 80 @@ -6121,7 +6129,7 @@ Bulgarije libs/ui/src/lib/i18n.ts - 81 + 82 @@ -6129,7 +6137,7 @@ Canada libs/ui/src/lib/i18n.ts - 82 + 83 @@ -6137,7 +6145,7 @@ Tsjechische Republiek libs/ui/src/lib/i18n.ts - 83 + 84 @@ -6145,7 +6153,7 @@ Finland libs/ui/src/lib/i18n.ts - 84 + 85 @@ -6153,7 +6161,7 @@ Frankrijk libs/ui/src/lib/i18n.ts - 85 + 86 @@ -6161,7 +6169,7 @@ Duitsland libs/ui/src/lib/i18n.ts - 86 + 87 @@ -6169,7 +6177,7 @@ India libs/ui/src/lib/i18n.ts - 87 + 88 @@ -6177,7 +6185,7 @@ Italië libs/ui/src/lib/i18n.ts - 89 + 90 @@ -6185,7 +6193,7 @@ Nederland libs/ui/src/lib/i18n.ts - 91 + 92 @@ -6193,7 +6201,7 @@ Nieuw-Zeeland libs/ui/src/lib/i18n.ts - 92 + 93 @@ -6201,7 +6209,7 @@ Polen libs/ui/src/lib/i18n.ts - 93 + 94 @@ -6209,7 +6217,7 @@ Roemenië libs/ui/src/lib/i18n.ts - 94 + 95 @@ -6217,7 +6225,7 @@ Zuid-Afrika libs/ui/src/lib/i18n.ts - 96 + 97 @@ -6225,7 +6233,7 @@ Thailand libs/ui/src/lib/i18n.ts - 98 + 99 @@ -6233,7 +6241,7 @@ Verenigde Station libs/ui/src/lib/i18n.ts - 101 + 102 @@ -6373,7 +6381,7 @@ Prestatie met valuta effect Prestatie apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 83 + 84 @@ -6573,7 +6581,7 @@ Oekraïne libs/ui/src/lib/i18n.ts - 99 + 100 @@ -7031,7 +7039,7 @@ Britse Maagdeneilanden libs/ui/src/lib/i18n.ts - 80 + 81 @@ -7039,7 +7047,7 @@ Singapore libs/ui/src/lib/i18n.ts - 95 + 96 @@ -7115,7 +7123,7 @@ Verenigd Koninkrijk libs/ui/src/lib/i18n.ts - 100 + 101 @@ -7748,7 +7756,7 @@ Beheer activaprofiel apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 437 + 443 @@ -7772,11 +7780,11 @@ Gemiddelde eenheidsprijs apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts - 105 + 110 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 100 + 102 diff --git a/apps/client/src/locales/messages.pl.xlf b/apps/client/src/locales/messages.pl.xlf index 5a47e46a4..0bb0033c3 100644 --- a/apps/client/src/locales/messages.pl.xlf +++ b/apps/client/src/locales/messages.pl.xlf @@ -423,7 +423,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 276 + 281 @@ -459,11 +459,11 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 257 + 262 libs/ui/src/lib/activities-table/activities-table.component.html - 293 + 298 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -499,7 +499,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 430 + 435 @@ -535,7 +535,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 457 + 462 libs/ui/src/lib/benchmark/benchmark.component.html @@ -695,7 +695,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 111 + 114 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html @@ -759,7 +759,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 214 + 220 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -855,7 +855,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 263 + 269 @@ -871,7 +871,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 273 + 279 @@ -887,7 +887,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 279 + 285 apps/client/src/app/pages/public/public-page.html @@ -907,7 +907,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 291 + 297 @@ -1435,7 +1435,7 @@ libs/ui/src/lib/i18n.ts - 106 + 107 @@ -1451,7 +1451,7 @@ libs/ui/src/lib/i18n.ts - 107 + 108 @@ -1671,7 +1671,7 @@ Opłaty apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 204 + 209 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html @@ -1771,7 +1771,7 @@ Cena Minimalna apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 127 + 131 @@ -1779,7 +1779,7 @@ Cena Maksymalna apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 143 + 148 @@ -1787,7 +1787,7 @@ Ilość apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 153 + 158 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -1795,7 +1795,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 186 + 191 @@ -1803,7 +1803,7 @@ Zgłoś Błąd Danych apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 446 + 452 @@ -2275,7 +2275,7 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 186 + 189 @@ -2287,7 +2287,7 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 184 + 187 @@ -2303,7 +2303,7 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 187 + 190 @@ -2423,7 +2423,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 370 + 376 apps/client/src/app/pages/accounts/accounts-page.html @@ -2511,7 +2511,7 @@ Dane Rynkowe apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 393 + 399 libs/common/src/lib/routes/routes.ts @@ -3347,11 +3347,11 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 226 + 232 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 337 + 343 apps/client/src/app/pages/portfolio/activities/activities-page.html @@ -3371,7 +3371,7 @@ Czy na pewno chcesz usunąć te aktywności? libs/ui/src/lib/activities-table/activities-table.component.ts - 262 + 259 @@ -3451,7 +3451,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 210 + 215 @@ -3459,7 +3459,7 @@ Importuj Aktywności apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 86 + 87 libs/ui/src/lib/activities-table/activities-table.component.html @@ -3467,7 +3467,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 371 + 376 @@ -3475,7 +3475,7 @@ Impotruj Dywidendy apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 129 + 131 libs/ui/src/lib/activities-table/activities-table.component.html @@ -3483,7 +3483,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 383 + 388 @@ -3491,7 +3491,7 @@ Importowanie danych... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 167 + 169 @@ -3499,7 +3499,7 @@ Importowanie zakończone apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 176 + 179 @@ -3507,7 +3507,7 @@ Weryfikacja danych... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 284 + 287 @@ -3771,7 +3771,7 @@ Dywidenda apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 182 + 187 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html @@ -4472,7 +4472,7 @@ libs/ui/src/lib/i18n.ts - 97 + 98 @@ -4576,7 +4576,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 396 + 401 @@ -4588,7 +4588,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 409 + 414 @@ -4604,7 +4604,7 @@ Sklonuj libs/ui/src/lib/activities-table/activities-table.component.html - 436 + 441 @@ -4612,7 +4612,7 @@ Eksportuj Wersję Roboczą jako ICS libs/ui/src/lib/activities-table/activities-table.component.html - 446 + 451 @@ -4620,7 +4620,7 @@ Czy na pewno chcesz usunąć tę działalność? libs/ui/src/lib/activities-table/activities-table.component.ts - 272 + 269 @@ -4756,7 +4756,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 308 + 313 libs/ui/src/lib/assistant/assistant.html @@ -4792,7 +4792,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 237 + 243 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -4824,7 +4824,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 246 + 252 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -4916,7 +4916,7 @@ Japonia libs/ui/src/lib/i18n.ts - 90 + 91 @@ -5000,7 +5000,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 310 + 316 libs/ui/src/lib/i18n.ts @@ -5056,7 +5056,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 234 + 239 libs/ui/src/lib/i18n.ts @@ -5248,7 +5248,7 @@ Skrajny Strach libs/ui/src/lib/i18n.ts - 104 + 105 @@ -5256,7 +5256,7 @@ Skrajna Zachłanność libs/ui/src/lib/i18n.ts - 105 + 106 @@ -5264,7 +5264,7 @@ Neutralny libs/ui/src/lib/i18n.ts - 108 + 109 @@ -5423,6 +5423,14 @@ 91 + + Argentina + Argentina + + libs/ui/src/lib/i18n.ts + 77 + + Private Prywatny @@ -5452,7 +5460,7 @@ Inwestycje apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 167 + 172 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html @@ -5721,7 +5729,7 @@ Indonezja libs/ui/src/lib/i18n.ts - 88 + 89 @@ -5729,7 +5737,7 @@ Aktywność apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 224 + 230 @@ -5737,7 +5745,7 @@ Dochód z Dywidendy apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 192 + 197 @@ -6097,7 +6105,7 @@ Australia libs/ui/src/lib/i18n.ts - 77 + 78 @@ -6105,7 +6113,7 @@ Austria libs/ui/src/lib/i18n.ts - 78 + 79 @@ -6113,7 +6121,7 @@ Belgia libs/ui/src/lib/i18n.ts - 79 + 80 @@ -6121,7 +6129,7 @@ Bułgaria libs/ui/src/lib/i18n.ts - 81 + 82 @@ -6129,7 +6137,7 @@ Kanada libs/ui/src/lib/i18n.ts - 82 + 83 @@ -6137,7 +6145,7 @@ Czechy libs/ui/src/lib/i18n.ts - 83 + 84 @@ -6145,7 +6153,7 @@ Finlandia libs/ui/src/lib/i18n.ts - 84 + 85 @@ -6153,7 +6161,7 @@ Francja libs/ui/src/lib/i18n.ts - 85 + 86 @@ -6161,7 +6169,7 @@ Niemcy libs/ui/src/lib/i18n.ts - 86 + 87 @@ -6169,7 +6177,7 @@ Indie libs/ui/src/lib/i18n.ts - 87 + 88 @@ -6177,7 +6185,7 @@ Włochy libs/ui/src/lib/i18n.ts - 89 + 90 @@ -6185,7 +6193,7 @@ Holandia libs/ui/src/lib/i18n.ts - 91 + 92 @@ -6193,7 +6201,7 @@ Nowa Zelandia libs/ui/src/lib/i18n.ts - 92 + 93 @@ -6201,7 +6209,7 @@ Polska libs/ui/src/lib/i18n.ts - 93 + 94 @@ -6209,7 +6217,7 @@ Rumunia libs/ui/src/lib/i18n.ts - 94 + 95 @@ -6217,7 +6225,7 @@ Południowa Afryka libs/ui/src/lib/i18n.ts - 96 + 97 @@ -6225,7 +6233,7 @@ Tajlandia libs/ui/src/lib/i18n.ts - 98 + 99 @@ -6233,7 +6241,7 @@ Stany Zjednoczone libs/ui/src/lib/i18n.ts - 101 + 102 @@ -6373,7 +6381,7 @@ Wydajność z efektem walutowym Wydajność apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 83 + 84 @@ -6573,7 +6581,7 @@ Ukraina libs/ui/src/lib/i18n.ts - 99 + 100 @@ -7031,7 +7039,7 @@ Brytyjskie Wyspy Dziewicze libs/ui/src/lib/i18n.ts - 80 + 81 @@ -7039,7 +7047,7 @@ Singapur libs/ui/src/lib/i18n.ts - 95 + 96 @@ -7115,7 +7123,7 @@ Wielka Brytania libs/ui/src/lib/i18n.ts - 100 + 101 @@ -7748,7 +7756,7 @@ Zarządzaj profilem aktywów apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 437 + 443 @@ -7772,11 +7780,11 @@ Średnia cena jednostkowa apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts - 105 + 110 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 100 + 102 diff --git a/apps/client/src/locales/messages.pt.xlf b/apps/client/src/locales/messages.pt.xlf index b4733f39c..63d3bc903 100644 --- a/apps/client/src/locales/messages.pt.xlf +++ b/apps/client/src/locales/messages.pt.xlf @@ -186,7 +186,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 276 + 281 @@ -238,11 +238,11 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 257 + 262 libs/ui/src/lib/activities-table/activities-table.component.html - 293 + 298 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -278,7 +278,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 430 + 435 @@ -314,7 +314,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 457 + 462 libs/ui/src/lib/benchmark/benchmark.component.html @@ -474,7 +474,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 111 + 114 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html @@ -502,7 +502,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 214 + 220 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -834,7 +834,7 @@ libs/ui/src/lib/i18n.ts - 106 + 107 @@ -850,7 +850,7 @@ libs/ui/src/lib/i18n.ts - 107 + 108 @@ -1058,7 +1058,7 @@ Preço Mínimo apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 127 + 131 @@ -1066,7 +1066,7 @@ Preço Máximo apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 143 + 148 @@ -1074,7 +1074,7 @@ Quantidade apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 153 + 158 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -1082,7 +1082,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 186 + 191 @@ -1094,7 +1094,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 263 + 269 @@ -1110,7 +1110,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 273 + 279 @@ -1126,7 +1126,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 279 + 285 apps/client/src/app/pages/public/public-page.html @@ -1146,7 +1146,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 291 + 297 @@ -1170,7 +1170,7 @@ Dados do Relatório com Problema apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 446 + 452 @@ -1266,7 +1266,7 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 186 + 189 @@ -1278,7 +1278,7 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 184 + 187 @@ -1294,7 +1294,7 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 187 + 190 @@ -1590,7 +1590,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 370 + 376 apps/client/src/app/pages/accounts/accounts-page.html @@ -1890,11 +1890,11 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 226 + 232 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 337 + 343 apps/client/src/app/pages/portfolio/activities/activities-page.html @@ -1970,7 +1970,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 210 + 215 @@ -1994,7 +1994,7 @@ A importar dados... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 167 + 169 @@ -2002,7 +2002,7 @@ A importação foi concluída apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 176 + 179 @@ -2458,7 +2458,7 @@ Importar Atividades apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 86 + 87 libs/ui/src/lib/activities-table/activities-table.component.html @@ -2466,7 +2466,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 371 + 376 @@ -2478,7 +2478,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 396 + 401 @@ -2490,7 +2490,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 409 + 414 @@ -2498,7 +2498,7 @@ Clonar libs/ui/src/lib/activities-table/activities-table.component.html - 436 + 441 @@ -2506,7 +2506,7 @@ Exportar Rascunho como ICS libs/ui/src/lib/activities-table/activities-table.component.html - 446 + 451 @@ -2514,7 +2514,7 @@ Deseja realmente eliminar esta atividade? libs/ui/src/lib/activities-table/activities-table.component.ts - 272 + 269 @@ -2582,7 +2582,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 308 + 313 libs/ui/src/lib/assistant/assistant.html @@ -2610,7 +2610,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 237 + 243 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -2678,7 +2678,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 310 + 316 libs/ui/src/lib/i18n.ts @@ -2922,7 +2922,7 @@ Dados de Mercado apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 393 + 399 libs/common/src/lib/routes/routes.ts @@ -2946,7 +2946,7 @@ A validar dados... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 284 + 287 @@ -2970,7 +2970,7 @@ Dividendos apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 182 + 187 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html @@ -3018,7 +3018,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 246 + 252 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -3062,7 +3062,7 @@ Importar Dividendos apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 129 + 131 libs/ui/src/lib/activities-table/activities-table.component.html @@ -3070,7 +3070,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 383 + 388 @@ -3406,7 +3406,7 @@ Taxas apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 204 + 209 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html @@ -3582,7 +3582,7 @@ Deseja mesmo eliminar estas atividades? libs/ui/src/lib/activities-table/activities-table.component.ts - 262 + 259 @@ -4234,7 +4234,7 @@ Japão libs/ui/src/lib/i18n.ts - 90 + 91 @@ -4976,7 +4976,7 @@ libs/ui/src/lib/i18n.ts - 97 + 98 @@ -5060,7 +5060,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 234 + 239 libs/ui/src/lib/i18n.ts @@ -5280,7 +5280,7 @@ Medo Extremo libs/ui/src/lib/i18n.ts - 104 + 105 @@ -5288,7 +5288,7 @@ Ganância Extrema libs/ui/src/lib/i18n.ts - 105 + 106 @@ -5296,7 +5296,7 @@ Neutro libs/ui/src/lib/i18n.ts - 108 + 109 @@ -5423,6 +5423,14 @@ 91 + + Argentina + Argentina + + libs/ui/src/lib/i18n.ts + 77 + + Private Privado @@ -5452,7 +5460,7 @@ Investimento apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 167 + 172 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html @@ -5721,7 +5729,7 @@ Indonesia libs/ui/src/lib/i18n.ts - 88 + 89 @@ -5729,7 +5737,7 @@ Atividade apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 224 + 230 @@ -5737,7 +5745,7 @@ Rendimento de dividendos apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 192 + 197 @@ -6097,7 +6105,7 @@ Austrália libs/ui/src/lib/i18n.ts - 77 + 78 @@ -6105,7 +6113,7 @@ Áustria libs/ui/src/lib/i18n.ts - 78 + 79 @@ -6113,7 +6121,7 @@ Bélgica libs/ui/src/lib/i18n.ts - 79 + 80 @@ -6121,7 +6129,7 @@ Bulgária libs/ui/src/lib/i18n.ts - 81 + 82 @@ -6129,7 +6137,7 @@ Canadá libs/ui/src/lib/i18n.ts - 82 + 83 @@ -6137,7 +6145,7 @@ República Tcheca libs/ui/src/lib/i18n.ts - 83 + 84 @@ -6145,7 +6153,7 @@ Finlândia libs/ui/src/lib/i18n.ts - 84 + 85 @@ -6153,7 +6161,7 @@ França libs/ui/src/lib/i18n.ts - 85 + 86 @@ -6161,7 +6169,7 @@ Alemanha libs/ui/src/lib/i18n.ts - 86 + 87 @@ -6169,7 +6177,7 @@ Índia libs/ui/src/lib/i18n.ts - 87 + 88 @@ -6177,7 +6185,7 @@ Itália libs/ui/src/lib/i18n.ts - 89 + 90 @@ -6185,7 +6193,7 @@ Holanda libs/ui/src/lib/i18n.ts - 91 + 92 @@ -6193,7 +6201,7 @@ Nova Zelândia libs/ui/src/lib/i18n.ts - 92 + 93 @@ -6201,7 +6209,7 @@ Polônia libs/ui/src/lib/i18n.ts - 93 + 94 @@ -6209,7 +6217,7 @@ Romênia libs/ui/src/lib/i18n.ts - 94 + 95 @@ -6217,7 +6225,7 @@ África do Sul libs/ui/src/lib/i18n.ts - 96 + 97 @@ -6225,7 +6233,7 @@ Tailândia libs/ui/src/lib/i18n.ts - 98 + 99 @@ -6233,7 +6241,7 @@ Estados Unidos libs/ui/src/lib/i18n.ts - 101 + 102 @@ -6373,7 +6381,7 @@ Performance with currency effect Performance apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 83 + 84 @@ -6573,7 +6581,7 @@ Ucrânia libs/ui/src/lib/i18n.ts - 99 + 100 @@ -7031,7 +7039,7 @@ British Virgin Islands libs/ui/src/lib/i18n.ts - 80 + 81 @@ -7039,7 +7047,7 @@ Singapore libs/ui/src/lib/i18n.ts - 95 + 96 @@ -7115,7 +7123,7 @@ United Kingdom libs/ui/src/lib/i18n.ts - 100 + 101 @@ -7748,7 +7756,7 @@ Gerenciar perfil de ativos apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 437 + 443 @@ -7772,11 +7780,11 @@ Preço médio unitário apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts - 105 + 110 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 100 + 102 diff --git a/apps/client/src/locales/messages.tr.xlf b/apps/client/src/locales/messages.tr.xlf index da6bd74cc..f2f3d512a 100644 --- a/apps/client/src/locales/messages.tr.xlf +++ b/apps/client/src/locales/messages.tr.xlf @@ -383,7 +383,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 276 + 281 @@ -419,11 +419,11 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 257 + 262 libs/ui/src/lib/activities-table/activities-table.component.html - 293 + 298 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -459,7 +459,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 430 + 435 @@ -495,7 +495,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 457 + 462 libs/ui/src/lib/benchmark/benchmark.component.html @@ -655,7 +655,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 111 + 114 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html @@ -711,7 +711,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 214 + 220 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -783,7 +783,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 263 + 269 @@ -799,7 +799,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 273 + 279 @@ -815,7 +815,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 279 + 285 apps/client/src/app/pages/public/public-page.html @@ -835,7 +835,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 291 + 297 @@ -1291,7 +1291,7 @@ libs/ui/src/lib/i18n.ts - 106 + 107 @@ -1307,7 +1307,7 @@ libs/ui/src/lib/i18n.ts - 107 + 108 @@ -1611,7 +1611,7 @@ Asgari Fiyat apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 127 + 131 @@ -1619,7 +1619,7 @@ Azami Fiyat apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 143 + 148 @@ -1627,7 +1627,7 @@ Miktar apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 153 + 158 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -1635,7 +1635,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 186 + 191 @@ -1643,7 +1643,7 @@ Komisyon apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 204 + 209 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html @@ -1659,7 +1659,7 @@ Rapor Veri Sorunu apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 446 + 452 @@ -1879,7 +1879,7 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 186 + 189 @@ -1891,7 +1891,7 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 184 + 187 @@ -1907,7 +1907,7 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 187 + 190 @@ -2027,7 +2027,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 370 + 376 apps/client/src/app/pages/accounts/accounts-page.html @@ -2083,7 +2083,7 @@ Piyasa Verileri apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 393 + 399 libs/common/src/lib/routes/routes.ts @@ -2879,11 +2879,11 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 226 + 232 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 337 + 343 apps/client/src/app/pages/portfolio/activities/activities-page.html @@ -2903,7 +2903,7 @@ Tüm işlemlerinizi silmeyi gerçekten istiyor musunuz? libs/ui/src/lib/activities-table/activities-table.component.ts - 262 + 259 @@ -2959,7 +2959,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 210 + 215 @@ -2967,7 +2967,7 @@ İşlemleri İçe Aktar apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 86 + 87 libs/ui/src/lib/activities-table/activities-table.component.html @@ -2975,7 +2975,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 371 + 376 @@ -2983,7 +2983,7 @@ Temettüleri İçe Aktar apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 129 + 131 libs/ui/src/lib/activities-table/activities-table.component.html @@ -2991,7 +2991,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 383 + 388 @@ -2999,7 +2999,7 @@ Veri içe aktarılıyor... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 167 + 169 @@ -3007,7 +3007,7 @@ İçe aktarma tamamlandı apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 176 + 179 @@ -3015,7 +3015,7 @@ Veri doğrulanıyor... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 284 + 287 @@ -3287,7 +3287,7 @@ Temettü apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 182 + 187 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html @@ -3984,7 +3984,7 @@ libs/ui/src/lib/i18n.ts - 97 + 98 @@ -4320,7 +4320,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 396 + 401 @@ -4332,7 +4332,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 409 + 414 @@ -4348,7 +4348,7 @@ Klonla libs/ui/src/lib/activities-table/activities-table.component.html - 436 + 441 @@ -4356,7 +4356,7 @@ Taslakları ICS Olarak Dışa Aktar libs/ui/src/lib/activities-table/activities-table.component.html - 446 + 451 @@ -4364,7 +4364,7 @@ TBu işlemi silmeyi gerçekten istiyor musunuz? libs/ui/src/lib/activities-table/activities-table.component.ts - 272 + 269 @@ -4484,7 +4484,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 308 + 313 libs/ui/src/lib/assistant/assistant.html @@ -4520,7 +4520,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 237 + 243 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -4552,7 +4552,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 246 + 252 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -4644,7 +4644,7 @@ Japonya libs/ui/src/lib/i18n.ts - 90 + 91 @@ -4728,7 +4728,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 310 + 316 libs/ui/src/lib/i18n.ts @@ -5068,7 +5068,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 234 + 239 libs/ui/src/lib/i18n.ts @@ -5280,7 +5280,7 @@ Aşırı Korku libs/ui/src/lib/i18n.ts - 104 + 105 @@ -5288,7 +5288,7 @@ Aşırı Açgözlülük libs/ui/src/lib/i18n.ts - 105 + 106 @@ -5296,7 +5296,7 @@ Nötr libs/ui/src/lib/i18n.ts - 108 + 109 @@ -5423,6 +5423,14 @@ 91 + + Argentina + Argentina + + libs/ui/src/lib/i18n.ts + 77 + + Private Özel @@ -5452,7 +5460,7 @@ Yatırım apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 167 + 172 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html @@ -5721,7 +5729,7 @@ Indonesia libs/ui/src/lib/i18n.ts - 88 + 89 @@ -5729,7 +5737,7 @@ Etkinlik apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 224 + 230 @@ -5737,7 +5745,7 @@ Temettü Getiri apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 192 + 197 @@ -6097,7 +6105,7 @@ Avustralya libs/ui/src/lib/i18n.ts - 77 + 78 @@ -6105,7 +6113,7 @@ Avusturya libs/ui/src/lib/i18n.ts - 78 + 79 @@ -6113,7 +6121,7 @@ Belçika libs/ui/src/lib/i18n.ts - 79 + 80 @@ -6121,7 +6129,7 @@ Bulgaristan libs/ui/src/lib/i18n.ts - 81 + 82 @@ -6129,7 +6137,7 @@ Kanada libs/ui/src/lib/i18n.ts - 82 + 83 @@ -6137,7 +6145,7 @@ Çek Cumhuriyeti libs/ui/src/lib/i18n.ts - 83 + 84 @@ -6145,7 +6153,7 @@ Finlandiya libs/ui/src/lib/i18n.ts - 84 + 85 @@ -6153,7 +6161,7 @@ Fransa libs/ui/src/lib/i18n.ts - 85 + 86 @@ -6161,7 +6169,7 @@ Almanya libs/ui/src/lib/i18n.ts - 86 + 87 @@ -6169,7 +6177,7 @@ Hindistan libs/ui/src/lib/i18n.ts - 87 + 88 @@ -6177,7 +6185,7 @@ İtalya libs/ui/src/lib/i18n.ts - 89 + 90 @@ -6185,7 +6193,7 @@ Hollanda libs/ui/src/lib/i18n.ts - 91 + 92 @@ -6193,7 +6201,7 @@ Yeni Zelanda libs/ui/src/lib/i18n.ts - 92 + 93 @@ -6201,7 +6209,7 @@ Polonya libs/ui/src/lib/i18n.ts - 93 + 94 @@ -6209,7 +6217,7 @@ Romanya libs/ui/src/lib/i18n.ts - 94 + 95 @@ -6217,7 +6225,7 @@ Güney Afrika libs/ui/src/lib/i18n.ts - 96 + 97 @@ -6225,7 +6233,7 @@ Tayland libs/ui/src/lib/i18n.ts - 98 + 99 @@ -6233,7 +6241,7 @@ Amerika Birleşik Devletleri libs/ui/src/lib/i18n.ts - 101 + 102 @@ -6373,7 +6381,7 @@ Kur farkı etkisiyle performans Performans apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 83 + 84 @@ -6573,7 +6581,7 @@ Ukraine libs/ui/src/lib/i18n.ts - 99 + 100 @@ -7031,7 +7039,7 @@ Britanya Virjin Adaları libs/ui/src/lib/i18n.ts - 80 + 81 @@ -7039,7 +7047,7 @@ Singapur libs/ui/src/lib/i18n.ts - 95 + 96 @@ -7115,7 +7123,7 @@ Birleşik Krallık libs/ui/src/lib/i18n.ts - 100 + 101 @@ -7748,7 +7756,7 @@ Manage Asset Profile apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 437 + 443 @@ -7772,11 +7780,11 @@ Average Unit Price apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts - 105 + 110 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 100 + 102 diff --git a/apps/client/src/locales/messages.uk.xlf b/apps/client/src/locales/messages.uk.xlf index 6bce87b52..4640b930c 100644 --- a/apps/client/src/locales/messages.uk.xlf +++ b/apps/client/src/locales/messages.uk.xlf @@ -523,7 +523,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 276 + 281 @@ -559,11 +559,11 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 257 + 262 libs/ui/src/lib/activities-table/activities-table.component.html - 293 + 298 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -599,7 +599,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 430 + 435 @@ -635,7 +635,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 457 + 462 libs/ui/src/lib/benchmark/benchmark.component.html @@ -855,7 +855,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 111 + 114 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html @@ -875,7 +875,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 214 + 220 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -995,7 +995,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 263 + 269 @@ -1011,7 +1011,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 273 + 279 @@ -1027,7 +1027,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 279 + 285 apps/client/src/app/pages/public/public-page.html @@ -1047,7 +1047,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 291 + 297 @@ -1715,7 +1715,7 @@ Прибутковість з урахуванням валютного ефекту валюти Прибутковість apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 83 + 84 @@ -1723,7 +1723,7 @@ Мінімальна ціна apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 127 + 131 @@ -1731,7 +1731,7 @@ Максимальна ціна apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 143 + 148 @@ -1739,7 +1739,7 @@ Кількість apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 153 + 158 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -1747,7 +1747,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 186 + 191 @@ -1755,7 +1755,7 @@ Дохідність дивіденду apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 192 + 197 @@ -1763,7 +1763,7 @@ Комісії apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 204 + 209 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html @@ -1779,7 +1779,7 @@ Indonesia libs/ui/src/lib/i18n.ts - 88 + 89 @@ -1787,7 +1787,7 @@ Активність apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 224 + 230 @@ -1795,7 +1795,7 @@ Повідомити про збій даних apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 446 + 452 @@ -1851,7 +1851,7 @@ libs/ui/src/lib/i18n.ts - 106 + 107 @@ -1867,7 +1867,7 @@ libs/ui/src/lib/i18n.ts - 107 + 108 @@ -2446,6 +2446,14 @@ 91 + + Argentina + Argentina + + libs/ui/src/lib/i18n.ts + 77 + + Grant access Надати доступ @@ -2531,7 +2539,7 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 187 + 190 @@ -2843,7 +2851,7 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 186 + 189 @@ -2863,7 +2871,7 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 184 + 187 @@ -2991,7 +2999,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 370 + 376 apps/client/src/app/pages/accounts/accounts-page.html @@ -3087,7 +3095,7 @@ Ринкові дані apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 393 + 399 libs/common/src/lib/routes/routes.ts @@ -3972,11 +3980,11 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 226 + 232 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 337 + 343 apps/client/src/app/pages/portfolio/activities/activities-page.html @@ -4088,7 +4096,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 210 + 215 @@ -4096,7 +4104,7 @@ Імпортувати активності apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 86 + 87 libs/ui/src/lib/activities-table/activities-table.component.html @@ -4104,7 +4112,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 371 + 376 @@ -4112,7 +4120,7 @@ Імпорт дивідендів apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 129 + 131 libs/ui/src/lib/activities-table/activities-table.component.html @@ -4120,7 +4128,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 383 + 388 @@ -4128,7 +4136,7 @@ Імпортуються дані... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 167 + 169 @@ -4136,7 +4144,7 @@ Імпорт завершено apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 176 + 179 @@ -4144,7 +4152,7 @@ Перевірка даних... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 284 + 287 @@ -4440,7 +4448,7 @@ Дивіденди apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 182 + 187 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html @@ -4468,7 +4476,7 @@ Інвестиції apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 167 + 172 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html @@ -5119,7 +5127,7 @@ libs/ui/src/lib/i18n.ts - 97 + 98 @@ -5715,7 +5723,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 396 + 401 @@ -5727,7 +5735,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 409 + 414 @@ -5751,7 +5759,7 @@ Клонувати libs/ui/src/lib/activities-table/activities-table.component.html - 436 + 441 @@ -5759,7 +5767,7 @@ Експортувати чернетку як ICS libs/ui/src/lib/activities-table/activities-table.component.html - 446 + 451 @@ -5767,7 +5775,7 @@ Ви дійсно хочете видалити ці дії? libs/ui/src/lib/activities-table/activities-table.component.ts - 262 + 259 @@ -5775,7 +5783,7 @@ Ви дійсно хочете видалити цю активність? libs/ui/src/lib/activities-table/activities-table.component.ts - 272 + 269 @@ -6039,7 +6047,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 308 + 313 libs/ui/src/lib/assistant/assistant.html @@ -6075,7 +6083,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 237 + 243 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -6107,7 +6115,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 246 + 252 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -6359,7 +6367,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 310 + 316 libs/ui/src/lib/i18n.ts @@ -6423,7 +6431,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 234 + 239 libs/ui/src/lib/i18n.ts @@ -6623,7 +6631,7 @@ Австралія libs/ui/src/lib/i18n.ts - 77 + 78 @@ -6631,7 +6639,7 @@ Австрія libs/ui/src/lib/i18n.ts - 78 + 79 @@ -6639,7 +6647,7 @@ Бельгія libs/ui/src/lib/i18n.ts - 79 + 80 @@ -6647,7 +6655,7 @@ Болгарія libs/ui/src/lib/i18n.ts - 81 + 82 @@ -6655,7 +6663,7 @@ Канада libs/ui/src/lib/i18n.ts - 82 + 83 @@ -6663,7 +6671,7 @@ Чеська Республіка libs/ui/src/lib/i18n.ts - 83 + 84 @@ -6671,7 +6679,7 @@ Фінляндія libs/ui/src/lib/i18n.ts - 84 + 85 @@ -6679,7 +6687,7 @@ Франція libs/ui/src/lib/i18n.ts - 85 + 86 @@ -6687,7 +6695,7 @@ Німеччина libs/ui/src/lib/i18n.ts - 86 + 87 @@ -6695,7 +6703,7 @@ Індія libs/ui/src/lib/i18n.ts - 87 + 88 @@ -6703,7 +6711,7 @@ Італія libs/ui/src/lib/i18n.ts - 89 + 90 @@ -6711,7 +6719,7 @@ Японія libs/ui/src/lib/i18n.ts - 90 + 91 @@ -6719,7 +6727,7 @@ Нідерланди libs/ui/src/lib/i18n.ts - 91 + 92 @@ -6727,7 +6735,7 @@ Нова Зеландія libs/ui/src/lib/i18n.ts - 92 + 93 @@ -6735,7 +6743,7 @@ Польща libs/ui/src/lib/i18n.ts - 93 + 94 @@ -6743,7 +6751,7 @@ Румунія libs/ui/src/lib/i18n.ts - 94 + 95 @@ -6751,7 +6759,7 @@ Південна Африка libs/ui/src/lib/i18n.ts - 96 + 97 @@ -6759,7 +6767,7 @@ Таїланд libs/ui/src/lib/i18n.ts - 98 + 99 @@ -6767,7 +6775,7 @@ Україна libs/ui/src/lib/i18n.ts - 99 + 100 @@ -6775,7 +6783,7 @@ Сполучені Штати libs/ui/src/lib/i18n.ts - 101 + 102 @@ -6783,7 +6791,7 @@ Екстремальний страх libs/ui/src/lib/i18n.ts - 104 + 105 @@ -6791,7 +6799,7 @@ Екстремальна жадібність libs/ui/src/lib/i18n.ts - 105 + 106 @@ -6799,7 +6807,7 @@ Нейтрально libs/ui/src/lib/i18n.ts - 108 + 109 @@ -7031,7 +7039,7 @@ British Virgin Islands libs/ui/src/lib/i18n.ts - 80 + 81 @@ -7039,7 +7047,7 @@ Singapore libs/ui/src/lib/i18n.ts - 95 + 96 @@ -7115,7 +7123,7 @@ United Kingdom libs/ui/src/lib/i18n.ts - 100 + 101 @@ -7748,7 +7756,7 @@ Manage Asset Profile apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 437 + 443 @@ -7772,11 +7780,11 @@ Average Unit Price apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts - 105 + 110 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 100 + 102 diff --git a/apps/client/src/locales/messages.xlf b/apps/client/src/locales/messages.xlf index fddbb1c45..d0a90df6f 100644 --- a/apps/client/src/locales/messages.xlf +++ b/apps/client/src/locales/messages.xlf @@ -406,7 +406,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 276 + 281 @@ -441,11 +441,11 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 257 + 262 libs/ui/src/lib/activities-table/activities-table.component.html - 293 + 298 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -480,7 +480,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 430 + 435 @@ -515,7 +515,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 457 + 462 libs/ui/src/lib/benchmark/benchmark.component.html @@ -660,7 +660,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 111 + 114 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html @@ -718,7 +718,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 214 + 220 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -826,7 +826,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 263 + 269 @@ -841,7 +841,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 273 + 279 @@ -856,7 +856,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 279 + 285 apps/client/src/app/pages/public/public-page.html @@ -875,7 +875,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 291 + 297 @@ -1350,7 +1350,7 @@ libs/ui/src/lib/i18n.ts - 106 + 107 @@ -1365,7 +1365,7 @@ libs/ui/src/lib/i18n.ts - 107 + 108 @@ -1564,7 +1564,7 @@ Fees apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 204 + 209 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html @@ -1653,21 +1653,21 @@ Minimum Price apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 127 + 131 Maximum Price apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 143 + 148 Quantity apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 153 + 158 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -1675,14 +1675,14 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 186 + 191 Report Data Glitch apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 446 + 452 @@ -2107,7 +2107,7 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 186 + 189 @@ -2118,7 +2118,7 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 184 + 187 @@ -2133,7 +2133,7 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 187 + 190 @@ -2245,7 +2245,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 370 + 376 apps/client/src/app/pages/accounts/accounts-page.html @@ -2324,7 +2324,7 @@ Market Data apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 393 + 399 libs/common/src/lib/routes/routes.ts @@ -3088,11 +3088,11 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 226 + 232 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 337 + 343 apps/client/src/app/pages/portfolio/activities/activities-page.html @@ -3111,7 +3111,7 @@ Do you really want to delete these activities? libs/ui/src/lib/activities-table/activities-table.component.ts - 262 + 259 @@ -3182,14 +3182,14 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 210 + 215 Import Activities apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 86 + 87 libs/ui/src/lib/activities-table/activities-table.component.html @@ -3197,14 +3197,14 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 371 + 376 Import Dividends apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 129 + 131 libs/ui/src/lib/activities-table/activities-table.component.html @@ -3212,28 +3212,28 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 383 + 388 Importing data... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 167 + 169 Import has been completed apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 176 + 179 Validating data... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 284 + 287 @@ -3469,7 +3469,7 @@ Dividend apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 182 + 187 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html @@ -4114,7 +4114,7 @@ libs/ui/src/lib/i18n.ts - 97 + 98 @@ -4216,7 +4216,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 396 + 401 @@ -4227,7 +4227,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 409 + 414 @@ -4241,21 +4241,21 @@ Clone libs/ui/src/lib/activities-table/activities-table.component.html - 436 + 441 Export Draft as ICS libs/ui/src/lib/activities-table/activities-table.component.html - 446 + 451 Do you really want to delete this activity? libs/ui/src/lib/activities-table/activities-table.component.ts - 272 + 269 @@ -4391,7 +4391,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 308 + 313 libs/ui/src/lib/assistant/assistant.html @@ -4425,7 +4425,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 237 + 243 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -4456,7 +4456,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 246 + 252 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -4539,7 +4539,7 @@ Japan libs/ui/src/lib/i18n.ts - 90 + 91 @@ -4615,7 +4615,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 310 + 316 libs/ui/src/lib/i18n.ts @@ -4666,7 +4666,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 234 + 239 libs/ui/src/lib/i18n.ts @@ -4836,21 +4836,21 @@ Extreme Fear libs/ui/src/lib/i18n.ts - 104 + 105 Extreme Greed libs/ui/src/lib/i18n.ts - 105 + 106 Neutral libs/ui/src/lib/i18n.ts - 108 + 109 @@ -4933,6 +4933,13 @@ 91 + + Argentina + + libs/ui/src/lib/i18n.ts + 77 + + Restricted view @@ -5001,7 +5008,7 @@ Investment apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 167 + 172 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html @@ -5221,21 +5228,21 @@ Indonesia libs/ui/src/lib/i18n.ts - 88 + 89 Activity apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 224 + 230 Dividend Yield apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 192 + 197 @@ -5465,35 +5472,35 @@ Thailand libs/ui/src/lib/i18n.ts - 98 + 99 India libs/ui/src/lib/i18n.ts - 87 + 88 Austria libs/ui/src/lib/i18n.ts - 78 + 79 Poland libs/ui/src/lib/i18n.ts - 93 + 94 Italy libs/ui/src/lib/i18n.ts - 89 + 90 @@ -5535,21 +5542,21 @@ Canada libs/ui/src/lib/i18n.ts - 82 + 83 New Zealand libs/ui/src/lib/i18n.ts - 92 + 93 Netherlands libs/ui/src/lib/i18n.ts - 91 + 92 @@ -5588,21 +5595,21 @@ Romania libs/ui/src/lib/i18n.ts - 94 + 95 Germany libs/ui/src/lib/i18n.ts - 86 + 87 United States libs/ui/src/lib/i18n.ts - 101 + 102 @@ -5616,7 +5623,7 @@ Belgium libs/ui/src/lib/i18n.ts - 79 + 80 @@ -5634,28 +5641,28 @@ Czech Republic libs/ui/src/lib/i18n.ts - 83 + 84 Australia libs/ui/src/lib/i18n.ts - 77 + 78 South Africa libs/ui/src/lib/i18n.ts - 96 + 97 Bulgaria libs/ui/src/lib/i18n.ts - 81 + 82 @@ -5669,14 +5676,14 @@ Finland libs/ui/src/lib/i18n.ts - 84 + 85 France libs/ui/src/lib/i18n.ts - 85 + 86 @@ -5812,7 +5819,7 @@ Performance with currency effect Performance apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 83 + 84 @@ -5963,7 +5970,7 @@ Ukraine libs/ui/src/lib/i18n.ts - 99 + 100 @@ -6382,7 +6389,7 @@ Singapore libs/ui/src/lib/i18n.ts - 95 + 96 @@ -6396,7 +6403,7 @@ British Virgin Islands libs/ui/src/lib/i18n.ts - 80 + 81 @@ -6470,7 +6477,7 @@ United Kingdom libs/ui/src/lib/i18n.ts - 100 + 101 @@ -7011,7 +7018,7 @@ Manage Asset Profile apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 437 + 443 @@ -7032,11 +7039,11 @@ Average Unit Price apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts - 105 + 110 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 100 + 102 diff --git a/apps/client/src/locales/messages.zh.xlf b/apps/client/src/locales/messages.zh.xlf index 359ec2588..059770e0c 100644 --- a/apps/client/src/locales/messages.zh.xlf +++ b/apps/client/src/locales/messages.zh.xlf @@ -432,7 +432,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 276 + 281 @@ -468,11 +468,11 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 257 + 262 libs/ui/src/lib/activities-table/activities-table.component.html - 293 + 298 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -508,7 +508,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 430 + 435 @@ -544,7 +544,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 457 + 462 libs/ui/src/lib/benchmark/benchmark.component.html @@ -704,7 +704,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 111 + 114 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html @@ -768,7 +768,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 214 + 220 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -864,7 +864,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 263 + 269 @@ -880,7 +880,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 273 + 279 @@ -896,7 +896,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 279 + 285 apps/client/src/app/pages/public/public-page.html @@ -916,7 +916,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 291 + 297 @@ -1444,7 +1444,7 @@ libs/ui/src/lib/i18n.ts - 106 + 107 @@ -1460,7 +1460,7 @@ libs/ui/src/lib/i18n.ts - 107 + 108 @@ -1680,7 +1680,7 @@ 费用 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 204 + 209 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html @@ -1780,7 +1780,7 @@ 最低价格 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 127 + 131 @@ -1788,7 +1788,7 @@ 最高价格 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 143 + 148 @@ -1796,7 +1796,7 @@ 数量 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 153 + 158 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -1804,7 +1804,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 186 + 191 @@ -1812,7 +1812,7 @@ 报告数据故障 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 446 + 452 @@ -2284,7 +2284,7 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 186 + 189 @@ -2296,7 +2296,7 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 184 + 187 @@ -2312,7 +2312,7 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 187 + 190 @@ -2432,7 +2432,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 370 + 376 apps/client/src/app/pages/accounts/accounts-page.html @@ -2520,7 +2520,7 @@ 市场数据 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 393 + 399 libs/common/src/lib/routes/routes.ts @@ -3356,11 +3356,11 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 226 + 232 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 337 + 343 apps/client/src/app/pages/portfolio/activities/activities-page.html @@ -3380,7 +3380,7 @@ 您确定要删除这些活动吗? libs/ui/src/lib/activities-table/activities-table.component.ts - 262 + 259 @@ -3460,7 +3460,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 210 + 215 @@ -3468,7 +3468,7 @@ 导入活动记录 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 86 + 87 libs/ui/src/lib/activities-table/activities-table.component.html @@ -3476,7 +3476,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 371 + 376 @@ -3484,7 +3484,7 @@ 导入股息 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 129 + 131 libs/ui/src/lib/activities-table/activities-table.component.html @@ -3492,7 +3492,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 383 + 388 @@ -3500,7 +3500,7 @@ 正在导入数据... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 167 + 169 @@ -3508,7 +3508,7 @@ 导入已完成 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 176 + 179 @@ -3516,7 +3516,7 @@ 验证数据... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 284 + 287 @@ -3780,7 +3780,7 @@ 股息 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 182 + 187 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html @@ -4493,7 +4493,7 @@ libs/ui/src/lib/i18n.ts - 97 + 98 @@ -4605,7 +4605,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 396 + 401 @@ -4617,7 +4617,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 409 + 414 @@ -4633,7 +4633,7 @@ 克隆 libs/ui/src/lib/activities-table/activities-table.component.html - 436 + 441 @@ -4641,7 +4641,7 @@ 将汇票导出为 ICS libs/ui/src/lib/activities-table/activities-table.component.html - 446 + 451 @@ -4649,7 +4649,7 @@ 您确实要删除此活动吗? libs/ui/src/lib/activities-table/activities-table.component.ts - 272 + 269 @@ -4801,7 +4801,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 308 + 313 libs/ui/src/lib/assistant/assistant.html @@ -4837,7 +4837,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 237 + 243 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -4869,7 +4869,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 246 + 252 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -4961,7 +4961,7 @@ 日本 libs/ui/src/lib/i18n.ts - 90 + 91 @@ -5045,7 +5045,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 310 + 316 libs/ui/src/lib/i18n.ts @@ -5101,7 +5101,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 234 + 239 libs/ui/src/lib/i18n.ts @@ -5293,7 +5293,7 @@ 极度恐惧 libs/ui/src/lib/i18n.ts - 104 + 105 @@ -5301,7 +5301,7 @@ 极度贪婪 libs/ui/src/lib/i18n.ts - 105 + 106 @@ -5309,7 +5309,7 @@ 中性的 libs/ui/src/lib/i18n.ts - 108 + 109 @@ -5400,6 +5400,14 @@ 91 + + Argentina + Argentina + + libs/ui/src/lib/i18n.ts + 77 + + Restricted view 受限视图 @@ -5477,7 +5485,7 @@ 投资 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 167 + 172 apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html @@ -5722,7 +5730,7 @@ Indonesia libs/ui/src/lib/i18n.ts - 88 + 89 @@ -5730,7 +5738,7 @@ 活动 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 224 + 230 @@ -5738,7 +5746,7 @@ 股息收益率 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 192 + 197 @@ -6098,7 +6106,7 @@ 澳大利亚 libs/ui/src/lib/i18n.ts - 77 + 78 @@ -6106,7 +6114,7 @@ 奥地利 libs/ui/src/lib/i18n.ts - 78 + 79 @@ -6114,7 +6122,7 @@ 比利时 libs/ui/src/lib/i18n.ts - 79 + 80 @@ -6122,7 +6130,7 @@ 保加利亚 libs/ui/src/lib/i18n.ts - 81 + 82 @@ -6130,7 +6138,7 @@ 加拿大 libs/ui/src/lib/i18n.ts - 82 + 83 @@ -6138,7 +6146,7 @@ 捷克共和国 libs/ui/src/lib/i18n.ts - 83 + 84 @@ -6146,7 +6154,7 @@ 芬兰 libs/ui/src/lib/i18n.ts - 84 + 85 @@ -6154,7 +6162,7 @@ 法国 libs/ui/src/lib/i18n.ts - 85 + 86 @@ -6162,7 +6170,7 @@ 德国 libs/ui/src/lib/i18n.ts - 86 + 87 @@ -6170,7 +6178,7 @@ 印度 libs/ui/src/lib/i18n.ts - 87 + 88 @@ -6178,7 +6186,7 @@ 意大利 libs/ui/src/lib/i18n.ts - 89 + 90 @@ -6186,7 +6194,7 @@ 荷兰 libs/ui/src/lib/i18n.ts - 91 + 92 @@ -6194,7 +6202,7 @@ 新西兰 libs/ui/src/lib/i18n.ts - 92 + 93 @@ -6202,7 +6210,7 @@ 波兰 libs/ui/src/lib/i18n.ts - 93 + 94 @@ -6210,7 +6218,7 @@ 罗马尼亚 libs/ui/src/lib/i18n.ts - 94 + 95 @@ -6218,7 +6226,7 @@ 南非 libs/ui/src/lib/i18n.ts - 96 + 97 @@ -6226,7 +6234,7 @@ 泰国 libs/ui/src/lib/i18n.ts - 98 + 99 @@ -6234,7 +6242,7 @@ 美国 libs/ui/src/lib/i18n.ts - 101 + 102 @@ -6374,7 +6382,7 @@ 含货币影响的表现 表现 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 83 + 84 @@ -6574,7 +6582,7 @@ 乌克兰 libs/ui/src/lib/i18n.ts - 99 + 100 @@ -7032,7 +7040,7 @@ 英属维尔京群岛 libs/ui/src/lib/i18n.ts - 80 + 81 @@ -7040,7 +7048,7 @@ 新加坡 libs/ui/src/lib/i18n.ts - 95 + 96 @@ -7116,7 +7124,7 @@ 英国 libs/ui/src/lib/i18n.ts - 100 + 101 @@ -7749,7 +7757,7 @@ 管理资产概况 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 437 + 443 @@ -7773,11 +7781,11 @@ 平均单位价格 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts - 105 + 110 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 100 + 102 From 5dae60fdbd3639ef36b63961f9945b5eefd0772f Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Sat, 9 Aug 2025 21:35:25 +0200 Subject: [PATCH 11/62] Feature/remove unused codelyzer dependency (#5343) * Remove codelyzer * Update changelog --- CHANGELOG.md | 1 + package-lock.json | 429 ---------------------------------------------- package.json | 1 - 3 files changed, 1 insertion(+), 430 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b44efa51b..9c4b5eeaf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,6 +18,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Improved the language localization for German (`de`) - Improved the language localization for Polish (`pl`) - Improved the language localization for Spanish (`es`) +- Removed the unused `codelyzer` dependency ## 2.189.0 - 2025-08-05 diff --git a/package-lock.json b/package-lock.json index 6585c26ca..74545f4b0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -136,7 +136,6 @@ "@types/passport-google-oauth20": "2.0.16", "@typescript-eslint/eslint-plugin": "8.29.0", "@typescript-eslint/parser": "8.29.0", - "codelyzer": "6.0.1", "cypress": "6.2.1", "eslint": "9.24.0", "eslint-config-prettier": "10.1.1", @@ -14674,16 +14673,6 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/app-root-path": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/app-root-path/-/app-root-path-3.1.0.tgz", - "integrity": "sha512-biN3PwB2gUtjaYy/isrU3aNWI5w+fAfvHkSvCKeQGxhmYpwKFUxudR3Yya+KqVRHBmEDYh+/lTozYCFbmzX4nA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 6.0.0" - } - }, "node_modules/append-field": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/append-field/-/append-field-1.0.0.tgz", @@ -14949,13 +14938,6 @@ "node": ">=4" } }, - "node_modules/ast-types-flow": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", - "integrity": "sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==", - "dev": true, - "license": "ISC" - }, "node_modules/async": { "version": "3.2.6", "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", @@ -15846,17 +15828,6 @@ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", "license": "MIT" }, - "node_modules/builtin-modules": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", - "integrity": "sha512-wxXCdllwGhI2kCC0MnvTGYTMvnVZTvqgypkiTI8Pa5tcz2i6VqsqwYGgqwXji+4RgCzms6EajE4IxiUH6HH8nQ==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/bull": { "version": "4.16.5", "resolved": "https://registry.npmjs.org/bull/-/bull-4.16.5.tgz", @@ -16729,121 +16700,6 @@ "node": ">=0.10.0" } }, - "node_modules/codelyzer": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/codelyzer/-/codelyzer-6.0.1.tgz", - "integrity": "sha512-cOyGQgMdhnRYtW2xrJUNrNYDjEgwQ+BrE2y93Bwz3h4DJ6vJRLfupemU5N3pbYsUlBHJf0u1j1UGk+NLW4d97g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@angular/compiler": "9.0.0", - "@angular/core": "9.0.0", - "app-root-path": "^3.0.0", - "aria-query": "^3.0.0", - "axobject-query": "2.0.2", - "css-selector-tokenizer": "^0.7.1", - "cssauron": "^1.4.0", - "damerau-levenshtein": "^1.0.4", - "rxjs": "^6.5.3", - "semver-dsl": "^1.0.1", - "source-map": "^0.5.7", - "sprintf-js": "^1.1.2", - "tslib": "^1.10.0", - "zone.js": "~0.10.3" - }, - "peerDependencies": { - "@angular/compiler": ">=2.3.1 <12.0.0 || ^11.0.0-next || ^11.1.0-next || ^11.2.0-next", - "@angular/core": ">=2.3.1 <12.0.0 || ^11.0.0-next || ^11.1.0-next || ^11.2.0-next", - "tslint": "^5.0.0 || ^6.0.0" - } - }, - "node_modules/codelyzer/node_modules/@angular/compiler": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-9.0.0.tgz", - "integrity": "sha512-ctjwuntPfZZT2mNj2NDIVu51t9cvbhl/16epc5xEwyzyDt76pX9UgwvY+MbXrf/C/FWwdtmNtfP698BKI+9leQ==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "tslib": "^1.10.0" - } - }, - "node_modules/codelyzer/node_modules/@angular/core": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/@angular/core/-/core-9.0.0.tgz", - "integrity": "sha512-6Pxgsrf0qF9iFFqmIcWmjJGkkCaCm6V5QNnxMy2KloO3SDq6QuMVRbN9RtC8Urmo25LP+eZ6ZgYqFYpdD8Hd9w==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "rxjs": "^6.5.3", - "tslib": "^1.10.0", - "zone.js": "~0.10.2" - } - }, - "node_modules/codelyzer/node_modules/aria-query": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-3.0.0.tgz", - "integrity": "sha512-majUxHgLehQTeSA+hClx+DY09OVUqG3GtezWkF1krgLGNdlDu9l9V8DaqNMWbq4Eddc8wsyDA0hpDUtnYxQEXw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "ast-types-flow": "0.0.7", - "commander": "^2.11.0" - } - }, - "node_modules/codelyzer/node_modules/axobject-query": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.0.2.tgz", - "integrity": "sha512-MCeek8ZH7hKyO1rWUbKNQBbl4l2eY0ntk7OGi+q0RlafrCnfPxC06WZA+uebCfmYp4mNU9jRBP1AhGyf8+W3ww==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "ast-types-flow": "0.0.7" - } - }, - "node_modules/codelyzer/node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/codelyzer/node_modules/rxjs": { - "version": "6.6.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", - "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "tslib": "^1.9.0" - }, - "engines": { - "npm": ">=2.0.0" - } - }, - "node_modules/codelyzer/node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/codelyzer/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true, - "license": "0BSD" - }, - "node_modules/codelyzer/node_modules/zone.js": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.10.3.tgz", - "integrity": "sha512-LXVLVEq0NNOqK/fLJo3d0kfzd4sxwn2/h67/02pjCjfKDxgx1i9QqpvtHD8CrBnSSwMw5+dy11O7FRX5mkO7Cg==", - "dev": true, - "license": "MIT" - }, "node_modules/collect-v8-coverage": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", @@ -18344,17 +18200,6 @@ "url": "https://github.com/sponsors/fb55" } }, - "node_modules/css-selector-tokenizer": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.3.tgz", - "integrity": "sha512-jWQv3oCEL5kMErj4wRnK/OPoBi0D+P1FR2cDCKYPaMeD2eW3/mttav8HT4hT1CKopiJI/psEULjkClhvJo4Lvg==", - "dev": true, - "license": "MIT", - "dependencies": { - "cssesc": "^3.0.0", - "fastparse": "^1.1.2" - } - }, "node_modules/css-tree": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz", @@ -18388,16 +18233,6 @@ "dev": true, "license": "MIT" }, - "node_modules/cssauron": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/cssauron/-/cssauron-1.4.0.tgz", - "integrity": "sha512-Ht70DcFBh+/ekjVrYS2PlDMdSQEl3OFNmjK6lcn49HptBgilXf/Zwg4uFh9Xn0pX3Q8YOkSjIFOfK2osvdqpBw==", - "dev": true, - "license": "MIT", - "dependencies": { - "through": "X.X.X" - } - }, "node_modules/cssesc": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", @@ -19193,13 +19028,6 @@ "lodash-es": "^4.17.21" } }, - "node_modules/damerau-levenshtein": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", - "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", - "dev": true, - "license": "BSD-2-Clause" - }, "node_modules/dashdash": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", @@ -21428,13 +21256,6 @@ ], "license": "BSD-3-Clause" }, - "node_modules/fastparse": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.2.tgz", - "integrity": "sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==", - "dev": true, - "license": "MIT" - }, "node_modules/fastq": { "version": "1.19.1", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", @@ -36320,26 +36141,6 @@ "node": ">=10" } }, - "node_modules/semver-dsl": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/semver-dsl/-/semver-dsl-1.0.1.tgz", - "integrity": "sha512-e8BOaTo007E3dMuQQTnPdalbKTABKNS7UxoBIDnwOqRa+QwMrCPjynB8zAlPF6xlqUfdLPPLIJ13hJNmhtq8Ng==", - "dev": true, - "license": "MIT", - "dependencies": { - "semver": "^5.3.0" - } - }, - "node_modules/semver-dsl/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver" - } - }, "node_modules/send": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/send/-/send-1.2.0.tgz", @@ -38123,13 +37924,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", - "dev": true, - "license": "MIT" - }, "node_modules/thunky": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", @@ -38782,207 +38576,6 @@ "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "license": "0BSD" }, - "node_modules/tslint": { - "version": "5.20.1", - "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.20.1.tgz", - "integrity": "sha512-EcMxhzCFt8k+/UP5r8waCf/lzmeSyVlqxqMEDQE7rWYiQky8KpIBz1JAoYXfROHrPZ1XXd43q8yQnULOLiBRQg==", - "dev": true, - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "@babel/code-frame": "^7.0.0", - "builtin-modules": "^1.1.1", - "chalk": "^2.3.0", - "commander": "^2.12.1", - "diff": "^4.0.1", - "glob": "^7.1.1", - "js-yaml": "^3.13.1", - "minimatch": "^3.0.4", - "mkdirp": "^0.5.1", - "resolve": "^1.3.2", - "semver": "^5.3.0", - "tslib": "^1.8.0", - "tsutils": "^2.29.0" - }, - "bin": { - "tslint": "bin/tslint" - }, - "engines": { - "node": ">=4.8.0" - }, - "peerDependencies": { - "typescript": ">=2.3.0-dev || >=2.4.0-dev || >=2.5.0-dev || >=2.6.0-dev || >=2.7.0-dev || >=2.8.0-dev || >=2.9.0-dev || >=3.0.0-dev || >= 3.1.0-dev || >= 3.2.0-dev" - } - }, - "node_modules/tslint/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/tslint/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/tslint/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/tslint/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/tslint/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/tslint/node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/tslint/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/tslint/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "dev": true, - "license": "ISC", - "peer": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/tslint/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/tslint/node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/tslint/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "dev": true, - "license": "ISC", - "peer": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/tslint/node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true, - "license": "BSD-3-Clause", - "peer": true - }, - "node_modules/tslint/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/tslint/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true, - "license": "0BSD", - "peer": true - }, "node_modules/tsscmp": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/tsscmp/-/tsscmp-1.0.6.tgz", @@ -38993,28 +38586,6 @@ "node": ">=0.6.x" } }, - "node_modules/tsutils": { - "version": "2.29.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.29.0.tgz", - "integrity": "sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "tslib": "^1.8.1" - }, - "peerDependencies": { - "typescript": ">=2.1.0 || >=2.1.0-dev || >=2.2.0-dev || >=2.3.0-dev || >=2.4.0-dev || >=2.5.0-dev || >=2.6.0-dev || >=2.7.0-dev || >=2.8.0-dev || >=2.9.0-dev || >= 3.0.0-dev || >= 3.1.0-dev" - } - }, - "node_modules/tsutils/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true, - "license": "0BSD", - "peer": true - }, "node_modules/tuf-js": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/tuf-js/-/tuf-js-3.1.0.tgz", diff --git a/package.json b/package.json index 152ddef22..a42646ce9 100644 --- a/package.json +++ b/package.json @@ -182,7 +182,6 @@ "@types/passport-google-oauth20": "2.0.16", "@typescript-eslint/eslint-plugin": "8.29.0", "@typescript-eslint/parser": "8.29.0", - "codelyzer": "6.0.1", "cypress": "6.2.1", "eslint": "9.24.0", "eslint-config-prettier": "10.1.1", From 447a302fc95bb8bb7550e8ad66046259e62f9e47 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Sat, 9 Aug 2025 21:36:52 +0200 Subject: [PATCH 12/62] Release 2.190.0 (#5344) --- CHANGELOG.md | 2 +- package-lock.json | 4 ++-- package.json | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9c4b5eeaf..76609858a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,7 +5,7 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## Unreleased +## 2.190.0 - 2025-08-09 ### Changed diff --git a/package-lock.json b/package-lock.json index 74545f4b0..d602ddc31 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "ghostfolio", - "version": "2.189.0", + "version": "2.190.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "ghostfolio", - "version": "2.189.0", + "version": "2.190.0", "hasInstallScript": true, "license": "AGPL-3.0", "dependencies": { diff --git a/package.json b/package.json index a42646ce9..208f3d15d 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ghostfolio", - "version": "2.189.0", + "version": "2.190.0", "homepage": "https://ghostfol.io", "license": "AGPL-3.0", "repository": "https://github.com/ghostfolio/ghostfolio", From 711d716de0c73f59a5ffffee11ce5e00e5070f9e Mon Sep 17 00:00:00 2001 From: Attila Cseh <77381875+csehatt741@users.noreply.github.com> Date: Sun, 10 Aug 2025 09:53:20 +0200 Subject: [PATCH 13/62] Feature/extend accounts endpoint by dividend and interest (#5335) * Extend accounts endpoint by dividend and interest * Update changelog --- CHANGELOG.md | 6 ++ apps/api/src/app/account/account.service.ts | 5 +- .../src/app/portfolio/portfolio.service.ts | 99 ++++++++++++++----- .../redact-values-in-response.interceptor.ts | 3 + .../responses/accounts-response.interface.ts | 2 + .../src/lib/types/account-with-value.type.ts | 2 + 6 files changed, 88 insertions(+), 29 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 76609858a..c15972cc2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,12 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## Unreleased + +### Changed + +- Extended the accounts endpoint by dividend and interest + ## 2.190.0 - 2025-08-09 ### Changed diff --git a/apps/api/src/app/account/account.service.ts b/apps/api/src/app/account/account.service.ts index 1c8adbd16..398a89bb9 100644 --- a/apps/api/src/app/account/account.service.ts +++ b/apps/api/src/app/account/account.service.ts @@ -12,7 +12,8 @@ import { AccountBalance, Order, Platform, - Prisma + Prisma, + SymbolProfile } from '@prisma/client'; import { Big } from 'big.js'; import { format } from 'date-fns'; @@ -62,7 +63,7 @@ export class AccountService { orderBy?: Prisma.AccountOrderByWithRelationInput; }): Promise< (Account & { - activities?: Order[]; + activities?: (Order & { SymbolProfile?: SymbolProfile })[]; balances?: AccountBalance[]; platform?: Platform; })[] diff --git a/apps/api/src/app/portfolio/portfolio.service.ts b/apps/api/src/app/portfolio/portfolio.service.ts index 784661e20..c15d06c1e 100644 --- a/apps/api/src/app/portfolio/portfolio.service.ts +++ b/apps/api/src/app/portfolio/portfolio.service.ts @@ -161,7 +161,7 @@ export class PortfolioService { this.accountService.accounts({ where, include: { - activities: true, + activities: { include: { SymbolProfile: true } }, platform: true }, orderBy: { name: 'asc' } @@ -176,39 +176,74 @@ export class PortfolioService { const userCurrency = this.request.user.settings.settings.baseCurrency; - return accounts.map((account) => { - let transactionCount = 0; + return Promise.all( + accounts.map(async (account) => { + let dividendInBaseCurrency = 0; + let interestInBaseCurrency = 0; + let transactionCount = 0; - for (const { isDraft } of account.activities) { - if (!isDraft) { - transactionCount += 1; + for (const { + currency, + date, + isDraft, + quantity, + SymbolProfile, + type, + unitPrice + } of account.activities) { + switch (type) { + case ActivityType.DIVIDEND: + dividendInBaseCurrency += + await this.exchangeRateDataService.toCurrencyAtDate( + new Big(quantity).mul(unitPrice).toNumber(), + currency ?? SymbolProfile.currency, + userCurrency, + date + ); + break; + case ActivityType.INTEREST: + interestInBaseCurrency += + await this.exchangeRateDataService.toCurrencyAtDate( + unitPrice, + currency ?? SymbolProfile.currency, + userCurrency, + date + ); + break; + } + + if (!isDraft) { + transactionCount += 1; + } } - } - const valueInBaseCurrency = - details.accounts[account.id]?.valueInBaseCurrency ?? 0; + const valueInBaseCurrency = + details.accounts[account.id]?.valueInBaseCurrency ?? 0; - const result = { - ...account, - transactionCount, - valueInBaseCurrency, - allocationInPercentage: null, // TODO - balanceInBaseCurrency: this.exchangeRateDataService.toCurrency( - account.balance, - account.currency, - userCurrency - ), - value: this.exchangeRateDataService.toCurrency( + const result = { + ...account, + dividendInBaseCurrency, + interestInBaseCurrency, + transactionCount, valueInBaseCurrency, - userCurrency, - account.currency - ) - }; + allocationInPercentage: null, // TODO + balanceInBaseCurrency: this.exchangeRateDataService.toCurrency( + account.balance, + account.currency, + userCurrency + ), + value: this.exchangeRateDataService.toCurrency( + valueInBaseCurrency, + userCurrency, + account.currency + ) + }; - delete result.activities; + delete result.activities; - return result; - }); + return result; + }) + ); } public async getAccountsWithAggregations({ @@ -242,6 +277,8 @@ export class PortfolioService { } let totalBalanceInBaseCurrency = new Big(0); + let totalDividendInBaseCurrency = new Big(0); + let totalInterestInBaseCurrency = new Big(0); let totalValueInBaseCurrency = new Big(0); let transactionCount = 0; @@ -249,6 +286,12 @@ export class PortfolioService { totalBalanceInBaseCurrency = totalBalanceInBaseCurrency.plus( account.balanceInBaseCurrency ); + totalDividendInBaseCurrency = totalDividendInBaseCurrency.plus( + account.dividendInBaseCurrency + ); + totalInterestInBaseCurrency = totalInterestInBaseCurrency.plus( + account.interestInBaseCurrency + ); totalValueInBaseCurrency = totalValueInBaseCurrency.plus( account.valueInBaseCurrency ); @@ -259,6 +302,8 @@ export class PortfolioService { accounts, transactionCount, totalBalanceInBaseCurrency: totalBalanceInBaseCurrency.toNumber(), + totalDividendInBaseCurrency: totalDividendInBaseCurrency.toNumber(), + totalInterestInBaseCurrency: totalInterestInBaseCurrency.toNumber(), totalValueInBaseCurrency: totalValueInBaseCurrency.toNumber() }; } diff --git a/apps/api/src/interceptors/redact-values-in-response/redact-values-in-response.interceptor.ts b/apps/api/src/interceptors/redact-values-in-response/redact-values-in-response.interceptor.ts index 83b66b370..73b18960a 100644 --- a/apps/api/src/interceptors/redact-values-in-response/redact-values-in-response.interceptor.ts +++ b/apps/api/src/interceptors/redact-values-in-response/redact-values-in-response.interceptor.ts @@ -50,12 +50,15 @@ export class RedactValuesInResponseInterceptor 'feeInBaseCurrency', 'grossPerformance', 'grossPerformanceWithCurrencyEffect', + 'interestInBaseCurrency', 'investment', 'netPerformance', 'netPerformanceWithCurrencyEffect', 'quantity', 'symbolMapping', 'totalBalanceInBaseCurrency', + 'totalDividendInBaseCurrency', + 'totalInterestInBaseCurrency', 'totalValueInBaseCurrency', 'unitPrice', 'value', diff --git a/libs/common/src/lib/interfaces/responses/accounts-response.interface.ts b/libs/common/src/lib/interfaces/responses/accounts-response.interface.ts index 5e03ea34a..0a6af978f 100644 --- a/libs/common/src/lib/interfaces/responses/accounts-response.interface.ts +++ b/libs/common/src/lib/interfaces/responses/accounts-response.interface.ts @@ -3,6 +3,8 @@ import { AccountWithValue } from '@ghostfolio/common/types'; export interface AccountsResponse { accounts: AccountWithValue[]; totalBalanceInBaseCurrency: number; + totalDividendInBaseCurrency: number; + totalInterestInBaseCurrency: number; totalValueInBaseCurrency: number; transactionCount: number; } diff --git a/libs/common/src/lib/types/account-with-value.type.ts b/libs/common/src/lib/types/account-with-value.type.ts index d86a7ca1f..08af86454 100644 --- a/libs/common/src/lib/types/account-with-value.type.ts +++ b/libs/common/src/lib/types/account-with-value.type.ts @@ -3,6 +3,8 @@ import { Account as AccountModel, Platform } from '@prisma/client'; export type AccountWithValue = AccountModel & { allocationInPercentage: number; balanceInBaseCurrency: number; + dividendInBaseCurrency: number; + interestInBaseCurrency: number; platform?: Platform; transactionCount: number; value: number; From e17da1247a3433959c564bd3dbcc39fa8fe3c7c0 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Sun, 10 Aug 2025 09:54:36 +0200 Subject: [PATCH 14/62] Feature/improve precision of values in account detail dialog on mobile (#5345) * Improve dynamic numerical precision * Refactoring * Update changelog --- CHANGELOG.md | 1 + .../account-detail-dialog.component.ts | 18 ++++++++++++++++++ .../account-detail-dialog.html | 2 ++ .../holding-detail-dialog.component.ts | 4 ++-- 4 files changed, 23 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c15972cc2..f8560525f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed +- Improved the dynamic numerical precision for various values in the account detail dialog - Extended the accounts endpoint by dividend and interest ## 2.190.0 - 2025-08-09 diff --git a/apps/client/src/app/components/account-detail-dialog/account-detail-dialog.component.ts b/apps/client/src/app/components/account-detail-dialog/account-detail-dialog.component.ts index 16cd468e8..c718df686 100644 --- a/apps/client/src/app/components/account-detail-dialog/account-detail-dialog.component.ts +++ b/apps/client/src/app/components/account-detail-dialog/account-detail-dialog.component.ts @@ -2,6 +2,7 @@ import { CreateAccountBalanceDto } from '@ghostfolio/api/app/account-balance/cre import { Activity } from '@ghostfolio/api/app/order/interfaces/activities.interface'; import { DataService } from '@ghostfolio/client/services/data.service'; import { UserService } from '@ghostfolio/client/services/user/user.service'; +import { NUMERICAL_PRECISION_THRESHOLD_6_FIGURES } from '@ghostfolio/common/config'; import { DATE_FORMAT, downloadAsFile } from '@ghostfolio/common/helper'; import { AccountBalancesResponse, @@ -51,9 +52,11 @@ export class AccountDetailDialog implements OnDestroy, OnInit { public accountBalances: AccountBalancesResponse['balances']; public activities: OrderWithAccount[]; public balance: number; + public balancePrecision = 2; public currency: string; public dataSource: MatTableDataSource; public equity: number; + public equityPrecision = 2; public hasPermissionToDeleteAccountBalance: boolean; public historicalDataItems: HistoricalDataItem[]; public holdings: PortfolioPosition[]; @@ -188,10 +191,25 @@ export class AccountDetailDialog implements OnDestroy, OnInit { valueInBaseCurrency }) => { this.balance = balance; + + if ( + this.balance >= NUMERICAL_PRECISION_THRESHOLD_6_FIGURES && + this.data.deviceType === 'mobile' + ) { + this.balancePrecision = 0; + } + this.currency = currency; if (isNumber(balance) && isNumber(value)) { this.equity = new Big(value).minus(balance).toNumber(); + + if ( + this.data.deviceType === 'mobile' && + this.equity >= NUMERICAL_PRECISION_THRESHOLD_6_FIGURES + ) { + this.equityPrecision = 0; + } } else { this.equity = null; } diff --git a/apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html b/apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html index 45d88fc78..4e86ef5ea 100644 --- a/apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html +++ b/apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html @@ -42,6 +42,7 @@ size="medium" [isCurrency]="true" [locale]="user?.settings?.locale" + [precision]="balancePrecision" [unit]="currency" [value]="balance" >Cash BalanceEquity= NUMERICAL_PRECISION_THRESHOLD_6_FIGURES + this.averagePrice >= NUMERICAL_PRECISION_THRESHOLD_6_FIGURES && + this.data.deviceType === 'mobile' ) { this.averagePricePrecision = 0; } From bdf5dad97a081b4169e381a2bf24585ec9d33f4e Mon Sep 17 00:00:00 2001 From: Larry Sinclair Date: Sun, 10 Aug 2025 09:15:16 -0600 Subject: [PATCH 15/62] Feature/improve language localization for PT 20250808 (#5339) * Improve language localization for PT * Update changelog --- CHANGELOG.md | 1 + apps/client/src/locales/messages.pt.xlf | 30 ++++++++++++------------- 2 files changed, 16 insertions(+), 15 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f8560525f..73ecfc636 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Improved the dynamic numerical precision for various values in the account detail dialog - Extended the accounts endpoint by dividend and interest +- Improved the language localization for Portuguese (`pt`) ## 2.190.0 - 2025-08-09 diff --git a/apps/client/src/locales/messages.pt.xlf b/apps/client/src/locales/messages.pt.xlf index 63d3bc903..089f597cc 100644 --- a/apps/client/src/locales/messages.pt.xlf +++ b/apps/client/src/locales/messages.pt.xlf @@ -2119,7 +2119,7 @@ Exclude from Analysis - Exclude from Analysis + Excluir da Análise apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html 90 @@ -3555,7 +3555,7 @@ Our official Ghostfolio Premium cloud offering is the easiest way to get started. Due to the time it saves, this will be the best option for most people. Revenue is used to cover operational costs for the hosting infrastructure and professional data providers, and to fund ongoing development. - A nossa oferta oficial Ghostfolio Premium na nuvem é a maneira mais fácil de começar. Com o tempo que poupa, esta será a melhor opção para a maioria das pessoas. A receita é utilizada para cobrir a infraestrutura de hospedagem e financiar o desenvolvimento contínuo do Ghostfolio. + Nossa oferta oficial Ghostfolio Premium na nuvem é a maneira mais fácil de começar. Devido ao tempo que economiza, esta será a melhor opção para a maioria das pessoas. A receita é utilizada para cobrir os custos operacionais da infraestrutura de hospedagem e dos provedores de dados profissionais, além de financiar o desenvolvimento contínuo. apps/client/src/app/pages/pricing/pricing-page.html 7 @@ -5726,7 +5726,7 @@ Indonesia - Indonesia + Indonésia libs/ui/src/lib/i18n.ts 89 @@ -6708,7 +6708,7 @@ Please enter your Ghostfolio API key: - Please enter your Ghostfolio API key: + Por favor, insira a sua chave da API do Ghostfolio: apps/client/src/app/pages/api/api-page.component.ts 41 @@ -6716,7 +6716,7 @@ API Requests Today - API Requests Today + Pedidos de API Hoje apps/client/src/app/components/admin-users/admin-users.html 162 @@ -6724,7 +6724,7 @@ Could not generate an API key - Could not generate an API key + Não foi possível gerar uma chave de API apps/client/src/app/components/user-account-membership/user-account-membership.component.ts 141 @@ -6732,7 +6732,7 @@ Set this API key in your self-hosted environment: - Set this API key in your self-hosted environment: + Defina esta chave de API no seu ambiente auto-hospedado: apps/client/src/app/components/user-account-membership/user-account-membership.component.ts 156 @@ -6740,7 +6740,7 @@ Ghostfolio Premium Data Provider API Key - Ghostfolio Premium Data Provider API Key + Chave de API do Provedor de Dados do Ghostfolio Premium apps/client/src/app/components/user-account-membership/user-account-membership.component.ts 159 @@ -6748,7 +6748,7 @@ Do you really want to generate a new API key? - Do you really want to generate a new API key? + Você realmente deseja gerar uma nova chave de API? apps/client/src/app/components/user-account-membership/user-account-membership.component.ts 164 @@ -6756,7 +6756,7 @@ API Key - API Key + Chave de API libs/ui/src/lib/membership-card/membership-card.component.html 18 @@ -6764,7 +6764,7 @@ Generate Ghostfolio Premium Data Provider API key for self-hosted environments... - Generate Ghostfolio Premium Data Provider API key for self-hosted environments... + Gerar chave de API do Provedor de Dados do Ghostfolio Premium para ambientes auto-hospedados... libs/ui/src/lib/membership-card/membership-card.component.html 26 @@ -6772,7 +6772,7 @@ out of - out of + de apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html 56 @@ -6780,7 +6780,7 @@ rules align with your portfolio. - rules align with your portfolio. + regras alinham-se com o seu portfólio. apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html 58 @@ -6788,7 +6788,7 @@ Save - Save + Guardar apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html 559 @@ -6836,7 +6836,7 @@ Asset Class Cluster Risks - Asset Class Cluster Risks + Riscos do Cluster de Classes de Ativos apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html 117 From c1702f04465d69a5ff5ef69af97cb02372aab8ff Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Sun, 10 Aug 2025 17:26:28 +0200 Subject: [PATCH 16/62] Feature/extend personal finance tools 20250810 (#5353) * Add Atominvest * Add Cobalt --- libs/common/src/lib/personal-finance-tools.ts | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/libs/common/src/lib/personal-finance-tools.ts b/libs/common/src/lib/personal-finance-tools.ts index ae341f03a..ecf7d9223 100644 --- a/libs/common/src/lib/personal-finance-tools.ts +++ b/libs/common/src/lib/personal-finance-tools.ts @@ -53,6 +53,13 @@ export const personalFinanceTools: Product[] = [ origin: 'United States', slogan: 'The Intelligent Family Office Suite' }, + { + founded: 2016, + key: 'atominvest', + name: 'Atominvest', + origin: 'London', + slogan: 'Portfolio Management' + }, { founded: 2020, hasFreePlan: true, @@ -128,6 +135,12 @@ export const personalFinanceTools: Product[] = [ name: 'CleverBilling', slogan: 'Toma el control total de tus finanzas.' }, + { + founded: 2011, + key: 'cobalt', + name: 'Cobalt', + slogan: 'Next-Level Portfolio Monitoring' + }, { founded: 2017, hasFreePlan: true, From 7b1707aa068d82423c9e4af788e0a04215fbf84a Mon Sep 17 00:00:00 2001 From: Terry Casper Date: Sun, 10 Aug 2025 21:27:18 +0600 Subject: [PATCH 17/62] Feature/improve language localization for ES 20250810 (#5352) * Improve language localization for ES * Update changelog --- CHANGELOG.md | 1 + apps/client/src/locales/messages.es.xlf | 26 ++++++++++++------------- 2 files changed, 14 insertions(+), 13 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 73ecfc636..cf3f2883b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Improved the dynamic numerical precision for various values in the account detail dialog - Extended the accounts endpoint by dividend and interest - Improved the language localization for Portuguese (`pt`) +- Improved the language localization for Spanish (`es`) ## 2.190.0 - 2025-08-09 diff --git a/apps/client/src/locales/messages.es.xlf b/apps/client/src/locales/messages.es.xlf index 2714cc718..3ad118a40 100644 --- a/apps/client/src/locales/messages.es.xlf +++ b/apps/client/src/locales/messages.es.xlf @@ -5426,7 +5426,7 @@ Argentina - Argentina + Argentina libs/ui/src/lib/i18n.ts 77 @@ -7693,7 +7693,7 @@ start - start + comenzar kebab-case libs/common/src/lib/routes/routes.ts @@ -7706,7 +7706,7 @@ Do you really want to generate a new security token? - Do you really want to generate a new security token? + ¿Realmente deseas generar un nuevo token de seguridad? apps/client/src/app/components/user-account-access/user-account-access.component.ts 174 @@ -7714,7 +7714,7 @@ Generate - Generate + Generar apps/client/src/app/components/user-account-access/user-account-access.html 43 @@ -7722,7 +7722,7 @@ Stocks - Stocks + Acciones apps/client/src/app/components/markets/markets.component.ts 52 @@ -7734,7 +7734,7 @@ Cryptocurrencies - Cryptocurrencies + Criptomonedas apps/client/src/app/components/markets/markets.component.ts 53 @@ -7754,7 +7754,7 @@ Manage Asset Profile - Manage Asset Profile + Gestionar perfil de activo apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html 443 @@ -7762,7 +7762,7 @@ Alternative Investment - Alternative Investment + Inversión alternativa libs/ui/src/lib/i18n.ts 45 @@ -7770,7 +7770,7 @@ Collectible - Collectible + Coleccionable libs/ui/src/lib/i18n.ts 55 @@ -7778,7 +7778,7 @@ Average Unit Price - Average Unit Price + Precio medio por unidad apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts 110 @@ -7790,7 +7790,7 @@ Account Cluster Risks - Account Cluster Risks + Riesgos de grupo de cuentas apps/client/src/app/pages/i18n/i18n-page.html 14 @@ -7798,7 +7798,7 @@ Asset Class Cluster Risks - Asset Class Cluster Risks + Riesgos de grupo de clases de activos apps/client/src/app/pages/i18n/i18n-page.html 39 @@ -7806,7 +7806,7 @@ Currency Cluster Risks - Currency Cluster Risks + Riesgos del clúster de divisas apps/client/src/app/pages/i18n/i18n-page.html 70 From 670d25fc3661ca4a5a074a3057f1f474af1dfdae Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Mon, 11 Aug 2025 18:49:16 +0200 Subject: [PATCH 18/62] Feature/extend personal finance tools 20250810 (part 2) (#5354) * Add PocketGuard * Various updates --- libs/common/src/lib/personal-finance-tools.ts | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/libs/common/src/lib/personal-finance-tools.ts b/libs/common/src/lib/personal-finance-tools.ts index ecf7d9223..e814ac415 100644 --- a/libs/common/src/lib/personal-finance-tools.ts +++ b/libs/common/src/lib/personal-finance-tools.ts @@ -57,7 +57,7 @@ export const personalFinanceTools: Product[] = [ founded: 2016, key: 'atominvest', name: 'Atominvest', - origin: 'London', + origin: 'United Kingdom', slogan: 'Portfolio Management' }, { @@ -139,6 +139,7 @@ export const personalFinanceTools: Product[] = [ founded: 2011, key: 'cobalt', name: 'Cobalt', + origin: 'United States', slogan: 'Next-Level Portfolio Monitoring' }, { @@ -683,6 +684,16 @@ export const personalFinanceTools: Product[] = [ origin: 'Italy', slogan: 'Your Personal Finance Hub' }, + { + founded: 2015, + hasFreePlan: false, + hasSelfHostingAbility: false, + key: 'pocketguard', + name: 'PocketGuard', + origin: 'United States', + pricingPerYear: '$74.99', + slogan: 'Budgeting App & Finance Planner' + }, { founded: 2008, hasFreePlan: true, From 08333cb9605d7d7204bba091cb6c7bdd1a29a148 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Mon, 11 Aug 2025 18:49:48 +0200 Subject: [PATCH 19/62] Feature/filter open GitHub issues by no assignee in README.md (#5350) * Filter GitHub issues by no assignee --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 02f17fe49..82d5710d1 100644 --- a/README.md +++ b/README.md @@ -295,7 +295,7 @@ Are you building your own project? Add the `ghostfolio` topic to your _GitHub_ r Ghostfolio is **100% free** and **open source**. We encourage and support an active and healthy community that accepts contributions from the public - including you. -Not sure what to work on? We have [some ideas](https://github.com/ghostfolio/ghostfolio/issues?q=is%3Aissue+is%3Aopen+label%3A%22help+wanted%22), even for [newcomers](https://github.com/ghostfolio/ghostfolio/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22). Please join the Ghostfolio [Slack](https://join.slack.com/t/ghostfolio/shared_invite/zt-vsaan64h-F_I0fEo5M0P88lP9ibCxFg) channel or post to [@ghostfolio\_](https://x.com/ghostfolio_) on _X_. We would love to hear from you. +Not sure what to work on? We have [some ideas](https://github.com/ghostfolio/ghostfolio/issues?q=is%3Aissue+is%3Aopen+label%3A%22help+wanted%22%20no%3Aassignee), even for [newcomers](https://github.com/ghostfolio/ghostfolio/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22%20no%3Aassignee). Please join the Ghostfolio [Slack](https://join.slack.com/t/ghostfolio/shared_invite/zt-vsaan64h-F_I0fEo5M0P88lP9ibCxFg) channel or post to [@ghostfolio\_](https://x.com/ghostfolio_) on _X_. We would love to hear from you. If you like to support this project, get [**Ghostfolio Premium**](https://ghostfol.io/en/pricing) or [**Buy me a coffee**](https://www.buymeacoffee.com/ghostfolio). From 5f2f484c0091e07893882a3b9c5751d59dad992b Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Tue, 12 Aug 2025 20:41:52 +0200 Subject: [PATCH 20/62] Feature/add interest and dividend to account detail dialog (#5347) * Add interest and dividend to account detail dialog * Update changelog --- CHANGELOG.md | 4 +++ .../account-detail-dialog.component.ts | 25 +++++++++++++++++++ .../account-detail-dialog.html | 24 ++++++++++++++++++ 3 files changed, 53 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index cf3f2883b..208d22bab 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## Unreleased +### Added + +- Added the interest and dividend values to the account detail dialog + ### Changed - Improved the dynamic numerical precision for various values in the account detail dialog diff --git a/apps/client/src/app/components/account-detail-dialog/account-detail-dialog.component.ts b/apps/client/src/app/components/account-detail-dialog/account-detail-dialog.component.ts index c718df686..2886910c4 100644 --- a/apps/client/src/app/components/account-detail-dialog/account-detail-dialog.component.ts +++ b/apps/client/src/app/components/account-detail-dialog/account-detail-dialog.component.ts @@ -55,11 +55,15 @@ export class AccountDetailDialog implements OnDestroy, OnInit { public balancePrecision = 2; public currency: string; public dataSource: MatTableDataSource; + public dividendInBaseCurrency: number; + public dividendInBaseCurrencyPrecision = 2; public equity: number; public equityPrecision = 2; public hasPermissionToDeleteAccountBalance: boolean; public historicalDataItems: HistoricalDataItem[]; public holdings: PortfolioPosition[]; + public interestInBaseCurrency: number; + public interestInBaseCurrencyPrecision = 2; public isLoadingActivities: boolean; public isLoadingChart: boolean; public name: string; @@ -184,6 +188,8 @@ export class AccountDetailDialog implements OnDestroy, OnInit { ({ balance, currency, + dividendInBaseCurrency, + interestInBaseCurrency, name, platform, transactionCount, @@ -200,6 +206,15 @@ export class AccountDetailDialog implements OnDestroy, OnInit { } this.currency = currency; + this.dividendInBaseCurrency = dividendInBaseCurrency; + + if ( + this.data.deviceType === 'mobile' && + this.dividendInBaseCurrency >= + NUMERICAL_PRECISION_THRESHOLD_6_FIGURES + ) { + this.dividendInBaseCurrencyPrecision = 0; + } if (isNumber(balance) && isNumber(value)) { this.equity = new Big(value).minus(balance).toNumber(); @@ -214,6 +229,16 @@ export class AccountDetailDialog implements OnDestroy, OnInit { this.equity = null; } + this.interestInBaseCurrency = interestInBaseCurrency; + + if ( + this.data.deviceType === 'mobile' && + this.interestInBaseCurrency >= + NUMERICAL_PRECISION_THRESHOLD_6_FIGURES + ) { + this.interestInBaseCurrencyPrecision = 0; + } + this.name = name; this.platformName = platform?.name ?? '-'; this.transactionCount = transactionCount; diff --git a/apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html b/apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html index 4e86ef5ea..acec70e7b 100644 --- a/apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html +++ b/apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html @@ -60,6 +60,30 @@ >Equity +
+ Interest +
+
+ Dividend +
Activities Date: Wed, 13 Aug 2025 13:45:20 +0200 Subject: [PATCH 21/62] Feature/move chart of account detail dialog from experimental to general availability (#5351) * Move chart from experimental to general availability * Update changelog --- CHANGELOG.md | 1 + .../account-detail-dialog.html | 26 +++++++++---------- 2 files changed, 13 insertions(+), 14 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 208d22bab..0637e235d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed +- Moved the chart of the account detail dialog from experimental to general availability - Improved the dynamic numerical precision for various values in the account detail dialog - Extended the accounts endpoint by dividend and interest - Improved the language localization for Portuguese (`pt`) diff --git a/apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html b/apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html index acec70e7b..c43c5cb68 100644 --- a/apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html +++ b/apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html @@ -20,20 +20,18 @@
- @if (user?.settings?.isExperimentalFeatures) { -
- -
- } +
+ +
From 7c8104224441d621ad1d729e6fbc6ced717a5e71 Mon Sep 17 00:00:00 2001 From: Kenrick Tandrian <60643640+KenTandrian@users.noreply.github.com> Date: Thu, 14 Aug 2025 23:05:02 +0700 Subject: [PATCH 22/62] Task/migrate portfolio performance component to standalone (#5363) * Migrate portfolio performance component to standalone * Update changelog --- CHANGELOG.md | 1 + .../home-overview/home-overview.component.ts | 4 ++-- .../portfolio-performance.component.ts | 12 ++++++++---- .../portfolio-performance.module.ts | 16 ---------------- 4 files changed, 11 insertions(+), 22 deletions(-) delete mode 100644 apps/client/src/app/components/portfolio-performance/portfolio-performance.module.ts diff --git a/CHANGELOG.md b/CHANGELOG.md index 0637e235d..e7d2797e1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,6 +16,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Moved the chart of the account detail dialog from experimental to general availability - Improved the dynamic numerical precision for various values in the account detail dialog - Extended the accounts endpoint by dividend and interest +- Refactored the portfolio performance component to standalone - Improved the language localization for Portuguese (`pt`) - Improved the language localization for Spanish (`es`) diff --git a/apps/client/src/app/components/home-overview/home-overview.component.ts b/apps/client/src/app/components/home-overview/home-overview.component.ts index acb253935..6c9694a19 100644 --- a/apps/client/src/app/components/home-overview/home-overview.component.ts +++ b/apps/client/src/app/components/home-overview/home-overview.component.ts @@ -1,4 +1,4 @@ -import { GfPortfolioPerformanceModule } from '@ghostfolio/client/components/portfolio-performance/portfolio-performance.module'; +import { GfPortfolioPerformanceComponent } from '@ghostfolio/client/components/portfolio-performance/portfolio-performance.component'; import { LayoutService } from '@ghostfolio/client/core/layout.service'; import { DataService } from '@ghostfolio/client/services/data.service'; import { ImpersonationStorageService } from '@ghostfolio/client/services/impersonation-storage.service'; @@ -32,7 +32,7 @@ import { takeUntil } from 'rxjs/operators'; imports: [ CommonModule, GfLineChartComponent, - GfPortfolioPerformanceModule, + GfPortfolioPerformanceComponent, MatButtonModule, RouterModule ], diff --git a/apps/client/src/app/components/portfolio-performance/portfolio-performance.component.ts b/apps/client/src/app/components/portfolio-performance/portfolio-performance.component.ts index caef1082f..c98a26831 100644 --- a/apps/client/src/app/components/portfolio-performance/portfolio-performance.component.ts +++ b/apps/client/src/app/components/portfolio-performance/portfolio-performance.component.ts @@ -8,7 +8,9 @@ import { PortfolioPerformance, ResponseError } from '@ghostfolio/common/interfaces'; +import { GfValueComponent } from '@ghostfolio/ui/value'; +import { CommonModule } from '@angular/common'; import { ChangeDetectionStrategy, Component, @@ -17,19 +19,21 @@ import { OnChanges, ViewChild } from '@angular/core'; +import { IonIcon } from '@ionic/angular/standalone'; import { CountUp } from 'countup.js'; import { addIcons } from 'ionicons'; import { timeOutline } from 'ionicons/icons'; import { isNumber } from 'lodash'; +import { NgxSkeletonLoaderModule } from 'ngx-skeleton-loader'; @Component({ - selector: 'gf-portfolio-performance', changeDetection: ChangeDetectionStrategy.OnPush, - templateUrl: './portfolio-performance.component.html', + imports: [CommonModule, GfValueComponent, IonIcon, NgxSkeletonLoaderModule], + selector: 'gf-portfolio-performance', styleUrls: ['./portfolio-performance.component.scss'], - standalone: false + templateUrl: './portfolio-performance.component.html' }) -export class PortfolioPerformanceComponent implements OnChanges { +export class GfPortfolioPerformanceComponent implements OnChanges { @Input() deviceType: string; @Input() errors: ResponseError['errors']; @Input() isAllTimeHigh: boolean; diff --git a/apps/client/src/app/components/portfolio-performance/portfolio-performance.module.ts b/apps/client/src/app/components/portfolio-performance/portfolio-performance.module.ts deleted file mode 100644 index e5b606255..000000000 --- a/apps/client/src/app/components/portfolio-performance/portfolio-performance.module.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { GfValueComponent } from '@ghostfolio/ui/value'; - -import { CommonModule } from '@angular/common'; -import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core'; -import { IonIcon } from '@ionic/angular/standalone'; -import { NgxSkeletonLoaderModule } from 'ngx-skeleton-loader'; - -import { PortfolioPerformanceComponent } from './portfolio-performance.component'; - -@NgModule({ - declarations: [PortfolioPerformanceComponent], - exports: [PortfolioPerformanceComponent], - imports: [CommonModule, GfValueComponent, IonIcon, NgxSkeletonLoaderModule], - schemas: [CUSTOM_ELEMENTS_SCHEMA] -}) -export class GfPortfolioPerformanceModule {} From 7aeb52d52ca07ceb5f62850de1a7f4846cad62e6 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Thu, 14 Aug 2025 18:06:02 +0200 Subject: [PATCH 23/62] Feature/improve close and save buttons of various dialogs (#5360) * Improve close and save buttons * Update changelog --- CHANGELOG.md | 1 + .../asset-profile-dialog/asset-profile-dialog.html | 8 +++++++- .../create-or-update-platform-dialog.html | 10 ++++++++-- .../create-or-update-tag-dialog.html | 10 ++++++++-- .../create-or-update-access-dialog.html | 10 ++++++++-- .../create-or-update-account-dialog.html | 10 ++++++++-- .../create-or-update-activity-dialog.html | 10 ++++++++-- 7 files changed, 48 insertions(+), 11 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e7d2797e1..8c6182b11 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Moved the chart of the account detail dialog from experimental to general availability - Improved the dynamic numerical precision for various values in the account detail dialog +- Improved the usability of the _Cancel_ / _Close_ and _Save_ buttons in various dialogs - Extended the accounts endpoint by dividend and interest - Refactored the portfolio performance component to standalone - Improved the language localization for Portuguese (`pt`) 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 993cf9b12..fad1e8cc1 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 @@ -549,7 +549,13 @@ Data Gathering
- +
- + diff --git a/apps/client/src/app/components/admin-tag/create-or-update-tag-dialog/create-or-update-tag-dialog.html b/apps/client/src/app/components/admin-tag/create-or-update-tag-dialog/create-or-update-tag-dialog.html index 0efb9d307..d2fdad30e 100644 --- a/apps/client/src/app/components/admin-tag/create-or-update-tag-dialog/create-or-update-tag-dialog.html +++ b/apps/client/src/app/components/admin-tag/create-or-update-tag-dialog/create-or-update-tag-dialog.html @@ -22,12 +22,18 @@
- + 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 b903c64d5..210933d61 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 @@ -55,12 +55,18 @@ }
- + 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 e87876c45..9a9d89624 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 @@ -100,12 +100,18 @@ }
- + 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 b0185dc72..acd128786 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 @@ -335,12 +335,18 @@ [value]="total" />
- + From 52ea3c5e8478c90493853698ccc559f4b080229f Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Thu, 14 Aug 2025 20:48:56 +0200 Subject: [PATCH 24/62] Feature/add buying power to static portfolio analysis rules (#5365) * Add buying power rule * Update changelog --- CHANGELOG.md | 1 + .../src/app/portfolio/portfolio.service.ts | 12 +++ apps/api/src/app/user/user.service.ts | 7 ++ .../models/rules/liquidity/buying-power.ts | 90 +++++++++++++++++++ apps/client/src/app/pages/i18n/i18n-page.html | 10 +++ .../portfolio/x-ray/x-ray-page.component.html | 24 +++++ .../portfolio/x-ray/x-ray-page.component.ts | 6 ++ .../x-ray-rules-settings.interface.ts | 1 + 8 files changed, 151 insertions(+) create mode 100644 apps/api/src/models/rules/liquidity/buying-power.ts diff --git a/CHANGELOG.md b/CHANGELOG.md index 8c6182b11..d71772e8f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added +- Added a new static portfolio analysis rule: _Liquidity_ (Buying Power) - Added the interest and dividend values to the account detail dialog ### Changed diff --git a/apps/api/src/app/portfolio/portfolio.service.ts b/apps/api/src/app/portfolio/portfolio.service.ts index c15d06c1e..f40ed57e5 100644 --- a/apps/api/src/app/portfolio/portfolio.service.ts +++ b/apps/api/src/app/portfolio/portfolio.service.ts @@ -15,6 +15,7 @@ import { EconomicMarketClusterRiskDevelopedMarkets } from '@ghostfolio/api/model import { EconomicMarketClusterRiskEmergingMarkets } from '@ghostfolio/api/models/rules/economic-market-cluster-risk/emerging-markets'; import { EmergencyFundSetup } from '@ghostfolio/api/models/rules/emergency-fund/emergency-fund-setup'; import { FeeRatioInitialInvestment } from '@ghostfolio/api/models/rules/fees/fee-ratio-initial-investment'; +import { BuyingPower } from '@ghostfolio/api/models/rules/liquidity/buying-power'; import { RegionalMarketClusterRiskAsiaPacific } from '@ghostfolio/api/models/rules/regional-market-cluster-risk/asia-pacific'; import { RegionalMarketClusterRiskEmergingMarkets } from '@ghostfolio/api/models/rules/regional-market-cluster-risk/emerging-markets'; import { RegionalMarketClusterRiskEurope } from '@ghostfolio/api/models/rules/regional-market-cluster-risk/europe'; @@ -1331,6 +1332,17 @@ export class PortfolioService { ], userSettings ), + liquidity: await this.rulesService.evaluate( + [ + new BuyingPower( + this.exchangeRateDataService, + this.i18nService, + summary.cash, + userSettings.language + ) + ], + userSettings + ), regionalMarketClusterRisk: summary.activityCount > 0 ? await this.rulesService.evaluate( diff --git a/apps/api/src/app/user/user.service.ts b/apps/api/src/app/user/user.service.ts index 405c4c0b0..a84e10c44 100644 --- a/apps/api/src/app/user/user.service.ts +++ b/apps/api/src/app/user/user.service.ts @@ -13,6 +13,7 @@ import { EconomicMarketClusterRiskDevelopedMarkets } from '@ghostfolio/api/model import { EconomicMarketClusterRiskEmergingMarkets } from '@ghostfolio/api/models/rules/economic-market-cluster-risk/emerging-markets'; import { EmergencyFundSetup } from '@ghostfolio/api/models/rules/emergency-fund/emergency-fund-setup'; import { FeeRatioInitialInvestment } from '@ghostfolio/api/models/rules/fees/fee-ratio-initial-investment'; +import { BuyingPower } from '@ghostfolio/api/models/rules/liquidity/buying-power'; import { RegionalMarketClusterRiskAsiaPacific } from '@ghostfolio/api/models/rules/regional-market-cluster-risk/asia-pacific'; import { RegionalMarketClusterRiskEmergingMarkets } from '@ghostfolio/api/models/rules/regional-market-cluster-risk/emerging-markets'; import { RegionalMarketClusterRiskEurope } from '@ghostfolio/api/models/rules/regional-market-cluster-risk/europe'; @@ -287,6 +288,12 @@ export class UserService { undefined, undefined ).getSettings(user.settings.settings), + BuyingPower: new BuyingPower( + undefined, + undefined, + undefined, + undefined + ).getSettings(user.settings.settings), CurrencyClusterRiskBaseCurrencyCurrentInvestment: new CurrencyClusterRiskBaseCurrencyCurrentInvestment( undefined, diff --git a/apps/api/src/models/rules/liquidity/buying-power.ts b/apps/api/src/models/rules/liquidity/buying-power.ts new file mode 100644 index 000000000..a8b74f354 --- /dev/null +++ b/apps/api/src/models/rules/liquidity/buying-power.ts @@ -0,0 +1,90 @@ +import { RuleSettings } from '@ghostfolio/api/models/interfaces/rule-settings.interface'; +import { Rule } from '@ghostfolio/api/models/rule'; +import { ExchangeRateDataService } from '@ghostfolio/api/services/exchange-rate-data/exchange-rate-data.service'; +import { I18nService } from '@ghostfolio/api/services/i18n/i18n.service'; +import { UserSettings } from '@ghostfolio/common/interfaces'; + +export class BuyingPower extends Rule { + private buyingPower: number; + + public constructor( + protected exchangeRateDataService: ExchangeRateDataService, + private i18nService: I18nService, + buyingPower: number, + languageCode: string + ) { + super(exchangeRateDataService, { + languageCode, + key: BuyingPower.name + }); + + this.buyingPower = buyingPower; + } + + public evaluate(ruleSettings: Settings) { + if (this.buyingPower < ruleSettings.thresholdMin) { + return { + evaluation: this.i18nService.getTranslation({ + id: 'rule.liquidityBuyingPower.false', + languageCode: this.getLanguageCode(), + placeholders: { + baseCurrency: ruleSettings.baseCurrency, + thresholdMin: ruleSettings.thresholdMin + } + }), + value: false + }; + } + + return { + evaluation: this.i18nService.getTranslation({ + id: 'rule.liquidityBuyingPower.true', + languageCode: this.getLanguageCode(), + placeholders: { + baseCurrency: ruleSettings.baseCurrency, + thresholdMin: ruleSettings.thresholdMin + } + }), + value: true + }; + } + + public getCategoryName() { + return this.i18nService.getTranslation({ + id: 'rule.liquidity.category', + languageCode: this.getLanguageCode() + }); + } + + public getConfiguration() { + return { + threshold: { + max: 200000, + min: 0, + step: 1000, + unit: '' + }, + thresholdMin: true + }; + } + + public getName() { + return this.i18nService.getTranslation({ + id: 'rule.liquidityBuyingPower', + languageCode: this.getLanguageCode() + }); + } + + public getSettings({ baseCurrency, xRayRules }: UserSettings): Settings { + return { + baseCurrency, + isActive: xRayRules?.[this.getKey()].isActive ?? true, + thresholdMin: xRayRules?.[this.getKey()]?.thresholdMin ?? 0 + }; + } +} + +interface Settings extends RuleSettings { + baseCurrency: string; + thresholdMin: number; +} diff --git a/apps/client/src/app/pages/i18n/i18n-page.html b/apps/client/src/app/pages/i18n/i18n-page.html index 5db40a5b0..f42412473 100644 --- a/apps/client/src/app/pages/i18n/i18n-page.html +++ b/apps/client/src/app/pages/i18n/i18n-page.html @@ -67,6 +67,16 @@ (${fixedIncomeValueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% +
  • Liquidity
  • +
  • Buying Power
  • +
  • + Your buying power is below ${thresholdMin} + ${baseCurrency} +
  • +
  • + Your buying power exceeds ${thresholdMin} + ${baseCurrency} +
  • Currency Cluster Risks
  • Investment: Base Currency diff --git a/apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html b/apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html index 24ca0f474..e309fbaea 100644 --- a/apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html +++ b/apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html @@ -59,6 +59,30 @@
  • }
    +
    +

    + Liquidity + @if (user?.subscription?.type === 'Basic') { + + } +

    + +
    Date: Thu, 14 Aug 2025 20:57:15 +0200 Subject: [PATCH 26/62] Feature/update locales (#5346) * Update locales * Update translations * Update changelog --------- Co-authored-by: github-actions[bot] Co-authored-by: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> --- CHANGELOG.md | 1 + apps/client/src/locales/messages.ca.xlf | 214 ++++++++++++++++-------- apps/client/src/locales/messages.de.xlf | 214 ++++++++++++++++-------- apps/client/src/locales/messages.es.xlf | 214 ++++++++++++++++-------- apps/client/src/locales/messages.fr.xlf | 214 ++++++++++++++++-------- apps/client/src/locales/messages.it.xlf | 214 ++++++++++++++++-------- apps/client/src/locales/messages.nl.xlf | 214 ++++++++++++++++-------- apps/client/src/locales/messages.pl.xlf | 214 ++++++++++++++++-------- apps/client/src/locales/messages.pt.xlf | 214 ++++++++++++++++-------- apps/client/src/locales/messages.tr.xlf | 214 ++++++++++++++++-------- apps/client/src/locales/messages.uk.xlf | 214 ++++++++++++++++-------- apps/client/src/locales/messages.xlf | 210 +++++++++++++++-------- apps/client/src/locales/messages.zh.xlf | 214 ++++++++++++++++-------- 13 files changed, 1689 insertions(+), 876 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index af2c5fc17..0bb960cfb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,6 +20,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Extended the accounts endpoint by allocations - Extended the accounts endpoint by dividend and interest - Refactored the portfolio performance component to standalone +- Improved the language localization for German (`de`) - Improved the language localization for Portuguese (`pt`) - Improved the language localization for Spanish (`es`) diff --git a/apps/client/src/locales/messages.ca.xlf b/apps/client/src/locales/messages.ca.xlf index 1da3f99f8..6aa7c72bc 100644 --- a/apps/client/src/locales/messages.ca.xlf +++ b/apps/client/src/locales/messages.ca.xlf @@ -355,7 +355,7 @@ Balanç de Caixa apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 47 + 46 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -371,7 +371,7 @@ Plataforma apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 67 + 91 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -395,7 +395,7 @@ Balanç de Caixa apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 124 + 148 @@ -1659,7 +1659,7 @@ apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 213 + 237 @@ -1967,7 +1967,7 @@ Les dades del mercat s’han retardat apps/client/src/app/components/portfolio-performance/portfolio-performance.component.ts - 91 + 95 @@ -3208,7 +3208,7 @@ Explotacions apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 79 + 103 apps/client/src/app/components/home-holdings/home-holdings.html @@ -3312,7 +3312,7 @@ Programari de gestió patrimonial de codi obert apps/client/src/app/pages/i18n/i18n-page.html - 224 + 234 @@ -3708,11 +3708,11 @@ Activitats apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 63 + 87 apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 92 + 116 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -4158,6 +4158,10 @@ Dividend Dividend + + apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html + 82 + apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html 187 @@ -4364,7 +4368,7 @@ Riscos del clúster de divises apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 93 + 117 @@ -4372,7 +4376,7 @@ Riscos del clúster de comptes apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 141 + 165 @@ -5291,6 +5295,10 @@ Interest Interès + + apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html + 70 + apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html 295 @@ -5481,7 +5489,7 @@ apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 69 + 93 libs/ui/src/lib/i18n.ts @@ -5735,6 +5743,10 @@ Liquidity Liquiditat + + apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html + 69 + libs/ui/src/lib/i18n.ts 49 @@ -6273,7 +6285,7 @@ Inactive apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 232 + 256 @@ -6285,7 +6297,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 552 + 554 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6293,11 +6305,11 @@ apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html - 42 + 44 apps/client/src/app/components/admin-tag/create-or-update-tag-dialog/create-or-update-tag-dialog.html - 25 + 27 apps/client/src/app/components/home-watchlist/create-watchlist-item-dialog/create-watchlist-item-dialog.html @@ -6305,11 +6317,11 @@ apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html - 58 + 60 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 103 + 105 apps/client/src/app/pages/accounts/transfer-balance/transfer-balance-dialog.html @@ -6317,7 +6329,7 @@ apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html - 338 + 340 apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html @@ -6335,10 +6347,34 @@ Close Close + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html + 556 + + + apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html + 46 + + + apps/client/src/app/components/admin-tag/create-or-update-tag-dialog/create-or-update-tag-dialog.html + 29 + apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html 129 + + apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html + 62 + + + apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html + 107 + + + apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html + 342 + libs/ui/src/lib/i18n.ts 11 @@ -6671,7 +6707,7 @@ Economic Market Cluster Risks apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 165 + 189 @@ -6791,7 +6827,7 @@ Save apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 559 + 565 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6799,11 +6835,11 @@ apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html - 49 + 55 apps/client/src/app/components/admin-tag/create-or-update-tag-dialog/create-or-update-tag-dialog.html - 32 + 38 apps/client/src/app/components/home-watchlist/create-watchlist-item-dialog/create-watchlist-item-dialog.html @@ -6819,15 +6855,15 @@ apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html - 65 + 71 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 110 + 116 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html - 345 + 351 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html @@ -6839,7 +6875,7 @@ Asset Class Cluster Risks apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 117 + 141 @@ -6891,7 +6927,7 @@ Regional Market Cluster Risks apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 189 + 213 @@ -7333,7 +7369,7 @@ Set up apps/client/src/app/pages/i18n/i18n-page.html - 132 + 142 @@ -7341,7 +7377,7 @@ No emergency fund has been set up apps/client/src/app/pages/i18n/i18n-page.html - 134 + 144 @@ -7349,7 +7385,7 @@ An emergency fund has been set up apps/client/src/app/pages/i18n/i18n-page.html - 137 + 147 @@ -7357,7 +7393,7 @@ Fee Ratio apps/client/src/app/pages/i18n/i18n-page.html - 139 + 149 @@ -7365,7 +7401,7 @@ The fees do exceed ${thresholdMax}% of your initial investment (${feeRatio}%) apps/client/src/app/pages/i18n/i18n-page.html - 141 + 151 @@ -7373,7 +7409,7 @@ The fees do not exceed ${thresholdMax}% of your initial investment (${feeRatio}%) apps/client/src/app/pages/i18n/i18n-page.html - 145 + 155 @@ -7647,7 +7683,7 @@ Investment: Base Currency apps/client/src/app/pages/i18n/i18n-page.html - 72 + 82 @@ -7655,7 +7691,7 @@ The major part of your current investment is not in your base currency (${baseCurrencyValueRatio}% in ${baseCurrency}) apps/client/src/app/pages/i18n/i18n-page.html - 75 + 85 @@ -7663,7 +7699,7 @@ The major part of your current investment is in your base currency (${baseCurrencyValueRatio}% in ${baseCurrency}) apps/client/src/app/pages/i18n/i18n-page.html - 79 + 89 @@ -7671,7 +7707,7 @@ Investment apps/client/src/app/pages/i18n/i18n-page.html - 82 + 92 @@ -7679,7 +7715,7 @@ Over ${thresholdMax}% of your current investment is in ${currency} (${maxValueRatio}%) apps/client/src/app/pages/i18n/i18n-page.html - 84 + 94 @@ -7687,7 +7723,7 @@ The major part of your current investment is in ${currency} (${maxValueRatio}%) and does not exceed ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 88 + 98 @@ -7808,7 +7844,7 @@ Currency Cluster Risks apps/client/src/app/pages/i18n/i18n-page.html - 70 + 80 @@ -7816,7 +7852,7 @@ Economic Market Cluster Risks apps/client/src/app/pages/i18n/i18n-page.html - 93 + 103 @@ -7824,7 +7860,7 @@ Emergency Fund apps/client/src/app/pages/i18n/i18n-page.html - 131 + 141 @@ -7832,7 +7868,39 @@ Fees apps/client/src/app/pages/i18n/i18n-page.html - 148 + 158 + + + + Liquidity + Liquidity + + apps/client/src/app/pages/i18n/i18n-page.html + 70 + + + + Buying Power + Buying Power + + apps/client/src/app/pages/i18n/i18n-page.html + 71 + + + + Your buying power is below ${thresholdMin} ${baseCurrency} + Your buying power is below ${thresholdMin} ${baseCurrency} + + apps/client/src/app/pages/i18n/i18n-page.html + 73 + + + + Your buying power exceeds ${thresholdMin} ${baseCurrency} + Your buying power exceeds ${thresholdMin} ${baseCurrency} + + apps/client/src/app/pages/i18n/i18n-page.html + 77 @@ -7840,7 +7908,7 @@ Regional Market Cluster Risks apps/client/src/app/pages/i18n/i18n-page.html - 150 + 160 @@ -7856,7 +7924,7 @@ Developed Markets apps/client/src/app/pages/i18n/i18n-page.html - 96 + 106 @@ -7864,7 +7932,7 @@ The developed markets contribution of your current investment (${developedMarketsValueRatio}%) exceeds ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 99 + 109 @@ -7872,7 +7940,7 @@ The developed markets contribution of your current investment (${developedMarketsValueRatio}%) is below ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 104 + 114 @@ -7880,7 +7948,7 @@ The developed markets contribution of your current investment (${developedMarketsValueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 109 + 119 @@ -7888,7 +7956,7 @@ Emerging Markets apps/client/src/app/pages/i18n/i18n-page.html - 114 + 124 @@ -7896,7 +7964,7 @@ The emerging markets contribution of your current investment (${emergingMarketsValueRatio}%) exceeds ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 117 + 127 @@ -7904,7 +7972,7 @@ The emerging markets contribution of your current investment (${emergingMarketsValueRatio}%) is below ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 122 + 132 @@ -7912,7 +7980,7 @@ The emerging markets contribution of your current investment (${emergingMarketsValueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 127 + 137 @@ -7936,7 +8004,7 @@ Asia-Pacific apps/client/src/app/pages/i18n/i18n-page.html - 152 + 162 @@ -7944,7 +8012,7 @@ The Asia-Pacific market contribution of your current investment (${valueRatio}%) exceeds ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 154 + 164 @@ -7952,7 +8020,7 @@ The Asia-Pacific market contribution of your current investment (${valueRatio}%) is below ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 158 + 168 @@ -7960,7 +8028,7 @@ The Asia-Pacific market contribution of your current investment (${valueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 162 + 172 @@ -7968,7 +8036,7 @@ Emerging Markets apps/client/src/app/pages/i18n/i18n-page.html - 167 + 177 @@ -7976,7 +8044,7 @@ The Emerging Markets contribution of your current investment (${valueRatio}%) exceeds ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 170 + 180 @@ -7984,7 +8052,7 @@ The Emerging Markets contribution of your current investment (${valueRatio}%) is below ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 174 + 184 @@ -7992,7 +8060,7 @@ The Emerging Markets contribution of your current investment (${valueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 178 + 188 @@ -8000,7 +8068,7 @@ Europe apps/client/src/app/pages/i18n/i18n-page.html - 182 + 192 @@ -8008,7 +8076,7 @@ The Europe market contribution of your current investment (${valueRatio}%) exceeds ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 184 + 194 @@ -8016,7 +8084,7 @@ The Europe market contribution of your current investment (${valueRatio}%) is below ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 188 + 198 @@ -8024,7 +8092,7 @@ The Europe market contribution of your current investment (${valueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 192 + 202 @@ -8032,7 +8100,7 @@ Japan apps/client/src/app/pages/i18n/i18n-page.html - 196 + 206 @@ -8040,7 +8108,7 @@ The Japan market contribution of your current investment (${valueRatio}%) exceeds ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 198 + 208 @@ -8048,7 +8116,7 @@ The Japan market contribution of your current investment (${valueRatio}%) is below ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 202 + 212 @@ -8056,7 +8124,7 @@ The Japan market contribution of your current investment (${valueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 206 + 216 @@ -8064,7 +8132,7 @@ North America apps/client/src/app/pages/i18n/i18n-page.html - 210 + 220 @@ -8072,7 +8140,7 @@ The North America market contribution of your current investment (${valueRatio}%) exceeds ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 212 + 222 @@ -8080,7 +8148,7 @@ The North America market contribution of your current investment (${valueRatio}%) is below ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 216 + 226 @@ -8088,7 +8156,7 @@ The North America market contribution of your current investment (${valueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 220 + 230 diff --git a/apps/client/src/locales/messages.de.xlf b/apps/client/src/locales/messages.de.xlf index ceda6f2b9..45f6478df 100644 --- a/apps/client/src/locales/messages.de.xlf +++ b/apps/client/src/locales/messages.de.xlf @@ -1330,7 +1330,7 @@ Cash-Bestand apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 47 + 46 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -1346,7 +1346,7 @@ Plattform apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 67 + 91 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -1754,7 +1754,7 @@ Positionen apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 79 + 103 apps/client/src/app/components/home-holdings/home-holdings.html @@ -1882,11 +1882,11 @@ Aktivitäten apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 63 + 87 apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 92 + 116 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -2368,6 +2368,10 @@ Interest Verzinsung + + apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html + 70 + apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html 295 @@ -2778,7 +2782,7 @@ apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 69 + 93 libs/ui/src/lib/i18n.ts @@ -2928,6 +2932,10 @@ Dividend Dividenden + + apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html + 82 + apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html 187 @@ -3430,7 +3438,7 @@ apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 213 + 237 @@ -5136,7 +5144,7 @@ Währungsklumpenrisiken apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 93 + 117 @@ -5144,7 +5152,7 @@ Kontoklumpenrisiken apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 141 + 165 @@ -5280,7 +5288,7 @@ Open Source Software für die Vermögensverwaltung apps/client/src/app/pages/i18n/i18n-page.html - 224 + 234 @@ -5360,7 +5368,7 @@ Cash-Bestände apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 124 + 148 @@ -5476,7 +5484,7 @@ Die Marktdaten sind verzögert für apps/client/src/app/components/portfolio-performance/portfolio-performance.component.ts - 91 + 95 @@ -5799,6 +5807,10 @@ Liquidity Liquidität + + apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html + 69 + libs/ui/src/lib/i18n.ts 49 @@ -6297,7 +6309,7 @@ Inaktiv apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 232 + 256 @@ -6309,7 +6321,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 552 + 554 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6317,11 +6329,11 @@ apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html - 42 + 44 apps/client/src/app/components/admin-tag/create-or-update-tag-dialog/create-or-update-tag-dialog.html - 25 + 27 apps/client/src/app/components/home-watchlist/create-watchlist-item-dialog/create-watchlist-item-dialog.html @@ -6329,11 +6341,11 @@ apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html - 58 + 60 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 103 + 105 apps/client/src/app/pages/accounts/transfer-balance/transfer-balance-dialog.html @@ -6341,7 +6353,7 @@ apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html - 338 + 340 apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html @@ -6359,10 +6371,34 @@ Close Schliessen + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html + 556 + + + apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html + 46 + + + apps/client/src/app/components/admin-tag/create-or-update-tag-dialog/create-or-update-tag-dialog.html + 29 + apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html 129 + + apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html + 62 + + + apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html + 107 + + + apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html + 342 + libs/ui/src/lib/i18n.ts 11 @@ -6695,7 +6731,7 @@ Wirtschaftsraumklumpenrisiken apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 165 + 189 @@ -6815,7 +6851,7 @@ Speichern apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 559 + 565 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6823,11 +6859,11 @@ apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html - 49 + 55 apps/client/src/app/components/admin-tag/create-or-update-tag-dialog/create-or-update-tag-dialog.html - 32 + 38 apps/client/src/app/components/home-watchlist/create-watchlist-item-dialog/create-watchlist-item-dialog.html @@ -6843,15 +6879,15 @@ apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html - 65 + 71 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 110 + 116 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html - 345 + 351 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html @@ -6863,7 +6899,7 @@ Anlageklasseklumpenrisiken apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 117 + 141 @@ -6915,7 +6951,7 @@ Regionale Marktklumpenrisiken apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 189 + 213 @@ -7333,7 +7369,7 @@ Einrichtung apps/client/src/app/pages/i18n/i18n-page.html - 132 + 142 @@ -7341,7 +7377,7 @@ Es wurde kein Notfallfonds eingerichtet apps/client/src/app/pages/i18n/i18n-page.html - 134 + 144 @@ -7349,7 +7385,7 @@ Ein Notfallfonds wurde eingerichtet apps/client/src/app/pages/i18n/i18n-page.html - 137 + 147 @@ -7357,7 +7393,7 @@ Gebührenverhältnis apps/client/src/app/pages/i18n/i18n-page.html - 139 + 149 @@ -7365,7 +7401,7 @@ Die Gebühren übersteigen ${thresholdMax}% deiner ursprünglichen Investition (${feeRatio}%) apps/client/src/app/pages/i18n/i18n-page.html - 141 + 151 @@ -7373,7 +7409,7 @@ Die Gebühren übersteigen ${thresholdMax}% deiner ursprünglichen Investition (${feeRatio}%) nicht apps/client/src/app/pages/i18n/i18n-page.html - 145 + 155 @@ -7647,7 +7683,7 @@ Investition: Basiswährung apps/client/src/app/pages/i18n/i18n-page.html - 72 + 82 @@ -7655,7 +7691,7 @@ Der Hauptteil deiner aktuellen Investition ist nicht in deiner Basiswährung (${baseCurrencyValueRatio}% in ${baseCurrency}) apps/client/src/app/pages/i18n/i18n-page.html - 75 + 85 @@ -7663,7 +7699,7 @@ Der Hauptteil deiner aktuellen Investition ist in deiner Basiswährung (${baseCurrencyValueRatio}% in ${baseCurrency}) apps/client/src/app/pages/i18n/i18n-page.html - 79 + 89 @@ -7671,7 +7707,7 @@ Investition apps/client/src/app/pages/i18n/i18n-page.html - 82 + 92 @@ -7679,7 +7715,7 @@ Über ${thresholdMax}% deiner aktuellen Investition ist in ${currency} (${maxValueRatio}%) apps/client/src/app/pages/i18n/i18n-page.html - 84 + 94 @@ -7687,7 +7723,7 @@ Der Hauptteil deiner aktuellen Investition ist in ${currency} (${maxValueRatio}%) und übersteigt ${thresholdMax}% nicht apps/client/src/app/pages/i18n/i18n-page.html - 88 + 98 @@ -7808,7 +7844,7 @@ Währungsklumpenrisiken apps/client/src/app/pages/i18n/i18n-page.html - 70 + 80 @@ -7816,7 +7852,7 @@ Wirtschaftsraumklumpenrisiken apps/client/src/app/pages/i18n/i18n-page.html - 93 + 103 @@ -7824,7 +7860,7 @@ Notfallfonds apps/client/src/app/pages/i18n/i18n-page.html - 131 + 141 @@ -7832,7 +7868,39 @@ Gebühren apps/client/src/app/pages/i18n/i18n-page.html - 148 + 158 + + + + Liquidity + Liquidität + + apps/client/src/app/pages/i18n/i18n-page.html + 70 + + + + Buying Power + Kaufkraft + + apps/client/src/app/pages/i18n/i18n-page.html + 71 + + + + Your buying power is below ${thresholdMin} ${baseCurrency} + Deine Kaufkraft liegt unter ${thresholdMin} ${baseCurrency} + + apps/client/src/app/pages/i18n/i18n-page.html + 73 + + + + Your buying power exceeds ${thresholdMin} ${baseCurrency} + Deine Kaufkraft übersteigt ${thresholdMin} ${baseCurrency} + + apps/client/src/app/pages/i18n/i18n-page.html + 77 @@ -7840,7 +7908,7 @@ Regionale Marktklumpenrisiken apps/client/src/app/pages/i18n/i18n-page.html - 150 + 160 @@ -7856,7 +7924,7 @@ Entwickelte Länder apps/client/src/app/pages/i18n/i18n-page.html - 96 + 106 @@ -7864,7 +7932,7 @@ Der Anteil entwickelter Länder deiner aktuellen Investition (${developedMarketsValueRatio}%) übersteigt ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 99 + 109 @@ -7872,7 +7940,7 @@ Der Anteil entwickelter Länder deiner aktuellen Investition (${developedMarketsValueRatio}%) liegt unter ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 104 + 114 @@ -7880,7 +7948,7 @@ Der Anteil entwickelter Länder deiner aktuellen Investition (${developedMarketsValueRatio}%) liegt im Bereich zwischen ${thresholdMin}% und ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 109 + 119 @@ -7888,7 +7956,7 @@ Schwellenländer apps/client/src/app/pages/i18n/i18n-page.html - 114 + 124 @@ -7896,7 +7964,7 @@ Der Anteil der Schwellenländer deiner aktuellen Investition (${emergingMarketsValueRatio}%) übersteigt ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 117 + 127 @@ -7904,7 +7972,7 @@ Der Anteil der Schwellenländer deiner aktuellen Investition (${emergingMarketsValueRatio}%) liegt unter ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 122 + 132 @@ -7912,7 +7980,7 @@ Der Anteil der Schwellenländer deiner aktuellen Investition (${emergingMarketsValueRatio}%) liegt im Bereich zwischen ${thresholdMin}% und ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 127 + 137 @@ -7936,7 +8004,7 @@ Asien-Pazifik apps/client/src/app/pages/i18n/i18n-page.html - 152 + 162 @@ -7944,7 +8012,7 @@ Der Anteil des Asien-Pazifik-Marktes deiner aktuellen Investition (${valueRatio}%) übersteigt ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 154 + 164 @@ -7952,7 +8020,7 @@ Der Anteil des Asien-Pazifik-Marktes deiner aktuellen Investition (${valueRatio}%) liegt unter ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 158 + 168 @@ -7960,7 +8028,7 @@ Der Anteil des Asien-Pazifik-Marktes deiner aktuellen Investition (${valueRatio}%) liegt im Bereich zwischen ${thresholdMin}% und ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 162 + 172 @@ -7968,7 +8036,7 @@ Schwellenländer apps/client/src/app/pages/i18n/i18n-page.html - 167 + 177 @@ -7976,7 +8044,7 @@ Der Anteil der Schwellenländer deiner aktuellen Investition (${valueRatio}%) übersteigt ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 170 + 180 @@ -7984,7 +8052,7 @@ Der Anteil der Schwellenländer deiner aktuellen Investition (${valueRatio}%) liegt unter ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 174 + 184 @@ -7992,7 +8060,7 @@ Der Anteil der Schwellenländer deiner aktuellen Investition (${valueRatio}%) liegt im Bereich zwischen ${thresholdMin}% und ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 178 + 188 @@ -8000,7 +8068,7 @@ Europa apps/client/src/app/pages/i18n/i18n-page.html - 182 + 192 @@ -8008,7 +8076,7 @@ Der Anteil des europäischen Marktes deiner aktuellen Investition (${valueRatio}%) übersteigt ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 184 + 194 @@ -8016,7 +8084,7 @@ Der Anteil des europäischen Marktes deiner aktuellen Investition (${valueRatio}%) liegt unter ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 188 + 198 @@ -8024,7 +8092,7 @@ Der Anteil des europäischen Marktes deiner aktuellen Investition (${valueRatio}%) liegt im Bereich zwischen ${thresholdMin}% und ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 192 + 202 @@ -8032,7 +8100,7 @@ Japan apps/client/src/app/pages/i18n/i18n-page.html - 196 + 206 @@ -8040,7 +8108,7 @@ Der Anteil des japanischen Marktes deiner aktuellen Investition (${valueRatio}%) übersteigt ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 198 + 208 @@ -8048,7 +8116,7 @@ Der Anteil des japanischen Marktes deiner aktuellen Investition (${valueRatio}%) liegt unter ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 202 + 212 @@ -8056,7 +8124,7 @@ Der Anteil des japanischen Marktes deiner aktuellen Investition (${valueRatio}%) liegt im Bereich zwischen ${thresholdMin}% und ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 206 + 216 @@ -8064,7 +8132,7 @@ Nordamerika apps/client/src/app/pages/i18n/i18n-page.html - 210 + 220 @@ -8072,7 +8140,7 @@ Der Anteil des nordamerikanischen Marktes deiner aktuellen Investition (${valueRatio}%) übersteigt ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 212 + 222 @@ -8080,7 +8148,7 @@ Der Anteil des nordamerikanischen Marktes deiner aktuellen Investition (${valueRatio}%) liegt unter ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 216 + 226 @@ -8088,7 +8156,7 @@ Der Anteil des nordamerikanischen Marktes deiner aktuellen Investition (${valueRatio}%) liegt im Bereich zwischen ${thresholdMin}% und ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 220 + 230 diff --git a/apps/client/src/locales/messages.es.xlf b/apps/client/src/locales/messages.es.xlf index 3ad118a40..2b1133572 100644 --- a/apps/client/src/locales/messages.es.xlf +++ b/apps/client/src/locales/messages.es.xlf @@ -1315,7 +1315,7 @@ Saldo en efectivo apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 47 + 46 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -1331,7 +1331,7 @@ Plataforma apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 67 + 91 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -1739,7 +1739,7 @@ Participaciones apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 79 + 103 apps/client/src/app/components/home-holdings/home-holdings.html @@ -1867,11 +1867,11 @@ Operación apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 63 + 87 apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 92 + 116 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -2345,6 +2345,10 @@ Interest Interés + + apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html + 70 + apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html 295 @@ -2763,7 +2767,7 @@ apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 69 + 93 libs/ui/src/lib/i18n.ts @@ -2905,6 +2909,10 @@ Dividend Dividendo + + apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html + 82 + apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html 187 @@ -3415,7 +3423,7 @@ apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 213 + 237 @@ -5113,7 +5121,7 @@ Riesgos de clúster de divisas apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 93 + 117 @@ -5121,7 +5129,7 @@ Riesgos de clúster de cuentas apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 141 + 165 @@ -5257,7 +5265,7 @@ Software de gestión de patrimonio de código abierto apps/client/src/app/pages/i18n/i18n-page.html - 224 + 234 @@ -5337,7 +5345,7 @@ Saldos de efectivo apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 124 + 148 @@ -5453,7 +5461,7 @@ Los datos del mercado se retrasan por apps/client/src/app/components/portfolio-performance/portfolio-performance.component.ts - 91 + 95 @@ -5776,6 +5784,10 @@ Liquidity Liquidez + + apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html + 69 + libs/ui/src/lib/i18n.ts 49 @@ -6274,7 +6286,7 @@ Inactiva apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 232 + 256 @@ -6286,7 +6298,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 552 + 554 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6294,11 +6306,11 @@ apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html - 42 + 44 apps/client/src/app/components/admin-tag/create-or-update-tag-dialog/create-or-update-tag-dialog.html - 25 + 27 apps/client/src/app/components/home-watchlist/create-watchlist-item-dialog/create-watchlist-item-dialog.html @@ -6306,11 +6318,11 @@ apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html - 58 + 60 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 103 + 105 apps/client/src/app/pages/accounts/transfer-balance/transfer-balance-dialog.html @@ -6318,7 +6330,7 @@ apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html - 338 + 340 apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html @@ -6336,10 +6348,34 @@ Close Cerca + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html + 556 + + + apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html + 46 + + + apps/client/src/app/components/admin-tag/create-or-update-tag-dialog/create-or-update-tag-dialog.html + 29 + apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html 129 + + apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html + 62 + + + apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html + 107 + + + apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html + 342 + libs/ui/src/lib/i18n.ts 11 @@ -6672,7 +6708,7 @@ Riesgos de clúster del mercado económico apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 165 + 189 @@ -6792,7 +6828,7 @@ Ahorrar apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 559 + 565 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6800,11 +6836,11 @@ apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html - 49 + 55 apps/client/src/app/components/admin-tag/create-or-update-tag-dialog/create-or-update-tag-dialog.html - 32 + 38 apps/client/src/app/components/home-watchlist/create-watchlist-item-dialog/create-watchlist-item-dialog.html @@ -6820,15 +6856,15 @@ apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html - 65 + 71 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 110 + 116 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html - 345 + 351 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html @@ -6840,7 +6876,7 @@ Riesgos del grupo de clases de activos apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 117 + 141 @@ -6892,7 +6928,7 @@ Riesgos del mercado regional agrupados apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 189 + 213 @@ -7334,7 +7370,7 @@ Fondo de Emergencia: Establecer apps/client/src/app/pages/i18n/i18n-page.html - 132 + 142 @@ -7342,7 +7378,7 @@ No se ha creado ningún fondo de emergencia apps/client/src/app/pages/i18n/i18n-page.html - 134 + 144 @@ -7350,7 +7386,7 @@ Se ha creado un fondo de emergencia apps/client/src/app/pages/i18n/i18n-page.html - 137 + 147 @@ -7358,7 +7394,7 @@ Relación de tarifas apps/client/src/app/pages/i18n/i18n-page.html - 139 + 149 @@ -7366,7 +7402,7 @@ Las tarifas superan el ${thresholdMax}% de su inversión inicial (${feeRatio}%) apps/client/src/app/pages/i18n/i18n-page.html - 141 + 151 @@ -7374,7 +7410,7 @@ Las tarifas no superan el ${thresholdMax}% de su inversión inicial (${feeRatio}%) apps/client/src/app/pages/i18n/i18n-page.html - 145 + 155 @@ -7648,7 +7684,7 @@ Inversión: Moneda base apps/client/src/app/pages/i18n/i18n-page.html - 72 + 82 @@ -7656,7 +7692,7 @@ La mayor parte de tu inversión actual no está en tu moneda base (${baseCurrencyValueRatio}% en ${baseCurrency}) apps/client/src/app/pages/i18n/i18n-page.html - 75 + 85 @@ -7664,7 +7700,7 @@ La mayor parte de tu inversión actual está en tu moneda base (${baseCurrencyValueRatio}% en ${baseCurrency}) apps/client/src/app/pages/i18n/i18n-page.html - 79 + 89 @@ -7672,7 +7708,7 @@ Inversión apps/client/src/app/pages/i18n/i18n-page.html - 82 + 92 @@ -7680,7 +7716,7 @@ Más del ${thresholdMax}% de tu inversión actual está en ${currency} (${maxValueRatio}%) apps/client/src/app/pages/i18n/i18n-page.html - 84 + 94 @@ -7688,7 +7724,7 @@ La mayor parte de tu inversión actual está en ${currency} (${maxValueRatio}%) y no supera el ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 88 + 98 @@ -7809,7 +7845,7 @@ Riesgos del clúster de divisas apps/client/src/app/pages/i18n/i18n-page.html - 70 + 80 @@ -7817,7 +7853,7 @@ Economic Market Cluster Risks apps/client/src/app/pages/i18n/i18n-page.html - 93 + 103 @@ -7825,7 +7861,7 @@ Emergency Fund apps/client/src/app/pages/i18n/i18n-page.html - 131 + 141 @@ -7833,7 +7869,39 @@ Fees apps/client/src/app/pages/i18n/i18n-page.html - 148 + 158 + + + + Liquidity + Liquidity + + apps/client/src/app/pages/i18n/i18n-page.html + 70 + + + + Buying Power + Buying Power + + apps/client/src/app/pages/i18n/i18n-page.html + 71 + + + + Your buying power is below ${thresholdMin} ${baseCurrency} + Your buying power is below ${thresholdMin} ${baseCurrency} + + apps/client/src/app/pages/i18n/i18n-page.html + 73 + + + + Your buying power exceeds ${thresholdMin} ${baseCurrency} + Your buying power exceeds ${thresholdMin} ${baseCurrency} + + apps/client/src/app/pages/i18n/i18n-page.html + 77 @@ -7841,7 +7909,7 @@ Riesgos de los grupos de mercados regionales apps/client/src/app/pages/i18n/i18n-page.html - 150 + 160 @@ -7857,7 +7925,7 @@ Mercados desarrollados apps/client/src/app/pages/i18n/i18n-page.html - 96 + 106 @@ -7865,7 +7933,7 @@ The developed markets contribution of your current investment (${developedMarketsValueRatio}%) exceeds ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 99 + 109 @@ -7873,7 +7941,7 @@ The developed markets contribution of your current investment (${developedMarketsValueRatio}%) is below ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 104 + 114 @@ -7881,7 +7949,7 @@ The developed markets contribution of your current investment (${developedMarketsValueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 109 + 119 @@ -7889,7 +7957,7 @@ Mercados emergentes apps/client/src/app/pages/i18n/i18n-page.html - 114 + 124 @@ -7897,7 +7965,7 @@ The emerging markets contribution of your current investment (${emergingMarketsValueRatio}%) exceeds ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 117 + 127 @@ -7905,7 +7973,7 @@ The emerging markets contribution of your current investment (${emergingMarketsValueRatio}%) is below ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 122 + 132 @@ -7913,7 +7981,7 @@ The emerging markets contribution of your current investment (${emergingMarketsValueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 127 + 137 @@ -7937,7 +8005,7 @@ Asia-Pacific apps/client/src/app/pages/i18n/i18n-page.html - 152 + 162 @@ -7945,7 +8013,7 @@ The Asia-Pacific market contribution of your current investment (${valueRatio}%) exceeds ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 154 + 164 @@ -7953,7 +8021,7 @@ The Asia-Pacific market contribution of your current investment (${valueRatio}%) is below ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 158 + 168 @@ -7961,7 +8029,7 @@ The Asia-Pacific market contribution of your current investment (${valueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 162 + 172 @@ -7969,7 +8037,7 @@ Emerging Markets apps/client/src/app/pages/i18n/i18n-page.html - 167 + 177 @@ -7977,7 +8045,7 @@ The Emerging Markets contribution of your current investment (${valueRatio}%) exceeds ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 170 + 180 @@ -7985,7 +8053,7 @@ The Emerging Markets contribution of your current investment (${valueRatio}%) is below ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 174 + 184 @@ -7993,7 +8061,7 @@ The Emerging Markets contribution of your current investment (${valueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 178 + 188 @@ -8001,7 +8069,7 @@ Europe apps/client/src/app/pages/i18n/i18n-page.html - 182 + 192 @@ -8009,7 +8077,7 @@ The Europe market contribution of your current investment (${valueRatio}%) exceeds ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 184 + 194 @@ -8017,7 +8085,7 @@ The Europe market contribution of your current investment (${valueRatio}%) is below ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 188 + 198 @@ -8025,7 +8093,7 @@ The Europe market contribution of your current investment (${valueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 192 + 202 @@ -8033,7 +8101,7 @@ Japón apps/client/src/app/pages/i18n/i18n-page.html - 196 + 206 @@ -8041,7 +8109,7 @@ La contribución al mercado japonés de su inversión actual (${valueRatio}%) supera el ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 198 + 208 @@ -8049,7 +8117,7 @@ La contribución al mercado japonés de su inversión actual (${valueRatio}%) es inferior a ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 202 + 212 @@ -8057,7 +8125,7 @@ La contribución al mercado japonés de su inversión actual (${valueRatio}%) está dentro del rango de ${thresholdMin}% y ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 206 + 216 @@ -8065,7 +8133,7 @@ Norteamérica apps/client/src/app/pages/i18n/i18n-page.html - 210 + 220 @@ -8073,7 +8141,7 @@ La contribución del mercado de América del Norte de su inversión actual (${valueRatio}%) supera el ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 212 + 222 @@ -8081,7 +8149,7 @@ La contribución al mercado de América del Norte de su inversión actual (${valueRatio}%) es inferior a ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 216 + 226 @@ -8089,7 +8157,7 @@ La contribución al mercado de América del Norte de su inversión actual (${valueRatio}%) está dentro del rango de ${thresholdMin}% y ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 220 + 230 diff --git a/apps/client/src/locales/messages.fr.xlf b/apps/client/src/locales/messages.fr.xlf index fe772536b..4d97b2b8a 100644 --- a/apps/client/src/locales/messages.fr.xlf +++ b/apps/client/src/locales/messages.fr.xlf @@ -78,7 +78,7 @@ Plateforme apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 67 + 91 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -194,7 +194,7 @@ Balance Cash apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 47 + 46 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -1818,7 +1818,7 @@ Positions apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 79 + 103 apps/client/src/app/components/home-holdings/home-holdings.html @@ -1898,11 +1898,11 @@ Activités apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 63 + 87 apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 92 + 116 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -2216,6 +2216,10 @@ Dividend Dividende + + apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html + 82 + apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html 187 @@ -2640,6 +2644,10 @@ Interest Intérêt + + apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html + 70 + apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html 295 @@ -2782,7 +2790,7 @@ apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 69 + 93 libs/ui/src/lib/i18n.ts @@ -3414,7 +3422,7 @@ apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 213 + 237 @@ -5112,7 +5120,7 @@ Risques de change apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 93 + 117 @@ -5120,7 +5128,7 @@ Risques liés aux regroupements de comptes apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 141 + 165 @@ -5256,7 +5264,7 @@ Logiciel libre de Gestion de Patrimoine apps/client/src/app/pages/i18n/i18n-page.html - 224 + 234 @@ -5336,7 +5344,7 @@ Cash Balances apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 124 + 148 @@ -5452,7 +5460,7 @@ Les données du marché sont retardées de apps/client/src/app/components/portfolio-performance/portfolio-performance.component.ts - 91 + 95 @@ -5775,6 +5783,10 @@ Liquidity Liquiditées + + apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html + 69 + libs/ui/src/lib/i18n.ts 49 @@ -6273,7 +6285,7 @@ Inactif apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 232 + 256 @@ -6285,7 +6297,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 552 + 554 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6293,11 +6305,11 @@ apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html - 42 + 44 apps/client/src/app/components/admin-tag/create-or-update-tag-dialog/create-or-update-tag-dialog.html - 25 + 27 apps/client/src/app/components/home-watchlist/create-watchlist-item-dialog/create-watchlist-item-dialog.html @@ -6305,11 +6317,11 @@ apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html - 58 + 60 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 103 + 105 apps/client/src/app/pages/accounts/transfer-balance/transfer-balance-dialog.html @@ -6317,7 +6329,7 @@ apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html - 338 + 340 apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html @@ -6335,10 +6347,34 @@ Close Fermer + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html + 556 + + + apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html + 46 + + + apps/client/src/app/components/admin-tag/create-or-update-tag-dialog/create-or-update-tag-dialog.html + 29 + apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html 129 + + apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html + 62 + + + apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html + 107 + + + apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html + 342 + libs/ui/src/lib/i18n.ts 11 @@ -6671,7 +6707,7 @@ Risques liés aux zones économiques du marché apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 165 + 189 @@ -6791,7 +6827,7 @@ Sauvegarder apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 559 + 565 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6799,11 +6835,11 @@ apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html - 49 + 55 apps/client/src/app/components/admin-tag/create-or-update-tag-dialog/create-or-update-tag-dialog.html - 32 + 38 apps/client/src/app/components/home-watchlist/create-watchlist-item-dialog/create-watchlist-item-dialog.html @@ -6819,15 +6855,15 @@ apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html - 65 + 71 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 110 + 116 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html - 345 + 351 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html @@ -6839,7 +6875,7 @@ Risques liés aux regroupements de classes d’actifs apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 117 + 141 @@ -6891,7 +6927,7 @@ Risques liés aux regroupements de marchés régionaux apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 189 + 213 @@ -7333,7 +7369,7 @@ Fonds d’urgence : Mise en place apps/client/src/app/pages/i18n/i18n-page.html - 132 + 142 @@ -7341,7 +7377,7 @@ Aucun fonds d’urgence n’a été mis en place apps/client/src/app/pages/i18n/i18n-page.html - 134 + 144 @@ -7349,7 +7385,7 @@ Un fonds d’urgence a été mis en place apps/client/src/app/pages/i18n/i18n-page.html - 137 + 147 @@ -7357,7 +7393,7 @@ Ratio de frais apps/client/src/app/pages/i18n/i18n-page.html - 139 + 149 @@ -7365,7 +7401,7 @@ Les frais dépassent ${thresholdMax}% de votre investissement initial (${feeRatio}%) apps/client/src/app/pages/i18n/i18n-page.html - 141 + 151 @@ -7373,7 +7409,7 @@ Les frais ne dépassent pas ${thresholdMax}% de votre investissement initial (${feeRatio}%) apps/client/src/app/pages/i18n/i18n-page.html - 145 + 155 @@ -7647,7 +7683,7 @@ Investment: Base Currency apps/client/src/app/pages/i18n/i18n-page.html - 72 + 82 @@ -7655,7 +7691,7 @@ The major part of your current investment is not in your base currency (${baseCurrencyValueRatio}% in ${baseCurrency}) apps/client/src/app/pages/i18n/i18n-page.html - 75 + 85 @@ -7663,7 +7699,7 @@ The major part of your current investment is in your base currency (${baseCurrencyValueRatio}% in ${baseCurrency}) apps/client/src/app/pages/i18n/i18n-page.html - 79 + 89 @@ -7671,7 +7707,7 @@ Investissement apps/client/src/app/pages/i18n/i18n-page.html - 82 + 92 @@ -7679,7 +7715,7 @@ Plus de ${thresholdMax}% de votre investissement actuel est en ${currency} (${maxValueRatio}%) apps/client/src/app/pages/i18n/i18n-page.html - 84 + 94 @@ -7687,7 +7723,7 @@ La majeure partie de votre investissement actuel est en ${currency} (${maxValueRatio}%) et n’excède pas ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 88 + 98 @@ -7808,7 +7844,7 @@ Currency Cluster Risks apps/client/src/app/pages/i18n/i18n-page.html - 70 + 80 @@ -7816,7 +7852,7 @@ Economic Market Cluster Risks apps/client/src/app/pages/i18n/i18n-page.html - 93 + 103 @@ -7824,7 +7860,7 @@ Emergency Fund apps/client/src/app/pages/i18n/i18n-page.html - 131 + 141 @@ -7832,7 +7868,39 @@ Fees apps/client/src/app/pages/i18n/i18n-page.html - 148 + 158 + + + + Liquidity + Liquidity + + apps/client/src/app/pages/i18n/i18n-page.html + 70 + + + + Buying Power + Buying Power + + apps/client/src/app/pages/i18n/i18n-page.html + 71 + + + + Your buying power is below ${thresholdMin} ${baseCurrency} + Your buying power is below ${thresholdMin} ${baseCurrency} + + apps/client/src/app/pages/i18n/i18n-page.html + 73 + + + + Your buying power exceeds ${thresholdMin} ${baseCurrency} + Your buying power exceeds ${thresholdMin} ${baseCurrency} + + apps/client/src/app/pages/i18n/i18n-page.html + 77 @@ -7840,7 +7908,7 @@ Regional Market Cluster Risks apps/client/src/app/pages/i18n/i18n-page.html - 150 + 160 @@ -7856,7 +7924,7 @@ Developed Markets apps/client/src/app/pages/i18n/i18n-page.html - 96 + 106 @@ -7864,7 +7932,7 @@ The developed markets contribution of your current investment (${developedMarketsValueRatio}%) exceeds ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 99 + 109 @@ -7872,7 +7940,7 @@ The developed markets contribution of your current investment (${developedMarketsValueRatio}%) is below ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 104 + 114 @@ -7880,7 +7948,7 @@ The developed markets contribution of your current investment (${developedMarketsValueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 109 + 119 @@ -7888,7 +7956,7 @@ Emerging Markets apps/client/src/app/pages/i18n/i18n-page.html - 114 + 124 @@ -7896,7 +7964,7 @@ The emerging markets contribution of your current investment (${emergingMarketsValueRatio}%) exceeds ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 117 + 127 @@ -7904,7 +7972,7 @@ The emerging markets contribution of your current investment (${emergingMarketsValueRatio}%) is below ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 122 + 132 @@ -7912,7 +7980,7 @@ The emerging markets contribution of your current investment (${emergingMarketsValueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 127 + 137 @@ -7936,7 +8004,7 @@ Asia-Pacific apps/client/src/app/pages/i18n/i18n-page.html - 152 + 162 @@ -7944,7 +8012,7 @@ The Asia-Pacific market contribution of your current investment (${valueRatio}%) exceeds ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 154 + 164 @@ -7952,7 +8020,7 @@ The Asia-Pacific market contribution of your current investment (${valueRatio}%) is below ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 158 + 168 @@ -7960,7 +8028,7 @@ The Asia-Pacific market contribution of your current investment (${valueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 162 + 172 @@ -7968,7 +8036,7 @@ Emerging Markets apps/client/src/app/pages/i18n/i18n-page.html - 167 + 177 @@ -7976,7 +8044,7 @@ The Emerging Markets contribution of your current investment (${valueRatio}%) exceeds ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 170 + 180 @@ -7984,7 +8052,7 @@ The Emerging Markets contribution of your current investment (${valueRatio}%) is below ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 174 + 184 @@ -7992,7 +8060,7 @@ The Emerging Markets contribution of your current investment (${valueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 178 + 188 @@ -8000,7 +8068,7 @@ Europe apps/client/src/app/pages/i18n/i18n-page.html - 182 + 192 @@ -8008,7 +8076,7 @@ The Europe market contribution of your current investment (${valueRatio}%) exceeds ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 184 + 194 @@ -8016,7 +8084,7 @@ The Europe market contribution of your current investment (${valueRatio}%) is below ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 188 + 198 @@ -8024,7 +8092,7 @@ The Europe market contribution of your current investment (${valueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 192 + 202 @@ -8032,7 +8100,7 @@ Japan apps/client/src/app/pages/i18n/i18n-page.html - 196 + 206 @@ -8040,7 +8108,7 @@ The Japan market contribution of your current investment (${valueRatio}%) exceeds ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 198 + 208 @@ -8048,7 +8116,7 @@ The Japan market contribution of your current investment (${valueRatio}%) is below ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 202 + 212 @@ -8056,7 +8124,7 @@ The Japan market contribution of your current investment (${valueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 206 + 216 @@ -8064,7 +8132,7 @@ North America apps/client/src/app/pages/i18n/i18n-page.html - 210 + 220 @@ -8072,7 +8140,7 @@ The North America market contribution of your current investment (${valueRatio}%) exceeds ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 212 + 222 @@ -8080,7 +8148,7 @@ The North America market contribution of your current investment (${valueRatio}%) is below ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 216 + 226 @@ -8088,7 +8156,7 @@ The North America market contribution of your current investment (${valueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 220 + 230 diff --git a/apps/client/src/locales/messages.it.xlf b/apps/client/src/locales/messages.it.xlf index ced0ad03d..e3ae0a5a6 100644 --- a/apps/client/src/locales/messages.it.xlf +++ b/apps/client/src/locales/messages.it.xlf @@ -1315,7 +1315,7 @@ Saldo di cassa apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 47 + 46 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -1331,7 +1331,7 @@ Piattaforma apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 67 + 91 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -1739,7 +1739,7 @@ Partecipazioni apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 79 + 103 apps/client/src/app/components/home-holdings/home-holdings.html @@ -1867,11 +1867,11 @@ Attività apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 63 + 87 apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 92 + 116 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -2345,6 +2345,10 @@ Interest Interesse + + apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html + 70 + apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html 295 @@ -2763,7 +2767,7 @@ apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 69 + 93 libs/ui/src/lib/i18n.ts @@ -2905,6 +2909,10 @@ Dividend Dividendi + + apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html + 82 + apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html 187 @@ -3415,7 +3423,7 @@ apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 213 + 237 @@ -5113,7 +5121,7 @@ Rischio di Concentrazione Valutario apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 93 + 117 @@ -5121,7 +5129,7 @@ Rischi di Concentrazione dei Conti apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 141 + 165 @@ -5257,7 +5265,7 @@ Software Open Source per la gestione della tua ricchezza apps/client/src/app/pages/i18n/i18n-page.html - 224 + 234 @@ -5337,7 +5345,7 @@ Saldi di cassa apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 124 + 148 @@ -5453,7 +5461,7 @@ I dati di mercato sono ritardati di apps/client/src/app/components/portfolio-performance/portfolio-performance.component.ts - 91 + 95 @@ -5776,6 +5784,10 @@ Liquidity Liquidità + + apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html + 69 + libs/ui/src/lib/i18n.ts 49 @@ -6274,7 +6286,7 @@ Inattivo apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 232 + 256 @@ -6286,7 +6298,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 552 + 554 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6294,11 +6306,11 @@ apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html - 42 + 44 apps/client/src/app/components/admin-tag/create-or-update-tag-dialog/create-or-update-tag-dialog.html - 25 + 27 apps/client/src/app/components/home-watchlist/create-watchlist-item-dialog/create-watchlist-item-dialog.html @@ -6306,11 +6318,11 @@ apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html - 58 + 60 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 103 + 105 apps/client/src/app/pages/accounts/transfer-balance/transfer-balance-dialog.html @@ -6318,7 +6330,7 @@ apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html - 338 + 340 apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html @@ -6336,10 +6348,34 @@ Close Chiudi + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html + 556 + + + apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html + 46 + + + apps/client/src/app/components/admin-tag/create-or-update-tag-dialog/create-or-update-tag-dialog.html + 29 + apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html 129 + + apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html + 62 + + + apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html + 107 + + + apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html + 342 + libs/ui/src/lib/i18n.ts 11 @@ -6672,7 +6708,7 @@ Rischi del cluster di mercato economico apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 165 + 189 @@ -6792,7 +6828,7 @@ Salva apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 559 + 565 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6800,11 +6836,11 @@ apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html - 49 + 55 apps/client/src/app/components/admin-tag/create-or-update-tag-dialog/create-or-update-tag-dialog.html - 32 + 38 apps/client/src/app/components/home-watchlist/create-watchlist-item-dialog/create-watchlist-item-dialog.html @@ -6820,15 +6856,15 @@ apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html - 65 + 71 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 110 + 116 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html - 345 + 351 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html @@ -6840,7 +6876,7 @@ Rischi del cluster di classi di asset apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 117 + 141 @@ -6892,7 +6928,7 @@ Rischi del cluster di mercato regionale apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 189 + 213 @@ -7334,7 +7370,7 @@ Fondo di emergenza: istituito apps/client/src/app/pages/i18n/i18n-page.html - 132 + 142 @@ -7342,7 +7378,7 @@ Non è stato istituito alcun fondo di emergenza apps/client/src/app/pages/i18n/i18n-page.html - 134 + 144 @@ -7350,7 +7386,7 @@ È stato istituito un fondo di emergenza apps/client/src/app/pages/i18n/i18n-page.html - 137 + 147 @@ -7358,7 +7394,7 @@ Rapporto tariffario apps/client/src/app/pages/i18n/i18n-page.html - 139 + 149 @@ -7366,7 +7402,7 @@ Le commissioni superano il ${thresholdMax}% del tuo investimento iniziale (${feeRatio}%) apps/client/src/app/pages/i18n/i18n-page.html - 141 + 151 @@ -7374,7 +7410,7 @@ Le commissioni non superano il ${thresholdMax}% del tuo investimento iniziale (${feeRatio}%) apps/client/src/app/pages/i18n/i18n-page.html - 145 + 155 @@ -7648,7 +7684,7 @@ Investimento: valuta di base apps/client/src/app/pages/i18n/i18n-page.html - 72 + 82 @@ -7656,7 +7692,7 @@ La maggior parte del tuo investimento attuale non è nella valuta di base (${baseCurrencyValueRatio}% in ${baseCurrency}) apps/client/src/app/pages/i18n/i18n-page.html - 75 + 85 @@ -7664,7 +7700,7 @@ La maggior parte del tuo investimento attuale è nella valuta di base (${baseCurrencyValueRatio}% in ${baseCurrency}) apps/client/src/app/pages/i18n/i18n-page.html - 79 + 89 @@ -7672,7 +7708,7 @@ Investimento apps/client/src/app/pages/i18n/i18n-page.html - 82 + 92 @@ -7680,7 +7716,7 @@ Over ${thresholdMax}% of your current investment is in ${currency} (${maxValueRatio}%) apps/client/src/app/pages/i18n/i18n-page.html - 84 + 94 @@ -7688,7 +7724,7 @@ The major part of your current investment is in ${currency} (${maxValueRatio}%) and does not exceed ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 88 + 98 @@ -7809,7 +7845,7 @@ Currency Cluster Risks apps/client/src/app/pages/i18n/i18n-page.html - 70 + 80 @@ -7817,7 +7853,7 @@ Economic Market Cluster Risks apps/client/src/app/pages/i18n/i18n-page.html - 93 + 103 @@ -7825,7 +7861,7 @@ Emergency Fund apps/client/src/app/pages/i18n/i18n-page.html - 131 + 141 @@ -7833,7 +7869,39 @@ Fees apps/client/src/app/pages/i18n/i18n-page.html - 148 + 158 + + + + Liquidity + Liquidity + + apps/client/src/app/pages/i18n/i18n-page.html + 70 + + + + Buying Power + Buying Power + + apps/client/src/app/pages/i18n/i18n-page.html + 71 + + + + Your buying power is below ${thresholdMin} ${baseCurrency} + Your buying power is below ${thresholdMin} ${baseCurrency} + + apps/client/src/app/pages/i18n/i18n-page.html + 73 + + + + Your buying power exceeds ${thresholdMin} ${baseCurrency} + Your buying power exceeds ${thresholdMin} ${baseCurrency} + + apps/client/src/app/pages/i18n/i18n-page.html + 77 @@ -7841,7 +7909,7 @@ Regional Market Cluster Risks apps/client/src/app/pages/i18n/i18n-page.html - 150 + 160 @@ -7857,7 +7925,7 @@ Developed Markets apps/client/src/app/pages/i18n/i18n-page.html - 96 + 106 @@ -7865,7 +7933,7 @@ The developed markets contribution of your current investment (${developedMarketsValueRatio}%) exceeds ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 99 + 109 @@ -7873,7 +7941,7 @@ The developed markets contribution of your current investment (${developedMarketsValueRatio}%) is below ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 104 + 114 @@ -7881,7 +7949,7 @@ The developed markets contribution of your current investment (${developedMarketsValueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 109 + 119 @@ -7889,7 +7957,7 @@ Emerging Markets apps/client/src/app/pages/i18n/i18n-page.html - 114 + 124 @@ -7897,7 +7965,7 @@ The emerging markets contribution of your current investment (${emergingMarketsValueRatio}%) exceeds ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 117 + 127 @@ -7905,7 +7973,7 @@ The emerging markets contribution of your current investment (${emergingMarketsValueRatio}%) is below ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 122 + 132 @@ -7913,7 +7981,7 @@ The emerging markets contribution of your current investment (${emergingMarketsValueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 127 + 137 @@ -7937,7 +8005,7 @@ Asia-Pacific apps/client/src/app/pages/i18n/i18n-page.html - 152 + 162 @@ -7945,7 +8013,7 @@ The Asia-Pacific market contribution of your current investment (${valueRatio}%) exceeds ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 154 + 164 @@ -7953,7 +8021,7 @@ The Asia-Pacific market contribution of your current investment (${valueRatio}%) is below ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 158 + 168 @@ -7961,7 +8029,7 @@ The Asia-Pacific market contribution of your current investment (${valueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 162 + 172 @@ -7969,7 +8037,7 @@ Emerging Markets apps/client/src/app/pages/i18n/i18n-page.html - 167 + 177 @@ -7977,7 +8045,7 @@ The Emerging Markets contribution of your current investment (${valueRatio}%) exceeds ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 170 + 180 @@ -7985,7 +8053,7 @@ The Emerging Markets contribution of your current investment (${valueRatio}%) is below ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 174 + 184 @@ -7993,7 +8061,7 @@ The Emerging Markets contribution of your current investment (${valueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 178 + 188 @@ -8001,7 +8069,7 @@ Europe apps/client/src/app/pages/i18n/i18n-page.html - 182 + 192 @@ -8009,7 +8077,7 @@ The Europe market contribution of your current investment (${valueRatio}%) exceeds ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 184 + 194 @@ -8017,7 +8085,7 @@ The Europe market contribution of your current investment (${valueRatio}%) is below ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 188 + 198 @@ -8025,7 +8093,7 @@ The Europe market contribution of your current investment (${valueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 192 + 202 @@ -8033,7 +8101,7 @@ Japan apps/client/src/app/pages/i18n/i18n-page.html - 196 + 206 @@ -8041,7 +8109,7 @@ The Japan market contribution of your current investment (${valueRatio}%) exceeds ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 198 + 208 @@ -8049,7 +8117,7 @@ The Japan market contribution of your current investment (${valueRatio}%) is below ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 202 + 212 @@ -8057,7 +8125,7 @@ The Japan market contribution of your current investment (${valueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 206 + 216 @@ -8065,7 +8133,7 @@ North America apps/client/src/app/pages/i18n/i18n-page.html - 210 + 220 @@ -8073,7 +8141,7 @@ The North America market contribution of your current investment (${valueRatio}%) exceeds ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 212 + 222 @@ -8081,7 +8149,7 @@ The North America market contribution of your current investment (${valueRatio}%) is below ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 216 + 226 @@ -8089,7 +8157,7 @@ The North America market contribution of your current investment (${valueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 220 + 230 diff --git a/apps/client/src/locales/messages.nl.xlf b/apps/client/src/locales/messages.nl.xlf index 7e32c2aa1..a30f13c38 100644 --- a/apps/client/src/locales/messages.nl.xlf +++ b/apps/client/src/locales/messages.nl.xlf @@ -1314,7 +1314,7 @@ Saldo apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 47 + 46 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -1330,7 +1330,7 @@ Platform apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 67 + 91 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -1738,7 +1738,7 @@ Posities apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 79 + 103 apps/client/src/app/components/home-holdings/home-holdings.html @@ -1866,11 +1866,11 @@ Activiteiten apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 63 + 87 apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 92 + 116 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -2344,6 +2344,10 @@ Interest Rente + + apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html + 70 + apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html 295 @@ -2762,7 +2766,7 @@ apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 69 + 93 libs/ui/src/lib/i18n.ts @@ -2904,6 +2908,10 @@ Dividend Dividend + + apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html + 82 + apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html 187 @@ -3414,7 +3422,7 @@ apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 213 + 237 @@ -5112,7 +5120,7 @@ Valuta Cluster Risico’s apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 93 + 117 @@ -5120,7 +5128,7 @@ Account Cluster Risco’s apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 141 + 165 @@ -5256,7 +5264,7 @@ Open Source Vermogensbeheer Software apps/client/src/app/pages/i18n/i18n-page.html - 224 + 234 @@ -5336,7 +5344,7 @@ Contant Saldo apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 124 + 148 @@ -5452,7 +5460,7 @@ Markt data is vertraagd voor apps/client/src/app/components/portfolio-performance/portfolio-performance.component.ts - 91 + 95 @@ -5775,6 +5783,10 @@ Liquidity Liquiditeit + + apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html + 69 + libs/ui/src/lib/i18n.ts 49 @@ -6273,7 +6285,7 @@ Inactief apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 232 + 256 @@ -6285,7 +6297,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 552 + 554 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6293,11 +6305,11 @@ apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html - 42 + 44 apps/client/src/app/components/admin-tag/create-or-update-tag-dialog/create-or-update-tag-dialog.html - 25 + 27 apps/client/src/app/components/home-watchlist/create-watchlist-item-dialog/create-watchlist-item-dialog.html @@ -6305,11 +6317,11 @@ apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html - 58 + 60 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 103 + 105 apps/client/src/app/pages/accounts/transfer-balance/transfer-balance-dialog.html @@ -6317,7 +6329,7 @@ apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html - 338 + 340 apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html @@ -6335,10 +6347,34 @@ Close Sluiten + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html + 556 + + + apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html + 46 + + + apps/client/src/app/components/admin-tag/create-or-update-tag-dialog/create-or-update-tag-dialog.html + 29 + apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html 129 + + apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html + 62 + + + apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html + 107 + + + apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html + 342 + libs/ui/src/lib/i18n.ts 11 @@ -6671,7 +6707,7 @@ Risico’s van Economische Marktclusters apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 165 + 189 @@ -6791,7 +6827,7 @@ Opslaan apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 559 + 565 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6799,11 +6835,11 @@ apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html - 49 + 55 apps/client/src/app/components/admin-tag/create-or-update-tag-dialog/create-or-update-tag-dialog.html - 32 + 38 apps/client/src/app/components/home-watchlist/create-watchlist-item-dialog/create-watchlist-item-dialog.html @@ -6819,15 +6855,15 @@ apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html - 65 + 71 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 110 + 116 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html - 345 + 351 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html @@ -6839,7 +6875,7 @@ Activa Klasse Cluster Risico’s apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 117 + 141 @@ -6891,7 +6927,7 @@ Regionale Markt Clusterrisico’s apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 189 + 213 @@ -7333,7 +7369,7 @@ Opgezet apps/client/src/app/pages/i18n/i18n-page.html - 132 + 142 @@ -7341,7 +7377,7 @@ Er is geen noodfonds ingesteld apps/client/src/app/pages/i18n/i18n-page.html - 134 + 144 @@ -7349,7 +7385,7 @@ Er is een noodfonds opgericht apps/client/src/app/pages/i18n/i18n-page.html - 137 + 147 @@ -7357,7 +7393,7 @@ Vergoedingsverhouding apps/client/src/app/pages/i18n/i18n-page.html - 139 + 149 @@ -7365,7 +7401,7 @@ De kosten overschrijden ${thresholdMax}% van uw initiële investering (${feeRatio}%) apps/client/src/app/pages/i18n/i18n-page.html - 141 + 151 @@ -7373,7 +7409,7 @@ De kosten bedragen niet meer dan ${thresholdMax}% van uw initiële investering (${feeRatio}%) apps/client/src/app/pages/i18n/i18n-page.html - 145 + 155 @@ -7647,7 +7683,7 @@ Investering: basisvaluta apps/client/src/app/pages/i18n/i18n-page.html - 72 + 82 @@ -7655,7 +7691,7 @@ Het grootste deel van uw huidige investering staat niet in uw basisvaluta (${baseCurrencyValueRatio}% in ${baseCurrency}) apps/client/src/app/pages/i18n/i18n-page.html - 75 + 85 @@ -7663,7 +7699,7 @@ Het grootste deel van uw huidige investering bevindt zich in uw basisvaluta (${baseCurrencyValueRatio}% in ${baseCurrency}) apps/client/src/app/pages/i18n/i18n-page.html - 79 + 89 @@ -7671,7 +7707,7 @@ Investering apps/client/src/app/pages/i18n/i18n-page.html - 82 + 92 @@ -7679,7 +7715,7 @@ Meer dan ${thresholdMax}% van uw huidige investering is in ${currency} (${maxValueRatio}%) apps/client/src/app/pages/i18n/i18n-page.html - 84 + 94 @@ -7687,7 +7723,7 @@ Het grootste deel van uw huidige investering is in ${currency} (${maxValueRatio}%) en overschrijdt ${thresholdMax}% niet apps/client/src/app/pages/i18n/i18n-page.html - 88 + 98 @@ -7808,7 +7844,7 @@ Valutaclusterrisico’s apps/client/src/app/pages/i18n/i18n-page.html - 70 + 80 @@ -7816,7 +7852,7 @@ Risico’s van economische marktclusters apps/client/src/app/pages/i18n/i18n-page.html - 93 + 103 @@ -7824,7 +7860,7 @@ Noodfonds apps/client/src/app/pages/i18n/i18n-page.html - 131 + 141 @@ -7832,7 +7868,39 @@ Kosten apps/client/src/app/pages/i18n/i18n-page.html - 148 + 158 + + + + Liquidity + Liquidity + + apps/client/src/app/pages/i18n/i18n-page.html + 70 + + + + Buying Power + Buying Power + + apps/client/src/app/pages/i18n/i18n-page.html + 71 + + + + Your buying power is below ${thresholdMin} ${baseCurrency} + Your buying power is below ${thresholdMin} ${baseCurrency} + + apps/client/src/app/pages/i18n/i18n-page.html + 73 + + + + Your buying power exceeds ${thresholdMin} ${baseCurrency} + Your buying power exceeds ${thresholdMin} ${baseCurrency} + + apps/client/src/app/pages/i18n/i18n-page.html + 77 @@ -7840,7 +7908,7 @@ Risico’s van regionale marktclusters apps/client/src/app/pages/i18n/i18n-page.html - 150 + 160 @@ -7856,7 +7924,7 @@ Ontwikkelde markten apps/client/src/app/pages/i18n/i18n-page.html - 96 + 106 @@ -7864,7 +7932,7 @@ De bijdrage van ontwikkelde markten aan je huidige investering (${developedMarketsValueRatio}%) overschrijdt ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 99 + 109 @@ -7872,7 +7940,7 @@ De bijdrage van ontwikkelde markten aan je huidige investering (${developedMarketsValueRatio}%) ligt onder ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 104 + 114 @@ -7880,7 +7948,7 @@ De bijdrage van ontwikkelde markten aan je huidige investering (${developedMarketsValueRatio}%) ligt binnen het bereik van ${thresholdMin}% en ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 109 + 119 @@ -7888,7 +7956,7 @@ Opkomende markten apps/client/src/app/pages/i18n/i18n-page.html - 114 + 124 @@ -7896,7 +7964,7 @@ De bijdrage van opkomende markten aan je huidige investering (${emergingMarketsValueRatio}%) overschrijdt ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 117 + 127 @@ -7904,7 +7972,7 @@ De bijdrage van opkomende markten aan je huidige investering (${emergingMarketsValueRatio}%) ligt onder ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 122 + 132 @@ -7912,7 +7980,7 @@ De bijdrage van opkomende markten aan je huidige investering (${emergingMarketsValueRatio}%) ligt binnen het bereik van ${thresholdMin}% en ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 127 + 137 @@ -7936,7 +8004,7 @@ Azië-Pacific apps/client/src/app/pages/i18n/i18n-page.html - 152 + 162 @@ -7944,7 +8012,7 @@ De bijdrage van de Azië-Pacific markt aan je huidige investering (${valueRatio}%) overschrijdt ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 154 + 164 @@ -7952,7 +8020,7 @@ De bijdrage van de Azië-Pacific markt aan je huidige investering (${valueRatio}%) ligt onder ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 158 + 168 @@ -7960,7 +8028,7 @@ De bijdrage van de Azië-Pacific markt aan je huidige investering (${valueRatio}%) ligt binnen het bereik van ${thresholdMin}% en ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 162 + 172 @@ -7968,7 +8036,7 @@ Opkomende markten apps/client/src/app/pages/i18n/i18n-page.html - 167 + 177 @@ -7976,7 +8044,7 @@ De bijdrage van de opkomende markten aan je huidige investering (${valueRatio}%) overschrijdt ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 170 + 180 @@ -7984,7 +8052,7 @@ De bijdrage van de opkomende markten aan je huidige investering (${valueRatio}%) ligt onder ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 174 + 184 @@ -7992,7 +8060,7 @@ De bijdrage van de opkomende markten aan je huidige investering (${valueRatio}%) ligt binnen het bereik van ${thresholdMin}% en ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 178 + 188 @@ -8000,7 +8068,7 @@ Europa apps/client/src/app/pages/i18n/i18n-page.html - 182 + 192 @@ -8008,7 +8076,7 @@ De bijdrage van de Europese markt aan je huidige investering (${valueRatio}%) overschrijdt ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 184 + 194 @@ -8016,7 +8084,7 @@ De bijdrage van de Europese markt aan je huidige investering (${valueRatio}%) ligt onder ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 188 + 198 @@ -8024,7 +8092,7 @@ De bijdrage van de Europese markt aan je huidige investering (${valueRatio}%) ligt binnen het bereik van ${thresholdMin}% en ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 192 + 202 @@ -8032,7 +8100,7 @@ Japan apps/client/src/app/pages/i18n/i18n-page.html - 196 + 206 @@ -8040,7 +8108,7 @@ De bijdrage van de Japanse markt aan je huidige investering (${valueRatio}%) overschrijdt ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 198 + 208 @@ -8048,7 +8116,7 @@ De bijdrage van de Japanse markt aan je huidige investering (${valueRatio}%) ligt onder ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 202 + 212 @@ -8056,7 +8124,7 @@ De bijdrage van de Japanse markt aan je huidige investering (${valueRatio}%) ligt binnen het bereik van ${thresholdMin}% en ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 206 + 216 @@ -8064,7 +8132,7 @@ Noord-Amerika apps/client/src/app/pages/i18n/i18n-page.html - 210 + 220 @@ -8072,7 +8140,7 @@ De bijdrage van de Noord-Amerikaanse markt aan je huidige investering (${valueRatio}%) overschrijdt ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 212 + 222 @@ -8080,7 +8148,7 @@ De bijdrage van de Noord-Amerikaanse markt aan je huidige investering (${valueRatio}%) ligt onder ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 216 + 226 @@ -8088,7 +8156,7 @@ De bijdrage van de Noord-Amerikaanse markt aan je huidige investering (${valueRatio}%) ligt binnen het bereik van ${thresholdMin}% en ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 220 + 230 diff --git a/apps/client/src/locales/messages.pl.xlf b/apps/client/src/locales/messages.pl.xlf index 0bb0033c3..012f5ff7b 100644 --- a/apps/client/src/locales/messages.pl.xlf +++ b/apps/client/src/locales/messages.pl.xlf @@ -287,7 +287,7 @@ Saldo Gotówkowe apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 47 + 46 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -303,7 +303,7 @@ Platforma apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 67 + 91 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -1679,7 +1679,7 @@ apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 213 + 237 @@ -2843,7 +2843,7 @@ Inwestycje apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 79 + 103 apps/client/src/app/components/home-holdings/home-holdings.html @@ -2939,7 +2939,7 @@ Oprogramowanie Open Source do Zarządzania Majątkiem apps/client/src/app/pages/i18n/i18n-page.html - 224 + 234 @@ -3327,11 +3327,11 @@ Aktywności apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 63 + 87 apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 92 + 116 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -3769,6 +3769,10 @@ Dividend Dywidenda + + apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html + 82 + apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html 187 @@ -3903,7 +3907,7 @@ Ryzyko związane z klastrem walutowym apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 93 + 117 @@ -3911,7 +3915,7 @@ Ryzyko związane z klastrem kont apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 141 + 165 @@ -4698,6 +4702,10 @@ Interest Udział + + apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html + 70 + apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html 295 @@ -4880,7 +4888,7 @@ apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 69 + 93 libs/ui/src/lib/i18n.ts @@ -5336,7 +5344,7 @@ Salda Gotówkowe apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 124 + 148 @@ -5452,7 +5460,7 @@ Dane rynkowe są opóźnione o apps/client/src/app/components/portfolio-performance/portfolio-performance.component.ts - 91 + 95 @@ -5775,6 +5783,10 @@ Liquidity Płynność środków finansowych + + apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html + 69 + libs/ui/src/lib/i18n.ts 49 @@ -6273,7 +6285,7 @@ Nieaktywny apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 232 + 256 @@ -6285,7 +6297,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 552 + 554 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6293,11 +6305,11 @@ apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html - 42 + 44 apps/client/src/app/components/admin-tag/create-or-update-tag-dialog/create-or-update-tag-dialog.html - 25 + 27 apps/client/src/app/components/home-watchlist/create-watchlist-item-dialog/create-watchlist-item-dialog.html @@ -6305,11 +6317,11 @@ apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html - 58 + 60 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 103 + 105 apps/client/src/app/pages/accounts/transfer-balance/transfer-balance-dialog.html @@ -6317,7 +6329,7 @@ apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html - 338 + 340 apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html @@ -6335,10 +6347,34 @@ Close Zamknij + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html + 556 + + + apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html + 46 + + + apps/client/src/app/components/admin-tag/create-or-update-tag-dialog/create-or-update-tag-dialog.html + 29 + apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html 129 + + apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html + 62 + + + apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html + 107 + + + apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html + 342 + libs/ui/src/lib/i18n.ts 11 @@ -6671,7 +6707,7 @@ Ryzyko związane z klastrem rynków gospodarczych apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 165 + 189 @@ -6791,7 +6827,7 @@ Zapisz apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 559 + 565 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6799,11 +6835,11 @@ apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html - 49 + 55 apps/client/src/app/components/admin-tag/create-or-update-tag-dialog/create-or-update-tag-dialog.html - 32 + 38 apps/client/src/app/components/home-watchlist/create-watchlist-item-dialog/create-watchlist-item-dialog.html @@ -6819,15 +6855,15 @@ apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html - 65 + 71 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 110 + 116 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html - 345 + 351 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html @@ -6839,7 +6875,7 @@ Ryzyko klastra klasy aktywów apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 117 + 141 @@ -6891,7 +6927,7 @@ Ryzyka klastrów regionalnych rynków apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 189 + 213 @@ -7333,7 +7369,7 @@ Fundusz awaryjny: Utworzenie apps/client/src/app/pages/i18n/i18n-page.html - 132 + 142 @@ -7341,7 +7377,7 @@ Nie utworzono funduszu awaryjnego apps/client/src/app/pages/i18n/i18n-page.html - 134 + 144 @@ -7349,7 +7385,7 @@ Utworzono fundusz awaryjny apps/client/src/app/pages/i18n/i18n-page.html - 137 + 147 @@ -7357,7 +7393,7 @@ Stosunek opłat apps/client/src/app/pages/i18n/i18n-page.html - 139 + 149 @@ -7365,7 +7401,7 @@ Opłaty przekraczają ${thresholdMax}% początkowej inwestycji (${feeRatio}%) apps/client/src/app/pages/i18n/i18n-page.html - 141 + 151 @@ -7373,7 +7409,7 @@ Opłaty nie przekraczają ${thresholdMax}% początkowej inwestycji (${feeRatio}%) apps/client/src/app/pages/i18n/i18n-page.html - 145 + 155 @@ -7647,7 +7683,7 @@ Inwestycja: Waluta bazowa apps/client/src/app/pages/i18n/i18n-page.html - 72 + 82 @@ -7655,7 +7691,7 @@ Główna część twojej bieżącej inwestycji nie jest w walucie bazowej (${baseCurrencyValueRatio}% w ${baseCurrency}) apps/client/src/app/pages/i18n/i18n-page.html - 75 + 85 @@ -7663,7 +7699,7 @@ Główna część twojej bieżącej inwestycji jest w walucie bazowej (${baseCurrencyValueRatio}% w ${baseCurrency}) apps/client/src/app/pages/i18n/i18n-page.html - 79 + 89 @@ -7671,7 +7707,7 @@ Inwestycja apps/client/src/app/pages/i18n/i18n-page.html - 82 + 92 @@ -7679,7 +7715,7 @@ Ponad ${thresholdMax}% Twojej obecnej inwestycji znajduje się w ${currency} (${maxValueRatio}%) apps/client/src/app/pages/i18n/i18n-page.html - 84 + 94 @@ -7687,7 +7723,7 @@ Główna część Twojej obecnej inwestycji znajduje się w ${currency} (${maxValueRatio}%) i nie przekracza ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 88 + 98 @@ -7808,7 +7844,7 @@ Currency Cluster Risks apps/client/src/app/pages/i18n/i18n-page.html - 70 + 80 @@ -7816,7 +7852,7 @@ Economic Market Cluster Risks apps/client/src/app/pages/i18n/i18n-page.html - 93 + 103 @@ -7824,7 +7860,7 @@ Emergency Fund apps/client/src/app/pages/i18n/i18n-page.html - 131 + 141 @@ -7832,7 +7868,39 @@ Fees apps/client/src/app/pages/i18n/i18n-page.html - 148 + 158 + + + + Liquidity + Liquidity + + apps/client/src/app/pages/i18n/i18n-page.html + 70 + + + + Buying Power + Buying Power + + apps/client/src/app/pages/i18n/i18n-page.html + 71 + + + + Your buying power is below ${thresholdMin} ${baseCurrency} + Your buying power is below ${thresholdMin} ${baseCurrency} + + apps/client/src/app/pages/i18n/i18n-page.html + 73 + + + + Your buying power exceeds ${thresholdMin} ${baseCurrency} + Your buying power exceeds ${thresholdMin} ${baseCurrency} + + apps/client/src/app/pages/i18n/i18n-page.html + 77 @@ -7840,7 +7908,7 @@ Regional Market Cluster Risks apps/client/src/app/pages/i18n/i18n-page.html - 150 + 160 @@ -7856,7 +7924,7 @@ Developed Markets apps/client/src/app/pages/i18n/i18n-page.html - 96 + 106 @@ -7864,7 +7932,7 @@ The developed markets contribution of your current investment (${developedMarketsValueRatio}%) exceeds ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 99 + 109 @@ -7872,7 +7940,7 @@ The developed markets contribution of your current investment (${developedMarketsValueRatio}%) is below ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 104 + 114 @@ -7880,7 +7948,7 @@ The developed markets contribution of your current investment (${developedMarketsValueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 109 + 119 @@ -7888,7 +7956,7 @@ Emerging Markets apps/client/src/app/pages/i18n/i18n-page.html - 114 + 124 @@ -7896,7 +7964,7 @@ The emerging markets contribution of your current investment (${emergingMarketsValueRatio}%) exceeds ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 117 + 127 @@ -7904,7 +7972,7 @@ The emerging markets contribution of your current investment (${emergingMarketsValueRatio}%) is below ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 122 + 132 @@ -7912,7 +7980,7 @@ The emerging markets contribution of your current investment (${emergingMarketsValueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 127 + 137 @@ -7936,7 +8004,7 @@ Asia-Pacific apps/client/src/app/pages/i18n/i18n-page.html - 152 + 162 @@ -7944,7 +8012,7 @@ The Asia-Pacific market contribution of your current investment (${valueRatio}%) exceeds ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 154 + 164 @@ -7952,7 +8020,7 @@ The Asia-Pacific market contribution of your current investment (${valueRatio}%) is below ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 158 + 168 @@ -7960,7 +8028,7 @@ The Asia-Pacific market contribution of your current investment (${valueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 162 + 172 @@ -7968,7 +8036,7 @@ Emerging Markets apps/client/src/app/pages/i18n/i18n-page.html - 167 + 177 @@ -7976,7 +8044,7 @@ The Emerging Markets contribution of your current investment (${valueRatio}%) exceeds ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 170 + 180 @@ -7984,7 +8052,7 @@ The Emerging Markets contribution of your current investment (${valueRatio}%) is below ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 174 + 184 @@ -7992,7 +8060,7 @@ The Emerging Markets contribution of your current investment (${valueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 178 + 188 @@ -8000,7 +8068,7 @@ Europe apps/client/src/app/pages/i18n/i18n-page.html - 182 + 192 @@ -8008,7 +8076,7 @@ The Europe market contribution of your current investment (${valueRatio}%) exceeds ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 184 + 194 @@ -8016,7 +8084,7 @@ The Europe market contribution of your current investment (${valueRatio}%) is below ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 188 + 198 @@ -8024,7 +8092,7 @@ The Europe market contribution of your current investment (${valueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 192 + 202 @@ -8032,7 +8100,7 @@ Japan apps/client/src/app/pages/i18n/i18n-page.html - 196 + 206 @@ -8040,7 +8108,7 @@ The Japan market contribution of your current investment (${valueRatio}%) exceeds ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 198 + 208 @@ -8048,7 +8116,7 @@ The Japan market contribution of your current investment (${valueRatio}%) is below ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 202 + 212 @@ -8056,7 +8124,7 @@ The Japan market contribution of your current investment (${valueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 206 + 216 @@ -8064,7 +8132,7 @@ North America apps/client/src/app/pages/i18n/i18n-page.html - 210 + 220 @@ -8072,7 +8140,7 @@ The North America market contribution of your current investment (${valueRatio}%) exceeds ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 212 + 222 @@ -8080,7 +8148,7 @@ The North America market contribution of your current investment (${valueRatio}%) is below ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 216 + 226 @@ -8088,7 +8156,7 @@ The North America market contribution of your current investment (${valueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 220 + 230 diff --git a/apps/client/src/locales/messages.pt.xlf b/apps/client/src/locales/messages.pt.xlf index 089f597cc..7176f6c53 100644 --- a/apps/client/src/locales/messages.pt.xlf +++ b/apps/client/src/locales/messages.pt.xlf @@ -78,7 +78,7 @@ Plataforma apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 67 + 91 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -194,7 +194,7 @@ Saldo disponível em dinheiro apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 47 + 46 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -1870,11 +1870,11 @@ Atividades apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 63 + 87 apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 92 + 116 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -2246,7 +2246,7 @@ Posições apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 79 + 103 apps/client/src/app/components/home-holdings/home-holdings.html @@ -2552,6 +2552,10 @@ Interest Juros + + apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html + 70 + apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html 295 @@ -2638,7 +2642,7 @@ apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 69 + 93 libs/ui/src/lib/i18n.ts @@ -2968,6 +2972,10 @@ Dividend Dividendos + + apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html + 82 + apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html 187 @@ -3414,7 +3422,7 @@ apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 213 + 237 @@ -5112,7 +5120,7 @@ Riscos de cluster monetário apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 93 + 117 @@ -5120,7 +5128,7 @@ Riscos de cluster de contas apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 141 + 165 @@ -5256,7 +5264,7 @@ Software de gerenciamento de patrimônio de código aberto apps/client/src/app/pages/i18n/i18n-page.html - 224 + 234 @@ -5336,7 +5344,7 @@ Saldos de caixa apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 124 + 148 @@ -5452,7 +5460,7 @@ Dados de mercado estão atrasados para apps/client/src/app/components/portfolio-performance/portfolio-performance.component.ts - 91 + 95 @@ -5775,6 +5783,10 @@ Liquidity Liquidez + + apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html + 69 + libs/ui/src/lib/i18n.ts 49 @@ -6273,7 +6285,7 @@ Inativo apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 232 + 256 @@ -6285,7 +6297,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 552 + 554 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6293,11 +6305,11 @@ apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html - 42 + 44 apps/client/src/app/components/admin-tag/create-or-update-tag-dialog/create-or-update-tag-dialog.html - 25 + 27 apps/client/src/app/components/home-watchlist/create-watchlist-item-dialog/create-watchlist-item-dialog.html @@ -6305,11 +6317,11 @@ apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html - 58 + 60 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 103 + 105 apps/client/src/app/pages/accounts/transfer-balance/transfer-balance-dialog.html @@ -6317,7 +6329,7 @@ apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html - 338 + 340 apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html @@ -6335,10 +6347,34 @@ Close Fechar + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html + 556 + + + apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html + 46 + + + apps/client/src/app/components/admin-tag/create-or-update-tag-dialog/create-or-update-tag-dialog.html + 29 + apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html 129 + + apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html + 62 + + + apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html + 107 + + + apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html + 342 + libs/ui/src/lib/i18n.ts 11 @@ -6671,7 +6707,7 @@ Riscos do Cluster do Mercado Econômico apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 165 + 189 @@ -6791,7 +6827,7 @@ Guardar apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 559 + 565 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6799,11 +6835,11 @@ apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html - 49 + 55 apps/client/src/app/components/admin-tag/create-or-update-tag-dialog/create-or-update-tag-dialog.html - 32 + 38 apps/client/src/app/components/home-watchlist/create-watchlist-item-dialog/create-watchlist-item-dialog.html @@ -6819,15 +6855,15 @@ apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html - 65 + 71 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 110 + 116 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html - 345 + 351 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html @@ -6839,7 +6875,7 @@ Riscos do Cluster de Classes de Ativos apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 117 + 141 @@ -6891,7 +6927,7 @@ Regional Market Cluster Risks apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 189 + 213 @@ -7333,7 +7369,7 @@ Set up apps/client/src/app/pages/i18n/i18n-page.html - 132 + 142 @@ -7341,7 +7377,7 @@ No emergency fund has been set up apps/client/src/app/pages/i18n/i18n-page.html - 134 + 144 @@ -7349,7 +7385,7 @@ An emergency fund has been set up apps/client/src/app/pages/i18n/i18n-page.html - 137 + 147 @@ -7357,7 +7393,7 @@ Fee Ratio apps/client/src/app/pages/i18n/i18n-page.html - 139 + 149 @@ -7365,7 +7401,7 @@ The fees do exceed ${thresholdMax}% of your initial investment (${feeRatio}%) apps/client/src/app/pages/i18n/i18n-page.html - 141 + 151 @@ -7373,7 +7409,7 @@ The fees do not exceed ${thresholdMax}% of your initial investment (${feeRatio}%) apps/client/src/app/pages/i18n/i18n-page.html - 145 + 155 @@ -7647,7 +7683,7 @@ Investment: Base Currency apps/client/src/app/pages/i18n/i18n-page.html - 72 + 82 @@ -7655,7 +7691,7 @@ The major part of your current investment is not in your base currency (${baseCurrencyValueRatio}% in ${baseCurrency}) apps/client/src/app/pages/i18n/i18n-page.html - 75 + 85 @@ -7663,7 +7699,7 @@ The major part of your current investment is in your base currency (${baseCurrencyValueRatio}% in ${baseCurrency}) apps/client/src/app/pages/i18n/i18n-page.html - 79 + 89 @@ -7671,7 +7707,7 @@ Investment apps/client/src/app/pages/i18n/i18n-page.html - 82 + 92 @@ -7679,7 +7715,7 @@ Over ${thresholdMax}% of your current investment is in ${currency} (${maxValueRatio}%) apps/client/src/app/pages/i18n/i18n-page.html - 84 + 94 @@ -7687,7 +7723,7 @@ The major part of your current investment is in ${currency} (${maxValueRatio}%) and does not exceed ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 88 + 98 @@ -7808,7 +7844,7 @@ Riscos de cluster monetário apps/client/src/app/pages/i18n/i18n-page.html - 70 + 80 @@ -7816,7 +7852,7 @@ Riscos de Cluster do Mercado Econômico apps/client/src/app/pages/i18n/i18n-page.html - 93 + 103 @@ -7824,7 +7860,7 @@ Fundo de Emergência apps/client/src/app/pages/i18n/i18n-page.html - 131 + 141 @@ -7832,7 +7868,39 @@ Tarifas apps/client/src/app/pages/i18n/i18n-page.html - 148 + 158 + + + + Liquidity + Liquidity + + apps/client/src/app/pages/i18n/i18n-page.html + 70 + + + + Buying Power + Buying Power + + apps/client/src/app/pages/i18n/i18n-page.html + 71 + + + + Your buying power is below ${thresholdMin} ${baseCurrency} + Your buying power is below ${thresholdMin} ${baseCurrency} + + apps/client/src/app/pages/i18n/i18n-page.html + 73 + + + + Your buying power exceeds ${thresholdMin} ${baseCurrency} + Your buying power exceeds ${thresholdMin} ${baseCurrency} + + apps/client/src/app/pages/i18n/i18n-page.html + 77 @@ -7840,7 +7908,7 @@ Riscos de cluster de mercado regional apps/client/src/app/pages/i18n/i18n-page.html - 150 + 160 @@ -7856,7 +7924,7 @@ Developed Markets apps/client/src/app/pages/i18n/i18n-page.html - 96 + 106 @@ -7864,7 +7932,7 @@ The developed markets contribution of your current investment (${developedMarketsValueRatio}%) exceeds ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 99 + 109 @@ -7872,7 +7940,7 @@ The developed markets contribution of your current investment (${developedMarketsValueRatio}%) is below ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 104 + 114 @@ -7880,7 +7948,7 @@ The developed markets contribution of your current investment (${developedMarketsValueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 109 + 119 @@ -7888,7 +7956,7 @@ Mercados Emergentes apps/client/src/app/pages/i18n/i18n-page.html - 114 + 124 @@ -7896,7 +7964,7 @@ The emerging markets contribution of your current investment (${emergingMarketsValueRatio}%) exceeds ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 117 + 127 @@ -7904,7 +7972,7 @@ The emerging markets contribution of your current investment (${emergingMarketsValueRatio}%) is below ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 122 + 132 @@ -7912,7 +7980,7 @@ The emerging markets contribution of your current investment (${emergingMarketsValueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 127 + 137 @@ -7936,7 +8004,7 @@ Ásia-Pacífico apps/client/src/app/pages/i18n/i18n-page.html - 152 + 162 @@ -7944,7 +8012,7 @@ The Asia-Pacific market contribution of your current investment (${valueRatio}%) exceeds ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 154 + 164 @@ -7952,7 +8020,7 @@ The Asia-Pacific market contribution of your current investment (${valueRatio}%) is below ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 158 + 168 @@ -7960,7 +8028,7 @@ The Asia-Pacific market contribution of your current investment (${valueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 162 + 172 @@ -7968,7 +8036,7 @@ Mercados Emergentes apps/client/src/app/pages/i18n/i18n-page.html - 167 + 177 @@ -7976,7 +8044,7 @@ The Emerging Markets contribution of your current investment (${valueRatio}%) exceeds ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 170 + 180 @@ -7984,7 +8052,7 @@ The Emerging Markets contribution of your current investment (${valueRatio}%) is below ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 174 + 184 @@ -7992,7 +8060,7 @@ The Emerging Markets contribution of your current investment (${valueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 178 + 188 @@ -8000,7 +8068,7 @@ Europa apps/client/src/app/pages/i18n/i18n-page.html - 182 + 192 @@ -8008,7 +8076,7 @@ The Europe market contribution of your current investment (${valueRatio}%) exceeds ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 184 + 194 @@ -8016,7 +8084,7 @@ The Europe market contribution of your current investment (${valueRatio}%) is below ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 188 + 198 @@ -8024,7 +8092,7 @@ The Europe market contribution of your current investment (${valueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 192 + 202 @@ -8032,7 +8100,7 @@ Japão apps/client/src/app/pages/i18n/i18n-page.html - 196 + 206 @@ -8040,7 +8108,7 @@ The Japan market contribution of your current investment (${valueRatio}%) exceeds ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 198 + 208 @@ -8048,7 +8116,7 @@ The Japan market contribution of your current investment (${valueRatio}%) is below ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 202 + 212 @@ -8056,7 +8124,7 @@ The Japan market contribution of your current investment (${valueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 206 + 216 @@ -8064,7 +8132,7 @@ América do Norte apps/client/src/app/pages/i18n/i18n-page.html - 210 + 220 @@ -8072,7 +8140,7 @@ The North America market contribution of your current investment (${valueRatio}%) exceeds ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 212 + 222 @@ -8080,7 +8148,7 @@ The North America market contribution of your current investment (${valueRatio}%) is below ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 216 + 226 @@ -8088,7 +8156,7 @@ The North America market contribution of your current investment (${valueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 220 + 230 diff --git a/apps/client/src/locales/messages.tr.xlf b/apps/client/src/locales/messages.tr.xlf index f2f3d512a..b6e5f8006 100644 --- a/apps/client/src/locales/messages.tr.xlf +++ b/apps/client/src/locales/messages.tr.xlf @@ -259,7 +259,7 @@ Nakit Bakiye apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 47 + 46 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -275,7 +275,7 @@ Platform apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 67 + 91 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -1651,7 +1651,7 @@ apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 213 + 237 @@ -2427,7 +2427,7 @@ Varlıklar apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 79 + 103 apps/client/src/app/components/home-holdings/home-holdings.html @@ -2859,11 +2859,11 @@ İşlemler apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 63 + 87 apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 92 + 116 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -3285,6 +3285,10 @@ Dividend Temettü + + apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html + 82 + apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html 187 @@ -4426,6 +4430,10 @@ Interest Faiz + + apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html + 70 + apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html 295 @@ -4608,7 +4616,7 @@ apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 69 + 93 libs/ui/src/lib/i18n.ts @@ -5112,7 +5120,7 @@ Kur Kümelenme Riskleri (Currency Cluster Risks) apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 93 + 117 @@ -5120,7 +5128,7 @@ Hesap Kümelenme Riski (Account Cluster Risks) apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 141 + 165 @@ -5256,7 +5264,7 @@ Açık Kaynak Varlık Yönetim Yazılımı apps/client/src/app/pages/i18n/i18n-page.html - 224 + 234 @@ -5336,7 +5344,7 @@ Nakit Bakiyeleri apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 124 + 148 @@ -5452,7 +5460,7 @@ Piyasa verileri gecikmeli apps/client/src/app/components/portfolio-performance/portfolio-performance.component.ts - 91 + 95 @@ -5775,6 +5783,10 @@ Liquidity Likidite + + apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html + 69 + libs/ui/src/lib/i18n.ts 49 @@ -6273,7 +6285,7 @@ Pasif apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 232 + 256 @@ -6285,7 +6297,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 552 + 554 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6293,11 +6305,11 @@ apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html - 42 + 44 apps/client/src/app/components/admin-tag/create-or-update-tag-dialog/create-or-update-tag-dialog.html - 25 + 27 apps/client/src/app/components/home-watchlist/create-watchlist-item-dialog/create-watchlist-item-dialog.html @@ -6305,11 +6317,11 @@ apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html - 58 + 60 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 103 + 105 apps/client/src/app/pages/accounts/transfer-balance/transfer-balance-dialog.html @@ -6317,7 +6329,7 @@ apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html - 338 + 340 apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html @@ -6335,10 +6347,34 @@ Close Kapat + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html + 556 + + + apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html + 46 + + + apps/client/src/app/components/admin-tag/create-or-update-tag-dialog/create-or-update-tag-dialog.html + 29 + apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html 129 + + apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html + 62 + + + apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html + 107 + + + apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html + 342 + libs/ui/src/lib/i18n.ts 11 @@ -6671,7 +6707,7 @@ Ekonomik Piyasa Küme Riskleri apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 165 + 189 @@ -6791,7 +6827,7 @@ Kaydet apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 559 + 565 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6799,11 +6835,11 @@ apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html - 49 + 55 apps/client/src/app/components/admin-tag/create-or-update-tag-dialog/create-or-update-tag-dialog.html - 32 + 38 apps/client/src/app/components/home-watchlist/create-watchlist-item-dialog/create-watchlist-item-dialog.html @@ -6819,15 +6855,15 @@ apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html - 65 + 71 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 110 + 116 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html - 345 + 351 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html @@ -6839,7 +6875,7 @@ Varlık Sınıfı Küme Riskleri apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 117 + 141 @@ -6891,7 +6927,7 @@ Bölgesel Piyasa Küme Riskleri apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 189 + 213 @@ -7333,7 +7369,7 @@ Acil Durum Fonu: Kurulum apps/client/src/app/pages/i18n/i18n-page.html - 132 + 142 @@ -7341,7 +7377,7 @@ Acil durum fonu oluşturulmadı apps/client/src/app/pages/i18n/i18n-page.html - 134 + 144 @@ -7349,7 +7385,7 @@ Acil durum fonu kuruldu apps/client/src/app/pages/i18n/i18n-page.html - 137 + 147 @@ -7357,7 +7393,7 @@ Ücret Oranı apps/client/src/app/pages/i18n/i18n-page.html - 139 + 149 @@ -7365,7 +7401,7 @@ Ücretler, ilk yatırımınızın %${thresholdMax} kadarını aşıyor (${feeRatio}%) apps/client/src/app/pages/i18n/i18n-page.html - 141 + 151 @@ -7373,7 +7409,7 @@ Ücretler, ilk yatırımınızın %${thresholdMax}’ını (${feeRatio}%) aşmaz apps/client/src/app/pages/i18n/i18n-page.html - 145 + 155 @@ -7647,7 +7683,7 @@ Yatırım: Baz Para Birimi apps/client/src/app/pages/i18n/i18n-page.html - 72 + 82 @@ -7655,7 +7691,7 @@ The major part of your current investment is not in your base currency (${baseCurrencyValueRatio}% in ${baseCurrency}) apps/client/src/app/pages/i18n/i18n-page.html - 75 + 85 @@ -7663,7 +7699,7 @@ The major part of your current investment is in your base currency (${baseCurrencyValueRatio}% in ${baseCurrency}) apps/client/src/app/pages/i18n/i18n-page.html - 79 + 89 @@ -7671,7 +7707,7 @@ Yatırım apps/client/src/app/pages/i18n/i18n-page.html - 82 + 92 @@ -7679,7 +7715,7 @@ Over ${thresholdMax}% of your current investment is in ${currency} (${maxValueRatio}%) apps/client/src/app/pages/i18n/i18n-page.html - 84 + 94 @@ -7687,7 +7723,7 @@ The major part of your current investment is in ${currency} (${maxValueRatio}%) and does not exceed ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 88 + 98 @@ -7808,7 +7844,7 @@ Currency Cluster Risks apps/client/src/app/pages/i18n/i18n-page.html - 70 + 80 @@ -7816,7 +7852,7 @@ Economic Market Cluster Risks apps/client/src/app/pages/i18n/i18n-page.html - 93 + 103 @@ -7824,7 +7860,7 @@ Emergency Fund apps/client/src/app/pages/i18n/i18n-page.html - 131 + 141 @@ -7832,7 +7868,39 @@ Fees apps/client/src/app/pages/i18n/i18n-page.html - 148 + 158 + + + + Liquidity + Liquidity + + apps/client/src/app/pages/i18n/i18n-page.html + 70 + + + + Buying Power + Buying Power + + apps/client/src/app/pages/i18n/i18n-page.html + 71 + + + + Your buying power is below ${thresholdMin} ${baseCurrency} + Your buying power is below ${thresholdMin} ${baseCurrency} + + apps/client/src/app/pages/i18n/i18n-page.html + 73 + + + + Your buying power exceeds ${thresholdMin} ${baseCurrency} + Your buying power exceeds ${thresholdMin} ${baseCurrency} + + apps/client/src/app/pages/i18n/i18n-page.html + 77 @@ -7840,7 +7908,7 @@ Regional Market Cluster Risks apps/client/src/app/pages/i18n/i18n-page.html - 150 + 160 @@ -7856,7 +7924,7 @@ Developed Markets apps/client/src/app/pages/i18n/i18n-page.html - 96 + 106 @@ -7864,7 +7932,7 @@ The developed markets contribution of your current investment (${developedMarketsValueRatio}%) exceeds ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 99 + 109 @@ -7872,7 +7940,7 @@ The developed markets contribution of your current investment (${developedMarketsValueRatio}%) is below ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 104 + 114 @@ -7880,7 +7948,7 @@ The developed markets contribution of your current investment (${developedMarketsValueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 109 + 119 @@ -7888,7 +7956,7 @@ Emerging Markets apps/client/src/app/pages/i18n/i18n-page.html - 114 + 124 @@ -7896,7 +7964,7 @@ The emerging markets contribution of your current investment (${emergingMarketsValueRatio}%) exceeds ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 117 + 127 @@ -7904,7 +7972,7 @@ The emerging markets contribution of your current investment (${emergingMarketsValueRatio}%) is below ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 122 + 132 @@ -7912,7 +7980,7 @@ The emerging markets contribution of your current investment (${emergingMarketsValueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 127 + 137 @@ -7936,7 +8004,7 @@ Asya-Pasifik apps/client/src/app/pages/i18n/i18n-page.html - 152 + 162 @@ -7944,7 +8012,7 @@ The Asia-Pacific market contribution of your current investment (${valueRatio}%) exceeds ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 154 + 164 @@ -7952,7 +8020,7 @@ The Asia-Pacific market contribution of your current investment (${valueRatio}%) is below ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 158 + 168 @@ -7960,7 +8028,7 @@ The Asia-Pacific market contribution of your current investment (${valueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 162 + 172 @@ -7968,7 +8036,7 @@ Gelişmekte Olan Piyasalar apps/client/src/app/pages/i18n/i18n-page.html - 167 + 177 @@ -7976,7 +8044,7 @@ The Emerging Markets contribution of your current investment (${valueRatio}%) exceeds ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 170 + 180 @@ -7984,7 +8052,7 @@ The Emerging Markets contribution of your current investment (${valueRatio}%) is below ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 174 + 184 @@ -7992,7 +8060,7 @@ The Emerging Markets contribution of your current investment (${valueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 178 + 188 @@ -8000,7 +8068,7 @@ Avrupa apps/client/src/app/pages/i18n/i18n-page.html - 182 + 192 @@ -8008,7 +8076,7 @@ The Europe market contribution of your current investment (${valueRatio}%) exceeds ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 184 + 194 @@ -8016,7 +8084,7 @@ The Europe market contribution of your current investment (${valueRatio}%) is below ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 188 + 198 @@ -8024,7 +8092,7 @@ The Europe market contribution of your current investment (${valueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 192 + 202 @@ -8032,7 +8100,7 @@ Japonya apps/client/src/app/pages/i18n/i18n-page.html - 196 + 206 @@ -8040,7 +8108,7 @@ The Japan market contribution of your current investment (${valueRatio}%) exceeds ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 198 + 208 @@ -8048,7 +8116,7 @@ The Japan market contribution of your current investment (${valueRatio}%) is below ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 202 + 212 @@ -8056,7 +8124,7 @@ The Japan market contribution of your current investment (${valueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 206 + 216 @@ -8064,7 +8132,7 @@ Kuzey Amerika apps/client/src/app/pages/i18n/i18n-page.html - 210 + 220 @@ -8072,7 +8140,7 @@ The North America market contribution of your current investment (${valueRatio}%) exceeds ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 212 + 222 @@ -8080,7 +8148,7 @@ The North America market contribution of your current investment (${valueRatio}%) is below ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 216 + 226 @@ -8088,7 +8156,7 @@ The North America market contribution of your current investment (${valueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 220 + 230 diff --git a/apps/client/src/locales/messages.uk.xlf b/apps/client/src/locales/messages.uk.xlf index 4640b930c..eedf4082d 100644 --- a/apps/client/src/locales/messages.uk.xlf +++ b/apps/client/src/locales/messages.uk.xlf @@ -371,7 +371,7 @@ Баланс готівки apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 47 + 46 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -387,7 +387,7 @@ Платформа apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 67 + 91 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -411,7 +411,7 @@ Баланс готівки apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 124 + 148 @@ -1771,7 +1771,7 @@ apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 213 + 237 @@ -2047,7 +2047,7 @@ Ринкові дані затримуються для apps/client/src/app/components/portfolio-performance/portfolio-performance.component.ts - 91 + 95 @@ -2155,7 +2155,7 @@ Зберегти apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 559 + 565 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -2163,11 +2163,11 @@ apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html - 49 + 55 apps/client/src/app/components/admin-tag/create-or-update-tag-dialog/create-or-update-tag-dialog.html - 32 + 38 apps/client/src/app/components/home-watchlist/create-watchlist-item-dialog/create-watchlist-item-dialog.html @@ -2183,15 +2183,15 @@ apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html - 65 + 71 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 110 + 116 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html - 345 + 351 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html @@ -3460,7 +3460,7 @@ Активи apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 79 + 103 apps/client/src/app/components/home-holdings/home-holdings.html @@ -3564,7 +3564,7 @@ Програмне забезпечення управління багатством з відкритим кодом apps/client/src/app/pages/i18n/i18n-page.html - 224 + 234 @@ -3960,11 +3960,11 @@ Активності apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 63 + 87 apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 92 + 116 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -4446,6 +4446,10 @@ Dividend Дивіденди + + apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html + 82 + apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html 187 @@ -4676,7 +4680,7 @@ Ризики зосередження валюти apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 93 + 117 @@ -4684,7 +4688,7 @@ Ризики зосередження класу активів apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 117 + 141 @@ -4692,7 +4696,7 @@ Ризики зосередження рахунків apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 141 + 165 @@ -4700,7 +4704,7 @@ Ризики зосередження економічного ринку apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 165 + 189 @@ -4708,7 +4712,7 @@ Неактивний apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 232 + 256 @@ -5973,6 +5977,10 @@ Interest Відсотки + + apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html + 70 + apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html 295 @@ -6143,7 +6151,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 552 + 554 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6151,11 +6159,11 @@ apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html - 42 + 44 apps/client/src/app/components/admin-tag/create-or-update-tag-dialog/create-or-update-tag-dialog.html - 25 + 27 apps/client/src/app/components/home-watchlist/create-watchlist-item-dialog/create-watchlist-item-dialog.html @@ -6163,11 +6171,11 @@ apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html - 58 + 60 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 103 + 105 apps/client/src/app/pages/accounts/transfer-balance/transfer-balance-dialog.html @@ -6175,7 +6183,7 @@ apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html - 338 + 340 apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html @@ -6201,10 +6209,34 @@ Close Закрити + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html + 556 + + + apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html + 46 + + + apps/client/src/app/components/admin-tag/create-or-update-tag-dialog/create-or-update-tag-dialog.html + 29 + apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html 129 + + apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html + 62 + + + apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html + 107 + + + apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html + 342 + libs/ui/src/lib/i18n.ts 11 @@ -6247,7 +6279,7 @@ apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 69 + 93 libs/ui/src/lib/i18n.ts @@ -6509,6 +6541,10 @@ Liquidity Ліквідність + + apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html + 69 + libs/ui/src/lib/i18n.ts 49 @@ -6891,7 +6927,7 @@ Regional Market Cluster Risks apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 189 + 213 @@ -7333,7 +7369,7 @@ Set up apps/client/src/app/pages/i18n/i18n-page.html - 132 + 142 @@ -7341,7 +7377,7 @@ No emergency fund has been set up apps/client/src/app/pages/i18n/i18n-page.html - 134 + 144 @@ -7349,7 +7385,7 @@ An emergency fund has been set up apps/client/src/app/pages/i18n/i18n-page.html - 137 + 147 @@ -7357,7 +7393,7 @@ Fee Ratio apps/client/src/app/pages/i18n/i18n-page.html - 139 + 149 @@ -7365,7 +7401,7 @@ The fees do exceed ${thresholdMax}% of your initial investment (${feeRatio}%) apps/client/src/app/pages/i18n/i18n-page.html - 141 + 151 @@ -7373,7 +7409,7 @@ The fees do not exceed ${thresholdMax}% of your initial investment (${feeRatio}%) apps/client/src/app/pages/i18n/i18n-page.html - 145 + 155 @@ -7647,7 +7683,7 @@ Investment: Base Currency apps/client/src/app/pages/i18n/i18n-page.html - 72 + 82 @@ -7655,7 +7691,7 @@ The major part of your current investment is not in your base currency (${baseCurrencyValueRatio}% in ${baseCurrency}) apps/client/src/app/pages/i18n/i18n-page.html - 75 + 85 @@ -7663,7 +7699,7 @@ The major part of your current investment is in your base currency (${baseCurrencyValueRatio}% in ${baseCurrency}) apps/client/src/app/pages/i18n/i18n-page.html - 79 + 89 @@ -7671,7 +7707,7 @@ Investment apps/client/src/app/pages/i18n/i18n-page.html - 82 + 92 @@ -7679,7 +7715,7 @@ Over ${thresholdMax}% of your current investment is in ${currency} (${maxValueRatio}%) apps/client/src/app/pages/i18n/i18n-page.html - 84 + 94 @@ -7687,7 +7723,7 @@ The major part of your current investment is in ${currency} (${maxValueRatio}%) and does not exceed ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 88 + 98 @@ -7808,7 +7844,7 @@ Currency Cluster Risks apps/client/src/app/pages/i18n/i18n-page.html - 70 + 80 @@ -7816,7 +7852,7 @@ Economic Market Cluster Risks apps/client/src/app/pages/i18n/i18n-page.html - 93 + 103 @@ -7824,7 +7860,7 @@ Emergency Fund apps/client/src/app/pages/i18n/i18n-page.html - 131 + 141 @@ -7832,7 +7868,39 @@ Fees apps/client/src/app/pages/i18n/i18n-page.html - 148 + 158 + + + + Liquidity + Liquidity + + apps/client/src/app/pages/i18n/i18n-page.html + 70 + + + + Buying Power + Buying Power + + apps/client/src/app/pages/i18n/i18n-page.html + 71 + + + + Your buying power is below ${thresholdMin} ${baseCurrency} + Your buying power is below ${thresholdMin} ${baseCurrency} + + apps/client/src/app/pages/i18n/i18n-page.html + 73 + + + + Your buying power exceeds ${thresholdMin} ${baseCurrency} + Your buying power exceeds ${thresholdMin} ${baseCurrency} + + apps/client/src/app/pages/i18n/i18n-page.html + 77 @@ -7840,7 +7908,7 @@ Regional Market Cluster Risks apps/client/src/app/pages/i18n/i18n-page.html - 150 + 160 @@ -7856,7 +7924,7 @@ Developed Markets apps/client/src/app/pages/i18n/i18n-page.html - 96 + 106 @@ -7864,7 +7932,7 @@ The developed markets contribution of your current investment (${developedMarketsValueRatio}%) exceeds ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 99 + 109 @@ -7872,7 +7940,7 @@ The developed markets contribution of your current investment (${developedMarketsValueRatio}%) is below ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 104 + 114 @@ -7880,7 +7948,7 @@ The developed markets contribution of your current investment (${developedMarketsValueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 109 + 119 @@ -7888,7 +7956,7 @@ Emerging Markets apps/client/src/app/pages/i18n/i18n-page.html - 114 + 124 @@ -7896,7 +7964,7 @@ The emerging markets contribution of your current investment (${emergingMarketsValueRatio}%) exceeds ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 117 + 127 @@ -7904,7 +7972,7 @@ The emerging markets contribution of your current investment (${emergingMarketsValueRatio}%) is below ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 122 + 132 @@ -7912,7 +7980,7 @@ The emerging markets contribution of your current investment (${emergingMarketsValueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 127 + 137 @@ -7936,7 +8004,7 @@ Asia-Pacific apps/client/src/app/pages/i18n/i18n-page.html - 152 + 162 @@ -7944,7 +8012,7 @@ The Asia-Pacific market contribution of your current investment (${valueRatio}%) exceeds ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 154 + 164 @@ -7952,7 +8020,7 @@ The Asia-Pacific market contribution of your current investment (${valueRatio}%) is below ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 158 + 168 @@ -7960,7 +8028,7 @@ The Asia-Pacific market contribution of your current investment (${valueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 162 + 172 @@ -7968,7 +8036,7 @@ Emerging Markets apps/client/src/app/pages/i18n/i18n-page.html - 167 + 177 @@ -7976,7 +8044,7 @@ The Emerging Markets contribution of your current investment (${valueRatio}%) exceeds ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 170 + 180 @@ -7984,7 +8052,7 @@ The Emerging Markets contribution of your current investment (${valueRatio}%) is below ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 174 + 184 @@ -7992,7 +8060,7 @@ The Emerging Markets contribution of your current investment (${valueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 178 + 188 @@ -8000,7 +8068,7 @@ Europe apps/client/src/app/pages/i18n/i18n-page.html - 182 + 192 @@ -8008,7 +8076,7 @@ The Europe market contribution of your current investment (${valueRatio}%) exceeds ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 184 + 194 @@ -8016,7 +8084,7 @@ The Europe market contribution of your current investment (${valueRatio}%) is below ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 188 + 198 @@ -8024,7 +8092,7 @@ The Europe market contribution of your current investment (${valueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 192 + 202 @@ -8032,7 +8100,7 @@ Japan apps/client/src/app/pages/i18n/i18n-page.html - 196 + 206 @@ -8040,7 +8108,7 @@ The Japan market contribution of your current investment (${valueRatio}%) exceeds ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 198 + 208 @@ -8048,7 +8116,7 @@ The Japan market contribution of your current investment (${valueRatio}%) is below ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 202 + 212 @@ -8056,7 +8124,7 @@ The Japan market contribution of your current investment (${valueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 206 + 216 @@ -8064,7 +8132,7 @@ North America apps/client/src/app/pages/i18n/i18n-page.html - 210 + 220 @@ -8072,7 +8140,7 @@ The North America market contribution of your current investment (${valueRatio}%) exceeds ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 212 + 222 @@ -8080,7 +8148,7 @@ The North America market contribution of your current investment (${valueRatio}%) is below ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 216 + 226 @@ -8088,7 +8156,7 @@ The North America market contribution of your current investment (${valueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 220 + 230 diff --git a/apps/client/src/locales/messages.xlf b/apps/client/src/locales/messages.xlf index d0a90df6f..26e9121c9 100644 --- a/apps/client/src/locales/messages.xlf +++ b/apps/client/src/locales/messages.xlf @@ -268,7 +268,7 @@ Cash Balance apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 47 + 46 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -283,7 +283,7 @@ Platform apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 67 + 91 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -298,7 +298,7 @@ Cash Balances apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 124 + 148 @@ -1572,7 +1572,7 @@ apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 213 + 237 @@ -2634,7 +2634,7 @@ Holdings apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 79 + 103 apps/client/src/app/components/home-holdings/home-holdings.html @@ -2725,7 +2725,7 @@ Open Source Wealth Management Software apps/client/src/app/pages/i18n/i18n-page.html - 224 + 234 @@ -3068,11 +3068,11 @@ Activities apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 63 + 87 apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 92 + 116 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -3467,6 +3467,10 @@ Dividend + + apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html + 82 + apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html 187 @@ -3587,14 +3591,14 @@ Currency Cluster Risks apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 93 + 117 Account Cluster Risks apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 141 + 165 @@ -4337,6 +4341,10 @@ Interest + + apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html + 70 + apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html 295 @@ -4507,7 +4515,7 @@ apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 69 + 93 libs/ui/src/lib/i18n.ts @@ -4980,7 +4988,7 @@ Market data is delayed for apps/client/src/app/components/portfolio-performance/portfolio-performance.component.ts - 91 + 95 @@ -5268,6 +5276,10 @@ Liquidity + + apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html + 69 + libs/ui/src/lib/i18n.ts 49 @@ -5701,7 +5713,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 552 + 554 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -5709,11 +5721,11 @@ apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html - 42 + 44 apps/client/src/app/components/admin-tag/create-or-update-tag-dialog/create-or-update-tag-dialog.html - 25 + 27 apps/client/src/app/components/home-watchlist/create-watchlist-item-dialog/create-watchlist-item-dialog.html @@ -5721,11 +5733,11 @@ apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html - 58 + 60 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 103 + 105 apps/client/src/app/pages/accounts/transfer-balance/transfer-balance-dialog.html @@ -5733,7 +5745,7 @@ apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html - 338 + 340 apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html @@ -5759,15 +5771,39 @@ Inactive apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 232 + 256 Close + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html + 556 + + + apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html + 46 + + + apps/client/src/app/components/admin-tag/create-or-update-tag-dialog/create-or-update-tag-dialog.html + 29 + apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html 129 + + apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html + 62 + + + apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html + 107 + + + apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html + 342 + libs/ui/src/lib/i18n.ts 11 @@ -6066,7 +6102,7 @@ Economic Market Cluster Risks apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 165 + 189 @@ -6178,7 +6214,7 @@ Save apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 559 + 565 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6186,11 +6222,11 @@ apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html - 49 + 55 apps/client/src/app/components/admin-tag/create-or-update-tag-dialog/create-or-update-tag-dialog.html - 32 + 38 apps/client/src/app/components/home-watchlist/create-watchlist-item-dialog/create-watchlist-item-dialog.html @@ -6206,15 +6242,15 @@ apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html - 65 + 71 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 110 + 116 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html - 345 + 351 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html @@ -6225,7 +6261,7 @@ Asset Class Cluster Risks apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 117 + 141 @@ -6271,7 +6307,7 @@ Regional Market Cluster Risks apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 189 + 213 @@ -6650,42 +6686,42 @@ Set up apps/client/src/app/pages/i18n/i18n-page.html - 132 + 142 No emergency fund has been set up apps/client/src/app/pages/i18n/i18n-page.html - 134 + 144 An emergency fund has been set up apps/client/src/app/pages/i18n/i18n-page.html - 137 + 147 Fee Ratio apps/client/src/app/pages/i18n/i18n-page.html - 139 + 149 The fees do exceed ${thresholdMax}% of your initial investment (${feeRatio}%) apps/client/src/app/pages/i18n/i18n-page.html - 141 + 151 The fees do not exceed ${thresholdMax}% of your initial investment (${feeRatio}%) apps/client/src/app/pages/i18n/i18n-page.html - 145 + 155 @@ -6921,42 +6957,42 @@ Investment: Base Currency apps/client/src/app/pages/i18n/i18n-page.html - 72 + 82 The major part of your current investment is not in your base currency (${baseCurrencyValueRatio}% in ${baseCurrency}) apps/client/src/app/pages/i18n/i18n-page.html - 75 + 85 The major part of your current investment is in your base currency (${baseCurrencyValueRatio}% in ${baseCurrency}) apps/client/src/app/pages/i18n/i18n-page.html - 79 + 89 Investment apps/client/src/app/pages/i18n/i18n-page.html - 82 + 92 Over ${thresholdMax}% of your current investment is in ${currency} (${maxValueRatio}%) apps/client/src/app/pages/i18n/i18n-page.html - 84 + 94 The major part of your current investment is in ${currency} (${maxValueRatio}%) and does not exceed ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 88 + 98 @@ -7071,91 +7107,119 @@ Currency Cluster Risks apps/client/src/app/pages/i18n/i18n-page.html - 70 + 80 Economic Market Cluster Risks apps/client/src/app/pages/i18n/i18n-page.html - 93 + 103 Emergency Fund apps/client/src/app/pages/i18n/i18n-page.html - 131 + 141 Fees apps/client/src/app/pages/i18n/i18n-page.html - 148 + 158 + + + + Liquidity + + apps/client/src/app/pages/i18n/i18n-page.html + 70 + + + + Buying Power + + apps/client/src/app/pages/i18n/i18n-page.html + 71 + + + + Your buying power is below ${thresholdMin} ${baseCurrency} + + apps/client/src/app/pages/i18n/i18n-page.html + 73 + + + + Your buying power exceeds ${thresholdMin} ${baseCurrency} + + apps/client/src/app/pages/i18n/i18n-page.html + 77 Regional Market Cluster Risks apps/client/src/app/pages/i18n/i18n-page.html - 150 + 160 Developed Markets apps/client/src/app/pages/i18n/i18n-page.html - 96 + 106 The developed markets contribution of your current investment (${developedMarketsValueRatio}%) exceeds ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 99 + 109 The developed markets contribution of your current investment (${developedMarketsValueRatio}%) is below ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 104 + 114 The developed markets contribution of your current investment (${developedMarketsValueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 109 + 119 Emerging Markets apps/client/src/app/pages/i18n/i18n-page.html - 114 + 124 The emerging markets contribution of your current investment (${emergingMarketsValueRatio}%) exceeds ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 117 + 127 The emerging markets contribution of your current investment (${emergingMarketsValueRatio}%) is below ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 122 + 132 The emerging markets contribution of your current investment (${emergingMarketsValueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 127 + 137 @@ -7176,140 +7240,140 @@ Asia-Pacific apps/client/src/app/pages/i18n/i18n-page.html - 152 + 162 The Asia-Pacific market contribution of your current investment (${valueRatio}%) exceeds ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 154 + 164 The Asia-Pacific market contribution of your current investment (${valueRatio}%) is below ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 158 + 168 The Asia-Pacific market contribution of your current investment (${valueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 162 + 172 Emerging Markets apps/client/src/app/pages/i18n/i18n-page.html - 167 + 177 The Emerging Markets contribution of your current investment (${valueRatio}%) exceeds ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 170 + 180 The Emerging Markets contribution of your current investment (${valueRatio}%) is below ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 174 + 184 The Emerging Markets contribution of your current investment (${valueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 178 + 188 Europe apps/client/src/app/pages/i18n/i18n-page.html - 182 + 192 The Europe market contribution of your current investment (${valueRatio}%) exceeds ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 184 + 194 The Europe market contribution of your current investment (${valueRatio}%) is below ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 188 + 198 The Europe market contribution of your current investment (${valueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 192 + 202 Japan apps/client/src/app/pages/i18n/i18n-page.html - 196 + 206 The Japan market contribution of your current investment (${valueRatio}%) exceeds ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 198 + 208 The Japan market contribution of your current investment (${valueRatio}%) is below ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 202 + 212 The Japan market contribution of your current investment (${valueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 206 + 216 North America apps/client/src/app/pages/i18n/i18n-page.html - 210 + 220 The North America market contribution of your current investment (${valueRatio}%) exceeds ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 212 + 222 The North America market contribution of your current investment (${valueRatio}%) is below ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 216 + 226 The North America market contribution of your current investment (${valueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 220 + 230 diff --git a/apps/client/src/locales/messages.zh.xlf b/apps/client/src/locales/messages.zh.xlf index 059770e0c..91beba25a 100644 --- a/apps/client/src/locales/messages.zh.xlf +++ b/apps/client/src/locales/messages.zh.xlf @@ -288,7 +288,7 @@ 现金余额 apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 47 + 46 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -304,7 +304,7 @@ 平台 apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 67 + 91 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -320,7 +320,7 @@ 现金余额 apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 124 + 148 @@ -1688,7 +1688,7 @@ apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 213 + 237 @@ -2852,7 +2852,7 @@ 持仓 apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 79 + 103 apps/client/src/app/components/home-holdings/home-holdings.html @@ -2948,7 +2948,7 @@ 开源财富管理软件 apps/client/src/app/pages/i18n/i18n-page.html - 224 + 234 @@ -3336,11 +3336,11 @@ 活动 apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 63 + 87 apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 92 + 116 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -3778,6 +3778,10 @@ Dividend 股息 + + apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html + 82 + apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html 187 @@ -3912,7 +3916,7 @@ 货币集群风险 apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 93 + 117 @@ -3920,7 +3924,7 @@ 账户集群风险 apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 141 + 165 @@ -4743,6 +4747,10 @@ Interest 利息 + + apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html + 70 + apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html 295 @@ -4925,7 +4933,7 @@ apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 69 + 93 libs/ui/src/lib/i18n.ts @@ -5453,7 +5461,7 @@ 市场数据延迟 apps/client/src/app/components/portfolio-performance/portfolio-performance.component.ts - 91 + 95 @@ -5776,6 +5784,10 @@ Liquidity 流动性 + + apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html + 69 + libs/ui/src/lib/i18n.ts 49 @@ -6274,7 +6286,7 @@ 非活跃 apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 232 + 256 @@ -6286,7 +6298,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 552 + 554 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6294,11 +6306,11 @@ apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html - 42 + 44 apps/client/src/app/components/admin-tag/create-or-update-tag-dialog/create-or-update-tag-dialog.html - 25 + 27 apps/client/src/app/components/home-watchlist/create-watchlist-item-dialog/create-watchlist-item-dialog.html @@ -6306,11 +6318,11 @@ apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html - 58 + 60 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 103 + 105 apps/client/src/app/pages/accounts/transfer-balance/transfer-balance-dialog.html @@ -6318,7 +6330,7 @@ apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html - 338 + 340 apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html @@ -6336,10 +6348,34 @@ Close 关闭 + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html + 556 + + + apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html + 46 + + + apps/client/src/app/components/admin-tag/create-or-update-tag-dialog/create-or-update-tag-dialog.html + 29 + apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html 129 + + apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html + 62 + + + apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html + 107 + + + apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html + 342 + libs/ui/src/lib/i18n.ts 11 @@ -6672,7 +6708,7 @@ 经济市场集群风险 apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 165 + 189 @@ -6792,7 +6828,7 @@ 保存 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 559 + 565 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6800,11 +6836,11 @@ apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html - 49 + 55 apps/client/src/app/components/admin-tag/create-or-update-tag-dialog/create-or-update-tag-dialog.html - 32 + 38 apps/client/src/app/components/home-watchlist/create-watchlist-item-dialog/create-watchlist-item-dialog.html @@ -6820,15 +6856,15 @@ apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html - 65 + 71 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 110 + 116 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html - 345 + 351 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html @@ -6840,7 +6876,7 @@ 资产类别集群风险 apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 117 + 141 @@ -6892,7 +6928,7 @@ 区域市场集群风险 apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html - 189 + 213 @@ -7334,7 +7370,7 @@ 应急资金:设置 apps/client/src/app/pages/i18n/i18n-page.html - 132 + 142 @@ -7342,7 +7378,7 @@ 未设置应急资金 apps/client/src/app/pages/i18n/i18n-page.html - 134 + 144 @@ -7350,7 +7386,7 @@ 已设置应急资金 apps/client/src/app/pages/i18n/i18n-page.html - 137 + 147 @@ -7358,7 +7394,7 @@ 费率 apps/client/src/app/pages/i18n/i18n-page.html - 139 + 149 @@ -7366,7 +7402,7 @@ 费用超过了您初始投资的 ${thresholdMax}% (${feeRatio}%) apps/client/src/app/pages/i18n/i18n-page.html - 141 + 151 @@ -7374,7 +7410,7 @@ 费用未超过您初始投资的 ${thresholdMax}% (${feeRatio}%) apps/client/src/app/pages/i18n/i18n-page.html - 145 + 155 @@ -7648,7 +7684,7 @@ 投资:基础货币 apps/client/src/app/pages/i18n/i18n-page.html - 72 + 82 @@ -7656,7 +7692,7 @@ 您的当前投资的主要部分未以您的基础货币计价 ( ${baseCurrency} 仅占 ${baseCurrencyValueRatio}%) apps/client/src/app/pages/i18n/i18n-page.html - 75 + 85 @@ -7664,7 +7700,7 @@ 您的当前投资的主要部分以您的基础货币计价(其中 ${baseCurrency} 占比 ${baseCurrencyValueRatio}%) apps/client/src/app/pages/i18n/i18n-page.html - 79 + 89 @@ -7672,7 +7708,7 @@ 投资 apps/client/src/app/pages/i18n/i18n-page.html - 82 + 92 @@ -7680,7 +7716,7 @@ 超过 ${thresholdMax}% 的当前投资在 ${currency} 中(占比 ${maxValueRatio}%) apps/client/src/app/pages/i18n/i18n-page.html - 84 + 94 @@ -7688,7 +7724,7 @@ 您的当前投资的主要部分以 ${currency} 计价(占比 ${maxValueRatio}%),并且未超过 ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 88 + 98 @@ -7809,7 +7845,7 @@ 货币集群风险 apps/client/src/app/pages/i18n/i18n-page.html - 70 + 80 @@ -7817,7 +7853,7 @@ 经济市场集群风险 apps/client/src/app/pages/i18n/i18n-page.html - 93 + 103 @@ -7825,7 +7861,7 @@ 应急基金 apps/client/src/app/pages/i18n/i18n-page.html - 131 + 141 @@ -7833,7 +7869,39 @@ 费用 apps/client/src/app/pages/i18n/i18n-page.html - 148 + 158 + + + + Liquidity + Liquidity + + apps/client/src/app/pages/i18n/i18n-page.html + 70 + + + + Buying Power + Buying Power + + apps/client/src/app/pages/i18n/i18n-page.html + 71 + + + + Your buying power is below ${thresholdMin} ${baseCurrency} + Your buying power is below ${thresholdMin} ${baseCurrency} + + apps/client/src/app/pages/i18n/i18n-page.html + 73 + + + + Your buying power exceeds ${thresholdMin} ${baseCurrency} + Your buying power exceeds ${thresholdMin} ${baseCurrency} + + apps/client/src/app/pages/i18n/i18n-page.html + 77 @@ -7841,7 +7909,7 @@ 区域市场集群风险 apps/client/src/app/pages/i18n/i18n-page.html - 150 + 160 @@ -7857,7 +7925,7 @@ 发达市场 apps/client/src/app/pages/i18n/i18n-page.html - 96 + 106 @@ -7865,7 +7933,7 @@ 发达市场对您的当前投资 (${developedMarketsValueRatio}%) 的贡献超过了 ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 99 + 109 @@ -7873,7 +7941,7 @@ 发达市场对您的当前投资 (${developedMarketsValueRatio}%) 的贡献低于 ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 104 + 114 @@ -7881,7 +7949,7 @@ 发达市场对您的当前投资 (${developedMarketsValueRatio}%) 的贡献在 ${thresholdMin}% 和 ${thresholdMax}% 之间 apps/client/src/app/pages/i18n/i18n-page.html - 109 + 119 @@ -7889,7 +7957,7 @@ 新兴市场 apps/client/src/app/pages/i18n/i18n-page.html - 114 + 124 @@ -7897,7 +7965,7 @@ 新兴市场对您的当前投资 (${emergingMarketsValueRatio}%) 的贡献超过了 ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 117 + 127 @@ -7905,7 +7973,7 @@ 新兴市场对您的当前投资 (${emergingMarketsValueRatio}%) 的贡献低于 ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 122 + 132 @@ -7913,7 +7981,7 @@ 新兴市场对您的当前投资 (${emergingMarketsValueRatio}%) 的贡献在 ${thresholdMin}% 和 ${thresholdMax}% 之间 apps/client/src/app/pages/i18n/i18n-page.html - 127 + 137 @@ -7937,7 +8005,7 @@ 亚太地区 apps/client/src/app/pages/i18n/i18n-page.html - 152 + 162 @@ -7945,7 +8013,7 @@ 亚太地区对您的当前投资 (${valueRatio}%) 的贡献超过了 ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 154 + 164 @@ -7953,7 +8021,7 @@ 亚太地区对您的当前投资 (${valueRatio}%) 的贡献低于 ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 158 + 168 @@ -7961,7 +8029,7 @@ 亚太地区对您的当前投资 (${valueRatio}%) 的贡献在 ${thresholdMin}% 和 ${thresholdMax}% 之间 apps/client/src/app/pages/i18n/i18n-page.html - 162 + 172 @@ -7969,7 +8037,7 @@ 新兴市场 apps/client/src/app/pages/i18n/i18n-page.html - 167 + 177 @@ -7977,7 +8045,7 @@ 新兴市场对您的当前投资 (${valueRatio}%) 的贡献超过了 ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 170 + 180 @@ -7985,7 +8053,7 @@ 新兴市场对您的当前投资 (${valueRatio}%) 的贡献低于 ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 174 + 184 @@ -7993,7 +8061,7 @@ 新兴市场对您的当前投资 (${valueRatio}%) 的贡献在 ${thresholdMin}% 和 ${thresholdMax}% 之间 apps/client/src/app/pages/i18n/i18n-page.html - 178 + 188 @@ -8001,7 +8069,7 @@ 欧洲市场 apps/client/src/app/pages/i18n/i18n-page.html - 182 + 192 @@ -8009,7 +8077,7 @@ 欧洲市场对您的当前投资 (${valueRatio}%) 的贡献超过了 ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 184 + 194 @@ -8017,7 +8085,7 @@ 欧洲市场对您的当前投资 (${valueRatio}%) 的贡献低于 ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 188 + 198 @@ -8025,7 +8093,7 @@ 欧洲市场对您的当前投资 (${valueRatio}%) 的贡献在 ${thresholdMin}% 和 ${thresholdMax}% 之间 apps/client/src/app/pages/i18n/i18n-page.html - 192 + 202 @@ -8033,7 +8101,7 @@ 日本市场 apps/client/src/app/pages/i18n/i18n-page.html - 196 + 206 @@ -8041,7 +8109,7 @@ 日本市场对您的当前投资 (${valueRatio}%) 的贡献超过了 ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 198 + 208 @@ -8049,7 +8117,7 @@ 日本市场对您的当前投资 (${valueRatio}%) 的贡献低于 ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 202 + 212 @@ -8057,7 +8125,7 @@ 日本市场对您的当前投资 (${valueRatio}%) 的贡献在 ${thresholdMin}% 和 ${thresholdMax}% 之间 apps/client/src/app/pages/i18n/i18n-page.html - 206 + 216 @@ -8065,7 +8133,7 @@ 北美市场 apps/client/src/app/pages/i18n/i18n-page.html - 210 + 220 @@ -8073,7 +8141,7 @@ 北美市场对您的当前投资 (${valueRatio}%) 的贡献超过了 ${thresholdMax}% apps/client/src/app/pages/i18n/i18n-page.html - 212 + 222 @@ -8081,7 +8149,7 @@ 北美市场对您的当前投资 (${valueRatio}%) 的贡献低于 ${thresholdMin}% apps/client/src/app/pages/i18n/i18n-page.html - 216 + 226 @@ -8089,7 +8157,7 @@ 北美市场对您的当前投资 (${valueRatio}%) 的贡献在 ${thresholdMin}% 和 ${thresholdMax}% 之间 apps/client/src/app/pages/i18n/i18n-page.html - 220 + 230 From baed2635c85436fd2951e472c2f0b2ddf5892636 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Thu, 14 Aug 2025 20:59:27 +0200 Subject: [PATCH 27/62] Release 2.191.0 (#5366) --- CHANGELOG.md | 2 +- package-lock.json | 4 ++-- package.json | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0bb960cfb..03a83fd4f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,7 +5,7 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## Unreleased +## 2.191.0 - 2025-08-14 ### Added diff --git a/package-lock.json b/package-lock.json index d602ddc31..050f7884a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "ghostfolio", - "version": "2.190.0", + "version": "2.191.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "ghostfolio", - "version": "2.190.0", + "version": "2.191.0", "hasInstallScript": true, "license": "AGPL-3.0", "dependencies": { diff --git a/package.json b/package.json index 208f3d15d..79500b768 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ghostfolio", - "version": "2.190.0", + "version": "2.191.0", "homepage": "https://ghostfol.io", "license": "AGPL-3.0", "repository": "https://github.com/ghostfolio/ghostfolio", From 7d1300bea12830750528b685ab246a0561125d2f Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Thu, 14 Aug 2025 22:22:46 +0200 Subject: [PATCH 28/62] Bugfix/add missing guards in getSettings() of static portfolio analysis rules (#5368) * Add missing guards --- .../src/models/rules/account-cluster-risk/current-investment.ts | 2 +- .../api/src/models/rules/account-cluster-risk/single-account.ts | 2 +- .../currency-cluster-risk/base-currency-current-investment.ts | 2 +- .../models/rules/currency-cluster-risk/current-investment.ts | 2 +- .../api/src/models/rules/emergency-fund/emergency-fund-setup.ts | 2 +- apps/api/src/models/rules/fees/fee-ratio-initial-investment.ts | 2 +- apps/api/src/models/rules/liquidity/buying-power.ts | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/apps/api/src/models/rules/account-cluster-risk/current-investment.ts b/apps/api/src/models/rules/account-cluster-risk/current-investment.ts index dbf3fee4d..0601eea9a 100644 --- a/apps/api/src/models/rules/account-cluster-risk/current-investment.ts +++ b/apps/api/src/models/rules/account-cluster-risk/current-investment.ts @@ -124,7 +124,7 @@ export class AccountClusterRiskCurrentInvestment extends Rule { public getSettings({ baseCurrency, xRayRules }: UserSettings): Settings { return { baseCurrency, - isActive: xRayRules?.[this.getKey()].isActive ?? true, + isActive: xRayRules?.[this.getKey()]?.isActive ?? true, thresholdMax: xRayRules?.[this.getKey()]?.thresholdMax ?? 0.5 }; } diff --git a/apps/api/src/models/rules/account-cluster-risk/single-account.ts b/apps/api/src/models/rules/account-cluster-risk/single-account.ts index 6045e5892..8890bb767 100644 --- a/apps/api/src/models/rules/account-cluster-risk/single-account.ts +++ b/apps/api/src/models/rules/account-cluster-risk/single-account.ts @@ -74,7 +74,7 @@ export class AccountClusterRiskSingleAccount extends Rule { public getSettings({ xRayRules }: UserSettings): RuleSettings { return { - isActive: xRayRules?.[this.getKey()].isActive ?? true + isActive: xRayRules?.[this.getKey()]?.isActive ?? true }; } } diff --git a/apps/api/src/models/rules/currency-cluster-risk/base-currency-current-investment.ts b/apps/api/src/models/rules/currency-cluster-risk/base-currency-current-investment.ts index c427a842e..2c2b6c4d6 100644 --- a/apps/api/src/models/rules/currency-cluster-risk/base-currency-current-investment.ts +++ b/apps/api/src/models/rules/currency-cluster-risk/base-currency-current-investment.ts @@ -100,7 +100,7 @@ export class CurrencyClusterRiskBaseCurrencyCurrentInvestment extends Rule { public getSettings({ baseCurrency, xRayRules }: UserSettings): Settings { return { baseCurrency, - isActive: xRayRules?.[this.getKey()].isActive ?? true, + isActive: xRayRules?.[this.getKey()]?.isActive ?? true, thresholdMax: xRayRules?.[this.getKey()]?.thresholdMax ?? 0.5 }; } diff --git a/apps/api/src/models/rules/emergency-fund/emergency-fund-setup.ts b/apps/api/src/models/rules/emergency-fund/emergency-fund-setup.ts index 1de51d0e7..d97805fa6 100644 --- a/apps/api/src/models/rules/emergency-fund/emergency-fund-setup.ts +++ b/apps/api/src/models/rules/emergency-fund/emergency-fund-setup.ts @@ -62,7 +62,7 @@ export class EmergencyFundSetup extends Rule { public getSettings({ baseCurrency, xRayRules }: UserSettings): Settings { return { baseCurrency, - isActive: xRayRules?.[this.getKey()].isActive ?? true + isActive: xRayRules?.[this.getKey()]?.isActive ?? true }; } } diff --git a/apps/api/src/models/rules/fees/fee-ratio-initial-investment.ts b/apps/api/src/models/rules/fees/fee-ratio-initial-investment.ts index 805b86fd4..93c9aafd3 100644 --- a/apps/api/src/models/rules/fees/fee-ratio-initial-investment.ts +++ b/apps/api/src/models/rules/fees/fee-ratio-initial-investment.ts @@ -85,7 +85,7 @@ export class FeeRatioInitialInvestment extends Rule { public getSettings({ baseCurrency, xRayRules }: UserSettings): Settings { return { baseCurrency, - isActive: xRayRules?.[this.getKey()].isActive ?? true, + isActive: xRayRules?.[this.getKey()]?.isActive ?? true, thresholdMax: xRayRules?.[this.getKey()]?.thresholdMax ?? 0.01 }; } diff --git a/apps/api/src/models/rules/liquidity/buying-power.ts b/apps/api/src/models/rules/liquidity/buying-power.ts index a8b74f354..c4884c066 100644 --- a/apps/api/src/models/rules/liquidity/buying-power.ts +++ b/apps/api/src/models/rules/liquidity/buying-power.ts @@ -78,7 +78,7 @@ export class BuyingPower extends Rule { public getSettings({ baseCurrency, xRayRules }: UserSettings): Settings { return { baseCurrency, - isActive: xRayRules?.[this.getKey()].isActive ?? true, + isActive: xRayRules?.[this.getKey()]?.isActive ?? true, thresholdMin: xRayRules?.[this.getKey()]?.thresholdMin ?? 0 }; } From 456f57cebd994d30f502d1236af02102c0394d6b Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Thu, 14 Aug 2025 22:24:13 +0200 Subject: [PATCH 29/62] Release 2.191.1 (#5369) --- CHANGELOG.md | 2 +- package-lock.json | 4 ++-- package.json | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 03a83fd4f..c1e38d81d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,7 +5,7 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## 2.191.0 - 2025-08-14 +## 2.191.1 - 2025-08-14 ### Added diff --git a/package-lock.json b/package-lock.json index 050f7884a..b65f53169 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "ghostfolio", - "version": "2.191.0", + "version": "2.191.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "ghostfolio", - "version": "2.191.0", + "version": "2.191.1", "hasInstallScript": true, "license": "AGPL-3.0", "dependencies": { diff --git a/package.json b/package.json index 79500b768..a1b445e71 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ghostfolio", - "version": "2.191.0", + "version": "2.191.1", "homepage": "https://ghostfol.io", "license": "AGPL-3.0", "repository": "https://github.com/ghostfolio/ghostfolio", From 923e3edb1259a0178723d07e855193c817c09cb4 Mon Sep 17 00:00:00 2001 From: Kenrick Tandrian <60643640+KenTandrian@users.noreply.github.com> Date: Sat, 16 Aug 2025 00:45:39 +0700 Subject: [PATCH 30/62] Task/migrate prompt dialog component from ngModel to form control (#5364) * Migrate prompt dialog component from ngModel to form control * Update changelog --- CHANGELOG.md | 6 ++++++ .../prompt-dialog/prompt-dialog.component.ts | 10 +++++----- .../core/notification/prompt-dialog/prompt-dialog.html | 9 +++++++-- 3 files changed, 18 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c1e38d81d..2d84426e2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,12 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## Unreleased + +### Changed + +- Migrated the prompt dialog component from `ngModel` to form control + ## 2.191.1 - 2025-08-14 ### Added diff --git a/apps/client/src/app/core/notification/prompt-dialog/prompt-dialog.component.ts b/apps/client/src/app/core/notification/prompt-dialog/prompt-dialog.component.ts index 6c8af4197..6ea68d863 100644 --- a/apps/client/src/app/core/notification/prompt-dialog/prompt-dialog.component.ts +++ b/apps/client/src/app/core/notification/prompt-dialog/prompt-dialog.component.ts @@ -1,5 +1,5 @@ import { Component } from '@angular/core'; -import { FormsModule } from '@angular/forms'; +import { FormControl, ReactiveFormsModule } from '@angular/forms'; import { MatButtonModule } from '@angular/material/button'; import { MatDialogModule, MatDialogRef } from '@angular/material/dialog'; import { MatFormFieldModule } from '@angular/material/form-field'; @@ -7,11 +7,11 @@ import { MatInputModule } from '@angular/material/input'; @Component({ imports: [ - FormsModule, MatButtonModule, MatDialogModule, MatFormFieldModule, - MatInputModule + MatInputModule, + ReactiveFormsModule ], selector: 'gf-prompt-dialog', templateUrl: './prompt-dialog.html' @@ -20,8 +20,8 @@ export class GfPromptDialogComponent { public confirmLabel: string; public defaultValue: string; public discardLabel: string; + public formControl = new FormControl(''); public title: string; - public value: string; public valueLabel: string; public constructor(public dialogRef: MatDialogRef) {} @@ -36,8 +36,8 @@ export class GfPromptDialogComponent { this.confirmLabel = aParams.confirmLabel; this.defaultValue = aParams.defaultValue; this.discardLabel = aParams.discardLabel; + this.formControl.setValue(aParams.defaultValue); this.title = aParams.title; - this.value = aParams.defaultValue; this.valueLabel = aParams.valueLabel; } } diff --git a/apps/client/src/app/core/notification/prompt-dialog/prompt-dialog.html b/apps/client/src/app/core/notification/prompt-dialog/prompt-dialog.html index 5568cfdae..d73c8dabb 100644 --- a/apps/client/src/app/core/notification/prompt-dialog/prompt-dialog.html +++ b/apps/client/src/app/core/notification/prompt-dialog/prompt-dialog.html @@ -7,7 +7,7 @@ @if (valueLabel) { {{ valueLabel }} } - +
    @@ -15,7 +15,12 @@ - From 473c474845e784b981a06992081e1b35140e58bc Mon Sep 17 00:00:00 2001 From: David Requeno <108202767+DavidReque@users.noreply.github.com> Date: Fri, 15 Aug 2025 12:22:32 -0600 Subject: [PATCH 31/62] Feature/extend search in assistant by accounts (#5356) * Extend search in assistant by accounts * Update changelog --- CHANGELOG.md | 4 ++ .../assistant-list-item.component.ts | 17 +++-- .../src/lib/assistant/assistant.component.ts | 63 ++++++++++++++++++- libs/ui/src/lib/assistant/assistant.html | 28 +++++++++ .../ui/src/lib/assistant/enums/search-mode.ts | 1 + .../lib/assistant/interfaces/interfaces.ts | 10 ++- 6 files changed, 115 insertions(+), 8 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2d84426e2..f98d859e2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## Unreleased +### Added + +- Included accounts in the search results of the assistant + ### Changed - Migrated the prompt dialog component from `ngModel` to form control diff --git a/libs/ui/src/lib/assistant/assistant-list-item/assistant-list-item.component.ts b/libs/ui/src/lib/assistant/assistant-list-item/assistant-list-item.component.ts index 70b466127..1cfcfec6a 100644 --- a/libs/ui/src/lib/assistant/assistant-list-item/assistant-list-item.component.ts +++ b/libs/ui/src/lib/assistant/assistant-list-item/assistant-list-item.component.ts @@ -50,20 +50,27 @@ export class GfAssistantListItemComponent public constructor(private changeDetectorRef: ChangeDetectorRef) {} public ngOnChanges() { - if (this.item?.mode === SearchMode.ASSET_PROFILE) { + if (this.item?.mode === SearchMode.ACCOUNT) { + this.queryParams = { + accountDetailDialog: true, + accountId: this.item.id + }; + + this.routerLink = internalRoutes.accounts.routerLink; + } else if (this.item?.mode === SearchMode.ASSET_PROFILE) { this.queryParams = { assetProfileDialog: true, - dataSource: this.item?.dataSource, - symbol: this.item?.symbol + dataSource: this.item.dataSource, + symbol: this.item.symbol }; this.routerLink = internalRoutes.adminControl.subRoutes.marketData.routerLink; } else if (this.item?.mode === SearchMode.HOLDING) { this.queryParams = { - dataSource: this.item?.dataSource, + dataSource: this.item.dataSource, holdingDetailDialog: true, - symbol: this.item?.symbol + symbol: this.item.symbol }; this.routerLink = []; diff --git a/libs/ui/src/lib/assistant/assistant.component.ts b/libs/ui/src/lib/assistant/assistant.component.ts index 032b3222d..e5d0dd6da 100644 --- a/libs/ui/src/lib/assistant/assistant.component.ts +++ b/libs/ui/src/lib/assistant/assistant.component.ts @@ -153,14 +153,16 @@ export class GfAssistantComponent implements OnChanges, OnDestroy, OnInit { }); public holdings: PortfolioPosition[] = []; public isLoading = { + accounts: false, assetProfiles: false, holdings: false, quickLinks: false }; public isOpen = false; - public placeholder = $localize`Find holding or page...`; + public placeholder = $localize`Find account, holding or page...`; public searchFormControl = new FormControl(''); public searchResults: ISearchResults = { + accounts: [], assetProfiles: [], holdings: [], quickLinks: [] @@ -199,11 +201,13 @@ export class GfAssistantComponent implements OnChanges, OnDestroy, OnInit { .pipe( map((searchTerm) => { this.isLoading = { + accounts: true, assetProfiles: true, holdings: true, quickLinks: true }; this.searchResults = { + accounts: [], assetProfiles: [], holdings: [], quickLinks: [] @@ -217,6 +221,7 @@ export class GfAssistantComponent implements OnChanges, OnDestroy, OnInit { distinctUntilChanged(), switchMap((searchTerm) => { const results = { + accounts: [], assetProfiles: [], holdings: [], quickLinks: [] @@ -226,6 +231,7 @@ export class GfAssistantComponent implements OnChanges, OnDestroy, OnInit { return of(results).pipe( tap(() => { this.isLoading = { + accounts: false, assetProfiles: false, holdings: false, quickLinks: false @@ -234,6 +240,25 @@ export class GfAssistantComponent implements OnChanges, OnDestroy, OnInit { ); } + // Accounts + const accounts$: Observable> = + this.searchAccounts(searchTerm).pipe( + map((accounts) => ({ + accounts: accounts.slice( + 0, + GfAssistantComponent.SEARCH_RESULTS_DEFAULT_LIMIT + ) + })), + catchError((error) => { + console.error('Error fetching accounts for assistant:', error); + return of({ accounts: [] as ISearchResultItem[] }); + }), + tap(() => { + this.isLoading.accounts = false; + this.changeDetectorRef.markForCheck(); + }) + ); + // Asset profiles const assetProfiles$: Observable> = this .hasPermissionToAccessAdminControl @@ -299,13 +324,14 @@ export class GfAssistantComponent implements OnChanges, OnDestroy, OnInit { ); // Merge all results - return merge(quickLinks$, assetProfiles$, holdings$).pipe( + return merge(accounts$, assetProfiles$, holdings$, quickLinks$).pipe( scan( (acc: ISearchResults, curr: Partial) => ({ ...acc, ...curr }), { + accounts: [], assetProfiles: [], holdings: [], quickLinks: [] @@ -323,6 +349,7 @@ export class GfAssistantComponent implements OnChanges, OnDestroy, OnInit { error: (error) => { console.error('Assistant search stream error:', error); this.searchResults = { + accounts: [], assetProfiles: [], holdings: [], quickLinks: [] @@ -331,6 +358,7 @@ export class GfAssistantComponent implements OnChanges, OnDestroy, OnInit { }, complete: () => { this.isLoading = { + accounts: false, assetProfiles: false, holdings: false, quickLinks: false @@ -451,12 +479,14 @@ export class GfAssistantComponent implements OnChanges, OnDestroy, OnInit { public initialize() { this.isLoading = { + accounts: true, assetProfiles: true, holdings: true, quickLinks: true }; this.keyManager = new FocusKeyManager(this.assistantListItems).withWrap(); this.searchResults = { + accounts: [], assetProfiles: [], holdings: [], quickLinks: [] @@ -472,6 +502,7 @@ export class GfAssistantComponent implements OnChanges, OnDestroy, OnInit { }); this.isLoading = { + accounts: false, assetProfiles: false, holdings: false, quickLinks: false @@ -564,6 +595,34 @@ export class GfAssistantComponent implements OnChanges, OnDestroy, OnInit { }); } + private searchAccounts(aSearchTerm: string): Observable { + return this.dataService + .fetchAccounts({ + filters: [ + { + id: aSearchTerm, + type: 'SEARCH_QUERY' + } + ] + }) + .pipe( + catchError(() => { + return EMPTY; + }), + map(({ accounts }) => { + return accounts.map(({ id, name }) => { + return { + id, + name, + routerLink: internalRoutes.accounts.routerLink, + mode: SearchMode.ACCOUNT as const + }; + }); + }), + takeUntil(this.unsubscribeSubject) + ); + } + private searchAssetProfiles( aSearchTerm: string ): Observable { diff --git a/libs/ui/src/lib/assistant/assistant.html b/libs/ui/src/lib/assistant/assistant.html index f957d9dcc..5954ce369 100644 --- a/libs/ui/src/lib/assistant/assistant.html +++ b/libs/ui/src/lib/assistant/assistant.html @@ -39,9 +39,11 @@ @if (searchFormControl.value) {
    @if ( + !isLoading.accounts && !isLoading.assetProfiles && !isLoading.holdings && !isLoading.quickLinks && + searchResults.accounts?.length === 0 && searchResults.assetProfiles?.length === 0 && searchResults.holdings?.length === 0 && searchResults.quickLinks?.length === 0 @@ -76,6 +78,32 @@ }
    } + @if (isLoading.accounts || searchResults?.accounts?.length !== 0) { +
    +
    + Accounts +
    + @for ( + searchResultItem of searchResults.accounts; + track searchResultItem + ) { + + } + @if (isLoading.accounts) { + + } +
    + } @if (isLoading.holdings || searchResults?.holdings?.length !== 0) {
    diff --git a/libs/ui/src/lib/assistant/enums/search-mode.ts b/libs/ui/src/lib/assistant/enums/search-mode.ts index f85ad47e9..af9c4dd45 100644 --- a/libs/ui/src/lib/assistant/enums/search-mode.ts +++ b/libs/ui/src/lib/assistant/enums/search-mode.ts @@ -1,4 +1,5 @@ export enum SearchMode { + ACCOUNT = 'account', ASSET_PROFILE = 'assetProfile', HOLDING = 'holding', QUICK_LINK = 'quickLink' diff --git a/libs/ui/src/lib/assistant/interfaces/interfaces.ts b/libs/ui/src/lib/assistant/interfaces/interfaces.ts index ce8b644be..247641094 100644 --- a/libs/ui/src/lib/assistant/interfaces/interfaces.ts +++ b/libs/ui/src/lib/assistant/interfaces/interfaces.ts @@ -1,8 +1,14 @@ import { AssetProfileIdentifier } from '@ghostfolio/common/interfaces'; -import { DateRange } from '@ghostfolio/common/types'; +import { AccountWithValue, DateRange } from '@ghostfolio/common/types'; import { SearchMode } from '../enums/search-mode'; +export interface IAccountSearchResultItem + extends Pick { + mode: SearchMode.ACCOUNT; + routerLink: string[]; +} + export interface IAssetSearchResultItem extends AssetProfileIdentifier { assetSubClassString: string; currency: string; @@ -22,10 +28,12 @@ export interface IQuickLinkSearchResultItem { } export type ISearchResultItem = + | IAccountSearchResultItem | IAssetSearchResultItem | IQuickLinkSearchResultItem; export interface ISearchResults { + accounts: ISearchResultItem[]; assetProfiles: ISearchResultItem[]; holdings: ISearchResultItem[]; quickLinks: ISearchResultItem[]; From 8eef97225a9c5b71e93a16f7532a5258bd7fbee3 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Mon, 18 Aug 2025 19:22:44 +0200 Subject: [PATCH 32/62] Feature/add data source to asset profile search results of assistant (#5370) * Add data source * Update changelog --- CHANGELOG.md | 1 + .../lib/assistant/assistant-list-item/assistant-list-item.html | 3 +++ 2 files changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index f98d859e2..6d7d54ed9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added - Included accounts in the search results of the assistant +- Included the data source in the asset profile search results of the assistant ### Changed diff --git a/libs/ui/src/lib/assistant/assistant-list-item/assistant-list-item.html b/libs/ui/src/lib/assistant/assistant-list-item/assistant-list-item.html index 9c55dac54..fd2c4011d 100644 --- a/libs/ui/src/lib/assistant/assistant-list-item/assistant-list-item.html +++ b/libs/ui/src/lib/assistant/assistant-list-item/assistant-list-item.html @@ -12,6 +12,9 @@ @if (item?.assetSubClassString) { · {{ item.assetSubClassString }} } + @if (item?.mode === 'assetProfile') { + · {{ item.dataSource }} + } } From 614dd0783654156c3b3c2b7e410d8300e5dd9701 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Wed, 20 Aug 2025 12:00:53 +0200 Subject: [PATCH 33/62] Feature/add quantity to holdings table of account detail dialog (#5379) * Add quantity column * Update changelog --- CHANGELOG.md | 1 + .../home-holdings/home-holdings.html | 1 + .../src/app/pages/public/public-page.html | 1 + .../holdings-table.component.html | 24 +++++++++++++++++++ .../holdings-table.component.ts | 5 ++++ 5 files changed, 32 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6d7d54ed9..2fc198aaa 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Included accounts in the search results of the assistant - Included the data source in the asset profile search results of the assistant +- Added the quantity column to the holdings table of the account detail dialog ### Changed diff --git a/apps/client/src/app/components/home-holdings/home-holdings.html b/apps/client/src/app/components/home-holdings/home-holdings.html index 87d0a514d..8b4e4c5d3 100644 --- a/apps/client/src/app/components/home-holdings/home-holdings.html +++ b/apps/client/src/app/components/home-holdings/home-holdings.html @@ -48,6 +48,7 @@ diff --git a/libs/ui/src/lib/holdings-table/holdings-table.component.html b/libs/ui/src/lib/holdings-table/holdings-table.component.html index 2c238b137..d3afe9de9 100644 --- a/libs/ui/src/lib/holdings-table/holdings-table.component.html +++ b/libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -64,6 +64,30 @@ + + + Quantity + + +
    + +
    + +
    + Date: Thu, 21 Aug 2025 18:19:39 +0200 Subject: [PATCH 34/62] Feature/refresh cryptocurrencies list 20250816 (#5373) * Update cryptocurrencies.json * Update changelog --- CHANGELOG.md | 1 + .../cryptocurrencies/cryptocurrencies.json | 156 +++++++++++++++--- 2 files changed, 138 insertions(+), 19 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2fc198aaa..de0cdce68 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,6 +16,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed - Migrated the prompt dialog component from `ngModel` to form control +- Refreshed the cryptocurrencies list ## 2.191.1 - 2025-08-14 diff --git a/apps/api/src/assets/cryptocurrencies/cryptocurrencies.json b/apps/api/src/assets/cryptocurrencies/cryptocurrencies.json index 7144de8c5..20baa7ddd 100644 --- a/apps/api/src/assets/cryptocurrencies/cryptocurrencies.json +++ b/apps/api/src/assets/cryptocurrencies/cryptocurrencies.json @@ -60,6 +60,7 @@ "1GUY": "1GUY", "1HUB": "1HubAI", "1INCH": "1inch", + "1IQ": "People with 1 IQ", "1IRST": "1irstcoin", "1MCT": "MicroCreditToken", "1MDC": "1MDC", @@ -122,7 +123,6 @@ "4EVER": "4EVERLAND", "4JNET": "4JNET", "4MW": "For Meta World", - "4P": "4P FOUR", "4RZ": "4REALZA COIN", "4THPILLAR": "4th Pillar Four Token", "4TOKEN": "Ignore Fud", @@ -148,6 +148,7 @@ "A1INCH": "1inch (Arbitrum Bridge)", "A2A": "A2A", "A2I": "Arcana AI", + "A2Z": "Arena-Z", "A4": "A4 Finance", "A47": "AGENDA 47", "A4M": "AlienForm", @@ -466,6 +467,7 @@ "AINN": "AINN", "AINTI": "AIntivirus", "AINU": "Ainu Token", + "AIO": "AIO", "AION": "Aion", "AIONE": "AiONE", "AIOS": "INT OS", @@ -668,6 +670,7 @@ "AMERICA": "America", "AMERICAI": "AMERICA AI Agent", "AMERICANCOIN": "AmericanCoin", + "AMETA": "Alpha City", "AMF": "AddMeFast", "AMG": "DeHeroGame Amazing Token", "AMI": "AMMYI Coin", @@ -764,6 +767,7 @@ "ANTMONS": "Antmons", "ANTS": "ANTS Reloaded", "ANTT": "Antara Token", + "ANUBHAV": "Anubhav Trainings", "ANUS": "URANUS", "ANV": "Aniverse", "ANVL": "Anvil", @@ -998,8 +1002,9 @@ "ASMO": "AS Monaco Fan Token", "ASN": "Ascension Coin", "ASNT": "Assent Protocol", - "ASP": "Aspire", + "ASP": "Aspecta", "ASPC": "Astropup Coin", + "ASPIRE": "Aspire", "ASPIRIN": "Aspirin", "ASPO": "ASPO Shards", "ASQT": "ASQ Protocol", @@ -1008,6 +1013,7 @@ "ASS": "Australian Safe Shepherd", "ASSA": "AssaPlay", "ASSARA": "ASSARA", + "ASSDAQ": "ASSDAQ", "ASSET": "iAssets", "ASST": "AssetStream", "AST": "AirSwap", @@ -1093,8 +1099,10 @@ "ATS": "Alltoscan", "ATT": "Attila", "ATTR": "Attrace", + "ATU": "Quantum", "ATX": "ArtexCoin", "AU": "AutoCrypto", + "AU79": "AU79", "AUA": "ArubaCoin", "AUC": "Auctus", "AUCO": "Advanced United Continent", @@ -1271,6 +1279,7 @@ "BABYBOME": "Book of Baby Memes", "BABYBOMEOW": "Baby of BOMEOW", "BABYBONK": "Baby Bonk", + "BABYBOSS": "Baby Boss", "BABYBROC": "Baby Broccoli", "BABYBROCCOL": "Baby Broccoli", "BABYBROCCOLI": "BabyBroccoli", @@ -1361,6 +1370,7 @@ "BABYWLFI": "Baby WLFI", "BABYX": "Baby X", "BAC": "Basis Cash", + "BACHI": "Bachi on Base", "BACK": "DollarBack", "BACOIN": "BACoin", "BACON": "BaconDAO (BACON)", @@ -1397,6 +1407,7 @@ "BALIN": "Balin Bank", "BALKANCOIN": "Balkancoin", "BALL": "BitBall", + "BALLTZE": "BALLTZE", "BALLZ": "Wolf Wif", "BALN": "Balanced", "BALPHA": "bAlpha", @@ -1517,6 +1528,7 @@ "BBG": "BigBang", "BBGC": "BigBang Game", "BBI": "BelugaPay", + "BBITBTC": "BounceBit BTC", "BBK": "BitBlocks", "BBL": "beoble", "BBN": "BBNCOIN", @@ -2145,6 +2157,7 @@ "BNC": "Bifrost Native Coin", "BND": "Bened", "BNF": "BonFi", + "BNFT": "APENFT (BitTorrent Bridge)", "BNIU": "Backed Niu Technologies", "BNIX": "BNIX Token", "BNK": "Bankera", @@ -2191,6 +2204,7 @@ "BOBMARLEY": "Bob Marley Meme", "BOBO": "BOBO", "BOBOT": "Bobo The Bear", + "BOBR": "Based BOBR", "BOBS": "Bob's Repair", "BOBT": "BOB Token", "BOBTHE": "Bob The Builder", @@ -2391,6 +2405,7 @@ "BPUNI": "Binance-Peg Uniswap Protocol Token (Binance Bridge)", "BPUSDC": "Binance-Peg USD Coin (Binance Bridge)", "BPX": "Black Phoenix", + "BPXL": "BombPixel", "BQ": "Bitqy", "BQC": "BQCoin", "BQQQ": "Bitsdaq Token", @@ -2462,6 +2477,7 @@ "BRK": "BreakoutCoin", "BRKBX": "Berkshire Hathaway xStock", "BRKL": "Brokoli Token", + "BRM": "BullRun Meme", "BRMV": "BRMV Token", "BRN": "BRN Metaverse", "BRNK": "Brank", @@ -2549,9 +2565,11 @@ "BSTC": "BST Chain", "BSTK": "BattleStake", "BSTN": "BitStation", + "BSTR": "BSTR", "BSTS": "Magic Beasties", "BSTY": "GlobalBoost", "BSV": "Bitcoin SV", + "BSVBRC": "BSVBRC", "BSW": "Biswap", "BSWAP": "BaseSwap", "BSWT": "BaySwap", @@ -2693,7 +2711,8 @@ "BUCKY": "Bucky", "BUD": "Buddy", "BUDDHA": "Buddha", - "BUDDY": "BUDDY", + "BUDDY": "alright buddy", + "BUDDYONSOL": "BUDDY", "BUDG": "Bulldogswap", "BUENO": "Bueno", "BUF": "Buftoad", @@ -2728,7 +2747,9 @@ "BULLIONFX": "BullionFX", "BULLISH": "bullish", "BULLMOON": "Bull Moon", - "BULLPEPE": "Bullpepe", + "BULLPEPE": "Bull Pepe", + "BULLPEPEIO": "Bullpepe", + "BULLPEPENET": "Bull Pepe", "BULLS": "Bull Coin", "BULLSEYE": "bulls-eye", "BULLSH": "Bullshit Inu", @@ -2832,6 +2853,7 @@ "BZX": "Bitcoin Zero", "BZZ": "Swarmv", "BZZONE": "Bzzone", + "C": "Chainbase Token", "C2": "Coin.2", "C20": "Crypto20", "C25": "C25 Coin", @@ -3390,6 +3412,7 @@ "CLH": "ClearDAO", "CLICK": "Clickcoin", "CLIFF": "Clifford Inu", + "CLIFFORD": "Clifford", "CLIMB": "CLIMB TOKEN FINANCE", "CLIN": "Clinicoin", "CLINK": "cLINK", @@ -3408,6 +3431,7 @@ "CLOA": "Cloak", "CLOAK": "CloakCoin", "CLOKI": "CATLOKI", + "CLOOTS": "CryptoLoots", "CLORE": "Clore.ai", "CLOUD": "Cloud", "CLOUDGPU": "CloudGPU", @@ -3588,6 +3612,7 @@ "CONJ": "Conjee", "CONK": "ShibaPoconk", "CONS": "ConSpiracy Coin", + "CONSCIOUS": "Conscious Token", "CONSENTIUM": "Consentium", "CONTENTBOX": "ContentBox", "CONTROL": "Control Token", @@ -3924,6 +3949,7 @@ "CTN": "Continuum Finance", "CTO": "BaseCTO", "CTOAI": "ClustroAI", + "CTOC": "CTOC", "CTOK": "Codyfight", "CTP": "Ctomorrow Platform", "CTPL": "Cultiplan", @@ -4169,6 +4195,7 @@ "DARKEN": "Dark Energy Crystals", "DARKF": "Dark Frontiers", "DARKMAGACOIN": "DARK MAGA", + "DARKSTAR": "DarkStar", "DARKT": "Dark Trump", "DARKTOKEN": "DarkToken", "DART": "dART Insurance", @@ -4373,6 +4400,7 @@ "DEOD": "Decentrawood", "DEOR": "Decentralized Oracle", "DEP": "DEAPCOIN", + "DEPIN": "DEPIN", "DEPINU": "Depression Inu", "DEPO": "Depo", "DEPTH": "Depth Token", @@ -5368,6 +5396,7 @@ "EMILY": "Emily", "EMIT": "Time Machine NFTs", "EML": "EML Protocol", + "EMMM": "emmm", "EMN.CUR": "Eastman Chemical", "EMOJI": "MOMOJI", "EMON": "Ethermon", @@ -5808,6 +5837,7 @@ "FARTDEV": "Fart Dev", "FARTIMUS": "Fartimus Prime", "FARTING": "Farting Unicorn", + "FARTLESS": "FARTLESS COIN", "FAS": "fast construction coin", "FAST": "Fastswap", "FASTAI": "Fast And Ai", @@ -5875,6 +5905,7 @@ "FEGV1": "FEG Token v1", "FEGV2": "FEG Token", "FEI": "Fei Protocol", + "FELIS": "Felis", "FELIX": "FelixCoin", "FELIX2": "Felix 2.0 ETH", "FEN": "First Ever NFT", @@ -5964,6 +5995,7 @@ "FIO": "FIO Protocol", "FIONA": "Fiona", "FIONABSC": "Fiona", + "FIR": "Fireverse", "FIRA": "Defira", "FIRE": "Matr1x Fire", "FIRECOIN": "FireCoin", @@ -6072,6 +6104,7 @@ "FLOVM": "FLOV MARKET", "FLOW": "Flow", "FLOWER": "FlowerAI", + "FLOWM": "Flowmatic", "FLOWP": "Flow Protocol", "FLOYX": "Floyx", "FLP": "Gameflip", @@ -6099,7 +6132,7 @@ "FLY": "Franklin", "FLYCOIN": "FlyCoin", "FLZ": "Fellaz", - "FM": "Flowmatic", + "FM": "Full Moon", "FMA": "FLAMA", "FMB": "FREEMOON BINANCE", "FMC": "Fimarkcoin", @@ -6272,6 +6305,7 @@ "FROGE": "Froge Finance", "FROGEX": "FrogeX", "FROGGER": "FROGGER", + "FROGGIE": "Froggie", "FROGGY": "Froggy", "FROGLIC": "Pink Hood Froglicker", "FROGO": "Frogo", @@ -6762,6 +6796,7 @@ "GLFT": "Global Fan Token", "GLI": "GLI TOKEN", "GLIDE": "Glide Finance", + "GLIDR": "Glidr", "GLIESE": "GlieseCoin", "GLINK": "Gemlink", "GLINT": "BeamSwap", @@ -6893,6 +6928,7 @@ "GOLDN": "GoLondon", "GOLDPIECES": "GoldPieces", "GOLDS": "Gold Standard", + "GOLDSECURED": "Gold Secured Currency", "GOLDX": "eToro Gold", "GOLDY": "DeFi Land Gold", "GOLF": "GolfCoin", @@ -7046,6 +7082,7 @@ "GROKGIRL": "Grok Girl", "GROKGROW": "GrokGrow", "GROKHEROES": "GROK heroes", + "GROKIM": "Grok Imagine Penguin", "GROKINU": "Grok Inu", "GROKKING": "GrokKing", "GROKKY": "GroKKy", @@ -7096,7 +7133,7 @@ "GSTT": "GSTT", "GSWAP": "Gameswap", "GSWIFT": "GameSwift", - "GSX": "Gold Secured Currency", + "GSX": "Goldman Sachs xStock", "GSY": "GenesysCoin", "GSYS": "Genesys", "GT": "Gatechain Token", @@ -7342,6 +7379,7 @@ "HELI": "Helion", "HELINK": "Chainlink (Huobi Exchange)", "HELIOS": "Mission Helios", + "HELIOSAI": "HeliosAI", "HELL": "HELL COIN", "HELLO": "HELLO", "HELMET": "Helmet Insure", @@ -7672,6 +7710,7 @@ "HUSKY": "Husky", "HUSL": "Hustle Token", "HUSTLE": "Agent Hustle", + "HUSTLEV1": "Tensorium", "HUT": "Hibiki Run", "HVC": "HeavyCoin", "HVCO": "High Voltage Coin", @@ -7713,7 +7752,7 @@ "HYPERC": "HyperChainX", "HYPERCOIN": "HyperCoin", "HYPERD": "HyperDAO", - "HYPERF": "HyperFly", + "HYPERFLY": "HyperFly", "HYPERIONX": "HyperionX", "HYPERS": "HyperSpace", "HYPERSKIDS": "HYPERSKIDS", @@ -7831,6 +7870,7 @@ "IFIT": "CALO INDOOR", "IFLT": "InflationCoin", "IFOR": "iFortune", + "IFR": "Inferium", "IFT": "InvestFeed", "IFUM": "Infleum", "IFUND": "Unifund", @@ -7851,6 +7891,7 @@ "IJC": "IjasCoin", "IJZ": "iinjaz", "IJZV1": "iinjaz v1", + "IKA": "IKA Token", "IKI": "ikipay", "IKIGAI": "Ikigai", "ILA": "Infinite Launch", @@ -7861,6 +7902,7 @@ "ILT": "iOlite", "ILV": "Illuvium", "IMAGE": "Imagen AI", + "IMAGINE": "IMAGINE", "IMARO": "IMARO", "IMAYC": "IMAYC", "IMBREX": "Imbrex", @@ -7895,7 +7937,7 @@ "IMU": "imusify", "IMVR": "ImmVRse", "IMX": "Immutable X", - "IN": "InCoin", + "IN": "INFINIT", "INA": "pepeinatux", "INARI": "Inari", "INB": "Insight Chain", @@ -8012,6 +8054,7 @@ "IOSHIB": "IoTexShiba", "IOST": "IOS token", "IOT": "Helium IOT", + "IOTAI": "IoTAI", "IOTW": "IOTW", "IOTX": "IoTeX Network", "IOU": "IOU1", @@ -8120,6 +8163,7 @@ "IX": "X-Block", "IXC": "IXcoin", "IXIR": "IXIR", + "IXORA": "IXORAPAD", "IXP": "IMPACTXPRIME", "IXS": "IX Swap", "IXT": "iXledger", @@ -8163,6 +8207,7 @@ "JASMY": "JasmyCoin", "JASON": "Jason Derulo", "JAV": "Javsphere", + "JAWN": "Long Jawn Silvers", "JAWS": "AutoShark", "JAY": "Jaypeggers", "JBO": "JBOX", @@ -8186,7 +8231,8 @@ "JEETOLAX": "Jeetolax", "JEETS": "I'm a Jeet", "JEFE": "JEFE TOKEN", - "JEFF": "Jeff in Space", + "JEFF": "JEFF", + "JEFFINSPACE": "Jeff in Space", "JEFFRY": "jeffry", "JEJUDOGE": "Jejudoge", "JELLI": "JELLI", @@ -8265,6 +8311,7 @@ "JOEY": "Joey Inu", "JOGECO": "Jogecodog", "JOHM": "Johm lemmon", + "JOHN": "John Tsubasa Rivals", "JOHNNY": "Johnny The Bull", "JOINCOIN": "JoinCoin", "JOINT": "Joint Ventures", @@ -8428,6 +8475,7 @@ "KAT": "Karat", "KATA": "Katana Inu", "KATANA": "Katana Finance", + "KATANANET": "Katana Network", "KATCHU": "Katchu Coin", "KATT": "Katt Daddy", "KATYCAT": "Katy Perry Fans", @@ -8527,6 +8575,7 @@ "KHAI": "khai", "KHEOWZOO": "khaokheowzoo", "KHM": "Kohima", + "KHYPE": "Kinetiq Staked HYPE", "KI": "Genopets KI", "KIAN": "Porta", "KIBA": "Kiba Inu", @@ -8662,6 +8711,7 @@ "KNUT": "Knut From Zoo", "KNW": "Knowledge", "KOAI": "KOI", + "KOALA": "KOALA", "KOBAN": "KOBAN", "KOBE": "Shabu Shabu", "KOBO": "KoboCoin", @@ -8776,7 +8826,7 @@ "KTT": "K-Tune", "KTX": "KwikTrust", "KUAI": "Kuai Token", - "KUB": "Bitkub Coin", + "KUB": "KUB Coin", "KUBE": "KubeCoin", "KUBO": "KUBO", "KUBOS": "KubosCoin", @@ -8891,6 +8941,7 @@ "LAS": "LNAsolution Coin", "LASOL": "LamaSol", "LAT": "PlatON Network", + "LATINA": "Latina", "LATOKEN": "LATOKEN", "LATOM": "Liquid ATOM", "LATTE": "LatteSwap", @@ -8910,6 +8961,7 @@ "LAY3R": "AutoLayer", "LAYER": "Solayer", "LAZ": "Lazarus", + "LAZHUZHU": "LAZHUZHU", "LAZIO": "Lazio Fan Token", "LAZYCAT": "LAZYCAT", "LB": "LoveBit", @@ -9110,12 +9162,14 @@ "LIO": "Lio", "LION": "Loaded Lions", "LIONT": "Lion Token", + "LIORA": "Liora", "LIPC": "LIpcoin", "LIPS": "LipChain", "LIQ": "LIQ Protocol", - "LIQD": "Liquid Finance", + "LIQD": "LiquidLaunch", "LIQR": "Topshelf Finance", "LIQUI": "Liquidus", + "LIQUID": "Liquid Finance", "LIQUIDIUM": "LIQUIDIUM•TOKEN", "LIR": "Let it Ride", "LIS": "Realis Network", @@ -9134,6 +9188,7 @@ "LITHO": "Lithosphere", "LITION": "Lition", "LITT": "LitLab Games", + "LITTLEGUY": "just a little guy", "LIV": "LiviaCoin", "LIVE": "TRONbetLive", "LIVENCOIN": "LivenPay", @@ -9235,6 +9290,7 @@ "LONGFU": "LONGFU", "LONGM": "Long Mao", "LONGSHINE": "LongShine", + "LOOBY": "Looby by Stephen Bliss", "LOOK": "LookCoin", "LOOKS": "LooksRare", "LOOM": "Loom Network", @@ -9308,6 +9364,7 @@ "LSHARE": "LSHARE", "LSILVER": "Lyfe Silver", "LSK": "Lisk", + "LSKV1": "Lisk v1", "LSP": "Lumenswap", "LSPHERE": "Lunasphere", "LSR": "LaserEyes", @@ -9456,7 +9513,7 @@ "LZ": "LaunchZone", "LZM": "LoungeM", "LZUSDC": "LayerZero Bridged USDC (Fantom)", - "M": "MetaVerse-M", + "M": "MemeCore", "M1": "SupplyShock", "M2O": "M2O Token", "M3M3": "M3M3", @@ -9466,6 +9523,7 @@ "MABA": "Make America Based Again", "MAC": "MachineCoin", "MACHO": "macho", + "MACRO": "Macro Millions", "MADA": "MilkADA", "MADAGASCARTOKEN": "Madagascar Token", "MADANA": "MADANA", @@ -9492,6 +9550,7 @@ "MAGAF": "MAGA FRENS", "MAGAHAT": "MAGA Hat", "MAGAIBA": "Magaiba", + "MAGAL": "Magallaneer", "MAGAN": "Maganomics On Solana", "MAGANOMICS": "Maganomics", "MAGAP": "MAGA PEPE", @@ -9579,6 +9638,7 @@ "MARI": "MarijuanaCoin", "MARIC": "Maricoin", "MARIE": "Marie Rose", + "MARIEROSE": "Marie", "MARIO": "MARIO CEO", "MARK": "Benchmark Protocol", "MARKE": "Market Ledger", @@ -9592,6 +9652,7 @@ "MARSC": "MarsCoin", "MARSCOIN": "MarsCoin", "MARSH": "Unmarshal", + "MARSMI": "MarsMi", "MARSO": "Marso.Tech", "MARSRISE": "MarsRise", "MARSUPILAMI": "MARSUPILAMI INU", @@ -9678,6 +9739,7 @@ "MBET": "MoonBet", "MBF": "MoonBear.Finance", "MBG": "MBG Token", + "MBGA": "MBGA", "MBI": "Monster Byte Inc", "MBID": "myBID", "MBILLY": "MAMA BILLY", @@ -9770,6 +9832,7 @@ "MDX": "Mdex (BSC)", "MDXH": "Mdex (HECO)", "ME": "Magic Eden", + "MEA": "MECCA", "MEAN": "Meanfi", "MEB": "Meblox Protocol", "MEC": "MegaCoin", @@ -9914,6 +9977,7 @@ "METAUFO": "MetaUFO", "METAV": "METAVERSE", "METAVE": "Metaverse Convergence", + "METAVERSEM": "MetaVerse-M", "METAVERSEX": "MetaverseX", "METAVIE": "Metavie", "METAVPAD": "MetaVPad", @@ -10018,6 +10082,7 @@ "MIKS": "MIKS COIN", "MIL": "Milllionaire Coin", "MILA": "MILADY MEME TOKEN", + "MILC": "Micro Licensing Coin", "MILE": "milestoneBased", "MILEI": "MILEI", "MILK": "MilkyWay", @@ -10026,6 +10091,7 @@ "MILKSHAKE": "Milkshake Swap", "MILKYWAY": "MilkyWayZone", "MILLI": "Million", + "MILLIMV1": "Millimeter v1", "MILLY": "milly", "MILO": "Milo Inu", "MILOCEO": "Milo CEO", @@ -10045,6 +10111,7 @@ "MINDC": "MindCoin", "MINDCOIN": "MindCoin", "MINDEX": "Mindexcoin", + "MINDFAK": "Mindfak By Matt Furie", "MINDGENE": "Mind Gene", "MINDS": "Minds", "MINDSYNC": "Mindsync", @@ -10166,6 +10233,7 @@ "MMIT": "MangoMan Intelligent", "MMNXT": "MMNXT", "MMO": "MMOCoin", + "MMON": "Multiverse Monkey", "MMPRO": "Market Making Pro", "MMS": "Marsverse", "MMSC": "MMSC PLATFORM", @@ -10370,6 +10438,7 @@ "MOOO": "Hashtagger", "MOOV": "dotmoovs", "MOOX": "Moox Protocol", + "MOOXV1": "Moox Protocol v1", "MOPS": "Mops", "MOR": "Morpheus", "MORA": "Meliora", @@ -10394,6 +10463,7 @@ "MOTH": "MOTH", "MOTHER": "Mother Iggy", "MOTI": "Motion", + "MOTION": "motion", "MOTO": "Motocoin", "MOUND": "Mound Token", "MOUTAI": "Moutai", @@ -10481,6 +10551,7 @@ "MSHEESHA": "Sheesha Finance Polygon", "MSHIB": "Magic Shiba Starter", "MSHIP": "MetaShipping", + "MSIA": "Messiah", "MSN": "Meson.Network", "MSOL": "Marinade Staked SOL", "MSOT": "BTour Chain", @@ -10701,6 +10772,7 @@ "NANJ": "NANJCOIN", "NANO": "Nano", "NAO": "Nettensor", + "NAORIS": "Naoris Protocol", "NAOS": "NAOS Finance", "NAP": "Napoli Fan Token", "NARCO": "Mr. Narco", @@ -10830,7 +10902,8 @@ "NERD": "Nerd Bot", "NERDS": "NERDS", "NERF": "Neural Radiance Field", - "NERO": "Nero Token", + "NERO": "NERO Chain", + "NEROTOKEN": "Nero Token", "NERVE": "NERVE", "NES": "Nest AI", "NESS": "Ness LAB", @@ -10893,6 +10966,7 @@ "NEXMI": "NexMillionaires", "NEXMS": "NexMillionaires", "NEXO": "NEXO", + "NEXOR": "Nexora", "NEXT": "Connext Network", "NEXTEX": "Next.exchange Token", "NEXTEXV1": "Next.exchange Token v1", @@ -11034,6 +11108,7 @@ "NNT": "Nunu Spirits", "NOA": "NOA PLAY", "NOAH": "NOAHCOIN", + "NOBIKO": "Longcat", "NOBL": "NobleCoin", "NOBODY": "Nobody Sausage", "NOBS": "No BS Crypto", @@ -11421,6 +11496,7 @@ "OMNILAYER": "Omni", "OMNIR": "Omni Real Estate Token", "OMNIX": "OmniBotX", + "OMNIXIO": "OMNIX", "OMNOM": "Doge Eat Doge", "OMNOMN": "Omega Network", "OMT": "Mars Token", @@ -11439,6 +11515,7 @@ "ONET": "ONE Token", "ONEX": "ONE TECH", "ONF": "ONF Token", + "ONFA": "ONFA Hope", "ONGAS": "Ontology Gas", "ONI": "ONINO", "ONIG": "Onigiri", @@ -11485,6 +11562,7 @@ "OPENP": "Open Platform", "OPENRI": "Open Rights Exchange", "OPENSOURCE": "Open Source Network", + "OPENVC": "OpenVoiceCoin", "OPENW": "OpenWorld", "OPENX": "OpenSwap Optimism Token", "OPEPE": "Optimism PEPE", @@ -11640,6 +11718,7 @@ "OWNDATA": "OWNDATA", "OWNLY": "Ownly", "OWO": "SoMon", + "OWOCOIN": "Owo", "OX": "Open Exchange Token", "OXAI": "OxAI.com", "OXB": "Oxbull Tech", @@ -11737,6 +11816,7 @@ "PAR": "Parachute", "PARA": "Paralink Network", "PARAB": "Parabolic", + "PARABO": "PARABOLIC AI", "PARAD": "Paradox", "PARADOX": "The Paradox Metaverse", "PARAG": "Paragon Network", @@ -11864,6 +11944,7 @@ "PEAS": "Peapods Finance", "PEBIRD": "PEPE BIRD", "PEC": "PeaceCoin", + "PECH": "PEPE CASH", "PECL": "PECland", "PED": "PEDRO", "PEDRO": "Pedro The Raccoon", @@ -12170,6 +12251,7 @@ "PIZZACOIN": "PizzaCoin", "PIZZASWAP": "PizzaSwap", "PJM": "Pajama.Finance", + "PJN": "PJN", "PKB": "ParkByte", "PKC": "Pikciochain", "PKD": "PetKingdom", @@ -12255,6 +12337,7 @@ "PLY": "Aurigami", "PLYR": "PLYR L1", "PLZ": "PLUNZ", + "PM": "PumpMeme", "PMA": "PumaPay", "PMD": "Pandemic Multiverse", "PME": "DogePome", @@ -12310,6 +12393,7 @@ "POGAI": "POGAI", "POGS": "POG", "POINT": "SportPoint", + "POINTS": "POINTS", "POK": "Pokmonsters", "POKEGROK": "PokeGROK", "POKEM": "Pokemonio", @@ -12521,6 +12605,7 @@ "PROTOCOLZ": "Protocol Zero", "PROTON": "Proton", "PROUD": "PROUD Money", + "PROVE": "Succinct", "PROXI": "PROXI", "PRP": "Pepe Prime", "PRPS": "Purpose", @@ -12618,6 +12703,7 @@ "PUMPY": "WOW MOON LAMBO PUMPPPPPPY", "PUN": "Punkko", "PUNCH": "PUNCHWORD", + "PUNCHI": "Punchimals", "PUNDIAI": "Pundi AI", "PUNDIX": "Pundi X", "PUNDU": "Pundu", @@ -12711,6 +12797,7 @@ "QAC": "Quasarcoin", "QAI": "QuantixAI", "QANX": "QANplatform", + "QANXV2": "QANplatform v2", "QARK": "QANplatform", "QASH": "Quoine Liquid", "QAU": "Quantum", @@ -13137,6 +13224,7 @@ "RHINOMARS": "RhinoMars", "RHOC": "RChain", "RHP": "Rhypton Club", + "RHUB": "ROLLHUB", "RIA": "aRIA Currency", "RIB": "Ribus", "RIBB": "Ribbit", @@ -13177,6 +13265,7 @@ "RINTARO": "Rintaro", "RINU": "Raichu Inu", "RIO": "Realio Network", + "RION": "Hyperion", "RIOT": "Riot Racers", "RIOV1": "Realio Network v1", "RIP": "Fantom Doge", @@ -13383,13 +13472,16 @@ "RUBIT": "Rublebit", "RUBIUS": "Rubius", "RUBIX": "Rubix", + "RUBMEME": "Reverse Unit Bias", "RUBX": "eToro Russian Ruble", "RUBY": "RubyToken", "RUBYEX": "Ruby.Exchange", "RUC": "Rush", "RUFF": "Ruff", - "RUG": "Rug", + "RUG": "RUGMAN", "RUGA": "RUGAME", + "RUGMONEY": "Rug", + "RUGPROOF": "Launchpad", "RUGPULL": "Captain Rug Pull", "RUGZ": "pulltherug.finance", "RULER": "Ruler Protocol", @@ -13491,6 +13583,7 @@ "SAFEREUM": "Safereum", "SAFES": "SafeSwap", "SAFESTAR": "Safe Star", + "SAFESV1": "SafeSwap v1", "SAFET": "SafemoonTon", "SAFEX": "SafeExchangeCoin", "SAFLE": "Safle", @@ -13550,6 +13643,7 @@ "SAPP": "Sapphire", "SAPPC": "SappChat", "SAR": "Saren", + "SARA": "Pulsara", "SARCO": "Sarcophagus", "SARM": "Stella Armada", "SAROS": "Saros", @@ -13676,6 +13770,7 @@ "SCSX": "Secure Cash", "SCT": "SuperCells", "SCTK": "SharesChain", + "SCTRL": "SOLCONTROL", "SCUBA": "Scuba Dog", "SCY": "Synchrony", "SD": "Stader", @@ -14026,6 +14121,7 @@ "SILVERWAY": "Silverway", "SIM": "Simpson", "SIMBA": "SIMBA The Sloth", + "SIMON": "Simon the Gator", "SIMP": "SO-COL", "SIMPLE": "SimpleChain", "SIMPS": "Simpson MAGA", @@ -14120,6 +14216,7 @@ "SLA": "SUPERLAUNCH", "SLAM": "Slam Token", "SLAP": "CatSlap", + "SLAPS": "Slap", "SLAVI": "Slavi Coin", "SLAYER": "ThreatSlayerAI by Virtuals", "SLB": "Solberg", @@ -14336,6 +14433,7 @@ "SOLAMA": "Solama", "SOLAMB": "SOLAMB", "SOLAN": "Solana Beach", + "SOLANACORN": "Solanacorn", "SOLANAP": "Solana Poker", "SOLANAS": "Solana Swap", "SOLANATREASURY": "Solana Treasury Machine", @@ -14571,6 +14669,7 @@ "SPURS": "Tottenham Hotspur Fan Token", "SPWN": "Bitspawn", "SPX": "SPX6900", + "SPX6969": "SPX 6969", "SPXC": "SpaceXCoin", "SPY": "Smarty Pay", "SPYRO": "SPYRO", @@ -14880,6 +14979,7 @@ "SUMI": "SUMI", "SUMMER": "Summer", "SUMMIT": "Summit", + "SUMMITTHE": "SUMMIT", "SUMO": "Sumokoin", "SUN": "Sun Token", "SUNC": "Sunrise", @@ -15087,6 +15187,7 @@ "TALE": "PrompTale AI", "TALENT": "Talent Protocol", "TALES": "Tales of Pepe", + "TALEX": "TaleX", "TALIS": "Talis Protocol", "TALK": "Talken", "TAMA": "Tamadoge", @@ -15197,6 +15298,7 @@ "TDX": "Tidex Token", "TEA": "TeaDAO", "TEAM": "TeamUP", + "TEARS": "Liberals Tears", "TEC": "TeCoin", "TECAR": "Tesla Cars", "TECH": "TechCoin", @@ -15461,8 +15563,10 @@ "TOC": "TouchCon", "TODAY": "TodayCoin", "TODD": "TURBO TODD", + "TOG": "Token of Games", "TOK": "Tokai", "TOKA": "Tonka Finance", + "TOKABU": "Tokabu", "TOKAMAK": "Tokamak Network", "TOKAU": "Tokyo AU", "TOKC": "Tokyo Coin", @@ -15550,6 +15654,7 @@ "TOWELI": "Towelie", "TOWER": "Tower", "TOWN": "Town Star", + "TOWNS": "Towns", "TOX": "INTOverse", "TOXI": "ToxicGarden.finance SEED", "TOYBOX": "Memefi Toybox 404", @@ -15562,6 +15667,7 @@ "TPG": "Troll Payment", "TPRO": "TPRO Network", "TPT": "Token Pocket", + "TPTU": "Trading and Payment Token", "TPU": "TensorSpace", "TPV": "TravGoPV", "TPY": "Thrupenny", @@ -15608,8 +15714,9 @@ "TREAT": "Shiba Inu Treat", "TREB": "Treble", "TRECENTO": "Trecento Blockchain Capital", - "TREE": "Tree", + "TREE": "Treehouse", "TREEB": "Retreeb", + "TREEOFALPHA": "Tree", "TREMP": "Doland Tremp", "TRENCHER": "Trencher", "TRESTLE": "TRESTLE", @@ -15646,6 +15753,7 @@ "TROGE": "Troge", "TROLL": "TROLL", "TROLLC": "Trollcoin", + "TROLLGE": "TROLLGE", "TROLLHEIM": "Trollheim", "TROLLICTO": "TROLLI CTO", "TROLLMODE": "TROLL MODE", @@ -15807,6 +15915,7 @@ "TUSD": "True USD", "TUSDV1": "True USD v1", "TUT": "Tutorial", + "TUTC": "TUTUT COIN", "TUTELLUS": "Tutellus", "TUTTER": "Tutter", "TUX": "Tux The Penguin", @@ -15932,6 +16041,7 @@ "UGOLD": "UGOLD Inc.", "UGT": "Universal Games Token", "UHP": "Ulgen Hash Power", + "UI": "uiui", "UIBT": "Unibit", "UIM": "UNIVERSE ISLAND", "UIN": "Alliance Chain", @@ -16016,6 +16126,7 @@ "UNIT": "Universal Currency", "UNIT0": "UNIT0", "UNITARYSTATUS": "UnitaryStatus Dollar", + "UNITE": "Unite", "UNITED": "UnitedCoins", "UNITRADE": "UniTrade", "UNITREEAI": "Unitree G1 AI", @@ -16065,6 +16176,7 @@ "UR": "UR", "URAC": "Uranus", "URALS": "Urals Coin", + "URANUS": "Uranus", "URFA": "Urfaspor Token", "URMOM": "urmom", "URO": "Urolithin A", @@ -16237,7 +16349,7 @@ "VANT": "Vanta Network", "VANY": "Vanywhere", "VAPE": "VAPE", - "VAPOR": "Vaporcoin", + "VAPOR": "Hypervapor", "VARA": "Vara Network", "VARIUS": "Varius", "VARK": "Aardvark", @@ -16289,8 +16401,9 @@ "VEEN": "LIVEEN", "VEG": "BitVegan", "VEGA": "Vega Protocol", - "VEGAS": "Vegasino", + "VEGAS": "Vegas", "VEGASI": "Vegas Inu Token", + "VEGASINO": "Vegasino", "VEGE": "Vege Token", "VEIL": "VEIL", "VEKTOR": "VEKTOR", @@ -16388,6 +16501,7 @@ "VIRES": "Vires Finance", "VIRTU": "VIRTUCLOUD", "VIRTUAL": "Virtual Protocol", + "VIRTUALMINING": "VirtualMining Coin", "VIRTUM": "VIRTUMATE", "VIS": "Vigorus", "VISIO": "Visio", @@ -16435,7 +16549,7 @@ "VLXPAD": "VelasPad", "VMANTA": "Bifrost Voucher MANTA", "VMATIC": "Venus MATIC", - "VMC": "VirtualMining Coin", + "VMC": "VMS Classic", "VME": "TrueVett", "VMINT": "Volumint", "VMPX": "VMPX (Ordinals)", @@ -16521,6 +16635,7 @@ "VSG": "Vitalik Smart Gas", "VSHARE": "V3S Share", "VSL": "vSlice", + "VSN": "Vision", "VSO": "Verso", "VSOL": "VSolidus", "VSP": "Vesper Finance", @@ -16757,6 +16872,7 @@ "WEN": "Wen", "WEND": "Wellnode", "WENIS": "WenisCoin", + "WENL": "Wen Lambo Financial", "WENLAMBO": "Wenlambo", "WEOS": "Wrapped EOS", "WEPC": "World Earn & Play Community", @@ -17535,6 +17651,7 @@ "YES": "YES Money", "YESCOIN": "YesCoin", "YESP": "Yesports", + "YESTOKEN": "Yes Token", "YESW": "Yes World", "YETI": "Yeti Finance", "YETIUSD": "YUSD Stablecoin", @@ -17665,7 +17782,8 @@ "ZARP": "ZARP Stablecoin", "ZARX": "eToro South African Rand", "ZASH": "ZIMBOCASH", - "ZAT": "ZatGo", + "ZAT": "zkApes", + "ZATGO": "ZatGo", "ZAZA": "ZAZA", "ZAZU": "Zazu", "ZAZZLES": "Zazzles", From 0cc629f01f41b2b115e6207bd0f1c60a5b72ed07 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 21 Aug 2025 19:24:27 +0200 Subject: [PATCH 35/62] Feature/update locales (#5371) * Update locales * Update translations * Update changelog --------- Co-authored-by: github-actions[bot] Co-authored-by: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> --- CHANGELOG.md | 1 + apps/client/src/locales/messages.ca.xlf | 92 ++++++++++++++----------- apps/client/src/locales/messages.de.xlf | 92 ++++++++++++++----------- apps/client/src/locales/messages.es.xlf | 92 ++++++++++++++----------- apps/client/src/locales/messages.fr.xlf | 92 ++++++++++++++----------- apps/client/src/locales/messages.it.xlf | 92 ++++++++++++++----------- apps/client/src/locales/messages.nl.xlf | 92 ++++++++++++++----------- apps/client/src/locales/messages.pl.xlf | 92 ++++++++++++++----------- apps/client/src/locales/messages.pt.xlf | 92 ++++++++++++++----------- apps/client/src/locales/messages.tr.xlf | 92 ++++++++++++++----------- apps/client/src/locales/messages.uk.xlf | 92 ++++++++++++++----------- apps/client/src/locales/messages.xlf | 89 +++++++++++++----------- apps/client/src/locales/messages.zh.xlf | 92 ++++++++++++++----------- 13 files changed, 623 insertions(+), 479 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index de0cdce68..894e6ed48 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,6 +17,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Migrated the prompt dialog component from `ngModel` to form control - Refreshed the cryptocurrencies list +- Improved the language localization for German (`de`) ## 2.191.1 - 2025-08-14 diff --git a/apps/client/src/locales/messages.ca.xlf b/apps/client/src/locales/messages.ca.xlf index 6aa7c72bc..6e5a9b3ea 100644 --- a/apps/client/src/locales/messages.ca.xlf +++ b/apps/client/src/locales/messages.ca.xlf @@ -387,7 +387,7 @@ En cartera libs/ui/src/lib/assistant/assistant.html - 82 + 110 @@ -551,7 +551,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 74 + 98 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -1637,6 +1637,10 @@ libs/ui/src/lib/activities-table/activities-table.component.html 191 + + libs/ui/src/lib/holdings-table/holdings-table.component.html + 74 + Dividend Yield @@ -1723,7 +1727,7 @@ Gestionar Activitats apps/client/src/app/components/home-holdings/home-holdings.html - 66 + 67 @@ -2219,7 +2223,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 348 + 376 @@ -2227,7 +2231,7 @@ YTD libs/ui/src/lib/assistant/assistant.component.ts - 360 + 388 @@ -2235,7 +2239,7 @@ 1 any libs/ui/src/lib/assistant/assistant.component.ts - 370 + 398 @@ -2243,7 +2247,7 @@ 5 anys libs/ui/src/lib/assistant/assistant.component.ts - 395 + 423 @@ -2251,7 +2255,7 @@ Màx libs/ui/src/lib/assistant/assistant.component.ts - 401 + 429 @@ -3200,7 +3204,7 @@ apps/client/src/app/pages/public/public-page.html - 220 + 221 @@ -3908,7 +3912,7 @@ libs/ui/src/lib/assistant/assistant.html - 179 + 207 @@ -4608,7 +4612,7 @@ Vols refinar la teva estratègia d’inversió personal? apps/client/src/app/pages/public/public-page.html - 212 + 213 @@ -4616,7 +4620,7 @@ Ghostfolio us permet fer un seguiment de la vostra riquesa. apps/client/src/app/pages/public/public-page.html - 216 + 217 @@ -5113,7 +5117,7 @@ Setmana fins avui libs/ui/src/lib/assistant/assistant.component.ts - 352 + 380 @@ -5121,7 +5125,7 @@ WTD libs/ui/src/lib/assistant/assistant.component.ts - 352 + 380 @@ -5129,7 +5133,7 @@ Mes fins a la data libs/ui/src/lib/assistant/assistant.component.ts - 356 + 384 @@ -5137,7 +5141,7 @@ MTD libs/ui/src/lib/assistant/assistant.component.ts - 356 + 384 @@ -5145,7 +5149,7 @@ Any fins a la data libs/ui/src/lib/assistant/assistant.component.ts - 360 + 388 @@ -5161,7 +5165,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 370 + 398 @@ -5169,7 +5173,7 @@ anys libs/ui/src/lib/assistant/assistant.component.ts - 395 + 423 @@ -5185,7 +5189,7 @@ Interval de dates libs/ui/src/lib/assistant/assistant.html - 143 + 171 @@ -5193,7 +5197,7 @@ Restableix els filtres libs/ui/src/lib/assistant/assistant.html - 238 + 266 @@ -5201,7 +5205,7 @@ Aplicar filtres libs/ui/src/lib/assistant/assistant.html - 248 + 276 @@ -5329,7 +5333,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 98 + 122 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -5345,7 +5349,7 @@ Mostra-ho tot libs/ui/src/lib/holdings-table/holdings-table.component.html - 197 + 221 @@ -5361,7 +5365,7 @@ libs/ui/src/lib/assistant/assistant.html - 157 + 185 libs/ui/src/lib/i18n.ts @@ -5401,7 +5405,7 @@ libs/ui/src/lib/assistant/assistant.html - 218 + 246 libs/ui/src/lib/i18n.ts @@ -5621,7 +5625,7 @@ Etiqueta libs/ui/src/lib/assistant/assistant.html - 207 + 235 libs/ui/src/lib/i18n.ts @@ -6388,6 +6392,14 @@ 33 + + Accounts + Accounts + + libs/ui/src/lib/assistant/assistant.html + 84 + + Copy link to clipboard Copy link to clipboard @@ -7015,7 +7027,7 @@ Change libs/ui/src/lib/holdings-table/holdings-table.component.html - 119 + 143 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -7035,7 +7047,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 142 + 166 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -7146,6 +7158,14 @@ 201 + + Find account, holding or page... + Find account, holding or page... + + libs/ui/src/lib/assistant/assistant.component.ts + 162 + + Generate Security Token Generate Security Token @@ -7420,20 +7440,12 @@ 12 - - Find holding or page... - Find holding or page... - - libs/ui/src/lib/assistant/assistant.component.ts - 161 - - Quick Links Quick Links libs/ui/src/lib/assistant/assistant.html - 56 + 58 @@ -7441,7 +7453,7 @@ Asset Profiles libs/ui/src/lib/assistant/assistant.html - 112 + 140 @@ -7916,7 +7928,7 @@ No results found... libs/ui/src/lib/assistant/assistant.html - 49 + 51 diff --git a/apps/client/src/locales/messages.de.xlf b/apps/client/src/locales/messages.de.xlf index 45f6478df..bef98b3b6 100644 --- a/apps/client/src/locales/messages.de.xlf +++ b/apps/client/src/locales/messages.de.xlf @@ -190,7 +190,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 74 + 98 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -666,7 +666,7 @@ apps/client/src/app/pages/public/public-page.html - 220 + 221 @@ -714,7 +714,7 @@ Aktivitäten verwalten apps/client/src/app/components/home-holdings/home-holdings.html - 66 + 67 @@ -954,7 +954,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 98 + 122 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -970,7 +970,7 @@ Alle anzeigen libs/ui/src/lib/holdings-table/holdings-table.component.html - 197 + 221 @@ -982,7 +982,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 348 + 376 @@ -990,7 +990,7 @@ YTD libs/ui/src/lib/assistant/assistant.component.ts - 360 + 388 @@ -998,7 +998,7 @@ 1J libs/ui/src/lib/assistant/assistant.component.ts - 370 + 398 @@ -1006,7 +1006,7 @@ 5J libs/ui/src/lib/assistant/assistant.component.ts - 395 + 423 @@ -1014,7 +1014,7 @@ Max libs/ui/src/lib/assistant/assistant.component.ts - 401 + 429 @@ -1778,7 +1778,7 @@ Positionen libs/ui/src/lib/assistant/assistant.html - 82 + 110 @@ -1848,6 +1848,10 @@ libs/ui/src/lib/activities-table/activities-table.component.html 191 + + libs/ui/src/lib/holdings-table/holdings-table.component.html + 74 + Unit Price @@ -2006,7 +2010,7 @@ Ghostfolio verschafft dir den Überblick über dein Vermögen. apps/client/src/app/pages/public/public-page.html - 216 + 217 @@ -2586,7 +2590,7 @@ libs/ui/src/lib/assistant/assistant.html - 157 + 185 libs/ui/src/lib/i18n.ts @@ -2618,7 +2622,7 @@ libs/ui/src/lib/assistant/assistant.html - 218 + 246 libs/ui/src/lib/i18n.ts @@ -2658,7 +2662,7 @@ Tag libs/ui/src/lib/assistant/assistant.html - 207 + 235 libs/ui/src/lib/i18n.ts @@ -3062,7 +3066,7 @@ libs/ui/src/lib/assistant/assistant.html - 179 + 207 @@ -5420,7 +5424,7 @@ Zeitraum libs/ui/src/lib/assistant/assistant.html - 143 + 171 @@ -5564,7 +5568,7 @@ Seit Wochenbeginn libs/ui/src/lib/assistant/assistant.component.ts - 352 + 380 @@ -5572,7 +5576,7 @@ WTD libs/ui/src/lib/assistant/assistant.component.ts - 352 + 380 @@ -5580,7 +5584,7 @@ Seit Monatsbeginn libs/ui/src/lib/assistant/assistant.component.ts - 356 + 384 @@ -5588,7 +5592,7 @@ MTD libs/ui/src/lib/assistant/assistant.component.ts - 356 + 384 @@ -5596,7 +5600,7 @@ Seit Jahresbeginn libs/ui/src/lib/assistant/assistant.component.ts - 360 + 388 @@ -5632,7 +5636,7 @@ Filter zurücksetzen libs/ui/src/lib/assistant/assistant.html - 238 + 266 @@ -5648,7 +5652,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 370 + 398 @@ -5656,7 +5660,7 @@ Jahre libs/ui/src/lib/assistant/assistant.component.ts - 395 + 423 @@ -5664,7 +5668,7 @@ Filter anwenden libs/ui/src/lib/assistant/assistant.html - 248 + 276 @@ -5965,7 +5969,7 @@ Möchtest du deine persönliche Anlagestrategie verfeinern? apps/client/src/app/pages/public/public-page.html - 212 + 213 @@ -6412,6 +6416,14 @@ 33 + + Accounts + Konten + + libs/ui/src/lib/assistant/assistant.html + 84 + + Copy link to clipboard Link in die Zwischenablage kopieren @@ -7039,7 +7051,7 @@ Änderung libs/ui/src/lib/holdings-table/holdings-table.component.html - 119 + 143 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -7059,7 +7071,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 142 + 166 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -7170,6 +7182,14 @@ 201 + + Find account, holding or page... + Konto, Position oder Seite finden... + + libs/ui/src/lib/assistant/assistant.component.ts + 162 + + Generate Security Token Sicherheits-Token generieren @@ -7420,20 +7440,12 @@ 12 - - Find holding or page... - Position oder Seite finden... - - libs/ui/src/lib/assistant/assistant.component.ts - 161 - - Quick Links Schnellzugriff libs/ui/src/lib/assistant/assistant.html - 56 + 58 @@ -7441,7 +7453,7 @@ Anlageprofile libs/ui/src/lib/assistant/assistant.html - 112 + 140 @@ -7916,7 +7928,7 @@ Keine Ergebnisse gefunden... libs/ui/src/lib/assistant/assistant.html - 49 + 51 diff --git a/apps/client/src/locales/messages.es.xlf b/apps/client/src/locales/messages.es.xlf index 2b1133572..3f2fb0a0b 100644 --- a/apps/client/src/locales/messages.es.xlf +++ b/apps/client/src/locales/messages.es.xlf @@ -191,7 +191,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 74 + 98 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -651,7 +651,7 @@ apps/client/src/app/pages/public/public-page.html - 220 + 221 @@ -699,7 +699,7 @@ Gestión de las operaciones apps/client/src/app/components/home-holdings/home-holdings.html - 66 + 67 @@ -939,7 +939,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 98 + 122 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -955,7 +955,7 @@ Mostrar todos libs/ui/src/lib/holdings-table/holdings-table.component.html - 197 + 221 @@ -967,7 +967,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 348 + 376 @@ -975,7 +975,7 @@ Desde principio de año libs/ui/src/lib/assistant/assistant.component.ts - 360 + 388 @@ -983,7 +983,7 @@ 1 año libs/ui/src/lib/assistant/assistant.component.ts - 370 + 398 @@ -991,7 +991,7 @@ 5 años libs/ui/src/lib/assistant/assistant.component.ts - 395 + 423 @@ -999,7 +999,7 @@ Máximo libs/ui/src/lib/assistant/assistant.component.ts - 401 + 429 @@ -1763,7 +1763,7 @@ Participaciones libs/ui/src/lib/assistant/assistant.html - 82 + 110 @@ -1833,6 +1833,10 @@ libs/ui/src/lib/activities-table/activities-table.component.html 191 + + libs/ui/src/lib/holdings-table/holdings-table.component.html + 74 + Unit Price @@ -1991,7 +1995,7 @@ Ghostfolio te permite hacer un seguimiento de tu riqueza. apps/client/src/app/pages/public/public-page.html - 216 + 217 @@ -2571,7 +2575,7 @@ libs/ui/src/lib/assistant/assistant.html - 157 + 185 libs/ui/src/lib/i18n.ts @@ -2603,7 +2607,7 @@ libs/ui/src/lib/assistant/assistant.html - 218 + 246 libs/ui/src/lib/i18n.ts @@ -2643,7 +2647,7 @@ Etiqueta libs/ui/src/lib/assistant/assistant.html - 207 + 235 libs/ui/src/lib/i18n.ts @@ -3047,7 +3051,7 @@ libs/ui/src/lib/assistant/assistant.html - 179 + 207 @@ -5397,7 +5401,7 @@ Rango de fechas libs/ui/src/lib/assistant/assistant.html - 143 + 171 @@ -5541,7 +5545,7 @@ Semana hasta la fecha libs/ui/src/lib/assistant/assistant.component.ts - 352 + 380 @@ -5549,7 +5553,7 @@ WTD libs/ui/src/lib/assistant/assistant.component.ts - 352 + 380 @@ -5557,7 +5561,7 @@ Mes hasta la fecha libs/ui/src/lib/assistant/assistant.component.ts - 356 + 384 @@ -5565,7 +5569,7 @@ MTD libs/ui/src/lib/assistant/assistant.component.ts - 356 + 384 @@ -5573,7 +5577,7 @@ El año hasta la fecha libs/ui/src/lib/assistant/assistant.component.ts - 360 + 388 @@ -5609,7 +5613,7 @@ Reiniciar filtros libs/ui/src/lib/assistant/assistant.html - 238 + 266 @@ -5625,7 +5629,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 370 + 398 @@ -5633,7 +5637,7 @@ años libs/ui/src/lib/assistant/assistant.component.ts - 395 + 423 @@ -5641,7 +5645,7 @@ Aplicar filtros libs/ui/src/lib/assistant/assistant.html - 248 + 276 @@ -5942,7 +5946,7 @@ ¿Te gustaría refinar tu estrategia de inversión personal? apps/client/src/app/pages/public/public-page.html - 212 + 213 @@ -6389,6 +6393,14 @@ 33 + + Accounts + Accounts + + libs/ui/src/lib/assistant/assistant.html + 84 + + Copy link to clipboard Copiar enlace al portapapeles @@ -7016,7 +7028,7 @@ Cambiar libs/ui/src/lib/holdings-table/holdings-table.component.html - 119 + 143 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -7036,7 +7048,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 142 + 166 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -7147,6 +7159,14 @@ 201 + + Find account, holding or page... + Find account, holding or page... + + libs/ui/src/lib/assistant/assistant.component.ts + 162 + + Generate Security Token Generar token de seguridad @@ -7421,20 +7441,12 @@ 12 - - Find holding or page... - Buscar explotación o página... - - libs/ui/src/lib/assistant/assistant.component.ts - 161 - - Quick Links Enlaces rápidos libs/ui/src/lib/assistant/assistant.html - 56 + 58 @@ -7442,7 +7454,7 @@ Perfiles de activos libs/ui/src/lib/assistant/assistant.html - 112 + 140 @@ -7917,7 +7929,7 @@ No se encontraron resultados... libs/ui/src/lib/assistant/assistant.html - 49 + 51 diff --git a/apps/client/src/locales/messages.fr.xlf b/apps/client/src/locales/messages.fr.xlf index 4d97b2b8a..db30d79cb 100644 --- a/apps/client/src/locales/messages.fr.xlf +++ b/apps/client/src/locales/messages.fr.xlf @@ -246,7 +246,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 74 + 98 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -946,7 +946,7 @@ Gérer les Activités apps/client/src/app/components/home-holdings/home-holdings.html - 66 + 67 @@ -1204,6 +1204,10 @@ libs/ui/src/lib/activities-table/activities-table.component.html 191 + + libs/ui/src/lib/holdings-table/holdings-table.component.html + 74 + Report Data Glitch @@ -1222,7 +1226,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 348 + 376 @@ -1230,7 +1234,7 @@ CDA libs/ui/src/lib/assistant/assistant.component.ts - 360 + 388 @@ -1238,7 +1242,7 @@ 1A libs/ui/src/lib/assistant/assistant.component.ts - 370 + 398 @@ -1246,7 +1250,7 @@ 5A libs/ui/src/lib/assistant/assistant.component.ts - 395 + 423 @@ -1254,7 +1258,7 @@ Max libs/ui/src/lib/assistant/assistant.component.ts - 401 + 429 @@ -2330,7 +2334,7 @@ Positions libs/ui/src/lib/assistant/assistant.html - 82 + 110 @@ -2386,7 +2390,7 @@ Ghostfolio vous aide à garder un aperçu de votre patrimoine. apps/client/src/app/pages/public/public-page.html - 216 + 217 @@ -2398,7 +2402,7 @@ apps/client/src/app/pages/public/public-page.html - 220 + 221 @@ -2678,7 +2682,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 98 + 122 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -2694,7 +2698,7 @@ Montrer tout libs/ui/src/lib/holdings-table/holdings-table.component.html - 197 + 221 @@ -2710,7 +2714,7 @@ libs/ui/src/lib/assistant/assistant.html - 157 + 185 libs/ui/src/lib/i18n.ts @@ -2742,7 +2746,7 @@ libs/ui/src/lib/assistant/assistant.html - 218 + 246 libs/ui/src/lib/i18n.ts @@ -2842,7 +2846,7 @@ Étiquette libs/ui/src/lib/assistant/assistant.html - 207 + 235 libs/ui/src/lib/i18n.ts @@ -3046,7 +3050,7 @@ libs/ui/src/lib/assistant/assistant.html - 179 + 207 @@ -5396,7 +5400,7 @@ Intervalle de Date libs/ui/src/lib/assistant/assistant.html - 143 + 171 @@ -5540,7 +5544,7 @@ Week to date libs/ui/src/lib/assistant/assistant.component.ts - 352 + 380 @@ -5548,7 +5552,7 @@ WTD libs/ui/src/lib/assistant/assistant.component.ts - 352 + 380 @@ -5556,7 +5560,7 @@ Month to date libs/ui/src/lib/assistant/assistant.component.ts - 356 + 384 @@ -5564,7 +5568,7 @@ MTD libs/ui/src/lib/assistant/assistant.component.ts - 356 + 384 @@ -5572,7 +5576,7 @@ Year to date libs/ui/src/lib/assistant/assistant.component.ts - 360 + 388 @@ -5608,7 +5612,7 @@ Réinitialiser les Filtres libs/ui/src/lib/assistant/assistant.html - 238 + 266 @@ -5624,7 +5628,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 370 + 398 @@ -5632,7 +5636,7 @@ années libs/ui/src/lib/assistant/assistant.component.ts - 395 + 423 @@ -5640,7 +5644,7 @@ Appliquer les Filtres libs/ui/src/lib/assistant/assistant.html - 248 + 276 @@ -5941,7 +5945,7 @@ Souhaitez-vous affiner votre stratégie d’investissement personnelle? apps/client/src/app/pages/public/public-page.html - 212 + 213 @@ -6388,6 +6392,14 @@ 33 + + Accounts + Accounts + + libs/ui/src/lib/assistant/assistant.html + 84 + + Copy link to clipboard Copier le lien dans le presse-papiers @@ -7015,7 +7027,7 @@ Variation libs/ui/src/lib/holdings-table/holdings-table.component.html - 119 + 143 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -7035,7 +7047,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 142 + 166 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -7146,6 +7158,14 @@ 201 + + Find account, holding or page... + Find account, holding or page... + + libs/ui/src/lib/assistant/assistant.component.ts + 162 + + Generate Security Token Générer un jeton de sécurité @@ -7420,20 +7440,12 @@ 12 - - Find holding or page... - Rechercher une position ou une page... - - libs/ui/src/lib/assistant/assistant.component.ts - 161 - - Quick Links Liens rapides libs/ui/src/lib/assistant/assistant.html - 56 + 58 @@ -7441,7 +7453,7 @@ Profils d’Actifs libs/ui/src/lib/assistant/assistant.html - 112 + 140 @@ -7916,7 +7928,7 @@ No results found... libs/ui/src/lib/assistant/assistant.html - 49 + 51 diff --git a/apps/client/src/locales/messages.it.xlf b/apps/client/src/locales/messages.it.xlf index e3ae0a5a6..9d8bd6e92 100644 --- a/apps/client/src/locales/messages.it.xlf +++ b/apps/client/src/locales/messages.it.xlf @@ -191,7 +191,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 74 + 98 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -651,7 +651,7 @@ apps/client/src/app/pages/public/public-page.html - 220 + 221 @@ -699,7 +699,7 @@ Gestione delle attività apps/client/src/app/components/home-holdings/home-holdings.html - 66 + 67 @@ -939,7 +939,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 98 + 122 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -955,7 +955,7 @@ Mostra tutti libs/ui/src/lib/holdings-table/holdings-table.component.html - 197 + 221 @@ -967,7 +967,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 348 + 376 @@ -975,7 +975,7 @@ anno corrente libs/ui/src/lib/assistant/assistant.component.ts - 360 + 388 @@ -983,7 +983,7 @@ 1 anno libs/ui/src/lib/assistant/assistant.component.ts - 370 + 398 @@ -991,7 +991,7 @@ 5 anni libs/ui/src/lib/assistant/assistant.component.ts - 395 + 423 @@ -999,7 +999,7 @@ Massimo libs/ui/src/lib/assistant/assistant.component.ts - 401 + 429 @@ -1763,7 +1763,7 @@ Partecipazioni libs/ui/src/lib/assistant/assistant.html - 82 + 110 @@ -1833,6 +1833,10 @@ libs/ui/src/lib/activities-table/activities-table.component.html 191 + + libs/ui/src/lib/holdings-table/holdings-table.component.html + 74 + Unit Price @@ -1991,7 +1995,7 @@ Ghostfolio ti permette di tenere traccia della tua ricchezza. apps/client/src/app/pages/public/public-page.html - 216 + 217 @@ -2571,7 +2575,7 @@ libs/ui/src/lib/assistant/assistant.html - 157 + 185 libs/ui/src/lib/i18n.ts @@ -2603,7 +2607,7 @@ libs/ui/src/lib/assistant/assistant.html - 218 + 246 libs/ui/src/lib/i18n.ts @@ -2643,7 +2647,7 @@ Etichetta libs/ui/src/lib/assistant/assistant.html - 207 + 235 libs/ui/src/lib/i18n.ts @@ -3047,7 +3051,7 @@ libs/ui/src/lib/assistant/assistant.html - 179 + 207 @@ -5397,7 +5401,7 @@ Intervallo di date libs/ui/src/lib/assistant/assistant.html - 143 + 171 @@ -5541,7 +5545,7 @@ Da inizio settimana libs/ui/src/lib/assistant/assistant.component.ts - 352 + 380 @@ -5549,7 +5553,7 @@ Settimana corrente libs/ui/src/lib/assistant/assistant.component.ts - 352 + 380 @@ -5557,7 +5561,7 @@ Da inizio mese libs/ui/src/lib/assistant/assistant.component.ts - 356 + 384 @@ -5565,7 +5569,7 @@ Mese corrente libs/ui/src/lib/assistant/assistant.component.ts - 356 + 384 @@ -5573,7 +5577,7 @@ Da inizio anno libs/ui/src/lib/assistant/assistant.component.ts - 360 + 388 @@ -5609,7 +5613,7 @@ Reset Filtri libs/ui/src/lib/assistant/assistant.html - 238 + 266 @@ -5625,7 +5629,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 370 + 398 @@ -5633,7 +5637,7 @@ anni libs/ui/src/lib/assistant/assistant.component.ts - 395 + 423 @@ -5641,7 +5645,7 @@ Applica i Filtri libs/ui/src/lib/assistant/assistant.html - 248 + 276 @@ -5942,7 +5946,7 @@ Vorresti perfezionare la tua strategia personale di investimento? apps/client/src/app/pages/public/public-page.html - 212 + 213 @@ -6389,6 +6393,14 @@ 33 + + Accounts + Accounts + + libs/ui/src/lib/assistant/assistant.html + 84 + + Copy link to clipboard Copia link negli appunti @@ -7016,7 +7028,7 @@ Cambia libs/ui/src/lib/holdings-table/holdings-table.component.html - 119 + 143 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -7036,7 +7048,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 142 + 166 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -7147,6 +7159,14 @@ 201 + + Find account, holding or page... + Find account, holding or page... + + libs/ui/src/lib/assistant/assistant.component.ts + 162 + + Generate Security Token Genera Token di Sicurezza @@ -7421,20 +7441,12 @@ 12 - - Find holding or page... - Trova azienda o pagina... - - libs/ui/src/lib/assistant/assistant.component.ts - 161 - - Quick Links Collegamenti rapidi libs/ui/src/lib/assistant/assistant.html - 56 + 58 @@ -7442,7 +7454,7 @@ Profili delle risorse libs/ui/src/lib/assistant/assistant.html - 112 + 140 @@ -7917,7 +7929,7 @@ No results found... libs/ui/src/lib/assistant/assistant.html - 49 + 51 diff --git a/apps/client/src/locales/messages.nl.xlf b/apps/client/src/locales/messages.nl.xlf index a30f13c38..3b7de7aa9 100644 --- a/apps/client/src/locales/messages.nl.xlf +++ b/apps/client/src/locales/messages.nl.xlf @@ -190,7 +190,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 74 + 98 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -650,7 +650,7 @@ apps/client/src/app/pages/public/public-page.html - 220 + 221 @@ -698,7 +698,7 @@ Activiteiten beheren apps/client/src/app/components/home-holdings/home-holdings.html - 66 + 67 @@ -938,7 +938,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 98 + 122 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -954,7 +954,7 @@ Toon alle libs/ui/src/lib/holdings-table/holdings-table.component.html - 197 + 221 @@ -966,7 +966,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 348 + 376 @@ -974,7 +974,7 @@ YTD libs/ui/src/lib/assistant/assistant.component.ts - 360 + 388 @@ -982,7 +982,7 @@ 1J libs/ui/src/lib/assistant/assistant.component.ts - 370 + 398 @@ -990,7 +990,7 @@ 5J libs/ui/src/lib/assistant/assistant.component.ts - 395 + 423 @@ -998,7 +998,7 @@ Max libs/ui/src/lib/assistant/assistant.component.ts - 401 + 429 @@ -1762,7 +1762,7 @@ Posities libs/ui/src/lib/assistant/assistant.html - 82 + 110 @@ -1832,6 +1832,10 @@ libs/ui/src/lib/activities-table/activities-table.component.html 191 + + libs/ui/src/lib/holdings-table/holdings-table.component.html + 74 + Unit Price @@ -1990,7 +1994,7 @@ Ghostfolio stelt je in staat om je vermogen bij te houden. apps/client/src/app/pages/public/public-page.html - 216 + 217 @@ -2570,7 +2574,7 @@ libs/ui/src/lib/assistant/assistant.html - 157 + 185 libs/ui/src/lib/i18n.ts @@ -2602,7 +2606,7 @@ libs/ui/src/lib/assistant/assistant.html - 218 + 246 libs/ui/src/lib/i18n.ts @@ -2642,7 +2646,7 @@ Label libs/ui/src/lib/assistant/assistant.html - 207 + 235 libs/ui/src/lib/i18n.ts @@ -3046,7 +3050,7 @@ libs/ui/src/lib/assistant/assistant.html - 179 + 207 @@ -5396,7 +5400,7 @@ Datumbereik libs/ui/src/lib/assistant/assistant.html - 143 + 171 @@ -5540,7 +5544,7 @@ Week tot nu toe libs/ui/src/lib/assistant/assistant.component.ts - 352 + 380 @@ -5548,7 +5552,7 @@ Week tot nu toe libs/ui/src/lib/assistant/assistant.component.ts - 352 + 380 @@ -5556,7 +5560,7 @@ Maand tot nu toe libs/ui/src/lib/assistant/assistant.component.ts - 356 + 384 @@ -5564,7 +5568,7 @@ MTD libs/ui/src/lib/assistant/assistant.component.ts - 356 + 384 @@ -5572,7 +5576,7 @@ Jaar tot nu toe libs/ui/src/lib/assistant/assistant.component.ts - 360 + 388 @@ -5608,7 +5612,7 @@ Filters Herstellen libs/ui/src/lib/assistant/assistant.html - 238 + 266 @@ -5624,7 +5628,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 370 + 398 @@ -5632,7 +5636,7 @@ jaren libs/ui/src/lib/assistant/assistant.component.ts - 395 + 423 @@ -5640,7 +5644,7 @@ Filters Toepassen libs/ui/src/lib/assistant/assistant.html - 248 + 276 @@ -5941,7 +5945,7 @@ Wilt u uw persoonlijke belegginngsstrategie verfijnen? apps/client/src/app/pages/public/public-page.html - 212 + 213 @@ -6388,6 +6392,14 @@ 33 + + Accounts + Accounts + + libs/ui/src/lib/assistant/assistant.html + 84 + + Copy link to clipboard Kopieer link naar klembord @@ -7015,7 +7027,7 @@ Aanpassen libs/ui/src/lib/holdings-table/holdings-table.component.html - 119 + 143 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -7035,7 +7047,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 142 + 166 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -7146,6 +7158,14 @@ 201 + + Find account, holding or page... + Find account, holding or page... + + libs/ui/src/lib/assistant/assistant.component.ts + 162 + + Generate Security Token Beveiligingstoken Aanmaken @@ -7420,20 +7440,12 @@ 12 - - Find holding or page... - Zoek holding of pagina... - - libs/ui/src/lib/assistant/assistant.component.ts - 161 - - Quick Links Snelle koppelingen libs/ui/src/lib/assistant/assistant.html - 56 + 58 @@ -7441,7 +7453,7 @@ Activaprofielen libs/ui/src/lib/assistant/assistant.html - 112 + 140 @@ -7916,7 +7928,7 @@ Geen resultaten gevonden... libs/ui/src/lib/assistant/assistant.html - 49 + 51 diff --git a/apps/client/src/locales/messages.pl.xlf b/apps/client/src/locales/messages.pl.xlf index 012f5ff7b..e6b118c7d 100644 --- a/apps/client/src/locales/messages.pl.xlf +++ b/apps/client/src/locales/messages.pl.xlf @@ -467,7 +467,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 74 + 98 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -1419,7 +1419,7 @@ Zarządzaj Aktywnościami apps/client/src/app/components/home-holdings/home-holdings.html - 66 + 67 @@ -1797,6 +1797,10 @@ libs/ui/src/lib/activities-table/activities-table.component.html 191 + + libs/ui/src/lib/holdings-table/holdings-table.component.html + 74 + Report Data Glitch @@ -1967,7 +1971,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 348 + 376 @@ -1975,7 +1979,7 @@ Liczony od początku roku (year-to-date) libs/ui/src/lib/assistant/assistant.component.ts - 360 + 388 @@ -1983,7 +1987,7 @@ 1 rok libs/ui/src/lib/assistant/assistant.component.ts - 370 + 398 @@ -1991,7 +1995,7 @@ 5 lat libs/ui/src/lib/assistant/assistant.component.ts - 395 + 423 @@ -1999,7 +2003,7 @@ Maksimum libs/ui/src/lib/assistant/assistant.component.ts - 401 + 429 @@ -2835,7 +2839,7 @@ apps/client/src/app/pages/public/public-page.html - 220 + 221 @@ -3535,7 +3539,7 @@ libs/ui/src/lib/assistant/assistant.html - 179 + 207 @@ -3923,7 +3927,7 @@ Inwestycje libs/ui/src/lib/assistant/assistant.html - 82 + 110 @@ -4171,7 +4175,7 @@ Ghostfolio umożliwia śledzenie wartości swojego majątku. apps/client/src/app/pages/public/public-page.html - 216 + 217 @@ -4736,7 +4740,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 98 + 122 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -4752,7 +4756,7 @@ Pokaż wszystko libs/ui/src/lib/holdings-table/holdings-table.component.html - 197 + 221 @@ -4768,7 +4772,7 @@ libs/ui/src/lib/assistant/assistant.html - 157 + 185 libs/ui/src/lib/i18n.ts @@ -4808,7 +4812,7 @@ libs/ui/src/lib/assistant/assistant.html - 218 + 246 libs/ui/src/lib/i18n.ts @@ -5020,7 +5024,7 @@ Tag libs/ui/src/lib/assistant/assistant.html - 207 + 235 libs/ui/src/lib/i18n.ts @@ -5396,7 +5400,7 @@ Zakres Dat libs/ui/src/lib/assistant/assistant.html - 143 + 171 @@ -5540,7 +5544,7 @@ Dotychczasowy tydzień libs/ui/src/lib/assistant/assistant.component.ts - 352 + 380 @@ -5548,7 +5552,7 @@ WTD libs/ui/src/lib/assistant/assistant.component.ts - 352 + 380 @@ -5556,7 +5560,7 @@ Od początku miesiąca libs/ui/src/lib/assistant/assistant.component.ts - 356 + 384 @@ -5564,7 +5568,7 @@ MTD libs/ui/src/lib/assistant/assistant.component.ts - 356 + 384 @@ -5572,7 +5576,7 @@ Od początku roku libs/ui/src/lib/assistant/assistant.component.ts - 360 + 388 @@ -5608,7 +5612,7 @@ Resetuj Filtry libs/ui/src/lib/assistant/assistant.html - 238 + 266 @@ -5624,7 +5628,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 370 + 398 @@ -5632,7 +5636,7 @@ lata libs/ui/src/lib/assistant/assistant.component.ts - 395 + 423 @@ -5640,7 +5644,7 @@ Zastosuj Filtry libs/ui/src/lib/assistant/assistant.html - 248 + 276 @@ -5941,7 +5945,7 @@ Chcesz udoskonalić swoją osobistą strategię inwestycyjną? apps/client/src/app/pages/public/public-page.html - 212 + 213 @@ -6388,6 +6392,14 @@ 33 + + Accounts + Accounts + + libs/ui/src/lib/assistant/assistant.html + 84 + + Copy link to clipboard Kopiuj link do schowka @@ -7015,7 +7027,7 @@ Zmiana libs/ui/src/lib/holdings-table/holdings-table.component.html - 119 + 143 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -7035,7 +7047,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 142 + 166 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -7146,6 +7158,14 @@ 201 + + Find account, holding or page... + Find account, holding or page... + + libs/ui/src/lib/assistant/assistant.component.ts + 162 + + Generate Security Token Generowanie Tokena Zabezpieczającego @@ -7420,20 +7440,12 @@ 12 - - Find holding or page... - Znajdź gospodarstwo lub stronę... - - libs/ui/src/lib/assistant/assistant.component.ts - 161 - - Quick Links Szybkie linki libs/ui/src/lib/assistant/assistant.html - 56 + 58 @@ -7441,7 +7453,7 @@ Profile zasobów libs/ui/src/lib/assistant/assistant.html - 112 + 140 @@ -7916,7 +7928,7 @@ No results found... libs/ui/src/lib/assistant/assistant.html - 49 + 51 diff --git a/apps/client/src/locales/messages.pt.xlf b/apps/client/src/locales/messages.pt.xlf index 7176f6c53..e6255b1e4 100644 --- a/apps/client/src/locales/messages.pt.xlf +++ b/apps/client/src/locales/messages.pt.xlf @@ -246,7 +246,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 74 + 98 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -818,7 +818,7 @@ Gerir Atividades apps/client/src/app/components/home-holdings/home-holdings.html - 66 + 67 @@ -1084,6 +1084,10 @@ libs/ui/src/lib/activities-table/activities-table.component.html 191 + + libs/ui/src/lib/holdings-table/holdings-table.component.html + 74 + Sector @@ -1182,7 +1186,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 98 + 122 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -1198,7 +1202,7 @@ Mostrar tudo libs/ui/src/lib/holdings-table/holdings-table.component.html - 197 + 221 @@ -1210,7 +1214,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 348 + 376 @@ -1218,7 +1222,7 @@ AATD libs/ui/src/lib/assistant/assistant.component.ts - 360 + 388 @@ -1226,7 +1230,7 @@ 1A libs/ui/src/lib/assistant/assistant.component.ts - 370 + 398 @@ -1234,7 +1238,7 @@ 5A libs/ui/src/lib/assistant/assistant.component.ts - 395 + 423 @@ -1242,7 +1246,7 @@ Máx libs/ui/src/lib/assistant/assistant.component.ts - 401 + 429 @@ -2270,7 +2274,7 @@ Posições libs/ui/src/lib/assistant/assistant.html - 82 + 110 @@ -2326,7 +2330,7 @@ O Ghostfolio permite-lhe estar a par e gerir a sua riqueza. apps/client/src/app/pages/public/public-page.html - 216 + 217 @@ -2338,7 +2342,7 @@ apps/client/src/app/pages/public/public-page.html - 220 + 221 @@ -2590,7 +2594,7 @@ libs/ui/src/lib/assistant/assistant.html - 157 + 185 libs/ui/src/lib/i18n.ts @@ -2622,7 +2626,7 @@ libs/ui/src/lib/assistant/assistant.html - 218 + 246 libs/ui/src/lib/i18n.ts @@ -2694,7 +2698,7 @@ Marcador libs/ui/src/lib/assistant/assistant.html - 207 + 235 libs/ui/src/lib/i18n.ts @@ -3046,7 +3050,7 @@ libs/ui/src/lib/assistant/assistant.html - 179 + 207 @@ -5396,7 +5400,7 @@ Período libs/ui/src/lib/assistant/assistant.html - 143 + 171 @@ -5540,7 +5544,7 @@ Semana até agora libs/ui/src/lib/assistant/assistant.component.ts - 352 + 380 @@ -5548,7 +5552,7 @@ WTD libs/ui/src/lib/assistant/assistant.component.ts - 352 + 380 @@ -5556,7 +5560,7 @@ Do mês até a data libs/ui/src/lib/assistant/assistant.component.ts - 356 + 384 @@ -5564,7 +5568,7 @@ MTD libs/ui/src/lib/assistant/assistant.component.ts - 356 + 384 @@ -5572,7 +5576,7 @@ No acumulado do ano libs/ui/src/lib/assistant/assistant.component.ts - 360 + 388 @@ -5608,7 +5612,7 @@ Redefinir filtros libs/ui/src/lib/assistant/assistant.html - 238 + 266 @@ -5624,7 +5628,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 370 + 398 @@ -5632,7 +5636,7 @@ anos libs/ui/src/lib/assistant/assistant.component.ts - 395 + 423 @@ -5640,7 +5644,7 @@ Aplicar filtros libs/ui/src/lib/assistant/assistant.html - 248 + 276 @@ -5941,7 +5945,7 @@ Você gostaria de refinar seu estratégia de investimento pessoal? apps/client/src/app/pages/public/public-page.html - 212 + 213 @@ -6388,6 +6392,14 @@ 33 + + Accounts + Accounts + + libs/ui/src/lib/assistant/assistant.html + 84 + + Copy link to clipboard Copiar link para a área de transferência @@ -7015,7 +7027,7 @@ Mudar libs/ui/src/lib/holdings-table/holdings-table.component.html - 119 + 143 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -7035,7 +7047,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 142 + 166 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -7146,6 +7158,14 @@ 201 + + Find account, holding or page... + Find account, holding or page... + + libs/ui/src/lib/assistant/assistant.component.ts + 162 + + Generate Security Token Generate Security Token @@ -7420,20 +7440,12 @@ 12 - - Find holding or page... - Encontrar holding ou página... - - libs/ui/src/lib/assistant/assistant.component.ts - 161 - - Quick Links Links rápidos libs/ui/src/lib/assistant/assistant.html - 56 + 58 @@ -7441,7 +7453,7 @@ Perfis de ativos libs/ui/src/lib/assistant/assistant.html - 112 + 140 @@ -7916,7 +7928,7 @@ Nenhum resultado encontrado... libs/ui/src/lib/assistant/assistant.html - 49 + 51 diff --git a/apps/client/src/locales/messages.tr.xlf b/apps/client/src/locales/messages.tr.xlf index b6e5f8006..f6e99f832 100644 --- a/apps/client/src/locales/messages.tr.xlf +++ b/apps/client/src/locales/messages.tr.xlf @@ -427,7 +427,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 74 + 98 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -1275,7 +1275,7 @@ İşlemleri Yönet apps/client/src/app/components/home-holdings/home-holdings.html - 66 + 67 @@ -1637,6 +1637,10 @@ libs/ui/src/lib/activities-table/activities-table.component.html 191 + + libs/ui/src/lib/holdings-table/holdings-table.component.html + 74 + Fees @@ -1823,7 +1827,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 348 + 376 @@ -1831,7 +1835,7 @@ YTD libs/ui/src/lib/assistant/assistant.component.ts - 360 + 388 @@ -1839,7 +1843,7 @@ 1Y libs/ui/src/lib/assistant/assistant.component.ts - 370 + 398 @@ -1847,7 +1851,7 @@ 5Y libs/ui/src/lib/assistant/assistant.component.ts - 395 + 423 @@ -1855,7 +1859,7 @@ Maks. libs/ui/src/lib/assistant/assistant.component.ts - 401 + 429 @@ -2419,7 +2423,7 @@ apps/client/src/app/pages/public/public-page.html - 220 + 221 @@ -3043,7 +3047,7 @@ libs/ui/src/lib/assistant/assistant.html - 179 + 207 @@ -3423,7 +3427,7 @@ Varlıklar libs/ui/src/lib/assistant/assistant.html - 82 + 110 @@ -3671,7 +3675,7 @@ Ghostfolio, varlıklarınızı takip etmenizi sağlar. apps/client/src/app/pages/public/public-page.html - 216 + 217 @@ -4464,7 +4468,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 98 + 122 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -4480,7 +4484,7 @@ Tümünü göster libs/ui/src/lib/holdings-table/holdings-table.component.html - 197 + 221 @@ -4496,7 +4500,7 @@ libs/ui/src/lib/assistant/assistant.html - 157 + 185 libs/ui/src/lib/i18n.ts @@ -4536,7 +4540,7 @@ libs/ui/src/lib/assistant/assistant.html - 218 + 246 libs/ui/src/lib/i18n.ts @@ -4748,7 +4752,7 @@ Etiket libs/ui/src/lib/assistant/assistant.html - 207 + 235 libs/ui/src/lib/i18n.ts @@ -5396,7 +5400,7 @@ Tarih Aralığı libs/ui/src/lib/assistant/assistant.html - 143 + 171 @@ -5540,7 +5544,7 @@ Hafta içi libs/ui/src/lib/assistant/assistant.component.ts - 352 + 380 @@ -5548,7 +5552,7 @@ WTD libs/ui/src/lib/assistant/assistant.component.ts - 352 + 380 @@ -5556,7 +5560,7 @@ Ay içi libs/ui/src/lib/assistant/assistant.component.ts - 356 + 384 @@ -5564,7 +5568,7 @@ MTD libs/ui/src/lib/assistant/assistant.component.ts - 356 + 384 @@ -5572,7 +5576,7 @@ Yıl içi libs/ui/src/lib/assistant/assistant.component.ts - 360 + 388 @@ -5608,7 +5612,7 @@ Filtreleri Sıfırla libs/ui/src/lib/assistant/assistant.html - 238 + 266 @@ -5624,7 +5628,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 370 + 398 @@ -5632,7 +5636,7 @@ Yıllar libs/ui/src/lib/assistant/assistant.component.ts - 395 + 423 @@ -5640,7 +5644,7 @@ Filtreleri Uygula libs/ui/src/lib/assistant/assistant.html - 248 + 276 @@ -5941,7 +5945,7 @@ Senin özel yatırım stratejinizi iyileştirmek ister misin? apps/client/src/app/pages/public/public-page.html - 212 + 213 @@ -6388,6 +6392,14 @@ 33 + + Accounts + Accounts + + libs/ui/src/lib/assistant/assistant.html + 84 + + Copy link to clipboard Bağlantıyı panoya kopyala @@ -7015,7 +7027,7 @@ Değişim libs/ui/src/lib/holdings-table/holdings-table.component.html - 119 + 143 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -7035,7 +7047,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 142 + 166 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -7146,6 +7158,14 @@ 201 + + Find account, holding or page... + Find account, holding or page... + + libs/ui/src/lib/assistant/assistant.component.ts + 162 + + Generate Security Token Güvenlik belirteci oluştur @@ -7420,20 +7440,12 @@ 12 - - Find holding or page... - Holding veya sayfayı bulun... - - libs/ui/src/lib/assistant/assistant.component.ts - 161 - - Quick Links Hızlı Bağlantılar libs/ui/src/lib/assistant/assistant.html - 56 + 58 @@ -7441,7 +7453,7 @@ Varlık Profilleri libs/ui/src/lib/assistant/assistant.html - 112 + 140 @@ -7916,7 +7928,7 @@ No results found... libs/ui/src/lib/assistant/assistant.html - 49 + 51 diff --git a/apps/client/src/locales/messages.uk.xlf b/apps/client/src/locales/messages.uk.xlf index eedf4082d..c2d420b1f 100644 --- a/apps/client/src/locales/messages.uk.xlf +++ b/apps/client/src/locales/messages.uk.xlf @@ -334,6 +334,14 @@ 33 + + Accounts + Accounts + + libs/ui/src/lib/assistant/assistant.html + 84 + + Copy link to clipboard Скопіювати посилання в буфер обміну @@ -403,7 +411,7 @@ Активи libs/ui/src/lib/assistant/assistant.html - 82 + 110 @@ -567,7 +575,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 74 + 98 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -1749,6 +1757,10 @@ libs/ui/src/lib/activities-table/activities-table.component.html 191 + + libs/ui/src/lib/holdings-table/holdings-table.component.html + 74 + Dividend Yield @@ -1835,7 +1847,7 @@ Керування діяльністю apps/client/src/app/components/home-holdings/home-holdings.html - 66 + 67 @@ -2403,7 +2415,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 348 + 376 @@ -2411,7 +2423,7 @@ З початку року libs/ui/src/lib/assistant/assistant.component.ts - 360 + 388 @@ -2419,7 +2431,7 @@ 1 рік libs/ui/src/lib/assistant/assistant.component.ts - 370 + 398 @@ -2427,7 +2439,7 @@ 5 років libs/ui/src/lib/assistant/assistant.component.ts - 395 + 423 @@ -2435,7 +2447,7 @@ Максимум libs/ui/src/lib/assistant/assistant.component.ts - 401 + 429 @@ -3452,7 +3464,7 @@ apps/client/src/app/pages/public/public-page.html - 220 + 221 @@ -4180,7 +4192,7 @@ libs/ui/src/lib/assistant/assistant.html - 179 + 207 @@ -4960,7 +4972,7 @@ Чи хотіли б ви удосконалити вашу особисту інвестиційну стратегію? apps/client/src/app/pages/public/public-page.html - 212 + 213 @@ -4968,7 +4980,7 @@ Ghostfolio надає можливість вам стежити за вашим багатством. apps/client/src/app/pages/public/public-page.html - 216 + 217 @@ -5795,7 +5807,7 @@ Тиждень до дати libs/ui/src/lib/assistant/assistant.component.ts - 352 + 380 @@ -5803,7 +5815,7 @@ WTD libs/ui/src/lib/assistant/assistant.component.ts - 352 + 380 @@ -5811,7 +5823,7 @@ Місяць до дати libs/ui/src/lib/assistant/assistant.component.ts - 356 + 384 @@ -5819,7 +5831,7 @@ MTD libs/ui/src/lib/assistant/assistant.component.ts - 356 + 384 @@ -5827,7 +5839,7 @@ Рік до дати libs/ui/src/lib/assistant/assistant.component.ts - 360 + 388 @@ -5843,7 +5855,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 370 + 398 @@ -5851,7 +5863,7 @@ роки libs/ui/src/lib/assistant/assistant.component.ts - 395 + 423 @@ -5867,7 +5879,7 @@ Діапазон дат libs/ui/src/lib/assistant/assistant.html - 143 + 171 @@ -5875,7 +5887,7 @@ Скинути фільтри libs/ui/src/lib/assistant/assistant.html - 238 + 266 @@ -5883,7 +5895,7 @@ Застосувати фільтри libs/ui/src/lib/assistant/assistant.html - 248 + 276 @@ -6027,7 +6039,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 98 + 122 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -6043,7 +6055,7 @@ Показати все libs/ui/src/lib/holdings-table/holdings-table.component.html - 197 + 221 @@ -6059,7 +6071,7 @@ libs/ui/src/lib/assistant/assistant.html - 157 + 185 libs/ui/src/lib/i18n.ts @@ -6099,7 +6111,7 @@ libs/ui/src/lib/assistant/assistant.html - 218 + 246 libs/ui/src/lib/i18n.ts @@ -6411,7 +6423,7 @@ Тег libs/ui/src/lib/assistant/assistant.html - 207 + 235 libs/ui/src/lib/i18n.ts @@ -7015,7 +7027,7 @@ Change libs/ui/src/lib/holdings-table/holdings-table.component.html - 119 + 143 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -7035,7 +7047,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 142 + 166 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -7146,6 +7158,14 @@ 201 + + Find account, holding or page... + Find account, holding or page... + + libs/ui/src/lib/assistant/assistant.component.ts + 162 + + Generate Security Token Generate Security Token @@ -7420,20 +7440,12 @@ 12 - - Find holding or page... - Find holding or page... - - libs/ui/src/lib/assistant/assistant.component.ts - 161 - - Quick Links Quick Links libs/ui/src/lib/assistant/assistant.html - 56 + 58 @@ -7441,7 +7453,7 @@ Asset Profiles libs/ui/src/lib/assistant/assistant.html - 112 + 140 @@ -7916,7 +7928,7 @@ No results found... libs/ui/src/lib/assistant/assistant.html - 49 + 51 diff --git a/apps/client/src/locales/messages.xlf b/apps/client/src/locales/messages.xlf index 26e9121c9..af021f379 100644 --- a/apps/client/src/locales/messages.xlf +++ b/apps/client/src/locales/messages.xlf @@ -449,7 +449,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 74 + 98 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -1335,7 +1335,7 @@ Manage Activities apps/client/src/app/components/home-holdings/home-holdings.html - 66 + 67 @@ -1677,6 +1677,10 @@ libs/ui/src/lib/activities-table/activities-table.component.html 191 + + libs/ui/src/lib/holdings-table/holdings-table.component.html + 74 + Report Data Glitch @@ -1834,35 +1838,35 @@ libs/ui/src/lib/assistant/assistant.component.ts - 348 + 376 YTD libs/ui/src/lib/assistant/assistant.component.ts - 360 + 388 1Y libs/ui/src/lib/assistant/assistant.component.ts - 370 + 398 5Y libs/ui/src/lib/assistant/assistant.component.ts - 395 + 423 Max libs/ui/src/lib/assistant/assistant.component.ts - 401 + 429 @@ -2627,7 +2631,7 @@ apps/client/src/app/pages/public/public-page.html - 220 + 221 @@ -3258,7 +3262,7 @@ libs/ui/src/lib/assistant/assistant.html - 179 + 207 @@ -3605,7 +3609,7 @@ Holdings libs/ui/src/lib/assistant/assistant.html - 82 + 110 @@ -3831,7 +3835,7 @@ Ghostfolio empowers you to keep track of your wealth. apps/client/src/app/pages/public/public-page.html - 216 + 217 @@ -4373,7 +4377,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 98 + 122 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -4388,7 +4392,7 @@ Show all libs/ui/src/lib/holdings-table/holdings-table.component.html - 197 + 221 @@ -4403,7 +4407,7 @@ libs/ui/src/lib/assistant/assistant.html - 157 + 185 libs/ui/src/lib/i18n.ts @@ -4441,7 +4445,7 @@ libs/ui/src/lib/assistant/assistant.html - 218 + 246 libs/ui/src/lib/i18n.ts @@ -4634,7 +4638,7 @@ Tag libs/ui/src/lib/assistant/assistant.html - 207 + 235 libs/ui/src/lib/i18n.ts @@ -4917,7 +4921,7 @@ Date Range libs/ui/src/lib/assistant/assistant.html - 143 + 171 @@ -5060,35 +5064,35 @@ Year to date libs/ui/src/lib/assistant/assistant.component.ts - 360 + 388 Week to date libs/ui/src/lib/assistant/assistant.component.ts - 352 + 380 Month to date libs/ui/src/lib/assistant/assistant.component.ts - 356 + 384 MTD libs/ui/src/lib/assistant/assistant.component.ts - 356 + 384 WTD libs/ui/src/lib/assistant/assistant.component.ts - 352 + 380 @@ -5113,7 +5117,7 @@ Reset Filters libs/ui/src/lib/assistant/assistant.html - 238 + 266 @@ -5135,21 +5139,21 @@ libs/ui/src/lib/assistant/assistant.component.ts - 370 + 398 years libs/ui/src/lib/assistant/assistant.component.ts - 395 + 423 Apply Filters libs/ui/src/lib/assistant/assistant.html - 248 + 276 @@ -5415,7 +5419,7 @@ Would you like to refine your personal investment strategy? apps/client/src/app/pages/public/public-page.html - 212 + 213 @@ -5858,6 +5862,13 @@ 84 + + Accounts + + libs/ui/src/lib/assistant/assistant.html + 84 + + Copy link to clipboard @@ -6384,7 +6395,7 @@ Change libs/ui/src/lib/holdings-table/holdings-table.component.html - 119 + 143 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -6403,7 +6414,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 142 + 166 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -6491,6 +6502,13 @@ 201 + + Find account, holding or page... + + libs/ui/src/lib/assistant/assistant.component.ts + 162 + + Security token @@ -6724,25 +6742,18 @@ 155 - - Find holding or page... - - libs/ui/src/lib/assistant/assistant.component.ts - 161 - - Quick Links libs/ui/src/lib/assistant/assistant.html - 56 + 58 Asset Profiles libs/ui/src/lib/assistant/assistant.html - 112 + 140 @@ -7086,7 +7097,7 @@ No results found... libs/ui/src/lib/assistant/assistant.html - 49 + 51 diff --git a/apps/client/src/locales/messages.zh.xlf b/apps/client/src/locales/messages.zh.xlf index 91beba25a..66517e0c7 100644 --- a/apps/client/src/locales/messages.zh.xlf +++ b/apps/client/src/locales/messages.zh.xlf @@ -476,7 +476,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 74 + 98 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -1428,7 +1428,7 @@ 管理活动 apps/client/src/app/components/home-holdings/home-holdings.html - 66 + 67 @@ -1806,6 +1806,10 @@ libs/ui/src/lib/activities-table/activities-table.component.html 191 + + libs/ui/src/lib/holdings-table/holdings-table.component.html + 74 + Report Data Glitch @@ -1976,7 +1980,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 348 + 376 @@ -1984,7 +1988,7 @@ 年初至今 libs/ui/src/lib/assistant/assistant.component.ts - 360 + 388 @@ -1992,7 +1996,7 @@ 1年 libs/ui/src/lib/assistant/assistant.component.ts - 370 + 398 @@ -2000,7 +2004,7 @@ 5年 libs/ui/src/lib/assistant/assistant.component.ts - 395 + 423 @@ -2008,7 +2012,7 @@ 最大限度 libs/ui/src/lib/assistant/assistant.component.ts - 401 + 429 @@ -2844,7 +2848,7 @@ apps/client/src/app/pages/public/public-page.html - 220 + 221 @@ -3544,7 +3548,7 @@ libs/ui/src/lib/assistant/assistant.html - 179 + 207 @@ -3932,7 +3936,7 @@ 持仓 libs/ui/src/lib/assistant/assistant.html - 82 + 110 @@ -4180,7 +4184,7 @@ Ghostfolio 使您能够跟踪您的财富。 apps/client/src/app/pages/public/public-page.html - 216 + 217 @@ -4781,7 +4785,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 98 + 122 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -4797,7 +4801,7 @@ 显示所有 libs/ui/src/lib/holdings-table/holdings-table.component.html - 197 + 221 @@ -4813,7 +4817,7 @@ libs/ui/src/lib/assistant/assistant.html - 157 + 185 libs/ui/src/lib/i18n.ts @@ -4853,7 +4857,7 @@ libs/ui/src/lib/assistant/assistant.html - 218 + 246 libs/ui/src/lib/i18n.ts @@ -5065,7 +5069,7 @@ 标签 libs/ui/src/lib/assistant/assistant.html - 207 + 235 libs/ui/src/lib/i18n.ts @@ -5381,7 +5385,7 @@ 日期范围 libs/ui/src/lib/assistant/assistant.html - 143 + 171 @@ -5541,7 +5545,7 @@ 今年迄今为止 libs/ui/src/lib/assistant/assistant.component.ts - 360 + 388 @@ -5549,7 +5553,7 @@ 本周至今 libs/ui/src/lib/assistant/assistant.component.ts - 352 + 380 @@ -5557,7 +5561,7 @@ 本月至今 libs/ui/src/lib/assistant/assistant.component.ts - 356 + 384 @@ -5565,7 +5569,7 @@ 本月至今 libs/ui/src/lib/assistant/assistant.component.ts - 356 + 384 @@ -5573,7 +5577,7 @@ 本周至今 libs/ui/src/lib/assistant/assistant.component.ts - 352 + 380 @@ -5601,7 +5605,7 @@ 重置过滤器 libs/ui/src/lib/assistant/assistant.html - 238 + 266 @@ -5625,7 +5629,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 370 + 398 @@ -5633,7 +5637,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 395 + 423 @@ -5641,7 +5645,7 @@ 应用过滤器 libs/ui/src/lib/assistant/assistant.html - 248 + 276 @@ -5942,7 +5946,7 @@ 您想 优化 您的 个人投资策略吗? apps/client/src/app/pages/public/public-page.html - 212 + 213 @@ -6389,6 +6393,14 @@ 33 + + Accounts + Accounts + + libs/ui/src/lib/assistant/assistant.html + 84 + + Copy link to clipboard 复制链接到剪贴板 @@ -7016,7 +7028,7 @@ 涨跌 libs/ui/src/lib/holdings-table/holdings-table.component.html - 119 + 143 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -7036,7 +7048,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 142 + 166 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -7147,6 +7159,14 @@ 201 + + Find account, holding or page... + Find account, holding or page... + + libs/ui/src/lib/assistant/assistant.component.ts + 162 + + Generate Security Token 生成安全令牌 @@ -7421,20 +7441,12 @@ 12 - - Find holding or page... - 查找持仓或页面... - - libs/ui/src/lib/assistant/assistant.component.ts - 161 - - Quick Links 快速链接 libs/ui/src/lib/assistant/assistant.html - 56 + 58 @@ -7442,7 +7454,7 @@ 资产概况 libs/ui/src/lib/assistant/assistant.html - 112 + 140 @@ -7917,7 +7929,7 @@ 未找到结果... libs/ui/src/lib/assistant/assistant.html - 49 + 51 From 3d6c579715ade486a0ef9599e777eae325047723 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Thu, 21 Aug 2025 19:26:28 +0200 Subject: [PATCH 36/62] Release 2.192.0 (#5383) --- CHANGELOG.md | 2 +- package-lock.json | 4 ++-- package.json | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 894e6ed48..6b496df2c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,7 +5,7 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## Unreleased +## 2.192.0 - 2025-08-21 ### Added diff --git a/package-lock.json b/package-lock.json index b65f53169..690ab659c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "ghostfolio", - "version": "2.191.1", + "version": "2.192.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "ghostfolio", - "version": "2.191.1", + "version": "2.192.0", "hasInstallScript": true, "license": "AGPL-3.0", "dependencies": { diff --git a/package.json b/package.json index a1b445e71..34f975ff6 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ghostfolio", - "version": "2.191.1", + "version": "2.192.0", "homepage": "https://ghostfol.io", "license": "AGPL-3.0", "repository": "https://github.com/ghostfolio/ghostfolio", From 21d337525dc4cfc0f628308e5a06b55ed47b4370 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Fri, 22 Aug 2025 18:15:19 +0200 Subject: [PATCH 37/62] Feature/extend data providers management by every data provider in use (#5386) * Extend data providers management * Update changelog --- CHANGELOG.md | 6 +++ apps/api/src/app/admin/admin.controller.ts | 2 +- apps/api/src/app/admin/admin.service.ts | 46 ++++++++++++---------- 3 files changed, 32 insertions(+), 22 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6b496df2c..196fb1853 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,12 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## Unreleased + +### Added + +- Extended the data providers management of the admin control panel by every data provider in use + ## 2.192.0 - 2025-08-21 ### Added diff --git a/apps/api/src/app/admin/admin.controller.ts b/apps/api/src/app/admin/admin.controller.ts index 8b2118ab1..e473813e9 100644 --- a/apps/api/src/app/admin/admin.controller.ts +++ b/apps/api/src/app/admin/admin.controller.ts @@ -66,7 +66,7 @@ export class AdminController { @HasPermission(permissions.accessAdminControl) @UseGuards(AuthGuard('jwt'), HasPermissionGuard) public async getAdminData(): Promise { - return this.adminService.get({ user: this.request.user }); + return this.adminService.get(); } @Get('demo-user/sync') diff --git a/apps/api/src/app/admin/admin.service.ts b/apps/api/src/app/admin/admin.service.ts index 9e645c059..bce603289 100644 --- a/apps/api/src/app/admin/admin.service.ts +++ b/apps/api/src/app/admin/admin.service.ts @@ -29,7 +29,7 @@ import { Filter } from '@ghostfolio/common/interfaces'; import { Sector } from '@ghostfolio/common/interfaces/sector.interface'; -import { MarketDataPreset, UserWithSettings } from '@ghostfolio/common/types'; +import { MarketDataPreset } from '@ghostfolio/common/types'; import { BadRequestException, @@ -133,11 +133,8 @@ export class AdminService { } } - public async get({ user }: { user: UserWithSettings }): Promise { - const dataSources = await this.dataProviderService.getDataSources({ - user, - includeGhostfolio: true - }); + public async get(): Promise { + const dataSources = Object.values(DataSource); const [settings, transactionCount, userCount] = await Promise.all([ this.propertyService.get(), @@ -145,24 +142,31 @@ export class AdminService { this.countUsersWithAnalytics() ]); - const dataProviders = await Promise.all( - dataSources.map(async (dataSource) => { - const dataProviderInfo = this.dataProviderService - .getDataProvider(dataSource) - .getDataProviderInfo(); + const dataProviders = ( + await Promise.all( + dataSources.map(async (dataSource) => { + const assetProfileCount = + await this.prismaService.symbolProfile.count({ + where: { + dataSource + } + }); - const assetProfileCount = await this.prismaService.symbolProfile.count({ - where: { - dataSource + if (assetProfileCount > 0 || dataSource === 'GHOSTFOLIO') { + const dataProviderInfo = this.dataProviderService + .getDataProvider(dataSource) + .getDataProviderInfo(); + + return { + ...dataProviderInfo, + assetProfileCount + }; } - }); - return { - ...dataProviderInfo, - assetProfileCount - }; - }) - ); + return null; + }) + ) + ).filter(Boolean); return { dataProviders, From 7769f31e414a7de7d41f94e81d9485c47bae0f0b Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Fri, 22 Aug 2025 20:08:10 +0200 Subject: [PATCH 38/62] Feature/extend personal finance tools 20250822 (#5388) * Add InvMon --- libs/common/src/lib/personal-finance-tools.ts | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/libs/common/src/lib/personal-finance-tools.ts b/libs/common/src/lib/personal-finance-tools.ts index e814ac415..d0e47ee3b 100644 --- a/libs/common/src/lib/personal-finance-tools.ts +++ b/libs/common/src/lib/personal-finance-tools.ts @@ -446,6 +446,17 @@ export const personalFinanceTools: Product[] = [ origin: 'Pakistan', slogan: 'Advanced portfolio tracking and stock market information' }, + { + founded: 2021, + hasFreePlan: true, + hasSelfHostingAbility: true, + key: 'invmon', + name: 'InvMon', + origin: 'Switzerland', + pricingPerYear: '$156', + slogan: 'Track all your assets, investments and portfolios in one place', + useAnonymously: true + }, { founded: 2011, hasFreePlan: true, From b0f770e50af6db9563be747d9d7e34f88267bd18 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Fri, 22 Aug 2025 20:08:28 +0200 Subject: [PATCH 39/62] Feature/improve error handling in data providers (#5387) * Improve error handling * Update changelog --- CHANGELOG.md | 4 +++ .../coingecko/coingecko.service.ts | 10 +++--- .../eod-historical-data.service.ts | 8 +++-- .../financial-modeling-prep.service.ts | 10 +++--- .../ghostfolio/ghostfolio.service.ts | 34 ++++++++++++------- .../rapid-api/rapid-api.service.ts | 2 +- 6 files changed, 43 insertions(+), 25 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 196fb1853..0344f8d47 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Extended the data providers management of the admin control panel by every data provider in use +### Changed + +- Improved the error handling in data providers + ## 2.192.0 - 2025-08-21 ### Added diff --git a/apps/api/src/services/data-provider/coingecko/coingecko.service.ts b/apps/api/src/services/data-provider/coingecko/coingecko.service.ts index 7776ff46c..8a3adb507 100644 --- a/apps/api/src/services/data-provider/coingecko/coingecko.service.ts +++ b/apps/api/src/services/data-provider/coingecko/coingecko.service.ts @@ -78,7 +78,7 @@ export class CoinGeckoService implements DataProviderInterface { } catch (error) { let message = error; - if (error?.name === 'AbortError') { + if (['AbortError', 'TimeoutError'].includes(error?.name)) { message = `RequestError: The operation to get the asset profile for ${symbol} was aborted because the request to the data provider took more than ${( this.configurationService.get('REQUEST_TIMEOUT') / 1000 ).toFixed(3)} seconds`; @@ -196,8 +196,10 @@ export class CoinGeckoService implements DataProviderInterface { } catch (error) { let message = error; - if (error?.name === 'AbortError') { - message = `RequestError: The operation to get the quotes was aborted because the request to the data provider took more than ${( + if (['AbortError', 'TimeoutError'].includes(error?.name)) { + message = `RequestError: The operation to get the quotes for ${symbols.join( + ', ' + )} was aborted because the request to the data provider took more than ${( this.configurationService.get('REQUEST_TIMEOUT') / 1000 ).toFixed(3)} seconds`; } @@ -237,7 +239,7 @@ export class CoinGeckoService implements DataProviderInterface { } catch (error) { let message = error; - if (error?.name === 'AbortError') { + if (['AbortError', 'TimeoutError'].includes(error?.name)) { message = `RequestError: The operation to search for ${query} was aborted because the request to the data provider took more than ${( this.configurationService.get('REQUEST_TIMEOUT') / 1000 ).toFixed(3)} seconds`; diff --git a/apps/api/src/services/data-provider/eod-historical-data/eod-historical-data.service.ts b/apps/api/src/services/data-provider/eod-historical-data/eod-historical-data.service.ts index ddb94bb1a..d06071ac3 100644 --- a/apps/api/src/services/data-provider/eod-historical-data/eod-historical-data.service.ts +++ b/apps/api/src/services/data-provider/eod-historical-data/eod-historical-data.service.ts @@ -282,8 +282,10 @@ export class EodHistoricalDataService implements DataProviderInterface { } catch (error) { let message = error; - if (error?.name === 'AbortError') { - message = `RequestError: The operation to get the quotes was aborted because the request to the data provider took more than ${( + if (['AbortError', 'TimeoutError'].includes(error?.name)) { + message = `RequestError: The operation to get the quotes for ${symbols.join( + ', ' + )} was aborted because the request to the data provider took more than ${( this.configurationService.get('REQUEST_TIMEOUT') / 1000 ).toFixed(3)} seconds`; } @@ -426,7 +428,7 @@ export class EodHistoricalDataService implements DataProviderInterface { } catch (error) { let message = error; - if (error?.name === 'AbortError') { + if (['AbortError', 'TimeoutError'].includes(error?.name)) { message = `RequestError: The operation to search for ${aQuery} was aborted because the request to the data provider took more than ${( this.configurationService.get('REQUEST_TIMEOUT') / 1000 ).toFixed(3)} seconds`; 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 2dcb689a7..ed2aa5f25 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 @@ -202,7 +202,7 @@ export class FinancialModelingPrepService implements DataProviderInterface { } catch (error) { let message = error; - if (error?.name === 'AbortError') { + if (['AbortError', 'TimeoutError'].includes(error?.name)) { message = `RequestError: The operation to get the asset profile for ${symbol} was aborted because the request to the data provider took more than ${( requestTimeout / 1000 ).toFixed(3)} seconds`; @@ -392,8 +392,10 @@ export class FinancialModelingPrepService implements DataProviderInterface { } catch (error) { let message = error; - if (error?.name === 'AbortError') { - message = `RequestError: The operation to get the quotes was aborted because the request to the data provider took more than ${( + if (['AbortError', 'TimeoutError'].includes(error?.name)) { + message = `RequestError: The operation to get the quotes for ${symbols.join( + ', ' + )} was aborted because the request to the data provider took more than ${( requestTimeout / 1000 ).toFixed(3)} seconds`; } @@ -469,7 +471,7 @@ export class FinancialModelingPrepService implements DataProviderInterface { } catch (error) { let message = error; - if (error?.name === 'AbortError') { + if (['AbortError', 'TimeoutError'].includes(error?.name)) { message = `RequestError: The operation to search for ${query} was aborted because the request to the data provider took more than ${( this.configurationService.get('REQUEST_TIMEOUT') / 1000 ).toFixed(3)} seconds`; diff --git a/apps/api/src/services/data-provider/ghostfolio/ghostfolio.service.ts b/apps/api/src/services/data-provider/ghostfolio/ghostfolio.service.ts index 3fd9e1bea..48ba42bd4 100644 --- a/apps/api/src/services/data-provider/ghostfolio/ghostfolio.service.ts +++ b/apps/api/src/services/data-provider/ghostfolio/ghostfolio.service.ts @@ -68,14 +68,16 @@ export class GhostfolioService implements DataProviderInterface { } catch (error) { let message = error; - if (error.name === 'AbortError') { - message = `RequestError: The operation to get the quotes was aborted because the request to the data provider took more than ${( + if (['AbortError', 'TimeoutError'].includes(error?.name)) { + message = `RequestError: The operation to get the asset profile for ${symbol} was aborted because the request to the data provider took more than ${( requestTimeout / 1000 ).toFixed(3)} seconds`; - } else if (error.response?.statusCode === StatusCodes.TOO_MANY_REQUESTS) { + } else if ( + error?.response?.statusCode === StatusCodes.TOO_MANY_REQUESTS + ) { message = 'RequestError: The daily request limit has been exceeded'; - } else if (error.response?.statusCode === StatusCodes.UNAUTHORIZED) { - if (!error.request?.options?.headers?.authorization?.includes('-')) { + } else if (error?.response?.statusCode === StatusCodes.UNAUTHORIZED) { + if (!error?.request?.options?.headers?.authorization?.includes('-')) { message = 'RequestError: The provided API key is invalid. Please update it in the Settings section of the Admin Control panel.'; } else { @@ -229,14 +231,18 @@ export class GhostfolioService implements DataProviderInterface { } catch (error) { let message = error; - if (error.name === 'AbortError') { - message = `RequestError: The operation to get the quotes was aborted because the request to the data provider took more than ${( + if (['AbortError', 'TimeoutError'].includes(error?.name)) { + message = `RequestError: The operation to get the quotes for ${symbols.join( + ', ' + )} was aborted because the request to the data provider took more than ${( requestTimeout / 1000 ).toFixed(3)} seconds`; - } else if (error.response?.statusCode === StatusCodes.TOO_MANY_REQUESTS) { + } else if ( + error?.response?.statusCode === StatusCodes.TOO_MANY_REQUESTS + ) { message = 'RequestError: The daily request limit has been exceeded'; - } else if (error.response?.statusCode === StatusCodes.UNAUTHORIZED) { - if (!error.request?.options?.headers?.authorization?.includes('-')) { + } else if (error?.response?.statusCode === StatusCodes.UNAUTHORIZED) { + if (!error?.request?.options?.headers?.authorization?.includes('-')) { message = 'RequestError: The provided API key is invalid. Please update it in the Settings section of the Admin Control panel.'; } else { @@ -272,14 +278,16 @@ export class GhostfolioService implements DataProviderInterface { } catch (error) { let message = error; - if (error.name === 'AbortError') { + if (['AbortError', 'TimeoutError'].includes(error?.name)) { message = `RequestError: The operation to search for ${query} was aborted because the request to the data provider took more than ${( requestTimeout / 1000 ).toFixed(3)} seconds`; - } else if (error.response?.statusCode === StatusCodes.TOO_MANY_REQUESTS) { + } else if ( + error?.response?.statusCode === StatusCodes.TOO_MANY_REQUESTS + ) { message = 'RequestError: The daily request limit has been exceeded'; } else if (error.response?.statusCode === StatusCodes.UNAUTHORIZED) { - if (!error.request?.options?.headers?.authorization?.includes('-')) { + if (!error?.request?.options?.headers?.authorization?.includes('-')) { message = 'RequestError: The provided API key is invalid. Please update it in the Settings section of the Admin Control panel.'; } else { diff --git a/apps/api/src/services/data-provider/rapid-api/rapid-api.service.ts b/apps/api/src/services/data-provider/rapid-api/rapid-api.service.ts index 5675f1eb0..62b3ed71c 100644 --- a/apps/api/src/services/data-provider/rapid-api/rapid-api.service.ts +++ b/apps/api/src/services/data-provider/rapid-api/rapid-api.service.ts @@ -165,7 +165,7 @@ export class RapidApiService implements DataProviderInterface { } catch (error) { let message = error; - if (error?.name === 'AbortError') { + if (['AbortError', 'TimeoutError'].includes(error?.name)) { message = `RequestError: The operation was aborted because the request to the data provider took more than ${( this.configurationService.get('REQUEST_TIMEOUT') / 1000 ).toFixed(3)} seconds`; From b5649654b2d665e2a7a6e56f4bc2ef8895c7365f Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Fri, 22 Aug 2025 20:09:23 +0200 Subject: [PATCH 40/62] Feature/add filter by data source for asset profiles in admin control panel (#5385) * Add filter by data source * Update changelog --- CHANGELOG.md | 1 + apps/api/src/app/admin/admin.controller.ts | 2 + apps/api/src/app/admin/admin.service.ts | 16 +++-- .../admin-market-data.component.ts | 69 ++++++++++--------- libs/ui/src/lib/i18n.ts | 1 + 5 files changed, 52 insertions(+), 37 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0344f8d47..61b8fcc72 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added +- Added a filter by data source for the asset profiles in the admin control panel - Extended the data providers management of the admin control panel by every data provider in use ### Changed diff --git a/apps/api/src/app/admin/admin.controller.ts b/apps/api/src/app/admin/admin.controller.ts index e473813e9..27cc088d1 100644 --- a/apps/api/src/app/admin/admin.controller.ts +++ b/apps/api/src/app/admin/admin.controller.ts @@ -197,6 +197,7 @@ export class AdminController { @UseGuards(AuthGuard('jwt'), HasPermissionGuard) public async getMarketData( @Query('assetSubClasses') filterByAssetSubClasses?: string, + @Query('dataSource') filterByDataSource?: string, @Query('presetId') presetId?: MarketDataPreset, @Query('query') filterBySearchQuery?: string, @Query('skip') skip?: number, @@ -206,6 +207,7 @@ export class AdminController { ): Promise { const filters = this.apiService.buildFiltersFromQueryParams({ filterByAssetSubClasses, + filterByDataSource, filterBySearchQuery }); diff --git a/apps/api/src/app/admin/admin.service.ts b/apps/api/src/app/admin/admin.service.ts index bce603289..d07e74013 100644 --- a/apps/api/src/app/admin/admin.service.ts +++ b/apps/api/src/app/admin/admin.service.ts @@ -218,12 +218,12 @@ export class AdminService { return type === 'SEARCH_QUERY'; })?.id; - const { ASSET_SUB_CLASS: filtersByAssetSubClass } = groupBy( - filters, - ({ type }) => { - return type; - } - ); + const { + ASSET_SUB_CLASS: filtersByAssetSubClass, + DATA_SOURCE: filtersByDataSource + } = groupBy(filters, ({ type }) => { + return type; + }); const marketDataItems = await this.prismaService.marketData.groupBy({ _count: true, @@ -234,6 +234,10 @@ export class AdminService { where.assetSubClass = AssetSubClass[filtersByAssetSubClass[0].id]; } + if (filtersByDataSource) { + where.dataSource = DataSource[filtersByDataSource[0].id]; + } + if (searchQuery) { where.OR = [ { id: { mode: 'insensitive', startsWith: searchQuery } }, diff --git a/apps/client/src/app/components/admin-market-data/admin-market-data.component.ts b/apps/client/src/app/components/admin-market-data/admin-market-data.component.ts index 6a809a10f..4e410c3a0 100644 --- a/apps/client/src/app/components/admin-market-data/admin-market-data.component.ts +++ b/apps/client/src/app/components/admin-market-data/admin-market-data.component.ts @@ -103,39 +103,46 @@ export class GfAdminMarketDataComponent @ViewChild(MatSort) sort: MatSort; public activeFilters: Filter[] = []; - public allFilters: Filter[] = Object.keys(AssetSubClass) - .filter((assetSubClass) => { - return assetSubClass !== 'CASH'; - }) - .map((assetSubClass) => { + public allFilters: Filter[] = [ + ...Object.keys(AssetSubClass) + .filter((assetSubClass) => { + return assetSubClass !== 'CASH'; + }) + .map((assetSubClass) => { + return { + id: assetSubClass.toString(), + label: translate(assetSubClass), + type: 'ASSET_SUB_CLASS' as Filter['type'] + }; + }), + ...Object.keys(DataSource).map((dataSource) => { return { - id: assetSubClass.toString(), - label: translate(assetSubClass), - type: 'ASSET_SUB_CLASS' as Filter['type'] + id: dataSource.toString(), + label: dataSource, + type: 'DATA_SOURCE' as Filter['type'] }; - }) - .concat([ - { - id: 'BENCHMARKS', - label: $localize`Benchmarks`, - type: 'PRESET_ID' as Filter['type'] - }, - { - id: 'CURRENCIES', - label: $localize`Currencies`, - type: 'PRESET_ID' as Filter['type'] - }, - { - id: 'ETF_WITHOUT_COUNTRIES', - label: $localize`ETFs without Countries`, - type: 'PRESET_ID' as Filter['type'] - }, - { - id: 'ETF_WITHOUT_SECTORS', - label: $localize`ETFs without Sectors`, - type: 'PRESET_ID' as Filter['type'] - } - ]); + }), + { + id: 'BENCHMARKS', + label: $localize`Benchmarks`, + type: 'PRESET_ID' as Filter['type'] + }, + { + id: 'CURRENCIES', + label: $localize`Currencies`, + type: 'PRESET_ID' as Filter['type'] + }, + { + id: 'ETF_WITHOUT_COUNTRIES', + label: $localize`ETFs without Countries`, + type: 'PRESET_ID' as Filter['type'] + }, + { + id: 'ETF_WITHOUT_SECTORS', + label: $localize`ETFs without Sectors`, + type: 'PRESET_ID' as Filter['type'] + } + ]; public benchmarks: Partial[]; public currentDataSource: DataSource; public currentSymbol: string; diff --git a/libs/ui/src/lib/i18n.ts b/libs/ui/src/lib/i18n.ts index 8007dc53e..e17cc6771 100644 --- a/libs/ui/src/lib/i18n.ts +++ b/libs/ui/src/lib/i18n.ts @@ -12,6 +12,7 @@ const locales = { DATA_IMPORT_AND_EXPORT_TOOLTIP_BASIC: $localize`Switch to Ghostfolio Premium or Ghostfolio Open Source easily`, DATA_IMPORT_AND_EXPORT_TOOLTIP_OSS: $localize`Switch to Ghostfolio Premium easily`, DATA_IMPORT_AND_EXPORT_TOOLTIP_PREMIUM: $localize`Switch to Ghostfolio Open Source or Ghostfolio Basic easily`, + DATA_SOURCE: $localize`Data Source`, EMERGENCY_FUND: $localize`Emergency Fund`, EXCLUDE_FROM_ANALYSIS: $localize`Exclude from Analysis`, Global: $localize`Global`, From 2fa2d38f9ef54c74c98b78cb3ebcafd97aaa95ed Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Fri, 22 Aug 2025 20:09:46 +0200 Subject: [PATCH 41/62] Feature/upgrade yahoo-finance2 to version 3.6.4 (#5389) * Upgrade yahoo-finance2 to version 3.6.4 * Update changelog --- CHANGELOG.md | 1 + package-lock.json | 8 ++++---- package.json | 2 +- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 61b8fcc72..854105676 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed - Improved the error handling in data providers +- Upgraded `yahoo-finance2` from version `3.4.1` to `3.6.4` ## 2.192.0 - 2025-08-21 diff --git a/package-lock.json b/package-lock.json index 690ab659c..9b105cb2c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -93,7 +93,7 @@ "svgmap": "2.12.2", "twitter-api-v2": "1.23.0", "uuid": "11.1.0", - "yahoo-finance2": "3.4.1", + "yahoo-finance2": "3.6.4", "zone.js": "0.15.1" }, "devDependencies": { @@ -40601,9 +40601,9 @@ } }, "node_modules/yahoo-finance2": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/yahoo-finance2/-/yahoo-finance2-3.4.1.tgz", - "integrity": "sha512-L8Ubmdsn6f+uJEuEDUUHR5n95TFcGkMiMkV0phmvPONFekAn1vWzsEzGfIDG2ODR7aYBB+aURdQg7a3HX2iUHA==", + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/yahoo-finance2/-/yahoo-finance2-3.6.4.tgz", + "integrity": "sha512-IoMU8Hb4BEaNPVnamZjRBuorTGDbaaiV/tM/m3KI8dzwrR6BGmeuT40OX+5IqRiSkMlD8g0kAwGi9E4bY3rLvg==", "license": "MIT", "dependencies": { "@deno/shim-deno": "~0.18.0", diff --git a/package.json b/package.json index 34f975ff6..3005b38ae 100644 --- a/package.json +++ b/package.json @@ -139,7 +139,7 @@ "svgmap": "2.12.2", "twitter-api-v2": "1.23.0", "uuid": "11.1.0", - "yahoo-finance2": "3.4.1", + "yahoo-finance2": "3.6.4", "zone.js": "0.15.1" }, "devDependencies": { From d545b81deb3489abf3889b7e800c85148c8ac8b5 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Fri, 22 Aug 2025 20:12:12 +0200 Subject: [PATCH 42/62] Release 2.193.0 (#5392) --- CHANGELOG.md | 2 +- package-lock.json | 4 ++-- package.json | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 854105676..251a51d93 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,7 +5,7 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## Unreleased +## 2.193.0 - 2025-08-22 ### Added diff --git a/package-lock.json b/package-lock.json index 9b105cb2c..a86aa3c10 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "ghostfolio", - "version": "2.192.0", + "version": "2.193.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "ghostfolio", - "version": "2.192.0", + "version": "2.193.0", "hasInstallScript": true, "license": "AGPL-3.0", "dependencies": { diff --git a/package.json b/package.json index 3005b38ae..48a79812d 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ghostfolio", - "version": "2.192.0", + "version": "2.193.0", "homepage": "https://ghostfol.io", "license": "AGPL-3.0", "repository": "https://github.com/ghostfolio/ghostfolio", From 8eac342f9a59e4a505892a4989146639d59e1f82 Mon Sep 17 00:00:00 2001 From: Kenrick Tandrian <60643640+KenTandrian@users.noreply.github.com> Date: Sat, 23 Aug 2025 14:19:48 +0700 Subject: [PATCH 43/62] Task/migrate login with access token dialog component from ngModel to form control (#5390) * Migrate login with access token dialog component from ngModel to form control * Update changelog --- CHANGELOG.md | 6 ++++++ .../login-with-access-token-dialog.component.ts | 11 +++++++++-- .../login-with-access-token-dialog.html | 9 +++++---- .../login-with-access-token-dialog.module.ts | 3 +-- 4 files changed, 21 insertions(+), 8 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 251a51d93..717cf2813 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,12 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## Unreleased + +### Changed + +- Migrated the login with access token dialog from `ngModel` to form control + ## 2.193.0 - 2025-08-22 ### Added diff --git a/apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.component.ts b/apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.component.ts index 9ee0adcdc..4f11f1025 100644 --- a/apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.component.ts +++ b/apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.component.ts @@ -6,6 +6,7 @@ import { import { TokenStorageService } from '@ghostfolio/client/services/token-storage.service'; import { ChangeDetectionStrategy, Component, Inject } from '@angular/core'; +import { FormControl, Validators } from '@angular/forms'; import { MatCheckboxChange } from '@angular/material/checkbox'; import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog'; import { Router } from '@angular/router'; @@ -20,6 +21,10 @@ import { eyeOffOutline, eyeOutline } from 'ionicons/icons'; standalone: false }) export class LoginWithAccessTokenDialog { + public accessTokenFormControl = new FormControl( + this.data.accessToken, + Validators.required + ); public isAccessTokenHidden = true; public constructor( @@ -45,8 +50,10 @@ export class LoginWithAccessTokenDialog { } public onLoginWithAccessToken() { - if (this.data.accessToken) { - this.dialogRef.close(this.data); + if (this.accessTokenFormControl.valid) { + this.dialogRef.close({ + accessToken: this.accessTokenFormControl.value + }); } } diff --git a/apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html b/apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html index 77191db8e..18f4fec27 100644 --- a/apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html +++ b/apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html @@ -11,9 +11,8 @@ Security Token diff --git a/apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.module.ts b/apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.module.ts index d6035ae52..fcced81aa 100644 --- a/apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.module.ts +++ b/apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.module.ts @@ -1,7 +1,7 @@ import { TextFieldModule } from '@angular/cdk/text-field'; import { CommonModule } from '@angular/common'; import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core'; -import { FormsModule, ReactiveFormsModule } from '@angular/forms'; +import { ReactiveFormsModule } from '@angular/forms'; import { MatButtonModule } from '@angular/material/button'; import { MatCheckboxModule } from '@angular/material/checkbox'; import { MatDialogModule } from '@angular/material/dialog'; @@ -16,7 +16,6 @@ import { LoginWithAccessTokenDialog } from './login-with-access-token-dialog.com declarations: [LoginWithAccessTokenDialog], imports: [ CommonModule, - FormsModule, GfDialogHeaderModule, IonIcon, MatButtonModule, From 66ee2c13bb41d7e3fa48c04e6e37100feedafd49 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bernardo=20Jord=C3=A3o?= <56507118+itsbekas@users.noreply.github.com> Date: Sat, 23 Aug 2025 13:42:11 +0100 Subject: [PATCH 44/62] Feature/migrate register page component to standalone (#5393) * Migrate register page component to standalone * Update changelog --- CHANGELOG.md | 1 + apps/client/src/app/app-routing.module.ts | 4 +-- .../register/register-page-routing.module.ts | 22 ------------- .../pages/register/register-page.component.ts | 31 ++++++++++++++----- .../pages/register/register-page.module.ts | 26 ---------------- .../pages/register/register-page.routes.ts | 15 +++++++++ 6 files changed, 40 insertions(+), 59 deletions(-) delete mode 100644 apps/client/src/app/pages/register/register-page-routing.module.ts delete mode 100644 apps/client/src/app/pages/register/register-page.module.ts create mode 100644 apps/client/src/app/pages/register/register-page.routes.ts diff --git a/CHANGELOG.md b/CHANGELOG.md index 717cf2813..c1d8adeec 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed +- Refactored the register page to standalone - Migrated the login with access token dialog from `ngModel` to form control ## 2.193.0 - 2025-08-22 diff --git a/apps/client/src/app/app-routing.module.ts b/apps/client/src/app/app-routing.module.ts index 70d4f8b30..549a671f7 100644 --- a/apps/client/src/app/app-routing.module.ts +++ b/apps/client/src/app/app-routing.module.ts @@ -120,9 +120,7 @@ const routes: Routes = [ { path: publicRoutes.register.path, loadChildren: () => - import('./pages/register/register-page.module').then( - (m) => m.RegisterPageModule - ) + import('./pages/register/register-page.routes').then((m) => m.routes) }, { path: publicRoutes.resources.path, diff --git a/apps/client/src/app/pages/register/register-page-routing.module.ts b/apps/client/src/app/pages/register/register-page-routing.module.ts deleted file mode 100644 index 157302999..000000000 --- a/apps/client/src/app/pages/register/register-page-routing.module.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { AuthGuard } from '@ghostfolio/client/core/auth.guard'; -import { publicRoutes } from '@ghostfolio/common/routes/routes'; - -import { NgModule } from '@angular/core'; -import { RouterModule, Routes } from '@angular/router'; - -import { RegisterPageComponent } from './register-page.component'; - -const routes: Routes = [ - { - canActivate: [AuthGuard], - component: RegisterPageComponent, - path: '', - title: publicRoutes.register.title - } -]; - -@NgModule({ - imports: [RouterModule.forChild(routes)], - exports: [RouterModule] -}) -export class RegisterPageRoutingModule {} diff --git a/apps/client/src/app/pages/register/register-page.component.ts b/apps/client/src/app/pages/register/register-page.component.ts index 11b81c32a..35b9d5cd2 100644 --- a/apps/client/src/app/pages/register/register-page.component.ts +++ b/apps/client/src/app/pages/register/register-page.component.ts @@ -3,26 +3,39 @@ import { InternetIdentityService } from '@ghostfolio/client/services/internet-id import { TokenStorageService } from '@ghostfolio/client/services/token-storage.service'; import { InfoItem, LineChartItem } from '@ghostfolio/common/interfaces'; import { hasPermission, permissions } from '@ghostfolio/common/permissions'; +import { GfLogoComponent } from '@ghostfolio/ui/logo'; -import { Component, OnDestroy, OnInit } from '@angular/core'; +import { + Component, + CUSTOM_ELEMENTS_SCHEMA, + OnDestroy, + OnInit +} from '@angular/core'; +import { MatButtonModule } from '@angular/material/button'; import { MatDialog } from '@angular/material/dialog'; -import { Router } from '@angular/router'; +import { Router, RouterModule } from '@angular/router'; import { DeviceDetectorService } from 'ngx-device-detector'; import { Subject } from 'rxjs'; import { takeUntil } from 'rxjs/operators'; import { ShowAccessTokenDialogParams } from './show-access-token-dialog/interfaces/interfaces'; import { ShowAccessTokenDialog } from './show-access-token-dialog/show-access-token-dialog.component'; +import { ShowAccessTokenDialogModule } from './show-access-token-dialog/show-access-token-dialog.module'; @Component({ host: { class: 'page' }, + imports: [ + GfLogoComponent, + MatButtonModule, + RouterModule, + ShowAccessTokenDialogModule + ], + schemas: [CUSTOM_ELEMENTS_SCHEMA], selector: 'gf-register-page', styleUrls: ['./register-page.scss'], - templateUrl: './register-page.html', - standalone: false + templateUrl: './register-page.html' }) -export class RegisterPageComponent implements OnDestroy, OnInit { - public demoAuthToken: string; +export class GfRegisterPageComponent implements OnDestroy, OnInit { public deviceType: string; public hasPermissionForSocialLogin: boolean; public hasPermissionForSubscription: boolean; @@ -46,18 +59,20 @@ export class RegisterPageComponent implements OnDestroy, OnInit { } public ngOnInit() { - const { demoAuthToken, globalPermissions } = this.dataService.fetchInfo(); + const { globalPermissions } = this.dataService.fetchInfo(); - this.demoAuthToken = demoAuthToken; this.deviceType = this.deviceService.getDeviceInfo().deviceType; + this.hasPermissionForSocialLogin = hasPermission( globalPermissions, permissions.enableSocialLogin ); + this.hasPermissionForSubscription = hasPermission( globalPermissions, permissions.enableSubscription ); + this.hasPermissionToCreateUser = hasPermission( globalPermissions, permissions.createUserAccount diff --git a/apps/client/src/app/pages/register/register-page.module.ts b/apps/client/src/app/pages/register/register-page.module.ts deleted file mode 100644 index 5ce8e3ed9..000000000 --- a/apps/client/src/app/pages/register/register-page.module.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { GfLogoComponent } from '@ghostfolio/ui/logo'; - -import { CommonModule } from '@angular/common'; -import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core'; -import { MatButtonModule } from '@angular/material/button'; -import { RouterModule } from '@angular/router'; -import { IonIcon } from '@ionic/angular/standalone'; - -import { RegisterPageRoutingModule } from './register-page-routing.module'; -import { RegisterPageComponent } from './register-page.component'; -import { ShowAccessTokenDialogModule } from './show-access-token-dialog/show-access-token-dialog.module'; - -@NgModule({ - declarations: [RegisterPageComponent], - imports: [ - CommonModule, - GfLogoComponent, - IonIcon, - MatButtonModule, - RegisterPageRoutingModule, - RouterModule, - ShowAccessTokenDialogModule - ], - schemas: [CUSTOM_ELEMENTS_SCHEMA] -}) -export class RegisterPageModule {} diff --git a/apps/client/src/app/pages/register/register-page.routes.ts b/apps/client/src/app/pages/register/register-page.routes.ts new file mode 100644 index 000000000..ca5b00376 --- /dev/null +++ b/apps/client/src/app/pages/register/register-page.routes.ts @@ -0,0 +1,15 @@ +import { AuthGuard } from '@ghostfolio/client/core/auth.guard'; +import { publicRoutes } from '@ghostfolio/common/routes/routes'; + +import { Routes } from '@angular/router'; + +import { GfRegisterPageComponent } from './register-page.component'; + +export const routes: Routes = [ + { + canActivate: [AuthGuard], + component: GfRegisterPageComponent, + path: '', + title: publicRoutes.register.title + } +]; From dad3c27ad976efab5a24bcdaa30d0a6735dba987 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Sat, 23 Aug 2025 20:32:28 +0200 Subject: [PATCH 45/62] Feature/remove DATA_SOURCES_LEGACY (#5396) * Remove DATA_SOURCES_LEGACY --- apps/api/src/app/import/import.service.ts | 2 +- .../configuration/configuration.service.ts | 3 --- .../data-provider/data-provider.service.ts | 27 ++++--------------- .../interfaces/environment.interface.ts | 1 - 4 files changed, 6 insertions(+), 27 deletions(-) diff --git a/apps/api/src/app/import/import.service.ts b/apps/api/src/app/import/import.service.ts index a9fe898b9..a96200261 100644 --- a/apps/api/src/app/import/import.service.ts +++ b/apps/api/src/app/import/import.service.ts @@ -712,7 +712,7 @@ export class ImportService { const assetProfiles: { [assetProfileIdentifier: string]: Partial; } = {}; - const dataSources = await this.dataProviderService.getDataSources({ user }); + const dataSources = await this.dataProviderService.getDataSources(); for (const [ index, diff --git a/apps/api/src/services/configuration/configuration.service.ts b/apps/api/src/services/configuration/configuration.service.ts index 602ad5e9c..473d909ee 100644 --- a/apps/api/src/services/configuration/configuration.service.ts +++ b/apps/api/src/services/configuration/configuration.service.ts @@ -40,9 +40,6 @@ export class ConfigurationService { DATA_SOURCES_GHOSTFOLIO_DATA_PROVIDER: json({ default: [] }), - DATA_SOURCES_LEGACY: json({ - default: [] - }), ENABLE_FEATURE_FEAR_AND_GREED_INDEX: bool({ default: false }), ENABLE_FEATURE_READ_ONLY_MODE: bool({ default: false }), ENABLE_FEATURE_SOCIAL_LOGIN: bool({ default: false }), diff --git a/apps/api/src/services/data-provider/data-provider.service.ts b/apps/api/src/services/data-provider/data-provider.service.ts index 674672326..631f90d63 100644 --- a/apps/api/src/services/data-provider/data-provider.service.ts +++ b/apps/api/src/services/data-provider/data-provider.service.ts @@ -26,13 +26,12 @@ import { LookupItem, LookupResponse } from '@ghostfolio/common/interfaces'; -import { hasRole } from '@ghostfolio/common/permissions'; import type { Granularity, UserWithSettings } from '@ghostfolio/common/types'; import { Inject, Injectable, Logger, OnModuleInit } from '@nestjs/common'; import { DataSource, MarketData, SymbolProfile } from '@prisma/client'; import { Big } from 'big.js'; -import { eachDayOfInterval, format, isBefore, isValid } from 'date-fns'; +import { eachDayOfInterval, format, isValid } from 'date-fns'; import { groupBy, isEmpty, isNumber, uniqWith } from 'lodash'; import ms from 'ms'; @@ -160,25 +159,9 @@ export class DataProviderService implements OnModuleInit { return DataSource[this.configurationService.get('DATA_SOURCE_IMPORT')]; } - public async getDataSources({ - includeGhostfolio = false, - user - }: { - includeGhostfolio?: boolean; - user: UserWithSettings; - }): Promise { - let dataSourcesKey: 'DATA_SOURCES' | 'DATA_SOURCES_LEGACY' = 'DATA_SOURCES'; - - if ( - !hasRole(user, 'ADMIN') && - isBefore(user.createdAt, new Date('2025-03-23')) && - this.configurationService.get('DATA_SOURCES_LEGACY')?.length > 0 - ) { - dataSourcesKey = 'DATA_SOURCES_LEGACY'; - } - + public async getDataSources(): Promise { const dataSources: DataSource[] = this.configurationService - .get(dataSourcesKey) + .get('DATA_SOURCES') .map((dataSource) => { return DataSource[dataSource]; }); @@ -187,7 +170,7 @@ export class DataProviderService implements OnModuleInit { PROPERTY_API_KEY_GHOSTFOLIO ); - if (includeGhostfolio || ghostfolioApiKey) { + if (ghostfolioApiKey) { dataSources.push('GHOSTFOLIO'); } @@ -634,7 +617,7 @@ export class DataProviderService implements OnModuleInit { return { items: lookupItems }; } - const dataSources = await this.getDataSources({ user }); + const dataSources = await this.getDataSources(); const dataProviderServices = dataSources.map((dataSource) => { return this.getDataProvider(DataSource[dataSource]); diff --git a/apps/api/src/services/interfaces/environment.interface.ts b/apps/api/src/services/interfaces/environment.interface.ts index c0e228429..2f94739fb 100644 --- a/apps/api/src/services/interfaces/environment.interface.ts +++ b/apps/api/src/services/interfaces/environment.interface.ts @@ -16,7 +16,6 @@ export interface Environment extends CleanedEnvAccessors { DATA_SOURCE_IMPORT: string; DATA_SOURCES: string[]; DATA_SOURCES_GHOSTFOLIO_DATA_PROVIDER: string[]; - DATA_SOURCES_LEGACY: string[]; ENABLE_FEATURE_FEAR_AND_GREED_INDEX: boolean; ENABLE_FEATURE_READ_ONLY_MODE: boolean; ENABLE_FEATURE_SOCIAL_LOGIN: boolean; From 41f800d2852621962a93e24b6f155bf064f49c58 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Sat, 23 Aug 2025 20:32:43 +0200 Subject: [PATCH 46/62] Feature/upgrade prisma to version 6.14.0 (#5394) * Upgrade prisma to version 6.14.0 * Update changelog --- CHANGELOG.md | 1 + package-lock.json | 329 ++++++++++++++++++++++++++++++++++++++-------- package.json | 4 +- 3 files changed, 276 insertions(+), 58 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c1d8adeec..757029e19 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Refactored the register page to standalone - Migrated the login with access token dialog from `ngModel` to form control +- Upgraded `prisma` from version `6.12.0` to `6.14.0` ## 2.193.0 - 2025-08-22 diff --git a/package-lock.json b/package-lock.json index a86aa3c10..c925fae7e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -44,7 +44,7 @@ "@nestjs/schedule": "6.0.0", "@nestjs/serve-static": "5.0.3", "@openrouter/ai-sdk-provider": "0.7.2", - "@prisma/client": "6.12.0", + "@prisma/client": "6.14.0", "@simplewebauthn/browser": "13.1.0", "@simplewebauthn/server": "13.1.1", "@stripe/stripe-js": "7.6.1", @@ -149,7 +149,7 @@ "nx": "21.3.9", "prettier": "3.6.2", "prettier-plugin-organize-attributes": "1.0.0", - "prisma": "6.12.0", + "prisma": "6.14.0", "react": "18.2.0", "react-dom": "18.2.0", "replace-in-file": "8.3.0", @@ -10512,9 +10512,9 @@ "license": "MIT" }, "node_modules/@prisma/client": { - "version": "6.12.0", - "resolved": "https://registry.npmjs.org/@prisma/client/-/client-6.12.0.tgz", - "integrity": "sha512-wn98bJ3Cj6edlF4jjpgXwbnQIo/fQLqqQHPk2POrZPxTlhY3+n90SSIF3LMRVa8VzRFC/Gec3YKJRxRu+AIGVA==", + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/@prisma/client/-/client-6.14.0.tgz", + "integrity": "sha512-8E/Nk3eL5g7RQIg/LUj1ICyDmhD053STjxrPxUtCRybs2s/2sOEcx9NpITuAOPn07HEpWBfhAVe1T/HYWXUPOw==", "hasInstallScript": true, "license": "Apache-2.0", "engines": { @@ -10534,73 +10534,66 @@ } }, "node_modules/@prisma/config": { - "version": "6.12.0", - "resolved": "https://registry.npmjs.org/@prisma/config/-/config-6.12.0.tgz", - "integrity": "sha512-HovZWzhWEMedHxmjefQBRZa40P81N7/+74khKFz9e1AFjakcIQdXgMWKgt20HaACzY+d1LRBC+L4tiz71t9fkg==", + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/@prisma/config/-/config-6.14.0.tgz", + "integrity": "sha512-IwC7o5KNNGhmblLs23swnfBjADkacBb7wvyDXUWLwuvUQciKJZqyecU0jw0d7JRkswrj+XTL8fdr0y2/VerKQQ==", "devOptional": true, "license": "Apache-2.0", "dependencies": { - "jiti": "2.4.2" - } - }, - "node_modules/@prisma/config/node_modules/jiti": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.4.2.tgz", - "integrity": "sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==", - "devOptional": true, - "license": "MIT", - "bin": { - "jiti": "lib/jiti-cli.mjs" + "c12": "3.1.0", + "deepmerge-ts": "7.1.5", + "effect": "3.16.12", + "empathic": "2.0.0" } }, "node_modules/@prisma/debug": { - "version": "6.12.0", - "resolved": "https://registry.npmjs.org/@prisma/debug/-/debug-6.12.0.tgz", - "integrity": "sha512-plbz6z72orcqr0eeio7zgUrZj5EudZUpAeWkFTA/DDdXEj28YHDXuiakvR6S7sD6tZi+jiwQEJAPeV6J6m/tEQ==", + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/@prisma/debug/-/debug-6.14.0.tgz", + "integrity": "sha512-j4Lf+y+5QIJgQD4sJWSbkOD7geKx9CakaLp/TyTy/UDu9Wo0awvWCBH/BAxTHUaCpIl9USA5VS/KJhDqKJSwug==", "devOptional": true, "license": "Apache-2.0" }, "node_modules/@prisma/engines": { - "version": "6.12.0", - "resolved": "https://registry.npmjs.org/@prisma/engines/-/engines-6.12.0.tgz", - "integrity": "sha512-4BRZZUaAuB4p0XhTauxelvFs7IllhPmNLvmla0bO1nkECs8n/o1pUvAVbQ/VOrZR5DnF4HED0PrGai+rIOVePA==", + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/@prisma/engines/-/engines-6.14.0.tgz", + "integrity": "sha512-LhJjqsALFEcoAtF07nSaOkVguaxw/ZsgfROIYZ8bAZDobe7y8Wy+PkYQaPOK1iLSsFgV2MhCO/eNrI1gdSOj6w==", "devOptional": true, "hasInstallScript": true, "license": "Apache-2.0", "dependencies": { - "@prisma/debug": "6.12.0", - "@prisma/engines-version": "6.12.0-15.8047c96bbd92db98a2abc7c9323ce77c02c89dbc", - "@prisma/fetch-engine": "6.12.0", - "@prisma/get-platform": "6.12.0" + "@prisma/debug": "6.14.0", + "@prisma/engines-version": "6.14.0-25.717184b7b35ea05dfa71a3236b7af656013e1e49", + "@prisma/fetch-engine": "6.14.0", + "@prisma/get-platform": "6.14.0" } }, "node_modules/@prisma/engines-version": { - "version": "6.12.0-15.8047c96bbd92db98a2abc7c9323ce77c02c89dbc", - "resolved": "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-6.12.0-15.8047c96bbd92db98a2abc7c9323ce77c02c89dbc.tgz", - "integrity": "sha512-70vhecxBJlRr06VfahDzk9ow4k1HIaSfVUT3X0/kZoHCMl9zbabut4gEXAyzJZxaCGi5igAA7SyyfBI//mmkbQ==", + "version": "6.14.0-25.717184b7b35ea05dfa71a3236b7af656013e1e49", + "resolved": "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-6.14.0-25.717184b7b35ea05dfa71a3236b7af656013e1e49.tgz", + "integrity": "sha512-EgN9ODJpiX45yvwcngoStp3uQPJ3l+AEVoQ6dMMO2QvmwIlnxfApzKmJQExzdo7/hqQANrz5txHJdGYHzOnGHA==", "devOptional": true, "license": "Apache-2.0" }, "node_modules/@prisma/fetch-engine": { - "version": "6.12.0", - "resolved": "https://registry.npmjs.org/@prisma/fetch-engine/-/fetch-engine-6.12.0.tgz", - "integrity": "sha512-EamoiwrK46rpWaEbLX9aqKDPOd8IyLnZAkiYXFNuq0YsU0Z8K09/rH8S7feOWAVJ3xzeSgcEJtBlVDrajM9Sag==", + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/@prisma/fetch-engine/-/fetch-engine-6.14.0.tgz", + "integrity": "sha512-MPzYPOKMENYOaY3AcAbaKrfvXVlvTc6iHmTXsp9RiwCX+bPyfDMqMFVUSVXPYrXnrvEzhGHfyiFy0PRLHPysNg==", "devOptional": true, "license": "Apache-2.0", "dependencies": { - "@prisma/debug": "6.12.0", - "@prisma/engines-version": "6.12.0-15.8047c96bbd92db98a2abc7c9323ce77c02c89dbc", - "@prisma/get-platform": "6.12.0" + "@prisma/debug": "6.14.0", + "@prisma/engines-version": "6.14.0-25.717184b7b35ea05dfa71a3236b7af656013e1e49", + "@prisma/get-platform": "6.14.0" } }, "node_modules/@prisma/get-platform": { - "version": "6.12.0", - "resolved": "https://registry.npmjs.org/@prisma/get-platform/-/get-platform-6.12.0.tgz", - "integrity": "sha512-nRerTGhTlgyvcBlyWgt8OLNIV7QgJS2XYXMJD1hysorMCuLAjuDDuoxmVt7C2nLxbuxbWPp7OuFRHC23HqD9dA==", + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/@prisma/get-platform/-/get-platform-6.14.0.tgz", + "integrity": "sha512-7VjuxKNwjnBhKfqPpMeWiHEa2sVjYzmHdl1slW6STuUCe9QnOY0OY1ljGSvz6wpG4U8DfbDqkG1yofd/1GINww==", "devOptional": true, "license": "Apache-2.0", "dependencies": { - "@prisma/debug": "6.12.0" + "@prisma/debug": "6.14.0" } }, "node_modules/@redis/client": { @@ -11432,6 +11425,13 @@ "@sinonjs/commons": "^3.0.1" } }, + "node_modules/@standard-schema/spec": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.0.0.tgz", + "integrity": "sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA==", + "devOptional": true, + "license": "MIT" + }, "node_modules/@stencil/core": { "version": "4.33.1", "resolved": "https://registry.npmjs.org/@stencil/core/-/core-4.33.1.tgz", @@ -15891,6 +15891,58 @@ "node": ">= 0.8" } }, + "node_modules/c12": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/c12/-/c12-3.1.0.tgz", + "integrity": "sha512-uWoS8OU1MEIsOv8p/5a82c3H31LsWVR5qiyXVfBNOzfffjUWtPnhAb4BYI2uG2HfGmZmFjCtui5XNWaps+iFuw==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "chokidar": "^4.0.3", + "confbox": "^0.2.2", + "defu": "^6.1.4", + "dotenv": "^16.6.1", + "exsolve": "^1.0.7", + "giget": "^2.0.0", + "jiti": "^2.4.2", + "ohash": "^2.0.11", + "pathe": "^2.0.3", + "perfect-debounce": "^1.0.0", + "pkg-types": "^2.2.0", + "rc9": "^2.1.2" + }, + "peerDependencies": { + "magicast": "^0.3.5" + }, + "peerDependenciesMeta": { + "magicast": { + "optional": true + } + } + }, + "node_modules/c12/node_modules/dotenv": { + "version": "16.6.1", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.6.1.tgz", + "integrity": "sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==", + "devOptional": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "node_modules/c12/node_modules/jiti": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.5.1.tgz", + "integrity": "sha512-twQoecYPiVA5K/h6SxtORw/Bs3ar+mLUtoPSc7iMXzQzK8d7eJ/R09wmTwAjiamETn1cXYPGfNnu7DMoHgu12w==", + "devOptional": true, + "license": "MIT", + "bin": { + "jiti": "lib/jiti-cli.mjs" + } + }, "node_modules/cacache": { "version": "19.0.1", "resolved": "https://registry.npmjs.org/cacache/-/cacache-19.0.1.tgz", @@ -16424,6 +16476,16 @@ "dev": true, "license": "MIT" }, + "node_modules/citty": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/citty/-/citty-0.1.6.tgz", + "integrity": "sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "consola": "^3.2.3" + } + }, "node_modules/cjs-module-lexer": { "version": "1.4.3", "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.4.3.tgz", @@ -16997,8 +17059,8 @@ "version": "0.2.2", "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.2.2.tgz", "integrity": "sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ==", - "license": "MIT", - "optional": true + "devOptional": true, + "license": "MIT" }, "node_modules/confusing-browser-globals": { "version": "1.0.11", @@ -19232,6 +19294,16 @@ "node": ">=0.10.0" } }, + "node_modules/deepmerge-ts": { + "version": "7.1.5", + "resolved": "https://registry.npmjs.org/deepmerge-ts/-/deepmerge-ts-7.1.5.tgz", + "integrity": "sha512-HOJkrhaYsweh+W+e74Yn7YStZOilkoPb6fycpwNLKzSPtruFs48nYis0zy5yJz1+ktUhHxoRDJ27RQAWLIJVJw==", + "devOptional": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=16.0.0" + } + }, "node_modules/default-browser": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.2.1.tgz", @@ -19324,6 +19396,13 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/defu": { + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/defu/-/defu-6.1.4.tgz", + "integrity": "sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==", + "devOptional": true, + "license": "MIT" + }, "node_modules/delaunator": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/delaunator/-/delaunator-5.0.1.tgz", @@ -19391,6 +19470,13 @@ "node": ">=6" } }, + "node_modules/destr": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/destr/-/destr-2.0.5.tgz", + "integrity": "sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==", + "devOptional": true, + "license": "MIT" + }, "node_modules/destroy": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", @@ -19707,6 +19793,17 @@ "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", "license": "MIT" }, + "node_modules/effect": { + "version": "3.16.12", + "resolved": "https://registry.npmjs.org/effect/-/effect-3.16.12.tgz", + "integrity": "sha512-N39iBk0K71F9nb442TLbTkjl24FLUzuvx2i1I2RsEAQsdAdUTuUoW0vlfUXgkMTUOnYqKnWcFfqw4hK4Pw27hg==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "@standard-schema/spec": "^1.0.0", + "fast-check": "^3.23.1" + } + }, "node_modules/ejs": { "version": "3.1.10", "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", @@ -19775,6 +19872,16 @@ "node": ">= 4" } }, + "node_modules/empathic": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/empathic/-/empathic-2.0.0.tgz", + "integrity": "sha512-i6UzDscO/XfAcNYD75CfICkmfLedpyPDdozrLMmQc5ORaQcdMoc21OnlEylMIqI7U8eniKrPMxxtj8k0vhmJhA==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=14" + } + }, "node_modules/encodeurl": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", @@ -21086,8 +21193,8 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/exsolve/-/exsolve-1.0.7.tgz", "integrity": "sha512-VO5fQUzZtI6C+vx4w/4BWJpg3s/5l+6pRQEHzFRM8WFi4XffSP1Z+4qi7GbjWbvRQEbdIco5mIMq+zX4rPuLrw==", - "license": "MIT", - "optional": true + "devOptional": true, + "license": "MIT" }, "node_modules/extend": { "version": "3.0.2", @@ -21179,6 +21286,46 @@ ], "license": "MIT" }, + "node_modules/fast-check": { + "version": "3.23.2", + "resolved": "https://registry.npmjs.org/fast-check/-/fast-check-3.23.2.tgz", + "integrity": "sha512-h5+1OzzfCC3Ef7VbtKdcv7zsstUQwUDlYpUTvjeUsJAssPgLn7QzbboPtL5ro04Mq0rPOsMzl7q5hIbRs2wD1A==", + "devOptional": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/dubzzz" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fast-check" + } + ], + "license": "MIT", + "dependencies": { + "pure-rand": "^6.1.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/fast-check/node_modules/pure-rand": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.1.0.tgz", + "integrity": "sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==", + "devOptional": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/dubzzz" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fast-check" + } + ], + "license": "MIT" + }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -22297,6 +22444,24 @@ "assert-plus": "^1.0.0" } }, + "node_modules/giget": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/giget/-/giget-2.0.0.tgz", + "integrity": "sha512-L5bGsVkxJbJgdnwyuheIunkGatUF/zssUoxxjACCseZYAVbaqdh9Tsmmlkl8vYan09H7sbvKt4pS8GqKLBrEzA==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "citty": "^0.1.6", + "consola": "^3.4.0", + "defu": "^6.1.4", + "node-fetch-native": "^1.6.6", + "nypm": "^0.6.0", + "pathe": "^2.0.3" + }, + "bin": { + "giget": "dist/cli.mjs" + } + }, "node_modules/glob": { "version": "10.4.5", "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", @@ -31500,6 +31665,13 @@ } } }, + "node_modules/node-fetch-native": { + "version": "1.6.7", + "resolved": "https://registry.npmjs.org/node-fetch-native/-/node-fetch-native-1.6.7.tgz", + "integrity": "sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q==", + "devOptional": true, + "license": "MIT" + }, "node_modules/node-fetch/node_modules/tr46": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", @@ -32273,6 +32445,26 @@ "node": ">=12" } }, + "node_modules/nypm": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/nypm/-/nypm-0.6.1.tgz", + "integrity": "sha512-hlacBiRiv1k9hZFiphPUkfSQ/ZfQzZDzC+8z0wL3lvDAOUu/2NnChkKuMoMjNur/9OpKuz2QsIeiPVN0xM5Q0w==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "citty": "^0.1.6", + "consola": "^3.4.2", + "pathe": "^2.0.3", + "pkg-types": "^2.2.0", + "tinyexec": "^1.0.1" + }, + "bin": { + "nypm": "dist/cli.mjs" + }, + "engines": { + "node": "^14.16.0 || >=16.10.0" + } + }, "node_modules/oauth": { "version": "0.10.2", "resolved": "https://registry.npmjs.org/oauth/-/oauth-0.10.2.tgz", @@ -32391,6 +32583,13 @@ "dev": true, "license": "MIT" }, + "node_modules/ohash": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/ohash/-/ohash-2.0.11.tgz", + "integrity": "sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==", + "devOptional": true, + "license": "MIT" + }, "node_modules/on-finished": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", @@ -33310,8 +33509,8 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", - "license": "MIT", - "optional": true + "devOptional": true, + "license": "MIT" }, "node_modules/pathval": { "version": "2.0.1", @@ -33335,6 +33534,13 @@ "dev": true, "license": "MIT" }, + "node_modules/perfect-debounce": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/perfect-debounce/-/perfect-debounce-1.0.0.tgz", + "integrity": "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==", + "devOptional": true, + "license": "MIT" + }, "node_modules/performance-now": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", @@ -33485,8 +33691,8 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-2.2.0.tgz", "integrity": "sha512-2SM/GZGAEkPp3KWORxQZns4M+WSeXbC2HEvmOIJe3Cmiv6ieAJvdVhDldtHqM5J1Y7MrR1XhkBT/rMlhh9FdqQ==", + "devOptional": true, "license": "MIT", - "optional": true, "dependencies": { "confbox": "^0.2.2", "exsolve": "^1.0.7", @@ -34326,15 +34532,15 @@ } }, "node_modules/prisma": { - "version": "6.12.0", - "resolved": "https://registry.npmjs.org/prisma/-/prisma-6.12.0.tgz", - "integrity": "sha512-pmV7NEqQej9WjizN6RSNIwf7Y+jeh9mY1JEX2WjGxJi4YZWexClhde1yz/FuvAM+cTwzchcMytu2m4I6wPkIzg==", + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/prisma/-/prisma-6.14.0.tgz", + "integrity": "sha512-QEuCwxu+Uq9BffFw7in8In+WfbSUN0ewnaSUKloLkbJd42w6EyFckux4M0f7VwwHlM3A8ssaz4OyniCXlsn0WA==", "devOptional": true, "hasInstallScript": true, "license": "Apache-2.0", "dependencies": { - "@prisma/config": "6.12.0", - "@prisma/engines": "6.12.0" + "@prisma/config": "6.14.0", + "@prisma/engines": "6.14.0" }, "bin": { "prisma": "build/index.js" @@ -34619,6 +34825,17 @@ "node": ">= 0.8" } }, + "node_modules/rc9": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/rc9/-/rc9-2.1.2.tgz", + "integrity": "sha512-btXCnMmRIBINM2LDZoEmOogIZU7Qe7zn4BpomSKZ/ykbLObuBdvG+mFq11DL6fjH1DRwHhrlgtYWG96bJiC7Cg==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "defu": "^6.1.4", + "destr": "^2.0.3" + } + }, "node_modules/react": { "version": "18.2.0", "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", @@ -37949,8 +38166,8 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.0.1.tgz", "integrity": "sha512-5uC6DDlmeqiOwCPmK9jMSdOuZTh8bU39Ys6yidB+UTt5hfZUPGAypSgFRiEp+jbi9qH40BLDvy85jIU88wKSqw==", - "license": "MIT", - "optional": true + "devOptional": true, + "license": "MIT" }, "node_modules/tinyglobby": { "version": "0.2.14", diff --git a/package.json b/package.json index 48a79812d..3e45e4236 100644 --- a/package.json +++ b/package.json @@ -90,7 +90,7 @@ "@nestjs/schedule": "6.0.0", "@nestjs/serve-static": "5.0.3", "@openrouter/ai-sdk-provider": "0.7.2", - "@prisma/client": "6.12.0", + "@prisma/client": "6.14.0", "@simplewebauthn/browser": "13.1.0", "@simplewebauthn/server": "13.1.1", "@stripe/stripe-js": "7.6.1", @@ -195,7 +195,7 @@ "nx": "21.3.9", "prettier": "3.6.2", "prettier-plugin-organize-attributes": "1.0.0", - "prisma": "6.12.0", + "prisma": "6.14.0", "react": "18.2.0", "react-dom": "18.2.0", "replace-in-file": "8.3.0", From 475bebec2e84dc7e5f4e325863dd241e31525167 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Sat, 23 Aug 2025 20:39:41 +0200 Subject: [PATCH 47/62] Feature/extend test files by various attributes (#5377) * Extend test files --- test/import/ok/500-activities.json | 9 ++++++++- test/import/ok/derived-currency.json | 9 ++++++++- test/import/ok/sample.json | 10 ++++++++-- test/import/ok/vti-buy-long-history.json | 10 +++++++++- test/import/ok/without-accounts.json | 7 ++++++- 5 files changed, 39 insertions(+), 6 deletions(-) diff --git a/test/import/ok/500-activities.json b/test/import/ok/500-activities.json index f2aeab113..b691a6f9f 100644 --- a/test/import/ok/500-activities.json +++ b/test/import/ok/500-activities.json @@ -13,6 +13,8 @@ "platformId": null } ], + "platforms": [], + "tags": [], "activities": [ { "accountId": "b2d3fe1d-d6a8-41a3-be39-07ef5e9480f0", @@ -6014,5 +6016,10 @@ "date": "2022-05-06T03:16:21.371059Z", "symbol": "AAPL" } - ] + ], + "user": { + "settings": { + "currency": "USD" + } + } } diff --git a/test/import/ok/derived-currency.json b/test/import/ok/derived-currency.json index fe5554beb..e740c1ae3 100644 --- a/test/import/ok/derived-currency.json +++ b/test/import/ok/derived-currency.json @@ -13,6 +13,8 @@ "platformId": null } ], + "platforms": [], + "tags": [], "activities": [ { "accountId": "b2d3fe1d-d6a8-41a3-be39-07ef5e9480f0", @@ -26,5 +28,10 @@ "date": "2024-06-28T00:00:00.000Z", "symbol": "JSE.JO" } - ] + ], + "user": { + "settings": { + "currency": "USD" + } + } } diff --git a/test/import/ok/sample.json b/test/import/ok/sample.json index 4ebb323de..21277129f 100644 --- a/test/import/ok/sample.json +++ b/test/import/ok/sample.json @@ -21,7 +21,7 @@ "id": "b2d3fe1d-d6a8-41a3-be39-07ef5e9480f0", "isExcluded": false, "name": "My Online Trading Account", - "platformId": null + "platformId": "9da3a8a7-4795-43e3-a6db-ccb914189737" } ], "assetProfiles": [ @@ -70,7 +70,13 @@ "url": null } ], - "platforms": [], + "platforms": [ + { + "id": "9da3a8a7-4795-43e3-a6db-ccb914189737", + "name": "Interactive Brokers", + "url": "https://interactivebrokers.com" + } + ], "tags": [], "activities": [ { diff --git a/test/import/ok/vti-buy-long-history.json b/test/import/ok/vti-buy-long-history.json index 1586cff7b..c8cd25e60 100644 --- a/test/import/ok/vti-buy-long-history.json +++ b/test/import/ok/vti-buy-long-history.json @@ -3,6 +3,9 @@ "date": "2023-04-29T00:00:00.000Z", "version": "dev" }, + "accounts": [], + "platforms": [], + "tags": [], "activities": [ { "fee": 0, @@ -34,5 +37,10 @@ "date": "2010-01-04T00:00:00.000Z", "symbol": "VTI" } - ] + ], + "user": { + "settings": { + "currency": "USD" + } + } } diff --git a/test/import/ok/without-accounts.json b/test/import/ok/without-accounts.json index 3a5320741..8a24f86fc 100644 --- a/test/import/ok/without-accounts.json +++ b/test/import/ok/without-accounts.json @@ -44,5 +44,10 @@ "date": "2021-09-16T00:00:00.000Z", "symbol": "MSFT" } - ] + ], + "user": { + "settings": { + "currency": "USD" + } + } } From 1112048c45abb4c5243fc80a606e5c4074bdf780 Mon Sep 17 00:00:00 2001 From: Kenrick Tandrian <60643640+KenTandrian@users.noreply.github.com> Date: Sun, 24 Aug 2025 04:17:22 +0700 Subject: [PATCH 48/62] Task/migrate dialog header and footer components to standalone (#5401) * Migrate dialog footer component to standalone * Migrate dialog header component to standalone * Update changelog --- CHANGELOG.md | 2 ++ .../account-detail-dialog.module.ts | 8 ++++---- .../dialog-footer/dialog-footer.component.ts | 10 ++++++---- .../dialog-footer/dialog-footer.module.ts | 14 -------------- .../dialog-header/dialog-header.component.ts | 11 +++++++---- .../dialog-header/dialog-header.module.ts | 14 -------------- .../holding-detail-dialog.component.ts | 8 ++++---- .../login-with-access-token-dialog.module.ts | 4 ++-- .../import-activities-dialog.component.ts | 8 ++++---- .../benchmark-detail-dialog.component.ts | 8 ++++---- 10 files changed, 33 insertions(+), 54 deletions(-) delete mode 100644 apps/client/src/app/components/dialog-footer/dialog-footer.module.ts delete mode 100644 apps/client/src/app/components/dialog-header/dialog-header.module.ts diff --git a/CHANGELOG.md b/CHANGELOG.md index 757029e19..45a096209 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed +- Refactored the dialog footer component to standalone +- Refactored the dialog header component to standalone - Refactored the register page to standalone - Migrated the login with access token dialog from `ngModel` to form control - Upgraded `prisma` from version `6.12.0` to `6.14.0` diff --git a/apps/client/src/app/components/account-detail-dialog/account-detail-dialog.module.ts b/apps/client/src/app/components/account-detail-dialog/account-detail-dialog.module.ts index 46c4cb40f..537643ac2 100644 --- a/apps/client/src/app/components/account-detail-dialog/account-detail-dialog.module.ts +++ b/apps/client/src/app/components/account-detail-dialog/account-detail-dialog.module.ts @@ -1,5 +1,5 @@ -import { GfDialogFooterModule } from '@ghostfolio/client/components/dialog-footer/dialog-footer.module'; -import { GfDialogHeaderModule } from '@ghostfolio/client/components/dialog-header/dialog-header.module'; +import { GfDialogFooterComponent } from '@ghostfolio/client/components/dialog-footer/dialog-footer.component'; +import { GfDialogHeaderComponent } from '@ghostfolio/client/components/dialog-header/dialog-header.component'; import { GfInvestmentChartModule } from '@ghostfolio/client/components/investment-chart/investment-chart.module'; import { GfAccountBalancesComponent } from '@ghostfolio/ui/account-balances'; import { GfActivitiesTableComponent } from '@ghostfolio/ui/activities-table'; @@ -22,8 +22,8 @@ import { AccountDetailDialog } from './account-detail-dialog.component'; CommonModule, GfAccountBalancesComponent, GfActivitiesTableComponent, - GfDialogFooterModule, - GfDialogHeaderModule, + GfDialogFooterComponent, + GfDialogHeaderComponent, GfHoldingsTableComponent, GfInvestmentChartModule, GfValueComponent, diff --git a/apps/client/src/app/components/dialog-footer/dialog-footer.component.ts b/apps/client/src/app/components/dialog-footer/dialog-footer.component.ts index 923b153b3..92ffc71b3 100644 --- a/apps/client/src/app/components/dialog-footer/dialog-footer.component.ts +++ b/apps/client/src/app/components/dialog-footer/dialog-footer.component.ts @@ -5,18 +5,20 @@ import { Input, Output } from '@angular/core'; +import { MatButtonModule } from '@angular/material/button'; +import { IonIcon } from '@ionic/angular/standalone'; import { addIcons } from 'ionicons'; import { close } from 'ionicons/icons'; @Component({ + changeDetection: ChangeDetectionStrategy.OnPush, host: { class: 'justify-content-center' }, + imports: [IonIcon, MatButtonModule], selector: 'gf-dialog-footer', - changeDetection: ChangeDetectionStrategy.OnPush, - templateUrl: './dialog-footer.component.html', styleUrls: ['./dialog-footer.component.scss'], - standalone: false + templateUrl: './dialog-footer.component.html' }) -export class DialogFooterComponent { +export class GfDialogFooterComponent { @Input() deviceType: string; @Output() closeButtonClicked = new EventEmitter(); diff --git a/apps/client/src/app/components/dialog-footer/dialog-footer.module.ts b/apps/client/src/app/components/dialog-footer/dialog-footer.module.ts deleted file mode 100644 index 486068f72..000000000 --- a/apps/client/src/app/components/dialog-footer/dialog-footer.module.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { CommonModule } from '@angular/common'; -import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core'; -import { MatButtonModule } from '@angular/material/button'; -import { IonIcon } from '@ionic/angular/standalone'; - -import { DialogFooterComponent } from './dialog-footer.component'; - -@NgModule({ - declarations: [DialogFooterComponent], - exports: [DialogFooterComponent], - imports: [CommonModule, IonIcon, MatButtonModule], - schemas: [CUSTOM_ELEMENTS_SCHEMA] -}) -export class GfDialogFooterModule {} diff --git a/apps/client/src/app/components/dialog-header/dialog-header.component.ts b/apps/client/src/app/components/dialog-header/dialog-header.component.ts index 03a5357b5..0487034e9 100644 --- a/apps/client/src/app/components/dialog-header/dialog-header.component.ts +++ b/apps/client/src/app/components/dialog-header/dialog-header.component.ts @@ -1,3 +1,4 @@ +import { CommonModule } from '@angular/common'; import { ChangeDetectionStrategy, Component, @@ -5,18 +6,20 @@ import { Input, Output } from '@angular/core'; +import { MatButtonModule } from '@angular/material/button'; +import { IonIcon } from '@ionic/angular/standalone'; import { addIcons } from 'ionicons'; import { close } from 'ionicons/icons'; @Component({ + changeDetection: ChangeDetectionStrategy.OnPush, host: { class: 'justify-content-center' }, + imports: [CommonModule, IonIcon, MatButtonModule], selector: 'gf-dialog-header', - changeDetection: ChangeDetectionStrategy.OnPush, - templateUrl: './dialog-header.component.html', styleUrls: ['./dialog-header.component.scss'], - standalone: false + templateUrl: './dialog-header.component.html' }) -export class DialogHeaderComponent { +export class GfDialogHeaderComponent { @Input() deviceType: string; @Input() position: 'center' | 'left' = 'left'; @Input() title: string; diff --git a/apps/client/src/app/components/dialog-header/dialog-header.module.ts b/apps/client/src/app/components/dialog-header/dialog-header.module.ts deleted file mode 100644 index da5c2ec28..000000000 --- a/apps/client/src/app/components/dialog-header/dialog-header.module.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { CommonModule } from '@angular/common'; -import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core'; -import { MatButtonModule } from '@angular/material/button'; -import { IonIcon } from '@ionic/angular/standalone'; - -import { DialogHeaderComponent } from './dialog-header.component'; - -@NgModule({ - declarations: [DialogHeaderComponent], - exports: [DialogHeaderComponent], - imports: [CommonModule, IonIcon, MatButtonModule], - schemas: [CUSTOM_ELEMENTS_SCHEMA] -}) -export class GfDialogHeaderModule {} diff --git a/apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts b/apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts index 203bbb123..8f6616174 100644 --- a/apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts +++ b/apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts @@ -1,6 +1,6 @@ import { Activity } from '@ghostfolio/api/app/order/interfaces/activities.interface'; -import { GfDialogFooterModule } from '@ghostfolio/client/components/dialog-footer/dialog-footer.module'; -import { GfDialogHeaderModule } from '@ghostfolio/client/components/dialog-header/dialog-header.module'; +import { GfDialogFooterComponent } from '@ghostfolio/client/components/dialog-footer/dialog-footer.component'; +import { GfDialogHeaderComponent } from '@ghostfolio/client/components/dialog-header/dialog-header.component'; import { DataService } from '@ghostfolio/client/services/data.service'; import { UserService } from '@ghostfolio/client/services/user/user.service'; import { @@ -78,8 +78,8 @@ import { HoldingDetailDialogParams } from './interfaces/interfaces'; GfAccountsTableComponent, GfActivitiesTableComponent, GfDataProviderCreditsComponent, - GfDialogFooterModule, - GfDialogHeaderModule, + GfDialogFooterComponent, + GfDialogHeaderComponent, GfHistoricalMarketDataEditorComponent, GfLineChartComponent, GfPortfolioProportionChartComponent, diff --git a/apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.module.ts b/apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.module.ts index fcced81aa..355ae58f8 100644 --- a/apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.module.ts +++ b/apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.module.ts @@ -9,14 +9,14 @@ import { MatFormFieldModule } from '@angular/material/form-field'; import { MatInputModule } from '@angular/material/input'; import { IonIcon } from '@ionic/angular/standalone'; -import { GfDialogHeaderModule } from '../dialog-header/dialog-header.module'; +import { GfDialogHeaderComponent } from '../dialog-header/dialog-header.component'; import { LoginWithAccessTokenDialog } from './login-with-access-token-dialog.component'; @NgModule({ declarations: [LoginWithAccessTokenDialog], imports: [ CommonModule, - GfDialogHeaderModule, + GfDialogHeaderComponent, IonIcon, MatButtonModule, MatCheckboxModule, diff --git a/apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts b/apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts index 41e366253..8f7130a10 100644 --- a/apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts +++ b/apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts @@ -2,8 +2,8 @@ import { CreateTagDto } from '@ghostfolio/api/app/endpoints/tags/create-tag.dto' import { CreateAccountWithBalancesDto } from '@ghostfolio/api/app/import/create-account-with-balances.dto'; import { CreateAssetProfileWithMarketDataDto } from '@ghostfolio/api/app/import/create-asset-profile-with-market-data.dto'; import { Activity } from '@ghostfolio/api/app/order/interfaces/activities.interface'; -import { GfDialogFooterModule } from '@ghostfolio/client/components/dialog-footer/dialog-footer.module'; -import { GfDialogHeaderModule } from '@ghostfolio/client/components/dialog-header/dialog-header.module'; +import { GfDialogFooterComponent } from '@ghostfolio/client/components/dialog-footer/dialog-footer.component'; +import { GfDialogHeaderComponent } from '@ghostfolio/client/components/dialog-header/dialog-header.component'; import { GfFileDropModule } from '@ghostfolio/client/directives/file-drop/file-drop.module'; import { GfSymbolModule } from '@ghostfolio/client/pipes/symbol/symbol.module'; import { DataService } from '@ghostfolio/client/services/data.service'; @@ -58,8 +58,8 @@ import { ImportActivitiesDialogParams } from './interfaces/interfaces'; changeDetection: ChangeDetectionStrategy.OnPush, imports: [ GfActivitiesTableComponent, - GfDialogFooterModule, - GfDialogHeaderModule, + GfDialogFooterComponent, + GfDialogHeaderComponent, GfFileDropModule, GfSymbolModule, IonIcon, diff --git a/libs/ui/src/lib/benchmark/benchmark-detail-dialog/benchmark-detail-dialog.component.ts b/libs/ui/src/lib/benchmark/benchmark-detail-dialog/benchmark-detail-dialog.component.ts index 45f116358..8f7d30847 100644 --- a/libs/ui/src/lib/benchmark/benchmark-detail-dialog/benchmark-detail-dialog.component.ts +++ b/libs/ui/src/lib/benchmark/benchmark-detail-dialog/benchmark-detail-dialog.component.ts @@ -1,5 +1,5 @@ -import { GfDialogFooterModule } from '@ghostfolio/client/components/dialog-footer/dialog-footer.module'; -import { GfDialogHeaderModule } from '@ghostfolio/client/components/dialog-header/dialog-header.module'; +import { GfDialogFooterComponent } from '@ghostfolio/client/components/dialog-footer/dialog-footer.component'; +import { GfDialogHeaderComponent } from '@ghostfolio/client/components/dialog-header/dialog-header.component'; import { DataService } from '@ghostfolio/client/services/data.service'; import { DATE_FORMAT } from '@ghostfolio/common/helper'; import { @@ -33,8 +33,8 @@ import { BenchmarkDetailDialogParams } from './interfaces/interfaces'; changeDetection: ChangeDetectionStrategy.OnPush, host: { class: 'd-flex flex-column h-100' }, imports: [ - GfDialogFooterModule, - GfDialogHeaderModule, + GfDialogFooterComponent, + GfDialogHeaderComponent, GfLineChartComponent, GfValueComponent, MatDialogModule From 2ee3d24116fc47e1c68aa355455a29377db68825 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Sun, 24 Aug 2025 09:29:35 +0200 Subject: [PATCH 49/62] Task/refactor landing page to standalone (#5400) * Refactor landing page to standalone * Update changelog --- CHANGELOG.md | 1 + apps/client/src/app/app-routing.module.ts | 4 +- .../landing/landing-page-routing.module.ts | 16 -------- .../pages/landing/landing-page.component.ts | 37 +++++++++++++++++-- .../app/pages/landing/landing-page.module.ts | 30 --------------- .../app/pages/landing/landing-page.routes.ts | 15 ++++++++ 6 files changed, 51 insertions(+), 52 deletions(-) delete mode 100644 apps/client/src/app/pages/landing/landing-page-routing.module.ts delete mode 100644 apps/client/src/app/pages/landing/landing-page.module.ts create mode 100644 apps/client/src/app/pages/landing/landing-page.routes.ts diff --git a/CHANGELOG.md b/CHANGELOG.md index 45a096209..da7c6b35d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Refactored the dialog footer component to standalone - Refactored the dialog header component to standalone +- Refactored the landing page to standalone - Refactored the register page to standalone - Migrated the login with access token dialog from `ngModel` to form control - Upgraded `prisma` from version `6.12.0` to `6.14.0` diff --git a/apps/client/src/app/app-routing.module.ts b/apps/client/src/app/app-routing.module.ts index 549a671f7..dc1e92df5 100644 --- a/apps/client/src/app/app-routing.module.ts +++ b/apps/client/src/app/app-routing.module.ts @@ -130,9 +130,7 @@ const routes: Routes = [ { path: publicRoutes.start.path, loadChildren: () => - import('./pages/landing/landing-page.module').then( - (m) => m.LandingPageModule - ) + import('./pages/landing/landing-page.routes').then((m) => m.routes) }, { loadComponent: () => diff --git a/apps/client/src/app/pages/landing/landing-page-routing.module.ts b/apps/client/src/app/pages/landing/landing-page-routing.module.ts deleted file mode 100644 index 0a8ac146d..000000000 --- a/apps/client/src/app/pages/landing/landing-page-routing.module.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { AuthGuard } from '@ghostfolio/client/core/auth.guard'; - -import { NgModule } from '@angular/core'; -import { RouterModule, Routes } from '@angular/router'; - -import { LandingPageComponent } from './landing-page.component'; - -const routes: Routes = [ - { path: '', component: LandingPageComponent, canActivate: [AuthGuard] } -]; - -@NgModule({ - imports: [RouterModule.forChild(routes)], - exports: [RouterModule] -}) -export class LandingPageRoutingModule {} diff --git a/apps/client/src/app/pages/landing/landing-page.component.ts b/apps/client/src/app/pages/landing/landing-page.component.ts index 0a965b8fa..bc859a5e3 100644 --- a/apps/client/src/app/pages/landing/landing-page.component.ts +++ b/apps/client/src/app/pages/landing/landing-page.component.ts @@ -1,21 +1,46 @@ +import { GfWorldMapChartModule } from '@ghostfolio/client/components/world-map-chart/world-map-chart.module'; import { DataService } from '@ghostfolio/client/services/data.service'; import { Statistics } from '@ghostfolio/common/interfaces'; import { hasPermission, permissions } from '@ghostfolio/common/permissions'; import { publicRoutes } from '@ghostfolio/common/routes/routes'; +import { GfCarouselComponent } from '@ghostfolio/ui/carousel'; +import { GfLogoComponent } from '@ghostfolio/ui/logo'; +import { GfValueComponent } from '@ghostfolio/ui/value'; +import { CommonModule } from '@angular/common'; import { Component, OnDestroy, OnInit } from '@angular/core'; +import { MatButtonModule } from '@angular/material/button'; +import { MatCardModule } from '@angular/material/card'; +import { RouterModule } from '@angular/router'; +import { IonIcon } from '@ionic/angular/standalone'; import { format } from 'date-fns'; +import { addIcons } from 'ionicons'; +import { + cloudDownloadOutline, + peopleOutline, + starOutline +} from 'ionicons/icons'; import { DeviceDetectorService } from 'ngx-device-detector'; import { Subject } from 'rxjs'; @Component({ host: { class: 'page' }, + imports: [ + CommonModule, + GfCarouselComponent, + GfLogoComponent, + GfValueComponent, + GfWorldMapChartModule, + IonIcon, + MatButtonModule, + MatCardModule, + RouterModule + ], selector: 'gf-landing-page', styleUrls: ['./landing-page.scss'], - templateUrl: './landing-page.html', - standalone: false + templateUrl: './landing-page.html' }) -export class LandingPageComponent implements OnDestroy, OnInit { +export class GfLandingPageComponent implements OnDestroy, OnInit { public countriesOfSubscribersMap: { [code: string]: { value: number }; } = {}; @@ -118,6 +143,12 @@ export class LandingPageComponent implements OnDestroy, OnInit { ); this.statistics = statistics; + + addIcons({ + cloudDownloadOutline, + peopleOutline, + starOutline + }); } public ngOnInit() { diff --git a/apps/client/src/app/pages/landing/landing-page.module.ts b/apps/client/src/app/pages/landing/landing-page.module.ts deleted file mode 100644 index ca39e6023..000000000 --- a/apps/client/src/app/pages/landing/landing-page.module.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { GfWorldMapChartModule } from '@ghostfolio/client/components/world-map-chart/world-map-chart.module'; -import { GfCarouselComponent } from '@ghostfolio/ui/carousel'; -import { GfLogoComponent } from '@ghostfolio/ui/logo'; -import { GfValueComponent } from '@ghostfolio/ui/value'; - -import { CommonModule } from '@angular/common'; -import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core'; -import { MatButtonModule } from '@angular/material/button'; -import { MatCardModule } from '@angular/material/card'; -import { RouterModule } from '@angular/router'; - -import { LandingPageRoutingModule } from './landing-page-routing.module'; -import { LandingPageComponent } from './landing-page.component'; - -@NgModule({ - declarations: [LandingPageComponent], - imports: [ - CommonModule, - GfCarouselComponent, - GfLogoComponent, - GfValueComponent, - GfWorldMapChartModule, - LandingPageRoutingModule, - MatButtonModule, - MatCardModule, - RouterModule - ], - schemas: [CUSTOM_ELEMENTS_SCHEMA] -}) -export class LandingPageModule {} diff --git a/apps/client/src/app/pages/landing/landing-page.routes.ts b/apps/client/src/app/pages/landing/landing-page.routes.ts new file mode 100644 index 000000000..181661bc2 --- /dev/null +++ b/apps/client/src/app/pages/landing/landing-page.routes.ts @@ -0,0 +1,15 @@ +import { AuthGuard } from '@ghostfolio/client/core/auth.guard'; +import { publicRoutes } from '@ghostfolio/common/routes/routes'; + +import { Routes } from '@angular/router'; + +import { GfLandingPageComponent } from './landing-page.component'; + +export const routes: Routes = [ + { + canActivate: [AuthGuard], + component: GfLandingPageComponent, + path: '', + title: publicRoutes.register.title + } +]; From 3e8e3af937ba1493529d3762c69935693ed9aadc Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Sun, 24 Aug 2025 09:44:23 +0200 Subject: [PATCH 50/62] Feature/upgrade ionicons to version 8.0.13 (#5399) * Upgrade @ionic/angular to version 8.7.3 * Upgrade ionicons to version 8.0.13 * Update changelog --- CHANGELOG.md | 2 ++ package-lock.json | 79 +++++++++++++++++++++++++---------------------- package.json | 4 +-- 3 files changed, 46 insertions(+), 39 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index da7c6b35d..5daace1cc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Refactored the landing page to standalone - Refactored the register page to standalone - Migrated the login with access token dialog from `ngModel` to form control +- Upgraded `@ionic/angular` from version `8.6.3` to `8.7.3` +- Upgraded `ionicons` from version `8.0.10` to `8.0.13` - Upgraded `prisma` from version `6.12.0` to `6.14.0` ## 2.193.0 - 2025-08-22 diff --git a/package-lock.json b/package-lock.json index c925fae7e..59305bec1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -30,7 +30,7 @@ "@dfinity/principal": "0.15.7", "@dinero.js/currencies": "2.0.0-alpha.8", "@internationalized/number": "3.6.3", - "@ionic/angular": "8.6.3", + "@ionic/angular": "8.7.3", "@keyv/redis": "4.4.0", "@nestjs/bull": "11.0.2", "@nestjs/cache-manager": "3.0.1", @@ -71,7 +71,7 @@ "google-spreadsheet": "3.2.0", "helmet": "7.0.0", "http-status-codes": "2.3.0", - "ionicons": "8.0.10", + "ionicons": "8.0.13", "jsonpath": "1.1.1", "lodash": "4.17.21", "marked": "15.0.4", @@ -4701,13 +4701,13 @@ } }, "node_modules/@ionic/angular": { - "version": "8.6.3", - "resolved": "https://registry.npmjs.org/@ionic/angular/-/angular-8.6.3.tgz", - "integrity": "sha512-Uw8eAcvqVw8mtGqX8kvUGNywSXjXZ3gdERuWC4hUSc63bS1Q+yo/319JLu+yENxOObtAu2dS5FYiqUZ07T8Brg==", + "version": "8.7.3", + "resolved": "https://registry.npmjs.org/@ionic/angular/-/angular-8.7.3.tgz", + "integrity": "sha512-Fd2bsluwsi88d8AEvSVANn3a7xZ7NEmlvgVTLnuF9VTI0TgdkLQptgEolty00axnQdjCaxSXxgFJd/m0gVpKIg==", "license": "MIT", "dependencies": { - "@ionic/core": "8.6.3", - "ionicons": "^7.0.0", + "@ionic/core": "8.7.3", + "ionicons": "^8.0.13", "jsonc-parser": "^3.0.0", "tslib": "^2.3.0" }, @@ -4719,35 +4719,17 @@ "zone.js": ">=0.13.0" } }, - "node_modules/@ionic/angular/node_modules/ionicons": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/ionicons/-/ionicons-7.4.0.tgz", - "integrity": "sha512-ZK94MMqgzMCPPMhmk8Ouu6goyVHFIlw/ACP6oe3FrikcI0N7CX0xcwVaEbUc0G/v3W0shI93vo+9ve/KpvcNhQ==", - "license": "MIT", - "dependencies": { - "@stencil/core": "^4.0.3" - } - }, "node_modules/@ionic/core": { - "version": "8.6.3", - "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.6.3.tgz", - "integrity": "sha512-N/mkw+sPecLEoO1lrnKDS0uZgl6PWSyFprCkkqoK1nHlfBkgFiHm5M9rvWlnGaFC/5xrhNGHdUtYHDFM+F8gRw==", + "version": "8.7.3", + "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.7.3.tgz", + "integrity": "sha512-KdyMxpMDQj+uqpztpK6yvN/T96hqcDiGXQ4T+aAZ+LW3wV3+0it6/rbh9C1B/wCl4Isnm4IRltPabgEfNJ50nw==", "license": "MIT", "dependencies": { - "@stencil/core": "4.33.1", - "ionicons": "^7.2.2", + "@stencil/core": "4.36.2", + "ionicons": "^8.0.13", "tslib": "^2.1.0" } }, - "node_modules/@ionic/core/node_modules/ionicons": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/ionicons/-/ionicons-7.4.0.tgz", - "integrity": "sha512-ZK94MMqgzMCPPMhmk8Ouu6goyVHFIlw/ACP6oe3FrikcI0N7CX0xcwVaEbUc0G/v3W0shI93vo+9ve/KpvcNhQ==", - "license": "MIT", - "dependencies": { - "@stencil/core": "^4.0.3" - } - }, "node_modules/@ioredis/commands": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/@ioredis/commands/-/commands-1.3.0.tgz", @@ -11433,9 +11415,9 @@ "license": "MIT" }, "node_modules/@stencil/core": { - "version": "4.33.1", - "resolved": "https://registry.npmjs.org/@stencil/core/-/core-4.33.1.tgz", - "integrity": "sha512-12k9xhAJBkpg598it+NRmaYIdEe6TSnsL/v6/KRXDcUyTK11VYwZQej2eHnMWtqot+znJ+GNTqb5YbiXi+5Low==", + "version": "4.36.2", + "resolved": "https://registry.npmjs.org/@stencil/core/-/core-4.36.2.tgz", + "integrity": "sha512-PRFSpxNzX9Oi0Wfh02asztN9Sgev/MacfZwmd+VVyE6ZxW+a/kEpAYZhzGAmE+/aKVOGYuug7R9SulanYGxiDQ==", "license": "MIT", "bin": { "stencil": "bin/stencil" @@ -23739,12 +23721,35 @@ } }, "node_modules/ionicons": { - "version": "8.0.10", - "resolved": "https://registry.npmjs.org/ionicons/-/ionicons-8.0.10.tgz", - "integrity": "sha512-w+6VmjcRwlAtryXzM+BOlIHKyJYlrfbIIYWW4cU0BM8OECoTn/KF8ecOE5j4401z5/FcmHf/yXol1xinKuPM8g==", + "version": "8.0.13", + "resolved": "https://registry.npmjs.org/ionicons/-/ionicons-8.0.13.tgz", + "integrity": "sha512-2QQVyG2P4wszne79jemMjWYLp0DBbDhr4/yFroPCxvPP1wtMxgdIV3l5n+XZ5E9mgoXU79w7yTWpm2XzJsISxQ==", "license": "MIT", "dependencies": { - "@stencil/core": "^4.30.0" + "@stencil/core": "^4.35.3" + } + }, + "node_modules/ionicons/node_modules/@stencil/core": { + "version": "4.36.3", + "resolved": "https://registry.npmjs.org/@stencil/core/-/core-4.36.3.tgz", + "integrity": "sha512-C9DOaAjm+hSYRuVoUuYWG/lrYT8+4DG0AL0m1Ea9+G5v2Y6ApVpNJLbXvFlRZIdDMGecH86s6v0Gp39uockLxg==", + "license": "MIT", + "bin": { + "stencil": "bin/stencil" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.10.0" + }, + "optionalDependencies": { + "@rollup/rollup-darwin-arm64": "4.34.9", + "@rollup/rollup-darwin-x64": "4.34.9", + "@rollup/rollup-linux-arm64-gnu": "4.34.9", + "@rollup/rollup-linux-arm64-musl": "4.34.9", + "@rollup/rollup-linux-x64-gnu": "4.34.9", + "@rollup/rollup-linux-x64-musl": "4.34.9", + "@rollup/rollup-win32-arm64-msvc": "4.34.9", + "@rollup/rollup-win32-x64-msvc": "4.34.9" } }, "node_modules/ioredis": { diff --git a/package.json b/package.json index 3e45e4236..32f53220e 100644 --- a/package.json +++ b/package.json @@ -76,7 +76,7 @@ "@dfinity/principal": "0.15.7", "@dinero.js/currencies": "2.0.0-alpha.8", "@internationalized/number": "3.6.3", - "@ionic/angular": "8.6.3", + "@ionic/angular": "8.7.3", "@keyv/redis": "4.4.0", "@nestjs/bull": "11.0.2", "@nestjs/cache-manager": "3.0.1", @@ -117,7 +117,7 @@ "google-spreadsheet": "3.2.0", "helmet": "7.0.0", "http-status-codes": "2.3.0", - "ionicons": "8.0.10", + "ionicons": "8.0.13", "jsonpath": "1.1.1", "lodash": "4.17.21", "marked": "15.0.4", From 34e09626cc753eb7f7b0aeeca23db9c10d7647c2 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Mon, 25 Aug 2025 21:44:38 +0200 Subject: [PATCH 51/62] Task/refactor pricing page to standalone (#5402) * Refactor pricing page to standalone * Update changelog --- CHANGELOG.md | 1 + apps/client/src/app/app-routing.module.ts | 4 +- .../pricing/pricing-page-routing.module.ts | 21 ---------- .../pages/pricing/pricing-page.component.ts | 42 ++++++++++++++++--- .../app/pages/pricing/pricing-page.module.ts | 28 ------------- .../app/pages/pricing/pricing-page.routes.ts | 14 +++++++ 6 files changed, 52 insertions(+), 58 deletions(-) delete mode 100644 apps/client/src/app/pages/pricing/pricing-page-routing.module.ts delete mode 100644 apps/client/src/app/pages/pricing/pricing-page.module.ts create mode 100644 apps/client/src/app/pages/pricing/pricing-page.routes.ts diff --git a/CHANGELOG.md b/CHANGELOG.md index 5daace1cc..1797d94ab 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Refactored the dialog footer component to standalone - Refactored the dialog header component to standalone - Refactored the landing page to standalone +- Refactored the pricing page to standalone - Refactored the register page to standalone - Migrated the login with access token dialog from `ngModel` to form control - Upgraded `@ionic/angular` from version `8.6.3` to `8.7.3` diff --git a/apps/client/src/app/app-routing.module.ts b/apps/client/src/app/app-routing.module.ts index dc1e92df5..9d5123d1b 100644 --- a/apps/client/src/app/app-routing.module.ts +++ b/apps/client/src/app/app-routing.module.ts @@ -106,9 +106,7 @@ const routes: Routes = [ { path: publicRoutes.pricing.path, loadChildren: () => - import('./pages/pricing/pricing-page.module').then( - (m) => m.PricingPageModule - ) + import('./pages/pricing/pricing-page.routes').then((m) => m.routes) }, { path: publicRoutes.public.path, diff --git a/apps/client/src/app/pages/pricing/pricing-page-routing.module.ts b/apps/client/src/app/pages/pricing/pricing-page-routing.module.ts deleted file mode 100644 index 5ba675184..000000000 --- a/apps/client/src/app/pages/pricing/pricing-page-routing.module.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { AuthGuard } from '@ghostfolio/client/core/auth.guard'; - -import { NgModule } from '@angular/core'; -import { RouterModule, Routes } from '@angular/router'; - -import { PricingPageComponent } from './pricing-page.component'; - -const routes: Routes = [ - { - canActivate: [AuthGuard], - component: PricingPageComponent, - path: '', - title: $localize`Pricing` - } -]; - -@NgModule({ - imports: [RouterModule.forChild(routes)], - exports: [RouterModule] -}) -export class PricingPageRoutingModule {} diff --git a/apps/client/src/app/pages/pricing/pricing-page.component.ts b/apps/client/src/app/pages/pricing/pricing-page.component.ts index 5186aaadf..170d70914 100644 --- a/apps/client/src/app/pages/pricing/pricing-page.component.ts +++ b/apps/client/src/app/pages/pricing/pricing-page.component.ts @@ -5,10 +5,27 @@ import { User } from '@ghostfolio/common/interfaces'; import { hasPermission, permissions } from '@ghostfolio/common/permissions'; import { publicRoutes } from '@ghostfolio/common/routes/routes'; import { translate } from '@ghostfolio/ui/i18n'; +import { GfPremiumIndicatorComponent } from '@ghostfolio/ui/premium-indicator'; -import { ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { + ChangeDetectorRef, + Component, + CUSTOM_ELEMENTS_SCHEMA, + OnDestroy, + OnInit +} from '@angular/core'; +import { MatButtonModule } from '@angular/material/button'; +import { MatCardModule } from '@angular/material/card'; +import { MatTooltipModule } from '@angular/material/tooltip'; +import { RouterModule } from '@angular/router'; +import { IonIcon } from '@ionic/angular/standalone'; import { addIcons } from 'ionicons'; -import { checkmarkCircleOutline, checkmarkOutline } from 'ionicons/icons'; +import { + checkmarkCircleOutline, + checkmarkOutline, + informationCircleOutline +} from 'ionicons/icons'; import { StringValue } from 'ms'; import { StripeService } from 'ngx-stripe'; import { Subject } from 'rxjs'; @@ -16,12 +33,21 @@ import { catchError, switchMap, takeUntil } from 'rxjs/operators'; @Component({ host: { class: 'page' }, + imports: [ + CommonModule, + GfPremiumIndicatorComponent, + IonIcon, + MatButtonModule, + MatCardModule, + MatTooltipModule, + RouterModule + ], + schemas: [CUSTOM_ELEMENTS_SCHEMA], selector: 'gf-pricing-page', styleUrls: ['./pricing-page.scss'], - templateUrl: './pricing-page.html', - standalone: false + templateUrl: './pricing-page.html' }) -export class PricingPageComponent implements OnDestroy, OnInit { +export class GfPricingPageComponent implements OnDestroy, OnInit { public baseCurrency: string; public coupon: number; public couponId: string; @@ -56,7 +82,11 @@ export class PricingPageComponent implements OnDestroy, OnInit { private stripeService: StripeService, private userService: UserService ) { - addIcons({ checkmarkCircleOutline, checkmarkOutline }); + addIcons({ + checkmarkCircleOutline, + checkmarkOutline, + informationCircleOutline + }); } public ngOnInit() { diff --git a/apps/client/src/app/pages/pricing/pricing-page.module.ts b/apps/client/src/app/pages/pricing/pricing-page.module.ts deleted file mode 100644 index 3cfa09ade..000000000 --- a/apps/client/src/app/pages/pricing/pricing-page.module.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { GfPremiumIndicatorComponent } from '@ghostfolio/ui/premium-indicator'; - -import { CommonModule } from '@angular/common'; -import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core'; -import { MatButtonModule } from '@angular/material/button'; -import { MatCardModule } from '@angular/material/card'; -import { MatTooltipModule } from '@angular/material/tooltip'; -import { RouterModule } from '@angular/router'; -import { IonIcon } from '@ionic/angular/standalone'; - -import { PricingPageRoutingModule } from './pricing-page-routing.module'; -import { PricingPageComponent } from './pricing-page.component'; - -@NgModule({ - declarations: [PricingPageComponent], - imports: [ - CommonModule, - GfPremiumIndicatorComponent, - IonIcon, - MatButtonModule, - MatCardModule, - MatTooltipModule, - PricingPageRoutingModule, - RouterModule - ], - schemas: [CUSTOM_ELEMENTS_SCHEMA] -}) -export class PricingPageModule {} diff --git a/apps/client/src/app/pages/pricing/pricing-page.routes.ts b/apps/client/src/app/pages/pricing/pricing-page.routes.ts new file mode 100644 index 000000000..a5b2c6639 --- /dev/null +++ b/apps/client/src/app/pages/pricing/pricing-page.routes.ts @@ -0,0 +1,14 @@ +import { AuthGuard } from '@ghostfolio/client/core/auth.guard'; + +import { Routes } from '@angular/router'; + +import { GfPricingPageComponent } from './pricing-page.component'; + +export const routes: Routes = [ + { + canActivate: [AuthGuard], + component: GfPricingPageComponent, + path: '', + title: $localize`Pricing` + } +]; From b2867b1955cd647234b4025c8d6f61a9d0b6925a Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Mon, 25 Aug 2025 21:45:13 +0200 Subject: [PATCH 52/62] Feature/randomize minutes of hourly data gathering cron job (#5403) * Randomize minutes of hourly data gathering * Update changelog --- CHANGELOG.md | 1 + apps/api/src/services/cron/cron.service.ts | 5 +++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1797d94ab..da75dde40 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed +- Randomized the minutes of the hourly data gathering cron job - Refactored the dialog footer component to standalone - Refactored the dialog header component to standalone - Refactored the landing page to standalone diff --git a/apps/api/src/services/cron/cron.service.ts b/apps/api/src/services/cron/cron.service.ts index b770aa2d7..88fcabce2 100644 --- a/apps/api/src/services/cron/cron.service.ts +++ b/apps/api/src/services/cron/cron.service.ts @@ -17,6 +17,7 @@ import { Cron, CronExpression } from '@nestjs/schedule'; @Injectable() export class CronService { + private static readonly EVERY_HOUR_AT_RANDOM_MINUTE = `${new Date().getMinutes()} * * * *`; private static readonly EVERY_SUNDAY_AT_LUNCH_TIME = '0 12 * * 0'; public constructor( @@ -28,8 +29,8 @@ export class CronService { private readonly userService: UserService ) {} - @Cron(CronExpression.EVERY_HOUR) - public async runEveryHour() { + @Cron(CronService.EVERY_HOUR_AT_RANDOM_MINUTE) + public async runEveryHourAtRandomMinute() { if (await this.isDataGatheringEnabled()) { await this.dataGatheringService.gather7Days(); } From e6aa580faef31d7ecdce67fbd90386fa267bea9e Mon Sep 17 00:00:00 2001 From: Kenrick Tandrian <60643640+KenTandrian@users.noreply.github.com> Date: Tue, 26 Aug 2025 18:07:11 +0700 Subject: [PATCH 53/62] Feature/extend watchlist endpoint by trend50d and trend200d (#5405) * Extend watchlist endpoint by trend50d and trend200d * Update changelog --- CHANGELOG.md | 4 ++++ .../app/endpoints/watchlist/watchlist.service.ts | 15 ++++++++++----- .../home-watchlist/home-watchlist.component.ts | 13 +------------ .../responses/watchlist-response.interface.ts | 2 ++ 4 files changed, 17 insertions(+), 17 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index da75dde40..808ee3e2c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## Unreleased +### Added + +- Extended the watchlist endpoint by 50-Day and 200-Day trends (experimental) + ### Changed - Randomized the minutes of the hourly data gathering cron job diff --git a/apps/api/src/app/endpoints/watchlist/watchlist.service.ts b/apps/api/src/app/endpoints/watchlist/watchlist.service.ts index 36a498e1d..666023dbf 100644 --- a/apps/api/src/app/endpoints/watchlist/watchlist.service.ts +++ b/apps/api/src/app/endpoints/watchlist/watchlist.service.ts @@ -116,10 +116,13 @@ export class WatchlistService { return profile.dataSource === dataSource && profile.symbol === symbol; }); - const allTimeHigh = await this.marketDataService.getMax({ - dataSource, - symbol - }); + const [allTimeHigh, trends] = await Promise.all([ + this.marketDataService.getMax({ + dataSource, + symbol + }), + this.benchmarkService.getBenchmarkTrends({ dataSource, symbol }) + ]); const performancePercent = this.benchmarkService.calculateChangeInPercentage( @@ -138,7 +141,9 @@ export class WatchlistService { performancePercent, date: allTimeHigh?.date } - } + }, + trend50d: trends.trend50d, + trend200d: trends.trend200d }; }) ); diff --git a/apps/client/src/app/components/home-watchlist/home-watchlist.component.ts b/apps/client/src/app/components/home-watchlist/home-watchlist.component.ts index ccb1664f1..226d748cd 100644 --- a/apps/client/src/app/components/home-watchlist/home-watchlist.component.ts +++ b/apps/client/src/app/components/home-watchlist/home-watchlist.component.ts @@ -7,7 +7,6 @@ import { User } from '@ghostfolio/common/interfaces'; import { hasPermission, permissions } from '@ghostfolio/common/permissions'; -import { BenchmarkTrend } from '@ghostfolio/common/types'; import { GfBenchmarkComponent } from '@ghostfolio/ui/benchmark'; import { GfPremiumIndicatorComponent } from '@ghostfolio/ui/premium-indicator'; @@ -137,17 +136,7 @@ export class HomeWatchlistComponent implements OnDestroy, OnInit { .fetchWatchlist() .pipe(takeUntil(this.unsubscribeSubject)) .subscribe(({ watchlist }) => { - this.watchlist = watchlist.map( - ({ dataSource, marketCondition, name, performances, symbol }) => ({ - dataSource, - marketCondition, - name, - performances, - symbol, - trend50d: 'UNKNOWN' as BenchmarkTrend, - trend200d: 'UNKNOWN' as BenchmarkTrend - }) - ); + this.watchlist = watchlist; this.changeDetectorRef.markForCheck(); }); diff --git a/libs/common/src/lib/interfaces/responses/watchlist-response.interface.ts b/libs/common/src/lib/interfaces/responses/watchlist-response.interface.ts index 6994d73f7..21570a459 100644 --- a/libs/common/src/lib/interfaces/responses/watchlist-response.interface.ts +++ b/libs/common/src/lib/interfaces/responses/watchlist-response.interface.ts @@ -8,5 +8,7 @@ export interface WatchlistResponse { marketCondition: Benchmark['marketCondition']; name: string; performances: Benchmark['performances']; + trend50d: Benchmark['trend50d']; + trend200d: Benchmark['trend200d']; })[]; } From 138d867e8dd179f6b73ca89cd612a098682a34f7 Mon Sep 17 00:00:00 2001 From: Attila Cseh <77381875+csehatt741@users.noreply.github.com> Date: Tue, 26 Aug 2025 13:15:13 +0200 Subject: [PATCH 54/62] Feature/filter asset sub class options in create activity dialog (#5404) * Filter asset sub class options in create activity dialog * Update changelog --- CHANGELOG.md | 1 + .../asset-profile-dialog.component.ts | 6 +-- .../interfaces/interfaces.ts | 7 +-- ...ate-or-update-activity-dialog.component.ts | 44 +++++++++++++++---- .../create-or-update-activity-dialog.html | 18 +++++--- .../asset-class-selector-option.interface.ts | 6 +++ libs/common/src/lib/interfaces/index.ts | 2 + 7 files changed, 60 insertions(+), 24 deletions(-) create mode 100644 libs/common/src/lib/interfaces/asset-class-selector-option.interface.ts diff --git a/CHANGELOG.md b/CHANGELOG.md index 808ee3e2c..918d4d82b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed +- Improved the create or update activity dialog’s asset sub class selector for valuables to update the options dynamically based on the selected asset class - Randomized the minutes of the hourly data gathering cron job - Refactored the dialog footer component to standalone - Refactored the dialog header component to standalone 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 0ea28c618..264d0a1b0 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 @@ -13,6 +13,7 @@ import { import { DATE_FORMAT } from '@ghostfolio/common/helper'; import { AdminMarketDataDetails, + AssetClassSelectorOption, AssetProfileIdentifier, LineChartItem, ScraperConfiguration, @@ -82,10 +83,7 @@ import ms from 'ms'; import { EMPTY, Subject } from 'rxjs'; import { catchError, takeUntil } from 'rxjs/operators'; -import { - AssetClassSelectorOption, - AssetProfileDialogParams -} from './interfaces/interfaces'; +import { AssetProfileDialogParams } from './interfaces/interfaces'; @Component({ changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/apps/client/src/app/components/admin-market-data/asset-profile-dialog/interfaces/interfaces.ts b/apps/client/src/app/components/admin-market-data/asset-profile-dialog/interfaces/interfaces.ts index 0de94c1cb..6a966b427 100644 --- a/apps/client/src/app/components/admin-market-data/asset-profile-dialog/interfaces/interfaces.ts +++ b/apps/client/src/app/components/admin-market-data/asset-profile-dialog/interfaces/interfaces.ts @@ -1,11 +1,6 @@ import { ColorScheme } from '@ghostfolio/common/types'; -import { AssetClass, AssetSubClass, DataSource } from '@prisma/client'; - -export interface AssetClassSelectorOption { - id: AssetClass | AssetSubClass; - label: string; -} +import { DataSource } from '@prisma/client'; export interface AssetProfileDialogParams { colorScheme: ColorScheme; 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 f2da26246..fde4f20fa 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,8 +1,12 @@ import { CreateOrderDto } from '@ghostfolio/api/app/order/create-order.dto'; import { UpdateOrderDto } from '@ghostfolio/api/app/order/update-order.dto'; import { UserService } from '@ghostfolio/client/services/user/user.service'; +import { ASSET_CLASS_MAPPING } from '@ghostfolio/common/config'; import { getDateFormatString } from '@ghostfolio/common/helper'; -import { LookupItem } from '@ghostfolio/common/interfaces'; +import { + AssetClassSelectorOption, + LookupItem +} from '@ghostfolio/common/interfaces'; import { hasPermission, permissions } from '@ghostfolio/common/permissions'; import { GfEntityLogoComponent } from '@ghostfolio/ui/entity-logo'; import { translate } from '@ghostfolio/ui/i18n'; @@ -37,7 +41,7 @@ import { MatFormFieldModule } from '@angular/material/form-field'; import { MatInputModule } from '@angular/material/input'; import { MatSelectModule } from '@angular/material/select'; import { IonIcon } from '@ionic/angular/standalone'; -import { AssetClass, AssetSubClass, Tag, Type } from '@prisma/client'; +import { AssetClass, Tag, Type } from '@prisma/client'; import { isAfter, isToday } from 'date-fns'; import { addIcons } from 'ionicons'; import { calendarClearOutline, refreshOutline } from 'ionicons/icons'; @@ -73,12 +77,16 @@ import { CreateOrUpdateActivityDialogParams } from './interfaces/interfaces'; }) export class GfCreateOrUpdateActivityDialog implements OnDestroy { public activityForm: FormGroup; - public assetClasses = Object.keys(AssetClass).map((assetClass) => { - return { id: assetClass, label: translate(assetClass) }; - }); - public assetSubClasses = Object.keys(AssetSubClass).map((assetSubClass) => { - return { id: assetSubClass, label: translate(assetSubClass) }; - }); + + public assetClassOptions: AssetClassSelectorOption[] = Object.keys(AssetClass) + .map((id) => { + return { id, label: translate(id) } as AssetClassSelectorOption; + }) + .sort((a, b) => { + return a.label.localeCompare(b.label); + }); + + public assetSubClassOptions: AssetClassSelectorOption[] = []; public currencies: string[] = []; public currencyOfAssetProfile: string; public currentMarketPrice = null; @@ -273,6 +281,26 @@ export class GfCreateOrUpdateActivityDialog implements OnDestroy { } }); + this.activityForm + .get('assetClass') + .valueChanges.pipe(takeUntil(this.unsubscribeSubject)) + .subscribe((assetClass) => { + const assetSubClasses = ASSET_CLASS_MAPPING.get(assetClass) ?? []; + + this.assetSubClassOptions = assetSubClasses + .map((assetSubClass) => { + return { + id: assetSubClass, + label: translate(assetSubClass) + }; + }) + .sort((a, b) => a.label.localeCompare(b.label)); + + this.activityForm.get('assetSubClass').setValue(null); + + this.changeDetectorRef.markForCheck(); + }); + this.activityForm.get('date').valueChanges.subscribe(() => { if (isToday(this.activityForm.get('date').value)) { this.activityForm.get('updateAccountBalance').enable(); 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 acd128786..d7f466743 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 @@ -290,9 +290,12 @@ Asset Class - @for (assetClass of assetClasses; track assetClass) { - {{ - assetClass.label + @for ( + assetClassOption of assetClassOptions; + track assetClassOption.id + ) { + {{ + assetClassOption.label }} } @@ -306,9 +309,12 @@ Asset Sub Class - @for (assetSubClass of assetSubClasses; track assetSubClass) { - {{ - assetSubClass.label + @for ( + assetSubClassOption of assetSubClassOptions; + track assetSubClassOption.id + ) { + {{ + assetSubClassOption.label }} } diff --git a/libs/common/src/lib/interfaces/asset-class-selector-option.interface.ts b/libs/common/src/lib/interfaces/asset-class-selector-option.interface.ts new file mode 100644 index 000000000..b4b1060e4 --- /dev/null +++ b/libs/common/src/lib/interfaces/asset-class-selector-option.interface.ts @@ -0,0 +1,6 @@ +import { AssetClass, AssetSubClass } from '@prisma/client'; + +export interface AssetClassSelectorOption { + id: AssetClass | AssetSubClass; + label: string; +} diff --git a/libs/common/src/lib/interfaces/index.ts b/libs/common/src/lib/interfaces/index.ts index 52ca76b3a..6529fa3ef 100644 --- a/libs/common/src/lib/interfaces/index.ts +++ b/libs/common/src/lib/interfaces/index.ts @@ -8,6 +8,7 @@ import type { AdminMarketDataItem } from './admin-market-data.interface'; import type { AdminUsers } from './admin-users.interface'; +import type { AssetClassSelectorOption } from './asset-class-selector-option.interface'; import type { AssetProfileIdentifier } from './asset-profile-identifier.interface'; import type { BenchmarkMarketDataDetails } from './benchmark-market-data-details.interface'; import type { BenchmarkProperty } from './benchmark-property.interface'; @@ -86,6 +87,7 @@ export { AdminUsers, AiPromptResponse, ApiKeyResponse, + AssetClassSelectorOption, AssetProfileIdentifier, Benchmark, BenchmarkMarketDataDetails, From 25dbeeb5c554bc8fc760e5e3c0cf55cb7409088e Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Wed, 27 Aug 2025 13:23:49 +0200 Subject: [PATCH 55/62] Feature/extend personal finance tools 20250827 (#5411) * Add Income Reign * Various updates --- libs/common/src/lib/personal-finance-tools.ts | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/libs/common/src/lib/personal-finance-tools.ts b/libs/common/src/lib/personal-finance-tools.ts index d0e47ee3b..20adb7a77 100644 --- a/libs/common/src/lib/personal-finance-tools.ts +++ b/libs/common/src/lib/personal-finance-tools.ts @@ -427,6 +427,15 @@ export const personalFinanceTools: Product[] = [ slogan: 'Die All-in-One Lösung für dein Vermögen.', useAnonymously: true }, + { + founded: 2022, + key: 'income-reign', + languages: ['English'], + name: 'Income Reign', + note: 'Income Reign was discontinued in 2025', + origin: 'United States', + pricingPerYear: '$120' + }, { hasFreePlan: true, hasSelfHostingAbility: false, @@ -452,6 +461,7 @@ export const personalFinanceTools: Product[] = [ hasSelfHostingAbility: true, key: 'invmon', name: 'InvMon', + note: 'Originally named as A2PB', origin: 'Switzerland', pricingPerYear: '$156', slogan: 'Track all your assets, investments and portfolios in one place', @@ -985,6 +995,7 @@ export const personalFinanceTools: Product[] = [ founded: 2024, hasSelfHostingAbility: true, isArchived: true, + isOpenSource: true, key: 'wealthfolio', languages: ['English'], name: 'Wealthfolio', From 795609e03ac99cd21c643dbad7a0efbbf4d8b9e3 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Wed, 27 Aug 2025 13:24:08 +0200 Subject: [PATCH 56/62] Feature/move support to customize X-ray rules from experimental to general availability (#5408) * Move support to customize X-ray rules from experimental to general availability * Update changelog --- CHANGELOG.md | 1 + .../access-table/access-table.component.html | 10 ++++-- .../access-table/access-table.component.ts | 8 +++-- .../app/components/rule/rule.component.html | 16 +++++++-- .../src/app/components/rule/rule.component.ts | 4 +++ .../portfolio/x-ray/x-ray-page.component.html | 36 +++++-------------- 6 files changed, 41 insertions(+), 34 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 918d4d82b..bb3bd6d3c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed +- Moved the support to customize rules in the _X-ray_ section from experimental to general availability - Improved the create or update activity dialog’s asset sub class selector for valuables to update the options dynamically based on the selected asset class - Randomized the minutes of the hourly data gathering cron job - Refactored the dialog footer component to standalone 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 44aee1644..be374db9c 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 @@ -67,12 +67,18 @@ @if (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 c94f86df1..9f32be650 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 @@ -22,10 +22,12 @@ import { RouterModule } from '@angular/router'; import { IonIcon } from '@ionic/angular/standalone'; import { addIcons } from 'ionicons'; import { + copyOutline, ellipsisHorizontal, linkOutline, lockClosedOutline, - lockOpenOutline + lockOpenOutline, + removeCircleOutline } from 'ionicons/icons'; import ms from 'ms'; @@ -62,10 +64,12 @@ export class GfAccessTableComponent implements OnChanges { private snackBar: MatSnackBar ) { addIcons({ + copyOutline, ellipsisHorizontal, linkOutline, lockClosedOutline, - lockOpenOutline + lockOpenOutline, + removeCircleOutline }); } diff --git a/apps/client/src/app/components/rule/rule.component.html b/apps/client/src/app/components/rule/rule.component.html index 7cea512e3..239beb733 100644 --- a/apps/client/src/app/components/rule/rule.component.html +++ b/apps/client/src/app/components/rule/rule.component.html @@ -64,14 +64,24 @@ @if (rule?.isActive && rule?.configuration) { +
    }
    diff --git a/apps/client/src/app/components/rule/rule.component.ts b/apps/client/src/app/components/rule/rule.component.ts index 4ea7d0ec6..624338915 100644 --- a/apps/client/src/app/components/rule/rule.component.ts +++ b/apps/client/src/app/components/rule/rule.component.ts @@ -16,8 +16,10 @@ import { import { MatDialog } from '@angular/material/dialog'; import { addIcons } from 'ionicons'; import { + addCircleOutline, checkmarkCircleOutline, ellipsisHorizontal, + optionsOutline, removeCircleOutline, warningOutline } from 'ionicons/icons'; @@ -50,8 +52,10 @@ export class RuleComponent implements OnInit { private dialog: MatDialog ) { addIcons({ + addCircleOutline, checkmarkCircleOutline, ellipsisHorizontal, + optionsOutline, removeCircleOutline, warningOutline }); diff --git a/apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html b/apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html index e309fbaea..ce55c4fff 100644 --- a/apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html +++ b/apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html @@ -73,9 +73,7 @@ Inactive Date: Wed, 27 Aug 2025 18:35:19 +0200 Subject: [PATCH 57/62] Feature/improve error handling in data providers (part 2) (#5413) * Improve error handling * Update changelog --- CHANGELOG.md | 1 + .../yahoo-finance/yahoo-finance.service.ts | 5 +- .../data-provider/data-provider.service.ts | 4 +- .../eod-historical-data.service.ts | 14 +- .../financial-modeling-prep.service.ts | 3 +- .../ghostfolio/ghostfolio.service.ts | 176 ++++++++++-------- .../google-sheets/google-sheets.service.ts | 11 +- .../data-provider/manual/manual.service.ts | 17 +- .../rapid-api/rapid-api.service.ts | 11 +- 9 files changed, 137 insertions(+), 105 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index bb3bd6d3c..6a225c51f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Moved the support to customize rules in the _X-ray_ section from experimental to general availability - Improved the create or update activity dialog’s asset sub class selector for valuables to update the options dynamically based on the selected asset class +- Improved the error handling in data providers - Randomized the minutes of the hourly data gathering cron job - Refactored the dialog footer component to standalone - Refactored the dialog header component to standalone diff --git a/apps/api/src/services/data-provider/data-enhancer/yahoo-finance/yahoo-finance.service.ts b/apps/api/src/services/data-provider/data-enhancer/yahoo-finance/yahoo-finance.service.ts index 54167bc5b..ecbc38256 100644 --- a/apps/api/src/services/data-provider/data-enhancer/yahoo-finance/yahoo-finance.service.ts +++ b/apps/api/src/services/data-provider/data-enhancer/yahoo-finance/yahoo-finance.service.ts @@ -163,7 +163,7 @@ export class YahooFinanceDataEnhancerService implements DataEnhancerInterface { public async getAssetProfile( aSymbol: string ): Promise> { - const response: Partial = {}; + let response: Partial = {}; try { let symbol = aSymbol; @@ -241,10 +241,13 @@ export class YahooFinanceDataEnhancerService implements DataEnhancerInterface { } const url = assetProfile.summaryProfile?.website; + if (url) { response.url = url; } } catch (error) { + response = undefined; + if (error.message === `Quote not found for symbol: ${aSymbol}`) { throw new AssetProfileDelistedError( `No data found, ${aSymbol} (${this.getName()}) may be delisted` diff --git a/apps/api/src/services/data-provider/data-provider.service.ts b/apps/api/src/services/data-provider/data-provider.service.ts index 631f90d63..8754c3537 100644 --- a/apps/api/src/services/data-provider/data-provider.service.ts +++ b/apps/api/src/services/data-provider/data-provider.service.ts @@ -107,7 +107,9 @@ export class DataProviderService implements OnModuleInit { promises.push( promise.then((symbolProfile) => { - response[symbol] = symbolProfile; + if (symbolProfile) { + response[symbol] = symbolProfile; + } }) ); } diff --git a/apps/api/src/services/data-provider/eod-historical-data/eod-historical-data.service.ts b/apps/api/src/services/data-provider/eod-historical-data/eod-historical-data.service.ts index d06071ac3..58b4d0d3e 100644 --- a/apps/api/src/services/data-provider/eod-historical-data/eod-historical-data.service.ts +++ b/apps/api/src/services/data-provider/eod-historical-data/eod-historical-data.service.ts @@ -55,14 +55,18 @@ export class EodHistoricalDataService implements DataProviderInterface { }: GetAssetProfileParams): Promise> { const [searchResult] = await this.getSearchResult(symbol); + if (!searchResult) { + return undefined; + } + return { symbol, - assetClass: searchResult?.assetClass, - assetSubClass: searchResult?.assetSubClass, - currency: this.convertCurrency(searchResult?.currency), + assetClass: searchResult.assetClass, + assetSubClass: searchResult.assetSubClass, + currency: this.convertCurrency(searchResult.currency), dataSource: this.getName(), - isin: searchResult?.isin, - name: searchResult?.name + isin: searchResult.isin, + name: searchResult.name }; } 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 ed2aa5f25..d1e591d5d 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 @@ -64,7 +64,7 @@ export class FinancialModelingPrepService implements DataProviderInterface { requestTimeout = this.configurationService.get('REQUEST_TIMEOUT'), symbol }: GetAssetProfileParams): Promise> { - const response: Partial = { + let response: Partial = { symbol, dataSource: this.getName() }; @@ -201,6 +201,7 @@ export class FinancialModelingPrepService implements DataProviderInterface { } } catch (error) { let message = error; + response = undefined; if (['AbortError', 'TimeoutError'].includes(error?.name)) { message = `RequestError: The operation to get the asset profile for ${symbol} was aborted because the request to the data provider took more than ${( diff --git a/apps/api/src/services/data-provider/ghostfolio/ghostfolio.service.ts b/apps/api/src/services/data-provider/ghostfolio/ghostfolio.service.ts index 48ba42bd4..c4a6996c1 100644 --- a/apps/api/src/services/data-provider/ghostfolio/ghostfolio.service.ts +++ b/apps/api/src/services/data-provider/ghostfolio/ghostfolio.service.ts @@ -51,20 +51,26 @@ export class GhostfolioService implements DataProviderInterface { requestTimeout = this.configurationService.get('REQUEST_TIMEOUT'), symbol }: GetAssetProfileParams): Promise> { - let response: DataProviderGhostfolioAssetProfileResponse = {}; + let assetProfile: DataProviderGhostfolioAssetProfileResponse; try { - const assetProfile = (await fetch( + const response = await fetch( `${this.URL}/v1/data-providers/ghostfolio/asset-profile/${symbol}`, { headers: await this.getRequestHeaders(), signal: AbortSignal.timeout(requestTimeout) } - ).then((res) => - res.json() - )) as DataProviderGhostfolioAssetProfileResponse; + ); + + if (!response.ok) { + throw new Response(await response.text(), { + status: response.status, + statusText: response.statusText + }); + } - response = assetProfile; + assetProfile = + (await response.json()) as DataProviderGhostfolioAssetProfileResponse; } catch (error) { let message = error; @@ -72,24 +78,21 @@ export class GhostfolioService implements DataProviderInterface { message = `RequestError: The operation to get the asset profile for ${symbol} was aborted because the request to the data provider took more than ${( requestTimeout / 1000 ).toFixed(3)} seconds`; + } else if (error?.status === StatusCodes.TOO_MANY_REQUESTS) { + message = 'RequestError: The daily request limit has been exceeded'; } else if ( - error?.response?.statusCode === StatusCodes.TOO_MANY_REQUESTS + [StatusCodes.FORBIDDEN, StatusCodes.UNAUTHORIZED].includes( + error?.status + ) ) { - message = 'RequestError: The daily request limit has been exceeded'; - } else if (error?.response?.statusCode === StatusCodes.UNAUTHORIZED) { - if (!error?.request?.options?.headers?.authorization?.includes('-')) { - message = - 'RequestError: The provided API key is invalid. Please update it in the Settings section of the Admin Control panel.'; - } else { - message = - 'RequestError: The provided API key has expired. Please request a new one and update it in the Settings section of the Admin Control panel.'; - } + message = + 'RequestError: The API key is invalid. Please update it in the Settings section of the Admin Control panel.'; } Logger.error(message, 'GhostfolioService'); } - return response; + return assetProfile; } public getDataProviderInfo(): DataProviderInfo { @@ -110,12 +113,12 @@ export class GhostfolioService implements DataProviderInterface { }: GetDividendsParams): Promise<{ [date: string]: IDataProviderHistoricalResponse; }> { - let response: { + let dividends: { [date: string]: IDataProviderHistoricalResponse; } = {}; try { - const { dividends } = (await fetch( + const response = await fetch( `${this.URL}/v2/data-providers/ghostfolio/dividends/${symbol}?from=${format(from, DATE_FORMAT)}&granularity=${granularity}&to=${format( to, DATE_FORMAT @@ -124,28 +127,34 @@ export class GhostfolioService implements DataProviderInterface { headers: await this.getRequestHeaders(), signal: AbortSignal.timeout(requestTimeout) } - ).then((res) => res.json())) as DividendsResponse; + ); + + if (!response.ok) { + throw new Response(await response.text(), { + status: response.status, + statusText: response.statusText + }); + } - response = dividends; + dividends = ((await response.json()) as DividendsResponse).dividends; } catch (error) { let message = error; - if (error.response?.statusCode === StatusCodes.TOO_MANY_REQUESTS) { + if (error?.status === StatusCodes.TOO_MANY_REQUESTS) { message = 'RequestError: The daily request limit has been exceeded'; - } else if (error.response?.statusCode === StatusCodes.UNAUTHORIZED) { - if (!error.request?.options?.headers?.authorization?.includes('-')) { - message = - 'RequestError: The provided API key is invalid. Please update it in the Settings section of the Admin Control panel.'; - } else { - message = - 'RequestError: The provided API key has expired. Please request a new one and update it in the Settings section of the Admin Control panel.'; - } + } else if ( + [StatusCodes.FORBIDDEN, StatusCodes.UNAUTHORIZED].includes( + error?.status + ) + ) { + message = + 'RequestError: The API key is invalid. Please update it in the Settings section of the Admin Control panel.'; } Logger.error(message, 'GhostfolioService'); } - return response; + return dividends; } public async getHistorical({ @@ -158,7 +167,7 @@ export class GhostfolioService implements DataProviderInterface { [symbol: string]: { [date: string]: IDataProviderHistoricalResponse }; }> { try { - const { historicalData } = (await fetch( + const response = await fetch( `${this.URL}/v2/data-providers/ghostfolio/historical/${symbol}?from=${format(from, DATE_FORMAT)}&granularity=${granularity}&to=${format( to, DATE_FORMAT @@ -167,27 +176,36 @@ export class GhostfolioService implements DataProviderInterface { headers: await this.getRequestHeaders(), signal: AbortSignal.timeout(requestTimeout) } - ).then((res) => res.json())) as HistoricalResponse; + ); + + if (!response.ok) { + throw new Response(await response.text(), { + status: response.status, + statusText: response.statusText + }); + } + + const { historicalData } = (await response.json()) as HistoricalResponse; return { [symbol]: historicalData }; } catch (error) { - let message = error; - - if (error.response?.statusCode === StatusCodes.TOO_MANY_REQUESTS) { - message = 'RequestError: The daily request limit has been exceeded'; - } else if (error.response?.statusCode === StatusCodes.UNAUTHORIZED) { - if (!error.request?.options?.headers?.authorization?.includes('-')) { - message = - 'RequestError: The provided API key is invalid. Please update it in the Settings section of the Admin Control panel.'; - } else { - message = - 'RequestError: The provided API key has expired. Please request a new one and update it in the Settings section of the Admin Control panel.'; - } + if (error?.status === StatusCodes.TOO_MANY_REQUESTS) { + error.name = 'RequestError'; + error.message = + 'RequestError: The daily request limit has been exceeded'; + } else if ( + [StatusCodes.FORBIDDEN, StatusCodes.UNAUTHORIZED].includes( + error?.status + ) + ) { + error.name = 'RequestError'; + error.message = + 'RequestError: The API key is invalid. Please update it in the Settings section of the Admin Control panel.'; } - Logger.error(message, 'GhostfolioService'); + Logger.error(error.message, 'GhostfolioService'); throw new Error( `Could not get historical market data for ${symbol} (${this.getName()}) from ${format( @@ -212,22 +230,29 @@ export class GhostfolioService implements DataProviderInterface { }: GetQuotesParams): Promise<{ [symbol: string]: IDataProviderResponse; }> { - let response: { [symbol: string]: IDataProviderResponse } = {}; + let quotes: { [symbol: string]: IDataProviderResponse } = {}; if (symbols.length <= 0) { - return response; + return quotes; } try { - const { quotes } = (await fetch( + const response = await fetch( `${this.URL}/v2/data-providers/ghostfolio/quotes?symbols=${symbols.join(',')}`, { headers: await this.getRequestHeaders(), signal: AbortSignal.timeout(requestTimeout) } - ).then((res) => res.json())) as QuotesResponse; + ); + + if (!response.ok) { + throw new Response(await response.text(), { + status: response.status, + statusText: response.statusText + }); + } - response = quotes; + quotes = ((await response.json()) as QuotesResponse).quotes; } catch (error) { let message = error; @@ -237,24 +262,21 @@ export class GhostfolioService implements DataProviderInterface { )} was aborted because the request to the data provider took more than ${( requestTimeout / 1000 ).toFixed(3)} seconds`; + } else if (error?.status === StatusCodes.TOO_MANY_REQUESTS) { + message = 'RequestError: The daily request limit has been exceeded'; } else if ( - error?.response?.statusCode === StatusCodes.TOO_MANY_REQUESTS + [StatusCodes.FORBIDDEN, StatusCodes.UNAUTHORIZED].includes( + error?.status + ) ) { - message = 'RequestError: The daily request limit has been exceeded'; - } else if (error?.response?.statusCode === StatusCodes.UNAUTHORIZED) { - if (!error?.request?.options?.headers?.authorization?.includes('-')) { - message = - 'RequestError: The provided API key is invalid. Please update it in the Settings section of the Admin Control panel.'; - } else { - message = - 'RequestError: The provided API key has expired. Please request a new one and update it in the Settings section of the Admin Control panel.'; - } + message = + 'RequestError: The API key is invalid. Please update it in the Settings section of the Admin Control panel.'; } Logger.error(message, 'GhostfolioService'); } - return response; + return quotes; } public getTestSymbol() { @@ -268,13 +290,22 @@ export class GhostfolioService implements DataProviderInterface { let searchResult: LookupResponse = { items: [] }; try { - searchResult = (await fetch( + const response = await fetch( `${this.URL}/v2/data-providers/ghostfolio/lookup?query=${query}`, { headers: await this.getRequestHeaders(), signal: AbortSignal.timeout(requestTimeout) } - ).then((res) => res.json())) as LookupResponse; + ); + + if (!response.ok) { + throw new Response(await response.text(), { + status: response.status, + statusText: response.statusText + }); + } + + searchResult = (await response.json()) as LookupResponse; } catch (error) { let message = error; @@ -282,18 +313,15 @@ export class GhostfolioService implements DataProviderInterface { message = `RequestError: The operation to search for ${query} was aborted because the request to the data provider took more than ${( requestTimeout / 1000 ).toFixed(3)} seconds`; + } else if (error?.status === StatusCodes.TOO_MANY_REQUESTS) { + message = 'RequestError: The daily request limit has been exceeded'; } else if ( - error?.response?.statusCode === StatusCodes.TOO_MANY_REQUESTS + [StatusCodes.FORBIDDEN, StatusCodes.UNAUTHORIZED].includes( + error?.status + ) ) { - message = 'RequestError: The daily request limit has been exceeded'; - } else if (error.response?.statusCode === StatusCodes.UNAUTHORIZED) { - if (!error?.request?.options?.headers?.authorization?.includes('-')) { - message = - 'RequestError: The provided API key is invalid. Please update it in the Settings section of the Admin Control panel.'; - } else { - message = - 'RequestError: The provided API key has expired. Please request a new one and update it in the Settings section of the Admin Control panel.'; - } + message = + 'RequestError: The API key is invalid. Please update it in the Settings section of the Admin Control panel.'; } Logger.error(message, 'GhostfolioService'); diff --git a/apps/api/src/services/data-provider/google-sheets/google-sheets.service.ts b/apps/api/src/services/data-provider/google-sheets/google-sheets.service.ts index f067f042c..111f2d004 100644 --- a/apps/api/src/services/data-provider/google-sheets/google-sheets.service.ts +++ b/apps/api/src/services/data-provider/google-sheets/google-sheets.service.ts @@ -36,13 +36,10 @@ export class GoogleSheetsService implements DataProviderInterface { return true; } - public async getAssetProfile({ - symbol - }: GetAssetProfileParams): Promise> { - return { - symbol, - dataSource: this.getName() - }; + public async getAssetProfile({}: GetAssetProfileParams): Promise< + Partial + > { + return undefined; } public getDataProviderInfo(): DataProviderInfo { diff --git a/apps/api/src/services/data-provider/manual/manual.service.ts b/apps/api/src/services/data-provider/manual/manual.service.ts index 1c1c4c2da..c411f678b 100644 --- a/apps/api/src/services/data-provider/manual/manual.service.ts +++ b/apps/api/src/services/data-provider/manual/manual.service.ts @@ -45,21 +45,20 @@ export class ManualService implements DataProviderInterface { public async getAssetProfile({ symbol }: GetAssetProfileParams): Promise> { - const assetProfile: Partial = { - symbol, - dataSource: this.getName() - }; - const [symbolProfile] = await this.symbolProfileService.getSymbolProfiles([ { symbol, dataSource: this.getName() } ]); - if (symbolProfile) { - assetProfile.currency = symbolProfile.currency; - assetProfile.name = symbolProfile.name; + if (!symbolProfile) { + return undefined; } - return assetProfile; + return { + symbol, + currency: symbolProfile.currency, + dataSource: this.getName(), + name: symbolProfile.name + }; } public getDataProviderInfo(): DataProviderInfo { diff --git a/apps/api/src/services/data-provider/rapid-api/rapid-api.service.ts b/apps/api/src/services/data-provider/rapid-api/rapid-api.service.ts index 62b3ed71c..824f44328 100644 --- a/apps/api/src/services/data-provider/rapid-api/rapid-api.service.ts +++ b/apps/api/src/services/data-provider/rapid-api/rapid-api.service.ts @@ -35,13 +35,10 @@ export class RapidApiService implements DataProviderInterface { return !!this.configurationService.get('API_KEY_RAPID_API'); } - public async getAssetProfile({ - symbol - }: GetAssetProfileParams): Promise> { - return { - symbol, - dataSource: this.getName() - }; + public async getAssetProfile({}: GetAssetProfileParams): Promise< + Partial + > { + return undefined; } public getDataProviderInfo(): DataProviderInfo { From 2115407752a3fee0f9262263f61e2c2a8735e30c Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Wed, 27 Aug 2025 18:40:18 +0200 Subject: [PATCH 58/62] Release 2.194.0 (#5414) --- CHANGELOG.md | 2 +- package-lock.json | 4 ++-- package.json | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6a225c51f..d5ff5fad7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,7 +5,7 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## Unreleased +## 2.194.0 - 2025-08-27 ### Added diff --git a/package-lock.json b/package-lock.json index 59305bec1..80cddc76d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "ghostfolio", - "version": "2.193.0", + "version": "2.194.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "ghostfolio", - "version": "2.193.0", + "version": "2.194.0", "hasInstallScript": true, "license": "AGPL-3.0", "dependencies": { diff --git a/package.json b/package.json index 32f53220e..cf7153afc 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ghostfolio", - "version": "2.193.0", + "version": "2.194.0", "homepage": "https://ghostfol.io", "license": "AGPL-3.0", "repository": "https://github.com/ghostfolio/ghostfolio", From 620929fe327265acb39aafb0242a241390c0f579 Mon Sep 17 00:00:00 2001 From: David Requeno <108202767+DavidReque@users.noreply.github.com> Date: Thu, 28 Aug 2025 04:16:02 -0600 Subject: [PATCH 59/62] Feature/migrate ZEN page component to standalone (#5410) * Migrate ZEN page component to standalone * Update changelog --- CHANGELOG.md | 6 +++++ apps/client/src/app/app-routing.module.ts | 2 +- .../src/app/pages/zen/zen-page.component.ts | 10 ++++--- .../src/app/pages/zen/zen-page.module.ts | 26 ------------------- ...e-routing.module.ts => zen-page.routes.ts} | 15 +++-------- 5 files changed, 18 insertions(+), 41 deletions(-) delete mode 100644 apps/client/src/app/pages/zen/zen-page.module.ts rename apps/client/src/app/pages/zen/{zen-page-routing.module.ts => zen-page.routes.ts} (68%) diff --git a/CHANGELOG.md b/CHANGELOG.md index d5ff5fad7..399d2a07c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,12 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## Unreleased + +### Changed + +- Refactored the _ZEN_ page to standalone + ## 2.194.0 - 2025-08-27 ### Added diff --git a/apps/client/src/app/app-routing.module.ts b/apps/client/src/app/app-routing.module.ts index 9d5123d1b..dae10fbf1 100644 --- a/apps/client/src/app/app-routing.module.ts +++ b/apps/client/src/app/app-routing.module.ts @@ -141,7 +141,7 @@ const routes: Routes = [ { path: internalRoutes.zen.path, loadChildren: () => - import('./pages/zen/zen-page.module').then((m) => m.ZenPageModule) + import('./pages/zen/zen-page.routes').then((m) => m.routes) }, { // wildcard, if requested url doesn't match any paths for routes defined diff --git a/apps/client/src/app/pages/zen/zen-page.component.ts b/apps/client/src/app/pages/zen/zen-page.component.ts index 397a2eb47..0224c13c7 100644 --- a/apps/client/src/app/pages/zen/zen-page.component.ts +++ b/apps/client/src/app/pages/zen/zen-page.component.ts @@ -2,7 +2,11 @@ import { UserService } from '@ghostfolio/client/services/user/user.service'; import { TabConfiguration, User } from '@ghostfolio/common/interfaces'; import { internalRoutes } from '@ghostfolio/common/routes/routes'; +import { CommonModule } from '@angular/common'; import { ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core'; +import { MatTabsModule } from '@angular/material/tabs'; +import { RouterModule } from '@angular/router'; +import { IonIcon } from '@ionic/angular/standalone'; import { addIcons } from 'ionicons'; import { analyticsOutline, walletOutline } from 'ionicons/icons'; import { DeviceDetectorService } from 'ngx-device-detector'; @@ -11,12 +15,12 @@ import { takeUntil } from 'rxjs/operators'; @Component({ host: { class: 'page has-tabs' }, + imports: [CommonModule, IonIcon, MatTabsModule, RouterModule], selector: 'gf-zen-page', styleUrls: ['./zen-page.scss'], - templateUrl: './zen-page.html', - standalone: false + templateUrl: './zen-page.html' }) -export class ZenPageComponent implements OnDestroy, OnInit { +export class GfZenPageComponent implements OnDestroy, OnInit { public deviceType: string; public tabs: TabConfiguration[] = []; public user: User; diff --git a/apps/client/src/app/pages/zen/zen-page.module.ts b/apps/client/src/app/pages/zen/zen-page.module.ts deleted file mode 100644 index 2346e3705..000000000 --- a/apps/client/src/app/pages/zen/zen-page.module.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { GfHomeHoldingsComponent } from '@ghostfolio/client/components/home-holdings/home-holdings.component'; -import { GfHomeOverviewComponent } from '@ghostfolio/client/components/home-overview/home-overview.component'; - -import { CommonModule } from '@angular/common'; -import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core'; -import { MatTabsModule } from '@angular/material/tabs'; -import { RouterModule } from '@angular/router'; -import { IonIcon } from '@ionic/angular/standalone'; - -import { ZenPageRoutingModule } from './zen-page-routing.module'; -import { ZenPageComponent } from './zen-page.component'; - -@NgModule({ - declarations: [ZenPageComponent], - imports: [ - CommonModule, - GfHomeHoldingsComponent, - GfHomeOverviewComponent, - IonIcon, - MatTabsModule, - RouterModule, - ZenPageRoutingModule - ], - schemas: [CUSTOM_ELEMENTS_SCHEMA] -}) -export class ZenPageModule {} diff --git a/apps/client/src/app/pages/zen/zen-page-routing.module.ts b/apps/client/src/app/pages/zen/zen-page.routes.ts similarity index 68% rename from apps/client/src/app/pages/zen/zen-page-routing.module.ts rename to apps/client/src/app/pages/zen/zen-page.routes.ts index 84099425c..60e163ca4 100644 --- a/apps/client/src/app/pages/zen/zen-page-routing.module.ts +++ b/apps/client/src/app/pages/zen/zen-page.routes.ts @@ -3,12 +3,11 @@ import { GfHomeOverviewComponent } from '@ghostfolio/client/components/home-over import { AuthGuard } from '@ghostfolio/client/core/auth.guard'; import { internalRoutes } from '@ghostfolio/common/routes/routes'; -import { NgModule } from '@angular/core'; -import { RouterModule, Routes } from '@angular/router'; +import { Routes } from '@angular/router'; -import { ZenPageComponent } from './zen-page.component'; +import { GfZenPageComponent } from './zen-page.component'; -const routes: Routes = [ +export const routes: Routes = [ { canActivate: [AuthGuard], children: [ @@ -22,14 +21,8 @@ const routes: Routes = [ title: internalRoutes.home.subRoutes.holdings.title } ], - component: ZenPageComponent, + component: GfZenPageComponent, path: '', title: internalRoutes.zen.title } ]; - -@NgModule({ - imports: [RouterModule.forChild(routes)], - exports: [RouterModule] -}) -export class ZenPageRoutingModule {} From 5719d9b9151ab4c6348841bfac0ef22bde536b3d Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Fri, 29 Aug 2025 19:46:44 +0200 Subject: [PATCH 60/62] Feature/upgrade chart.js to version 4.5.0 (#5397) * Upgrade chart.js to version 4.5.0 * Update changelog --- CHANGELOG.md | 1 + package-lock.json | 8 ++++---- package.json | 2 +- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 399d2a07c..da274d2ff 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed - Refactored the _ZEN_ page to standalone +- Upgraded `chart.js` from version `4.4.9` to `4.5.0` ## 2.194.0 - 2025-08-27 diff --git a/package-lock.json b/package-lock.json index 80cddc76d..974264de7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -53,7 +53,7 @@ "big.js": "7.0.1", "bootstrap": "4.6.2", "bull": "4.16.5", - "chart.js": "4.4.9", + "chart.js": "4.5.0", "chartjs-adapter-date-fns": "3.0.0", "chartjs-chart-treemap": "3.1.0", "chartjs-plugin-annotation": "3.1.0", @@ -16235,9 +16235,9 @@ "license": "MIT" }, "node_modules/chart.js": { - "version": "4.4.9", - "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-4.4.9.tgz", - "integrity": "sha512-EyZ9wWKgpAU0fLJ43YAEIF8sr5F2W3LqbS40ZJyHIner2lY14ufqv2VMp69MAiZ2rpwxEUxEhIH/0U3xyRynxg==", + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-4.5.0.tgz", + "integrity": "sha512-aYeC/jDgSEx8SHWZvANYMioYMZ2KX02W6f6uVfyteuCGcadDLcYVHdfdygsTQkQ4TKn5lghoojAsPj5pu0SnvQ==", "license": "MIT", "dependencies": { "@kurkle/color": "^0.3.0" diff --git a/package.json b/package.json index cf7153afc..e773df354 100644 --- a/package.json +++ b/package.json @@ -99,7 +99,7 @@ "big.js": "7.0.1", "bootstrap": "4.6.2", "bull": "4.16.5", - "chart.js": "4.4.9", + "chart.js": "4.5.0", "chartjs-adapter-date-fns": "3.0.0", "chartjs-chart-treemap": "3.1.0", "chartjs-plugin-annotation": "3.1.0", From f3fb12330921ab8271000670855725ee91a10512 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Fri, 29 Aug 2025 19:47:14 +0200 Subject: [PATCH 61/62] Feature/improve various functions of data providers (#5418) * Improve various functions of data providers * Reuse request timeout * Handle exception in getQuotes() of FinancialModelingPrepService * Update changelog --- CHANGELOG.md | 5 ++++ .../coingecko/coingecko.service.ts | 9 +++--- .../eod-historical-data.service.ts | 29 +++++++++++++------ .../financial-modeling-prep.service.ts | 18 ++++++++---- .../ghostfolio/ghostfolio.service.ts | 4 +-- 5 files changed, 44 insertions(+), 21 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index da274d2ff..c756f4e6f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,9 +9,14 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed +- Reused the request timeout in various functions of the data providers - Refactored the _ZEN_ page to standalone - Upgraded `chart.js` from version `4.4.9` to `4.5.0` +### Fixed + +- Handled an exception in the get quotes functionality of the _Financial Modeling Prep_ service + ## 2.194.0 - 2025-08-27 ### Added diff --git a/apps/api/src/services/data-provider/coingecko/coingecko.service.ts b/apps/api/src/services/data-provider/coingecko/coingecko.service.ts index 8a3adb507..561d7d6db 100644 --- a/apps/api/src/services/data-provider/coingecko/coingecko.service.ts +++ b/apps/api/src/services/data-provider/coingecko/coingecko.service.ts @@ -214,15 +214,16 @@ export class CoinGeckoService implements DataProviderInterface { return 'bitcoin'; } - public async search({ query }: GetSearchParams): Promise { + public async search({ + query, + requestTimeout = this.configurationService.get('REQUEST_TIMEOUT') + }: GetSearchParams): Promise { let items: LookupItem[] = []; try { const { coins } = await fetch(`${this.apiUrl}/search?query=${query}`, { headers: this.headers, - signal: AbortSignal.timeout( - this.configurationService.get('REQUEST_TIMEOUT') - ) + signal: AbortSignal.timeout(requestTimeout) }).then((res) => res.json()); items = coins.map(({ id: symbol, name }) => { diff --git a/apps/api/src/services/data-provider/eod-historical-data/eod-historical-data.service.ts b/apps/api/src/services/data-provider/eod-historical-data/eod-historical-data.service.ts index 58b4d0d3e..c18ec193f 100644 --- a/apps/api/src/services/data-provider/eod-historical-data/eod-historical-data.service.ts +++ b/apps/api/src/services/data-provider/eod-historical-data/eod-historical-data.service.ts @@ -51,9 +51,13 @@ export class EodHistoricalDataService implements DataProviderInterface { } public async getAssetProfile({ + requestTimeout = this.configurationService.get('REQUEST_TIMEOUT'), symbol }: GetAssetProfileParams): Promise> { - const [searchResult] = await this.getSearchResult(symbol); + const [searchResult] = await this.getSearchResult({ + requestTimeout, + query: symbol + }); if (!searchResult) { return undefined; @@ -304,8 +308,11 @@ export class EodHistoricalDataService implements DataProviderInterface { return 'AAPL.US'; } - public async search({ query }: GetSearchParams): Promise { - const searchResult = await this.getSearchResult(query); + public async search({ + query, + requestTimeout = this.configurationService.get('REQUEST_TIMEOUT') + }: GetSearchParams): Promise { + const searchResult = await this.getSearchResult({ query, requestTimeout }); return { items: searchResult @@ -394,7 +401,13 @@ export class EodHistoricalDataService implements DataProviderInterface { return name; } - private async getSearchResult(aQuery: string) { + private async getSearchResult({ + query, + requestTimeout = this.configurationService.get('REQUEST_TIMEOUT') + }: { + query: string; + requestTimeout?: number; + }) { let searchResult: (LookupItem & { assetClass: AssetClass; assetSubClass: AssetSubClass; @@ -403,11 +416,9 @@ export class EodHistoricalDataService implements DataProviderInterface { try { const response = await fetch( - `${this.URL}/search/${aQuery}?api_token=${this.apiKey}`, + `${this.URL}/search/${query}?api_token=${this.apiKey}`, { - signal: AbortSignal.timeout( - this.configurationService.get('REQUEST_TIMEOUT') - ) + signal: AbortSignal.timeout(requestTimeout) } ).then((res) => res.json()); @@ -433,7 +444,7 @@ export class EodHistoricalDataService implements DataProviderInterface { let message = error; if (['AbortError', 'TimeoutError'].includes(error?.name)) { - message = `RequestError: The operation to search for ${aQuery} was aborted because the request to the data provider took more than ${( + message = `RequestError: The operation to search for ${query} was aborted because the request to the data provider took more than ${( this.configurationService.get('REQUEST_TIMEOUT') / 1000 ).toFixed(3)} seconds`; } 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 d1e591d5d..8f52fb779 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 @@ -365,8 +365,13 @@ export class FinancialModelingPrepService implements DataProviderInterface { await Promise.all( quotes.map(({ symbol }) => { - return this.getAssetProfile({ symbol }).then(({ currency }) => { - currencyBySymbolMap[symbol] = { currency }; + return this.getAssetProfile({ + requestTimeout, + symbol + }).then((assetProfile) => { + if (assetProfile?.currency) { + currencyBySymbolMap[symbol] = { currency: assetProfile.currency }; + } }); }) ); @@ -411,7 +416,10 @@ export class FinancialModelingPrepService implements DataProviderInterface { return 'AAPL'; } - public async search({ query }: GetSearchParams): Promise { + public async search({ + query, + requestTimeout = this.configurationService.get('REQUEST_TIMEOUT') + }: GetSearchParams): Promise { const assetProfileBySymbolMap: { [symbol: string]: Partial; } = {}; @@ -422,9 +430,7 @@ export class FinancialModelingPrepService implements DataProviderInterface { const result = await fetch( `${this.getUrl({ version: 'stable' })}/search-isin?isin=${query.toUpperCase()}&apikey=${this.apiKey}`, { - signal: AbortSignal.timeout( - this.configurationService.get('REQUEST_TIMEOUT') - ) + signal: AbortSignal.timeout(requestTimeout) } ).then((res) => res.json()); diff --git a/apps/api/src/services/data-provider/ghostfolio/ghostfolio.service.ts b/apps/api/src/services/data-provider/ghostfolio/ghostfolio.service.ts index c4a6996c1..ca8d72827 100644 --- a/apps/api/src/services/data-provider/ghostfolio/ghostfolio.service.ts +++ b/apps/api/src/services/data-provider/ghostfolio/ghostfolio.service.ts @@ -284,8 +284,8 @@ export class GhostfolioService implements DataProviderInterface { } public async search({ - requestTimeout = this.configurationService.get('REQUEST_TIMEOUT'), - query + query, + requestTimeout = this.configurationService.get('REQUEST_TIMEOUT') }: GetSearchParams): Promise { let searchResult: LookupResponse = { items: [] }; From 94ac85003dca6b1ec632be76355d4f54b98226f0 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Fri, 29 Aug 2025 19:58:04 +0200 Subject: [PATCH 62/62] Release 2.195.0 (#5425) --- CHANGELOG.md | 2 +- package-lock.json | 4 ++-- package.json | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c756f4e6f..c331117bb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,7 +5,7 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## Unreleased +## 2.195.0 - 2025-08-29 ### Changed diff --git a/package-lock.json b/package-lock.json index 974264de7..1b00e37fd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "ghostfolio", - "version": "2.194.0", + "version": "2.195.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "ghostfolio", - "version": "2.194.0", + "version": "2.195.0", "hasInstallScript": true, "license": "AGPL-3.0", "dependencies": { diff --git a/package.json b/package.json index e773df354..f0f226555 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ghostfolio", - "version": "2.194.0", + "version": "2.195.0", "homepage": "https://ghostfol.io", "license": "AGPL-3.0", "repository": "https://github.com/ghostfolio/ghostfolio",